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)
])
};
});