Moves scheduler to related tab for workflows

and updates all links to point to updated state
This commit is contained in:
Jared Tabor
2018-05-11 10:51:55 -07:00
parent 464b7c3775
commit 13d58107b8
8 changed files with 119 additions and 103 deletions

View File

@@ -100,7 +100,7 @@ function ListTemplatesController(
if (isJobTemplate(template)) { if (isJobTemplate(template)) {
$state.go('templates.editJobTemplate.schedules', { job_template_id: template.id }); $state.go('templates.editJobTemplate.schedules', { job_template_id: template.id });
} else if (isWorkflowTemplate(template)) { } else if (isWorkflowTemplate(template)) {
$state.go('workflowJobTemplateSchedules', { id: template.id }); $state.go('templates.editWorkflowJobTemplate.schedules', { workflow_job_template_id: template.id });
} else { } else {
Alert(strings.get('error.UNKNOWN'), strings.get('alert.UNKNOWN_SCHEDULE')); Alert(strings.get('error.UNKNOWN'), strings.get('alert.UNKNOWN_SCHEDULE'));
} }

View File

@@ -33,98 +33,8 @@ export default
.run(['$stateExtender', function($stateExtender) { .run(['$stateExtender', function($stateExtender) {
// Inventory sync schedule states registered in: awx/ui/client/src/inventories/manage/groups/main.js // 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 // Scheduled jobs states registered in awx/uiclient/src/job-detail/main.js
// workflows
$stateExtender.addState({
searchPrefix: 'schedule',
name: 'workflowJobTemplateSchedules',
route: '/templates/workflow_job_template/:id/schedules',
data: {
activityStream: true,
activityStreamTarget: 'job_template',
activityStreamId: 'id'
},
ncyBreadcrumb: {
parent: 'templates.editWorkflowJobTemplate({workflow_job_template_id: parentObject.id})',
label: N_('SCHEDULES')
},
resolve: {
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
function(list, qs, $stateParams, GetBasePath) {
let path = `${GetBasePath('workflow_job_templates')}${$stateParams.id}/schedules`;
return qs.search(path, $stateParams[`${list.iterator}_search`]);
}
],
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){
let path = `${GetBasePath('workflow_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('workflow_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)}<div class='List-titleLockup'></div>` + N_('SCHEDULES');
let html = generateList.build({
list: ScheduleList,
mode: 'edit'
});
html = generateList.wrapPanel(html);
return generateList.insertFormView() + html;
},
controller: 'schedulerListController'
}
}
});
$stateExtender.addState({
name: 'workflowJobTemplateSchedules.add',
route: '/add',
views: {
'form': {
controller: 'schedulerAddController',
templateUrl: templateUrl("scheduler/schedulerForm"),
}
},
ncyBreadcrumb: {
parent: 'workflowJobTemplateSchedules',
label: N_('CREATE SCHEDULE')
}
});
$stateExtender.addState({
name: 'workflowJobTemplateSchedules.edit',
route: '/:schedule_id',
views: {
'form': {
controller: 'schedulerEditController',
templateUrl: templateUrl("scheduler/schedulerForm"),
}
},
ncyBreadcrumb: {
parent: 'workflowJobTemplateSchedules',
label: '{{schedule_obj.name}}'
},
resolve: editScheduleResolve()
});
// projects // projects
$stateExtender.addState({ $stateExtender.addState({
searchPrefix: 'schedule', searchPrefix: 'schedule',

View File

@@ -206,7 +206,7 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait',
} }
} }
}); });
} else if ($state.current.name === 'workflowJobTemplateSchedules.add'){ } else if ($state.current.name === 'templates.editWorkflowJobTemplate.schedules.add'){
let workflowJobTemplate = new WorkflowJobTemplate(); let workflowJobTemplate = new WorkflowJobTemplate();
$q.all([workflowJobTemplate.optionsLaunch(ParentObject.id), workflowJobTemplate.getLaunch(ParentObject.id)]) $q.all([workflowJobTemplate.optionsLaunch(ParentObject.id), workflowJobTemplate.getLaunch(ParentObject.id)])
@@ -276,7 +276,7 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait',
}); });
} }
if ($state.current.name === 'workflowJobTemplateSchedules.add' || if ($state.current.name === 'templates.editWorkflowJobTemplate.schedules.add' ||
$state.current.name === 'projectSchedules.add' || $state.current.name === 'projectSchedules.add' ||
$state.current.name === 'inventories.edit.inventory_sources.edit.schedules.add' $state.current.name === 'inventories.edit.inventory_sources.edit.schedules.add'
){ ){

View File

@@ -378,7 +378,7 @@ function($filter, $state, $stateParams, Wait, $scope, moment,
} }
} }
}); });
} else if ($state.current.name === 'workflowJobTemplateSchedules.edit') { } else if ($state.current.name === 'templates.editWorkflowJobTemplate.schedules.edit') {
let workflowJobTemplate = new WorkflowJobTemplate(); let workflowJobTemplate = new WorkflowJobTemplate();
$q.all([workflowJobTemplate.optionsLaunch(ParentObject.id), workflowJobTemplate.getLaunch(ParentObject.id)]) $q.all([workflowJobTemplate.optionsLaunch(ParentObject.id), workflowJobTemplate.getLaunch(ParentObject.id)])
@@ -453,7 +453,7 @@ function($filter, $state, $stateParams, Wait, $scope, moment,
if ($state.current.name !== 'managementJobsList.schedule.add' && $state.current.name !== 'managementJobsList.schedule.edit'){ if ($state.current.name !== 'managementJobsList.schedule.add' && $state.current.name !== 'managementJobsList.schedule.edit'){
if ($state.current.name === 'projectSchedules.edit' || if ($state.current.name === 'projectSchedules.edit' ||
$state.current.name === 'inventories.edit.inventory_sources.edit.schedules.edit' || $state.current.name === 'inventories.edit.inventory_sources.edit.schedules.edit' ||
$state.current.name === 'workflowJobTemplateSchedules.add' $state.current.name === 'templates.editWorkflowJobTemplate.schedules.add'
){ ){
$scope.noVars = true; $scope.noVars = true;
} else { } else {

View File

@@ -167,7 +167,7 @@ export default [
deferred.resolve({ deferred.resolve({
name: 'templates.editJobTemplate.schedules.edit', name: 'templates.editJobTemplate.schedules.edit',
params: { params: {
id: schedule.unified_job_template, job_template_id: schedule.unified_job_template,
schedule_id: schedule.id schedule_id: schedule.id
} }
}); });
@@ -175,9 +175,9 @@ export default [
case 'workflow_job': case 'workflow_job':
deferred.resolve({ deferred.resolve({
name: 'workflowJobTemplateSchedules.edit', name: 'templates.editWorkflowJobTemplate.schedules.edit',
params: { params: {
id: schedule.unified_job_template, workflow_job_template_id: schedule.unified_job_template,
schedule_id: schedule.id schedule_id: schedule.id
} }
}); });

View File

@@ -93,8 +93,103 @@ const jobTemplatesSchedulesEditRoute = {
resolve: editScheduleResolve() resolve: editScheduleResolve()
}; };
// workflows
const workflowSchedulesRoute = {
searchPrefix: 'schedule',
name: 'templates.editWorkflowJobTemplate.schedules',
route: '/schedules',
data: {
activityStream: true,
activityStreamTarget: 'job_template',
activityStreamId: 'id'
},
ncyBreadcrumb: {
parent: 'templates.editWorkflowJobTemplate({workflow_job_template_id: parentObject.id})',
label: N_('SCHEDULES')
},
resolve: {
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
function(list, qs, $stateParams, GetBasePath) {
let path = `${GetBasePath('workflow_job_templates')}${$stateParams.workflow_job_template_id}/schedules`;
return qs.search(path, $stateParams[`${list.iterator}_search`]);
}
],
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){
let path = `${GetBasePath('workflow_job_templates')}${$stateParams.workflow_job_template_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('workflow_job_templates') + $stateParams.workflow_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 workflowSchedulesAddRoute = {
name: 'templates.editWorkflowJobTemplate.schedules.add',
route: '/add',
views: {
'scheduler@templates': {
controller: 'schedulerAddController',
templateUrl: templateUrl("scheduler/schedulerForm"),
}
},
ncyBreadcrumb: {
parent: 'templates.editWorkflowJobTemplate({workflow_job_template_id: parentObject.id})',
label: N_('CREATE SCHEDULE')
}
};
const workflowSchedulesEditRoute = {
name: 'templates.editWorkflowJobTemplate.schedules.edit',
route: '/:schedule_id',
views: {
'scheduler@templates': {
controller: 'schedulerEditController',
templateUrl: templateUrl("scheduler/schedulerForm"),
}
},
ncyBreadcrumb: {
parent: 'templates.editWorkflowJobTemplate({workflow_job_template_id: parentObject.id})',
label: '{{schedule_obj.name}}'
},
resolve: editScheduleResolve()
};
export { export {
jobTemplatesSchedulesListRoute, jobTemplatesSchedulesListRoute,
jobTemplatesSchedulesAddRoute, jobTemplatesSchedulesAddRoute,
jobTemplatesSchedulesEditRoute jobTemplatesSchedulesEditRoute,
workflowSchedulesRoute,
workflowSchedulesAddRoute,
workflowSchedulesEditRoute
}; };

View File

@@ -24,7 +24,10 @@ import workflowJobTemplateCompletedJobsRoute from '~features/jobs/routes/workflo
import { import {
jobTemplatesSchedulesListRoute, jobTemplatesSchedulesListRoute,
jobTemplatesSchedulesAddRoute, jobTemplatesSchedulesAddRoute,
jobTemplatesSchedulesEditRoute jobTemplatesSchedulesEditRoute,
workflowSchedulesRoute,
workflowSchedulesAddRoute,
workflowSchedulesEditRoute
} from '../scheduler/schedules.route'; } from '../scheduler/schedules.route';
export default export default
@@ -756,7 +759,10 @@ angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, p
stateExtender.buildDefinition(workflowMaker), stateExtender.buildDefinition(workflowMaker),
stateExtender.buildDefinition(jobTemplatesSchedulesListRoute), stateExtender.buildDefinition(jobTemplatesSchedulesListRoute),
stateExtender.buildDefinition(jobTemplatesSchedulesAddRoute), stateExtender.buildDefinition(jobTemplatesSchedulesAddRoute),
stateExtender.buildDefinition(jobTemplatesSchedulesEditRoute) stateExtender.buildDefinition(jobTemplatesSchedulesEditRoute),
stateExtender.buildDefinition(workflowSchedulesRoute),
stateExtender.buildDefinition(workflowSchedulesAddRoute),
stateExtender.buildDefinition(workflowSchedulesEditRoute)
]) ])
}; };
}); });

View File

@@ -181,6 +181,11 @@ export default ['NotificationsList', 'i18n', function(NotificationsList, i18n) {
title: i18n._('Completed Jobs'), title: i18n._('Completed Jobs'),
skipGenerator: true, skipGenerator: true,
ngClick: "$state.go('templates.editWorkflowJobTemplate.completed_jobs')" ngClick: "$state.go('templates.editWorkflowJobTemplate.completed_jobs')"
},
"schedules": {
title: i18n._('Schedules'),
skipGenerator: true,
ngClick: "$state.go('templates.editWorkflowJobTemplate.schedules')"
} }
}, },