mirror of
https://github.com/ansible/awx.git
synced 2026-05-19 14:57:39 -02:30
Fixes routing to scheduled jobs view (#4280)
* Issue #4267 * Fixes routing issues to upcoming scheduled jobs view * Fixes edit schedule routing from scheduled jobs list view * re-enable jobDetails route, match jobDetais route only when url is /jobs/integer/
This commit is contained in:
@@ -83,7 +83,7 @@ angular.module('inventory', [
|
|||||||
mode: 'edit'
|
mode: 'edit'
|
||||||
});
|
});
|
||||||
html = generateList.wrapPanel(html);
|
html = generateList.wrapPanel(html);
|
||||||
return html;
|
return generateList.insertFormView() + html;
|
||||||
},
|
},
|
||||||
controller: 'schedulerListController'
|
controller: 'schedulerListController'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export default
|
|||||||
name: {
|
name: {
|
||||||
key: true,
|
key: true,
|
||||||
label: 'Name',
|
label: 'Name',
|
||||||
ngClick: "editSchedule(schedule.id)",
|
ngClick: "editSchedule(schedule)",
|
||||||
columnClass: "col-md-3 col-sm-3 col-xs-6"
|
columnClass: "col-md-3 col-sm-3 col-xs-6"
|
||||||
},
|
},
|
||||||
dtstart: {
|
dtstart: {
|
||||||
@@ -73,7 +73,7 @@ export default
|
|||||||
fieldActions: {
|
fieldActions: {
|
||||||
edit: {
|
edit: {
|
||||||
label: 'Edit',
|
label: 'Edit',
|
||||||
ngClick: "editSchedule(schedule.id)",
|
ngClick: "editSchedule(schedule)",
|
||||||
icon: 'icon-edit',
|
icon: 'icon-edit',
|
||||||
awToolTip: 'Edit schedule',
|
awToolTip: 'Edit schedule',
|
||||||
dataPlacement: 'top',
|
dataPlacement: 'top',
|
||||||
@@ -81,7 +81,7 @@ export default
|
|||||||
},
|
},
|
||||||
view: {
|
view: {
|
||||||
label: 'View',
|
label: 'View',
|
||||||
ngClick: "editSchedule(schedule.id)",
|
ngClick: "editSchedule(schedule)",
|
||||||
awToolTip: 'View schedule',
|
awToolTip: 'View schedule',
|
||||||
dataPlacement: 'top',
|
dataPlacement: 'top',
|
||||||
ngShow: '!schedule.summary_fields.user_capabilities.edit'
|
ngShow: '!schedule.summary_fields.user_capabilities.edit'
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<div class="Form-tab" id="active_jobs_link" ng-class="{'is-selected': $state.is('jobs')}" ng-click="$state.go('jobs')">
|
<div class="Form-tab" id="active_jobs_link" ng-class="{'is-selected': $state.is('jobs')}" ng-click="$state.go('jobs')">
|
||||||
<translate>Jobs</translate>
|
<translate>Jobs</translate>
|
||||||
</div>
|
</div>
|
||||||
<div id="scheduled_jobs_link" class="Form-tab" ng-class="{'is-selected': $state.is('jobs.scheduled')}" ng-click="$state.go('.scheduled')">
|
<div id="scheduled_jobs_link" class="Form-tab" ng-class="{'is-selected': $state.is('jobs.schedules')}" ng-click="$state.go('.schedules')">
|
||||||
<translate>Schedules</translate>
|
<translate>Schedules</translate>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -238,13 +238,13 @@ export default
|
|||||||
// upcoming scheduled jobs
|
// upcoming scheduled jobs
|
||||||
$stateExtender.addState({
|
$stateExtender.addState({
|
||||||
searchPrefix: 'schedule',
|
searchPrefix: 'schedule',
|
||||||
name: 'jobs.scheduled',
|
name: 'jobs.schedules',
|
||||||
route: '/scheduled',
|
route: '/schedules',
|
||||||
params: {
|
params: {
|
||||||
schedule_search: {
|
schedule_search: {
|
||||||
value: {
|
value: {
|
||||||
next_run__isnull: 'false',
|
next_run__isnull: 'false',
|
||||||
order_by: 'next_run'
|
order_by: 'unified_job_template__polymorphic_ctype__model'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -258,13 +258,16 @@ export default
|
|||||||
label: 'SCHEDULED'
|
label: 'SCHEDULED'
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
|
SchedulesList: ['ScheduledJobsList', function(list){
|
||||||
|
return list;
|
||||||
|
}],
|
||||||
Dataset: ['SchedulesList', 'QuerySet', '$stateParams', 'GetBasePath',
|
Dataset: ['SchedulesList', 'QuerySet', '$stateParams', 'GetBasePath',
|
||||||
function(list, qs, $stateParams, GetBasePath) {
|
function(list, qs, $stateParams, GetBasePath) {
|
||||||
let path = GetBasePath('schedules');
|
let path = GetBasePath('schedules');
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
ParentObject: [() =>{return null;}]
|
ParentObject: [() =>{return {endpoint:'/api/v1/schedules'}; }],
|
||||||
},
|
},
|
||||||
views: {
|
views: {
|
||||||
'list@jobs': {
|
'list@jobs': {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export default [
|
|||||||
function init() {
|
function init() {
|
||||||
if (ParentObject){
|
if (ParentObject){
|
||||||
$scope.parentObject = ParentObject;
|
$scope.parentObject = ParentObject;
|
||||||
scheduleEndpoint = ParentObject.related.schedules || `${ParentObject.related.inventory_source}schedules`;
|
scheduleEndpoint = ParentObject.endpoint|| ParentObject.related.schedules || `${ParentObject.related.inventory_source}schedules`;
|
||||||
$scope.canAdd = false;
|
$scope.canAdd = false;
|
||||||
rbacUiControlService.canAdd(scheduleEndpoint)
|
rbacUiControlService.canAdd(scheduleEndpoint)
|
||||||
.then(function(canAdd) {
|
.then(function(canAdd) {
|
||||||
@@ -67,8 +67,77 @@ export default [
|
|||||||
$state.go('.add');
|
$state.go('.add');
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.editSchedule = function(schedule_id) {
|
$scope.editSchedule = function(schedule) {
|
||||||
$state.go('.edit', { schedule_id: schedule_id });
|
if ($state.is('jobs.schedules')){
|
||||||
|
routeToScheduleForm(schedule, 'edit');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$state.go('.edit', { schedule_id: schedule.id });
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildStateMap(schedule){
|
||||||
|
|
||||||
|
let deferred = $q.defer();
|
||||||
|
|
||||||
|
switch(schedule.summary_fields.unified_job_template.unified_job_type){
|
||||||
|
case 'inventory_update':
|
||||||
|
Rest.setUrl(schedule.related.unified_job_template);
|
||||||
|
Rest.get().then( (res) => {
|
||||||
|
deferred.resolve({
|
||||||
|
name: 'inventoryManage.editGroup.schedules.edit',
|
||||||
|
params: {
|
||||||
|
group_id: res.data.group,
|
||||||
|
inventory_id: res.data.inventory,
|
||||||
|
schedule_id: schedule.id,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'project_update':
|
||||||
|
deferred.resolve({
|
||||||
|
name: 'projectSchedules.edit',
|
||||||
|
params: {
|
||||||
|
id: schedule.unified_job_template,
|
||||||
|
schedule_id: schedule.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'system_job':
|
||||||
|
deferred.resolve({
|
||||||
|
name: 'managementJobSchedules.edit',
|
||||||
|
params: {
|
||||||
|
id: schedule.unified_job_template,
|
||||||
|
schedule_id: schedule.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return deferred.promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
function routeToScheduleForm(schedule){
|
||||||
|
|
||||||
|
buildStateMap(schedule).then( (state) =>{
|
||||||
|
$state.go(state.name, state.params).catch((err) =>{
|
||||||
|
// stateDefinition.lazyLoad'd state name matcher is not configured to match inventoryManage.* state names
|
||||||
|
// However, the stateDefinition.lazyLoad url matcher will load the correct tree.
|
||||||
|
// Expected error:
|
||||||
|
// Transition rejection error
|
||||||
|
// type: 4 // SUPERSEDED = 2, ABORTED = 3, INVALID = 4, IGNORED = 5, ERROR = 6
|
||||||
|
// detail : "Could not resolve 'inventoryManage.editGroup.schedules.edit' from state 'jobs.schedules'"
|
||||||
|
// message: "This transition is invalid"
|
||||||
|
if (err.type === 4 && err.detail.includes('inventoryManage.editGroup.schedules.edit')){
|
||||||
|
$location.path(`/inventories/${state.params.inventory_id}/manage/edit-group/${state.params.group_id}/schedules/${state.params.schedule_id}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.toggleSchedule = function(event, id) {
|
$scope.toggleSchedule = function(event, id) {
|
||||||
|
|||||||
Reference in New Issue
Block a user