mirror of
https://github.com/ansible/awx.git
synced 2026-02-03 02:28:12 -03:30
Moves schedules to related tab for job templates
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
<div ui-view="scheduler"></div>
|
||||
<div ui-view="form"></div>
|
||||
<at-panel ng-cloak id="htmlTemplate">
|
||||
<div ng-if="$state.is('templates')">
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)}<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: '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',
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
100
awx/ui/client/src/scheduler/schedules.route.js
Normal file
100
awx/ui/client/src/scheduler/schedules.route.js
Normal file
@@ -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
|
||||
};
|
||||
@@ -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')"
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -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)
|
||||
])
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user