From 464b7c3775f8b05cde4cc9e1169689846fd274c4 Mon Sep 17 00:00:00 2001 From: Jared Tabor Date: Thu, 10 May 2018 16:31:44 -0700 Subject: [PATCH] Moves schedules to related tab for job templates --- .../client/features/templates/index.view.html | 1 + .../templates/templatesList.controller.js | 2 +- .../organizations-job-templates.controller.js | 2 +- awx/ui/client/src/scheduler/main.js | 94 +--------------- .../src/scheduler/schedulerAdd.controller.js | 2 +- .../src/scheduler/schedulerEdit.controller.js | 4 +- .../src/scheduler/schedulerList.controller.js | 4 +- .../client/src/scheduler/schedules.route.js | 100 ++++++++++++++++++ .../job_templates/job-template.form.js | 5 + awx/ui/client/src/templates/main.js | 10 +- 10 files changed, 123 insertions(+), 101 deletions(-) create mode 100644 awx/ui/client/src/scheduler/schedules.route.js diff --git a/awx/ui/client/features/templates/index.view.html b/awx/ui/client/features/templates/index.view.html index 5f6ae703f6..346ab0c0f1 100644 --- a/awx/ui/client/features/templates/index.view.html +++ b/awx/ui/client/features/templates/index.view.html @@ -1,3 +1,4 @@ +
diff --git a/awx/ui/client/features/templates/templatesList.controller.js b/awx/ui/client/features/templates/templatesList.controller.js index 569bdc4b3a..c2d43caed5 100644 --- a/awx/ui/client/features/templates/templatesList.controller.js +++ b/awx/ui/client/features/templates/templatesList.controller.js @@ -98,7 +98,7 @@ function ListTemplatesController( } if (isJobTemplate(template)) { - $state.go('jobTemplateSchedules', { id: template.id }); + $state.go('templates.editJobTemplate.schedules', { job_template_id: template.id }); } else if (isWorkflowTemplate(template)) { $state.go('workflowJobTemplateSchedules', { id: template.id }); } else { diff --git a/awx/ui/client/src/organizations/linkout/controllers/organizations-job-templates.controller.js b/awx/ui/client/src/organizations/linkout/controllers/organizations-job-templates.controller.js index 2d5e0eab40..8c58157ab3 100644 --- a/awx/ui/client/src/organizations/linkout/controllers/organizations-job-templates.controller.js +++ b/awx/ui/client/src/organizations/linkout/controllers/organizations-job-templates.controller.js @@ -74,7 +74,7 @@ export default ['$scope', '$rootScope', }; $scope.scheduleJob = function(id) { - $state.go('jobTemplateSchedules', { id: id }); + $state.go('templates.editJobTemplate.schedules', { id: id }); }; // $scope.copyTemplate = function(id) { diff --git a/awx/ui/client/src/scheduler/main.js b/awx/ui/client/src/scheduler/main.js index b20b77b349..fac66d2da3 100644 --- a/awx/ui/client/src/scheduler/main.js +++ b/awx/ui/client/src/scheduler/main.js @@ -33,99 +33,7 @@ export default .run(['$stateExtender', function($stateExtender) { // Inventory sync schedule states registered in: awx/ui/client/src/inventories/manage/groups/main.js // Scheduled jobs states registered in awx/uiclient/src/job-detail/main.js - - // job templates - $stateExtender.addState({ - searchPrefix: 'schedule', - name: 'jobTemplateSchedules', - route: '/templates/job_template/:id/schedules', - data: { - activityStream: true, - activityStreamTarget: 'job_template', - activityStreamId: 'id' - }, - // ncyBreadcrumb: { - // parent: 'templates.editJobTemplate({job_template_id: parentObject.id})', - // label: N_('SCHEDULES') - // }, - resolve: { - Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath', - function(list, qs, $stateParams, GetBasePath) { - let path = `${GetBasePath('job_templates')}${$stateParams.id}/schedules`; - return qs.search(path, $stateParams[`${list.iterator}_search`]); - } - ], - ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){ - let path = `${GetBasePath('job_templates')}${$stateParams.id}`; - Rest.setUrl(path); - return Rest.get(path).then(response => response.data); - }], - UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q', - function(Rest, GetBasePath, $stateParams, $q) { - Rest.setUrl(GetBasePath('unified_jobs')); - var val = $q.defer(); - Rest.options() - .then(function(data) { - val.resolve(data.data); - }, function(data) { - val.reject(data); - }); - return val.promise; - }], - ScheduleList: ['SchedulesList', 'GetBasePath', '$stateParams', - (SchedulesList, GetBasePath, $stateParams) => { - let list = _.cloneDeep(SchedulesList); - list.basePath = GetBasePath('job_templates') + $stateParams.id + '/schedules/'; - return list; - } - ] - }, - views: { - '@': { - templateProvider: function(ScheduleList, generateList, ParentObject, $filter){ - // include name of parent resource in listTitle - ScheduleList.listTitle = `${$filter('sanitize')(ParentObject.name)}
` + N_('SCHEDULES'); - let html = generateList.build({ - list: ScheduleList, - mode: 'edit' - }); - html = generateList.wrapPanel(html); - return generateList.insertFormView() + html; - }, - controller: 'schedulerListController' - } - } - }); - $stateExtender.addState({ - name: 'jobTemplateSchedules.add', - route: '/add', - views: { - 'form': { - controller: 'schedulerAddController', - templateUrl: templateUrl("scheduler/schedulerForm"), - } - }, - ncyBreadcrumb: { - parent: 'jobTemplateSchedules', - label: N_('CREATE SCHEDULE') - } - }); - $stateExtender.addState({ - name: 'jobTemplateSchedules.edit', - route: '/:schedule_id', - views: { - 'form': { - controller: 'schedulerEditController', - templateUrl: templateUrl("scheduler/schedulerForm"), - } - }, - ncyBreadcrumb: { - parent: 'jobTemplateSchedules', - label: '{{schedule_obj.name}}' - }, - resolve: editScheduleResolve() - }); - + // workflows $stateExtender.addState({ searchPrefix: 'schedule', diff --git a/awx/ui/client/src/scheduler/schedulerAdd.controller.js b/awx/ui/client/src/scheduler/schedulerAdd.controller.js index d312083bd2..5e1de11991 100644 --- a/awx/ui/client/src/scheduler/schedulerAdd.controller.js +++ b/awx/ui/client/src/scheduler/schedulerAdd.controller.js @@ -90,7 +90,7 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait', $scope.hideForm = true; // extra_data field is not manifested in the UI when scheduling a Management Job - if ($state.current.name === 'jobTemplateSchedules.add'){ + if ($state.current.name === 'templates.editJobTemplate.schedules.add'){ $scope.parseType = 'yaml'; let jobTemplate = new JobTemplate(); diff --git a/awx/ui/client/src/scheduler/schedulerEdit.controller.js b/awx/ui/client/src/scheduler/schedulerEdit.controller.js index e247a22322..e3f9d13ec4 100644 --- a/awx/ui/client/src/scheduler/schedulerEdit.controller.js +++ b/awx/ui/client/src/scheduler/schedulerEdit.controller.js @@ -132,7 +132,7 @@ function($filter, $state, $stateParams, Wait, $scope, moment, // sets the UNTIL portion of the schedule form after the angular-scheduler // sets it, but this function reads the 'until' key/value pair directly - // from the schedule GET response. + // from the schedule GET response. function setUntil (scheduler) { let { until } = scheduleResolve; if(until !== ''){ @@ -229,7 +229,7 @@ function($filter, $state, $stateParams, Wait, $scope, moment, $scope.schedulerPurgeDays = Number(schedule.extra_data.days); } - if ($state.current.name === 'jobTemplateSchedules.edit'){ + if ($state.current.name === 'templates.editJobTemplate.schedules.edit'){ let jobTemplate = new JobTemplate(); diff --git a/awx/ui/client/src/scheduler/schedulerList.controller.js b/awx/ui/client/src/scheduler/schedulerList.controller.js index 3ae664216a..36fab4d9c7 100644 --- a/awx/ui/client/src/scheduler/schedulerList.controller.js +++ b/awx/ui/client/src/scheduler/schedulerList.controller.js @@ -137,7 +137,7 @@ export default [ if($state.current.name.endsWith('.edit')) { $state.go('^.add'); } - else if(!$state.current.name.endsWith('.add')) { + if(!$state.current.name.endsWith('.add')) { $state.go('.add'); } }; @@ -165,7 +165,7 @@ export default [ switch(schedule.summary_fields.unified_job_template.unified_job_type){ case 'job': deferred.resolve({ - name: 'jobTemplateSchedules.edit', + name: 'templates.editJobTemplate.schedules.edit', params: { id: schedule.unified_job_template, schedule_id: schedule.id diff --git a/awx/ui/client/src/scheduler/schedules.route.js b/awx/ui/client/src/scheduler/schedules.route.js new file mode 100644 index 0000000000..35513676da --- /dev/null +++ b/awx/ui/client/src/scheduler/schedules.route.js @@ -0,0 +1,100 @@ +import { N_ } from '../i18n'; +import {templateUrl} from '../shared/template-url/template-url.factory'; +import editScheduleResolve from './editSchedule.resolve'; + +const jobTemplatesSchedulesListRoute = { + searchPrefix: 'schedule', + name: 'templates.editJobTemplate.schedules', + route: '/schedules', + data: { + activityStream: true, + activityStreamTarget: 'job_template', + activityStreamId: 'id' + }, + ncyBreadcrumb: { + parent: 'templates.editJobTemplate({job_template_id: parentObject.id})', + label: N_('SCHEDULES') + }, + resolve: { + Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath', + function(list, qs, $stateParams, GetBasePath) { + let path = `${GetBasePath('job_templates')}${$stateParams.job_template_id}/schedules`; + return qs.search(path, $stateParams[`${list.iterator}_search`]); + } + ], + ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){ + let path = `${GetBasePath('job_templates')}${$stateParams.job_template_id}`; + Rest.setUrl(path); + return Rest.get(path).then(response => response.data); + }], + UnifiedJobsOptions: ['Rest', 'GetBasePath', '$q', + function(Rest, GetBasePath, $q) { + Rest.setUrl(GetBasePath('unified_jobs')); + var val = $q.defer(); + Rest.options() + .then(function(data) { + val.resolve(data.data); + }, function(data) { + val.reject(data); + }); + return val.promise; + }], + ScheduleList: ['SchedulesList', 'GetBasePath', '$stateParams', + (SchedulesList, GetBasePath, $stateParams) => { + let list = _.cloneDeep(SchedulesList); + list.basePath = GetBasePath('job_templates') + $stateParams.job_template_id + '/schedules/'; + return list; + } + ] + }, + views: { + related: { + templateProvider: function(ScheduleList, generateList, ParentObject, $filter){ + ScheduleList.title = false; + let html = generateList.build({ + list: ScheduleList, + mode: 'edit' + }); + return html; + }, + controller: 'schedulerListController' + } + } +}; + +const jobTemplatesSchedulesAddRoute = { + name: 'templates.editJobTemplate.schedules.add', + route: '/add', + views: { + 'scheduler@templates': { + controller: 'schedulerAddController', + templateUrl: templateUrl("scheduler/schedulerForm"), + } + }, + ncyBreadcrumb: { + parent: 'templates.editJobTemplate({job_template_id: parentObject.id})', + label: N_('CREATE SCHEDULE') + } +}; + +const jobTemplatesSchedulesEditRoute = { + name: 'templates.editJobTemplate.schedules.edit', + route: '/:schedule_id', + views: { + 'scheduler@templates': { + controller: 'schedulerEditController', + templateUrl: templateUrl("scheduler/schedulerForm"), + } + }, + ncyBreadcrumb: { + parent: 'templates.editJobTemplate({job_template_id: parentObject.id})', + label: '{{schedule_obj.name}}' + }, + resolve: editScheduleResolve() +}; + +export { + jobTemplatesSchedulesListRoute, + jobTemplatesSchedulesAddRoute, + jobTemplatesSchedulesEditRoute +}; diff --git a/awx/ui/client/src/templates/job_templates/job-template.form.js b/awx/ui/client/src/templates/job_templates/job-template.form.js index 31174ac043..7d1ce6090a 100644 --- a/awx/ui/client/src/templates/job_templates/job-template.form.js +++ b/awx/ui/client/src/templates/job_templates/job-template.form.js @@ -438,6 +438,11 @@ function(NotificationsList, i18n) { title: i18n._('Completed Jobs'), skipGenerator: true, ngClick: "$state.go('templates.editJobTemplate.completed_jobs')" + }, + "schedules": { + title: i18n._('Schedules'), + skipGenerator: true, + ngClick: "$state.go('templates.editJobTemplate.schedules')" } }, diff --git a/awx/ui/client/src/templates/main.js b/awx/ui/client/src/templates/main.js index ac0c5036a0..8196cf527d 100644 --- a/awx/ui/client/src/templates/main.js +++ b/awx/ui/client/src/templates/main.js @@ -21,6 +21,11 @@ import TemplateList from './templates.list'; import listRoute from '~features/templates/routes/templatesList.route.js'; import templateCompletedJobsRoute from '~features/jobs/routes/templateCompletedJobs.route.js'; import workflowJobTemplateCompletedJobsRoute from '~features/jobs/routes/workflowJobTemplateCompletedJobs.route.js'; +import { + jobTemplatesSchedulesListRoute, + jobTemplatesSchedulesAddRoute, + jobTemplatesSchedulesEditRoute +} from '../scheduler/schedules.route'; export default angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, prompt.name, workflowAdd.name, workflowEdit.name, @@ -748,7 +753,10 @@ angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, p stateExtender.buildDefinition(listRoute), stateExtender.buildDefinition(templateCompletedJobsRoute), stateExtender.buildDefinition(workflowJobTemplateCompletedJobsRoute), - stateExtender.buildDefinition(workflowMaker) + stateExtender.buildDefinition(workflowMaker), + stateExtender.buildDefinition(jobTemplatesSchedulesListRoute), + stateExtender.buildDefinition(jobTemplatesSchedulesAddRoute), + stateExtender.buildDefinition(jobTemplatesSchedulesEditRoute) ]) }; });