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:
Leigh Johnson 2016-12-12 14:51:09 -05:00 committed by GitHub
parent 824fb21b3f
commit e895c0989a
5 changed files with 84 additions and 12 deletions

View File

@ -83,7 +83,7 @@ angular.module('inventory', [
mode: 'edit'
});
html = generateList.wrapPanel(html);
return html;
return generateList.insertFormView() + html;
},
controller: 'schedulerListController'
}

View File

@ -31,7 +31,7 @@ export default
name: {
key: true,
label: 'Name',
ngClick: "editSchedule(schedule.id)",
ngClick: "editSchedule(schedule)",
columnClass: "col-md-3 col-sm-3 col-xs-6"
},
dtstart: {
@ -73,7 +73,7 @@ export default
fieldActions: {
edit: {
label: 'Edit',
ngClick: "editSchedule(schedule.id)",
ngClick: "editSchedule(schedule)",
icon: 'icon-edit',
awToolTip: 'Edit schedule',
dataPlacement: 'top',
@ -81,7 +81,7 @@ export default
},
view: {
label: 'View',
ngClick: "editSchedule(schedule.id)",
ngClick: "editSchedule(schedule)",
awToolTip: 'View schedule',
dataPlacement: 'top',
ngShow: '!schedule.summary_fields.user_capabilities.edit'

View File

@ -6,7 +6,7 @@
<div class="Form-tab" id="active_jobs_link" ng-class="{'is-selected': $state.is('jobs')}" ng-click="$state.go('jobs')">
<translate>Jobs</translate>
</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>
</div>
</div>

View File

@ -238,13 +238,13 @@ export default
// upcoming scheduled jobs
$stateExtender.addState({
searchPrefix: 'schedule',
name: 'jobs.scheduled',
route: '/scheduled',
name: 'jobs.schedules',
route: '/schedules',
params: {
schedule_search: {
value: {
next_run__isnull: 'false',
order_by: 'next_run'
order_by: 'unified_job_template__polymorphic_ctype__model'
}
}
},
@ -258,13 +258,16 @@ export default
label: 'SCHEDULED'
},
resolve: {
SchedulesList: ['ScheduledJobsList', function(list){
return list;
}],
Dataset: ['SchedulesList', 'QuerySet', '$stateParams', 'GetBasePath',
function(list, qs, $stateParams, GetBasePath) {
let path = GetBasePath('schedules');
return qs.search(path, $stateParams[`${list.iterator}_search`]);
}
],
ParentObject: [() =>{return null;}]
ParentObject: [() =>{return {endpoint:'/api/v1/schedules'}; }],
},
views: {
'list@jobs': {

View File

@ -31,7 +31,7 @@ export default [
function init() {
if (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;
rbacUiControlService.canAdd(scheduleEndpoint)
.then(function(canAdd) {
@ -67,8 +67,77 @@ export default [
$state.go('.add');
};
$scope.editSchedule = function(schedule_id) {
$state.go('.edit', { schedule_id: schedule_id });
$scope.editSchedule = function(schedule) {
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) {