mirror of
https://github.com/ansible/awx.git
synced 2026-05-20 15:27:47 -02:30
Merge pull request #6226 from mabashian/inventory-breadcrumbs
Breadcrumb fixes and nested groups/hosts state refactoring
This commit is contained in:
@@ -218,6 +218,8 @@ var tower = angular.module('Tower', [
|
|||||||
$state.go('.', null, {reload: true});
|
$state.go('.', null, {reload: true});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$rootScope.breadcrumb = {};
|
||||||
|
|
||||||
function activateTab() {
|
function activateTab() {
|
||||||
// Make the correct tab active
|
// Make the correct tab active
|
||||||
var base = $location.path().replace(/^\//, '').split('/')[0];
|
var base = $location.path().replace(/^\//, '').split('/')[0];
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
export default {
|
||||||
|
searchPrefix: 'credential',
|
||||||
|
name: 'inventories.edit.adhoc.credential',
|
||||||
|
url: '/credential',
|
||||||
|
data: {
|
||||||
|
formChildState: true
|
||||||
|
},
|
||||||
|
params: {
|
||||||
|
credential_search: {
|
||||||
|
value: {
|
||||||
|
page_size: '5'
|
||||||
|
},
|
||||||
|
squash: true,
|
||||||
|
dynamic: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
skip: true
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'related': {
|
||||||
|
templateProvider: function(ListDefinition, generateList) {
|
||||||
|
let list_html = generateList.build({
|
||||||
|
mode: 'lookup',
|
||||||
|
list: ListDefinition,
|
||||||
|
input_type: 'radio'
|
||||||
|
});
|
||||||
|
return `<lookup-modal>${list_html}</lookup-modal>`;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
ListDefinition: ['CredentialList', function(CredentialList) {
|
||||||
|
let list = _.cloneDeep(CredentialList);
|
||||||
|
list.lookupConfirmText = 'SELECT';
|
||||||
|
return list;
|
||||||
|
}],
|
||||||
|
Dataset: ['ListDefinition', 'QuerySet', '$stateParams', 'GetBasePath',
|
||||||
|
(list, qs, $stateParams, GetBasePath) => {
|
||||||
|
let path = GetBasePath(list.name) || GetBasePath(list.basePath);
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
onExit: function($state) {
|
||||||
|
if ($state.transition) {
|
||||||
|
$('#form-modal').modal('hide');
|
||||||
|
$('.modal-backdrop').remove();
|
||||||
|
$('body').removeClass('modal-open');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import {templateUrl} from '../../shared/template-url/template-url.factory';
|
||||||
|
import { N_ } from '../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
url: '/ansible_facts',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_("FACTS")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'related': {
|
||||||
|
controller: 'AnsibleFactsController',
|
||||||
|
templateUrl: templateUrl('inventories/ansible_facts/ansible_facts')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Facts: ['$stateParams', 'GetBasePath', 'Rest',
|
||||||
|
function($stateParams, GetBasePath, Rest) {
|
||||||
|
let ansibleFactsUrl = GetBasePath('hosts') + $stateParams.host_id + '/ansible_facts';
|
||||||
|
Rest.setUrl(ansibleFactsUrl);
|
||||||
|
return Rest.get()
|
||||||
|
.success(function(data) {
|
||||||
|
return data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
import JobsListController from '../../jobs/jobs-list.controller';
|
|
||||||
export default ['InventoryCompletedJobsList', '$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function(InventoryCompletedJobsList, $stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
// searchPrefix: `${list.iterator}`,
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s`,
|
|
||||||
url: `/${list.iterator}s`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
params: {
|
|
||||||
completed_job_search: {
|
|
||||||
value: {
|
|
||||||
or__job__inventory: '',
|
|
||||||
or__adhoccommand__inventory: '',
|
|
||||||
or__inventoryupdate__inventory_source__inventory: ''
|
|
||||||
},
|
|
||||||
squash: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'related': {
|
|
||||||
templateProvider: function(FormDefinition, GenerateForm) {
|
|
||||||
let html = GenerateForm.buildCollection({
|
|
||||||
mode: 'edit',
|
|
||||||
related: `${list.iterator}s`,
|
|
||||||
form: typeof(FormDefinition) === 'function' ?
|
|
||||||
FormDefinition() : FormDefinition
|
|
||||||
});
|
|
||||||
return html;
|
|
||||||
},
|
|
||||||
controller: JobsListController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
ListDefinition: () => {
|
|
||||||
return list;
|
|
||||||
},
|
|
||||||
Dataset: ['ListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
|
||||||
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
|
||||||
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
|
||||||
let path, interpolator;
|
|
||||||
if (GetBasePath(list.basePath)) {
|
|
||||||
path = GetBasePath(list.basePath);
|
|
||||||
} else {
|
|
||||||
interpolator = $interpolate(list.basePath);
|
|
||||||
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
|
||||||
}
|
|
||||||
|
|
||||||
$stateParams[`${list.iterator}_search`].or__job__inventory = $stateParams.inventory_id;
|
|
||||||
$stateParams[`${list.iterator}_search`].or__adhoccommand__inventory = $stateParams.inventory_id;
|
|
||||||
$stateParams[`${list.iterator}_search`].or__inventoryupdate__inventory_source__inventory = $stateParams.inventory_id;
|
|
||||||
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
// appy any default search parameters in form definition
|
|
||||||
if (field.search) {
|
|
||||||
state.params[`${field.iterator}_search`].value = _.merge(state.params[`${field.iterator}_search`].value, field.search);
|
|
||||||
}
|
|
||||||
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
import { N_ } from '../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.completed_jobs",
|
||||||
|
url: "/completed_jobs",
|
||||||
|
params: {
|
||||||
|
completed_job_search: {
|
||||||
|
value: {
|
||||||
|
or__job__inventory:"",
|
||||||
|
or__adhoccommand__inventory:"",
|
||||||
|
or__inventoryupdate__inventory_source__inventory:""
|
||||||
|
},
|
||||||
|
squash:""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit",
|
||||||
|
label: N_("COMPLETED JOBS")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'related': {
|
||||||
|
templateProvider: function(FormDefinition, GenerateForm) {
|
||||||
|
let html = GenerateForm.buildCollection({
|
||||||
|
mode: 'edit',
|
||||||
|
related: 'completed_jobs',
|
||||||
|
form: typeof(FormDefinition) === 'function' ?
|
||||||
|
FormDefinition() : FormDefinition
|
||||||
|
});
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'JobsList'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
ListDefinition: ['InventoryCompletedJobsList', (InventoryCompletedJobsList) => {
|
||||||
|
return InventoryCompletedJobsList;
|
||||||
|
}],
|
||||||
|
Dataset: ['InventoryCompletedJobsList', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
||||||
|
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
||||||
|
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
||||||
|
let path, interpolator;
|
||||||
|
if (GetBasePath(list.basePath)) {
|
||||||
|
path = GetBasePath(list.basePath);
|
||||||
|
} else {
|
||||||
|
interpolator = $interpolate(list.basePath);
|
||||||
|
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
||||||
|
}
|
||||||
|
|
||||||
|
$stateParams[`${list.iterator}_search`].or__job__inventory = $stateParams.inventory_id;
|
||||||
|
$stateParams[`${list.iterator}_search`].or__adhoccommand__inventory = $stateParams.inventory_id;
|
||||||
|
$stateParams[`${list.iterator}_search`].or__inventoryupdate__inventory_source__inventory = $stateParams.inventory_id;
|
||||||
|
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -5,9 +5,7 @@
|
|||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import list from './completed_jobs.list';
|
import list from './completed_jobs.list';
|
||||||
import buildInventoryCompletedJobsState from './build-inventory-completed-jobs-state.factory';
|
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('inventoryCompletedJobs', [])
|
angular.module('inventoryCompletedJobs', [])
|
||||||
.factory('InventoryCompletedJobsList', list)
|
.factory('InventoryCompletedJobsList', list);
|
||||||
.factory('buildInventoryCompletedJobsState', buildInventoryCompletedJobsState);
|
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
export default
|
export default
|
||||||
['$scope', '$state', '$stateParams', 'GroupManageService', 'CopyMoveGroupList', 'group', 'Dataset',
|
['$scope', '$state', '$stateParams', 'GroupManageService', 'CopyMoveGroupList', 'group', 'Dataset', '$rootScope',
|
||||||
function($scope, $state, $stateParams, GroupManageService, CopyMoveGroupList, group, Dataset){
|
function($scope, $state, $stateParams, GroupManageService, CopyMoveGroupList, group, Dataset, $rootScope){
|
||||||
var list = CopyMoveGroupList;
|
var list = CopyMoveGroupList;
|
||||||
|
|
||||||
$scope.item = group;
|
$scope.item = group;
|
||||||
|
$rootScope.breadcrumb.copyMoveName = group.name;
|
||||||
$scope.submitMode = $stateParams.groups === undefined ? 'move' : 'copy';
|
$scope.submitMode = $stateParams.groups === undefined ? 'move' : 'copy';
|
||||||
$scope.toggle_row = function(id){
|
$scope.toggle_row = function(id){
|
||||||
// toggle off anything else currently selected
|
// toggle off anything else currently selected
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
export default
|
export default
|
||||||
['$scope', '$state', '$stateParams', 'HostManageService', 'CopyMoveGroupList', 'host', 'Dataset',
|
['$scope', '$state', '$stateParams', 'HostManageService', 'CopyMoveGroupList', 'host', 'Dataset', '$rootScope',
|
||||||
function($scope, $state, $stateParams, HostManageService, CopyMoveGroupList, host, Dataset){
|
function($scope, $state, $stateParams, HostManageService, CopyMoveGroupList, host, Dataset, $rootScope){
|
||||||
var list = CopyMoveGroupList;
|
var list = CopyMoveGroupList;
|
||||||
|
|
||||||
$scope.item = host;
|
$scope.item = host;
|
||||||
|
$rootScope.breadcrumb.copyMoveName = host.name;
|
||||||
$scope.submitMode = 'copy';
|
$scope.submitMode = 'copy';
|
||||||
$scope.toggle_row = function(id){
|
$scope.toggle_row = function(id){
|
||||||
// toggle off anything else currently selected
|
// toggle off anything else currently selected
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ var copyMoveGroupRoute = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
label: N_("COPY OR MOVE") + " {{item.name}}"
|
label: N_("COPY OR MOVE") + " {{breadcrumb.copyMoveName}}"
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
Dataset: ['CopyMoveGroupList', 'QuerySet', '$stateParams', 'GetBasePath', 'group',
|
Dataset: ['CopyMoveGroupList', 'QuerySet', '$stateParams', 'GetBasePath', 'group',
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
function InventoriesEdit($scope, $location,
|
function InventoriesEdit($scope, $location,
|
||||||
$stateParams, InventoryForm, Rest, ProcessErrors,
|
$stateParams, InventoryForm, Rest, ProcessErrors,
|
||||||
ClearScope, GetBasePath, ParseTypeChange, Wait, ToJSON,
|
ClearScope, GetBasePath, ParseTypeChange, Wait, ToJSON,
|
||||||
ParseVariableString, $state, OrgAdminLookup) {
|
ParseVariableString, $state, OrgAdminLookup, $rootScope) {
|
||||||
|
|
||||||
// Inject dynamic view
|
// Inject dynamic view
|
||||||
var defaultUrl = GetBasePath('inventory'),
|
var defaultUrl = GetBasePath('inventory'),
|
||||||
@@ -82,6 +82,7 @@ function InventoriesEdit($scope, $location,
|
|||||||
});
|
});
|
||||||
|
|
||||||
$scope.inventory_obj = data;
|
$scope.inventory_obj = data;
|
||||||
|
$rootScope.breadcrumb.inventory_name = data.name;
|
||||||
$scope.name = data.name;
|
$scope.name = data.name;
|
||||||
})
|
})
|
||||||
.error(function(data, status) {
|
.error(function(data, status) {
|
||||||
@@ -127,5 +128,5 @@ export default ['$scope', '$location',
|
|||||||
'$stateParams', 'InventoryForm', 'Rest',
|
'$stateParams', 'InventoryForm', 'Rest',
|
||||||
'ProcessErrors', 'ClearScope', 'GetBasePath', 'ParseTypeChange', 'Wait',
|
'ProcessErrors', 'ClearScope', 'GetBasePath', 'ParseTypeChange', 'Wait',
|
||||||
'ToJSON', 'ParseVariableString',
|
'ToJSON', 'ParseVariableString',
|
||||||
'$state', 'OrgAdminLookup', InventoriesEdit,
|
'$state', 'OrgAdminLookup', '$rootScope', InventoriesEdit,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
import GroupAddController from './groups-add.controller';
|
|
||||||
|
|
||||||
export default ['$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function($stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition, params) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s.add`,
|
|
||||||
url: `/add`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'groupForm@inventories': {
|
|
||||||
templateProvider: function(GenerateForm, GroupForm) {
|
|
||||||
let form = GroupForm;
|
|
||||||
return GenerateForm.buildHTML(form, {
|
|
||||||
mode: 'add',
|
|
||||||
related: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
controller: GroupAddController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
'FormDefinition': [params.form, function(definition) {
|
|
||||||
return definition;
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
22
awx/ui/client/src/inventories/groups/add/groups-add.route.js
Normal file
22
awx/ui/client/src/inventories/groups/add/groups-add.route.js
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.groups.add",
|
||||||
|
url: "/add",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.groups",
|
||||||
|
label: N_("CREATE GROUP")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'groupForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, GroupForm) {
|
||||||
|
let form = GroupForm;
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'add',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'GroupAddController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -4,10 +4,8 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import buildGroupAddState from './build-groups-add-state.factory';
|
|
||||||
import controller from './groups-add.controller';
|
import controller from './groups-add.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('groupAdd', [])
|
angular.module('groupAdd', [])
|
||||||
.factory('buildGroupsAddState', buildGroupAddState)
|
|
||||||
.controller('GroupAddController', controller);
|
.controller('GroupAddController', controller);
|
||||||
|
|||||||
@@ -1,93 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
import GroupEditController from './groups-edit.controller';
|
|
||||||
|
|
||||||
export default ['$stateExtender', 'templateUrl', '$injector',
|
|
||||||
'stateDefinitions','GroupForm','nestedGroupListState',
|
|
||||||
'nestedHostsListState', 'buildHostAddState', 'buildHostEditState',
|
|
||||||
'nestedGroupAddState',
|
|
||||||
function($stateExtender, templateUrl, $injector, stateDefinitions, GroupForm,
|
|
||||||
nestedGroupListState, nestedHostsListState, buildHostAddState,
|
|
||||||
buildHostEditState, nestedGroupAddState){
|
|
||||||
var val = function(field, formStateDefinition, params) {
|
|
||||||
let state, states = [],
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s.edit`,
|
|
||||||
url: `/edit/:group_id`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'groupForm@inventories': {
|
|
||||||
templateProvider: function(GenerateForm, GroupForm) {
|
|
||||||
let form = GroupForm;
|
|
||||||
return GenerateForm.buildHTML(form, {
|
|
||||||
mode: 'edit',
|
|
||||||
related: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
controller: GroupEditController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
'FormDefinition': [params.form, function(definition) {
|
|
||||||
return definition;
|
|
||||||
}],
|
|
||||||
groupData: ['$stateParams', 'GroupManageService', function($stateParams, GroupManageService) {
|
|
||||||
return GroupManageService.get({ id: $stateParams.group_id }).then(res => res.data.results[0]);
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
|
|
||||||
let relatedGroupListState = nestedGroupListState(GroupForm.related.nested_groups, state, params);
|
|
||||||
let relatedGroupsAddState = nestedGroupAddState(GroupForm.related.nested_groups, state, params);
|
|
||||||
relatedGroupListState = $stateExtender.buildDefinition(relatedGroupListState);
|
|
||||||
relatedGroupsAddState = $stateExtender.buildDefinition(relatedGroupsAddState);
|
|
||||||
|
|
||||||
let relatedHostsListState = nestedHostsListState(GroupForm.related.nested_hosts, state, params);
|
|
||||||
let relatedHostsAddState = buildHostAddState(GroupForm.related.nested_hosts, state, params);
|
|
||||||
let relatedHostsEditState = buildHostEditState(GroupForm.related.nested_hosts, state, params);
|
|
||||||
relatedHostsListState = $stateExtender.buildDefinition(relatedHostsListState);
|
|
||||||
relatedHostsAddState = $stateExtender.buildDefinition(relatedHostsAddState);
|
|
||||||
if(Array.isArray(relatedHostsEditState))
|
|
||||||
{
|
|
||||||
relatedHostsEditState[0] = $stateExtender.buildDefinition(relatedHostsEditState[0]);
|
|
||||||
relatedHostsEditState[1] = $stateExtender.buildDefinition(relatedHostsEditState[1]);
|
|
||||||
states.push(state,
|
|
||||||
relatedGroupListState,
|
|
||||||
relatedGroupsAddState,
|
|
||||||
relatedHostsListState,
|
|
||||||
relatedHostsAddState,
|
|
||||||
relatedHostsEditState[0],
|
|
||||||
relatedHostsEditState[1]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
relatedHostsEditState = $stateExtender.buildDefinition(relatedHostsEditState);
|
|
||||||
states.push(state,
|
|
||||||
relatedGroupListState,
|
|
||||||
relatedGroupsAddState,
|
|
||||||
relatedHostsListState,
|
|
||||||
relatedHostsAddState,
|
|
||||||
relatedHostsEditState);
|
|
||||||
}
|
|
||||||
|
|
||||||
// states.push(state,
|
|
||||||
// relatedGroupListState,
|
|
||||||
// relatedGroupsAddState,
|
|
||||||
// relatedHostsListState,
|
|
||||||
// relatedHostsAddState,
|
|
||||||
// relatedHostsEditState[0],
|
|
||||||
// relatedHostsEditState[1]);
|
|
||||||
return states;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -5,9 +5,9 @@
|
|||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
export default ['$state', '$stateParams', '$scope', 'ParseVariableString', 'rbacUiControlService', 'ToJSON',
|
export default ['$state', '$stateParams', '$scope', 'ParseVariableString', 'rbacUiControlService', 'ToJSON',
|
||||||
'ParseTypeChange', 'GroupManageService', 'GetChoices', 'GetBasePath', 'CreateSelect2', 'groupData',
|
'ParseTypeChange', 'GroupManageService', 'GetChoices', 'GetBasePath', 'CreateSelect2', 'groupData', '$rootScope',
|
||||||
function($state, $stateParams, $scope, ParseVariableString, rbacUiControlService, ToJSON,
|
function($state, $stateParams, $scope, ParseVariableString, rbacUiControlService, ToJSON,
|
||||||
ParseTypeChange, GroupManageService, GetChoices, GetBasePath, CreateSelect2, groupData) {
|
ParseTypeChange, GroupManageService, GetChoices, GetBasePath, CreateSelect2, groupData, $rootScope) {
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
|
||||||
@@ -19,6 +19,8 @@ export default ['$state', '$stateParams', '$scope', 'ParseVariableString', 'rbac
|
|||||||
|
|
||||||
$scope = angular.extend($scope, groupData);
|
$scope = angular.extend($scope, groupData);
|
||||||
|
|
||||||
|
$rootScope.breadcrumb.group_name = groupData.name;
|
||||||
|
|
||||||
$scope.$watch('summary_fields.user_capabilities.edit', function(val) {
|
$scope.$watch('summary_fields.user_capabilities.edit', function(val) {
|
||||||
$scope.canAdd = val;
|
$scope.canAdd = val;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
export default {
|
||||||
|
name: "inventories.edit.groups.edit",
|
||||||
|
url: "/edit/:group_id",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.groups",
|
||||||
|
label: "{{breadcrumb.group_name}}"
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'groupForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, GroupForm) {
|
||||||
|
let form = GroupForm;
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'edit',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'GroupEditController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
groupData: ['$stateParams', 'GroupManageService', function($stateParams, GroupManageService) {
|
||||||
|
return GroupManageService.get({ id: $stateParams.group_id }).then(res => res.data.results[0]);
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -4,10 +4,8 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import buildGroupsEditState from './build-groups-edit-state.factory';
|
|
||||||
import controller from './groups-edit.controller';
|
import controller from './groups-edit.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('groupEdit', [])
|
angular.module('groupEdit', [])
|
||||||
.factory('buildGroupsEditState', buildGroupsEditState)
|
|
||||||
.controller('GroupEditController', controller);
|
.controller('GroupEditController', controller);
|
||||||
|
|||||||
@@ -10,9 +10,8 @@
|
|||||||
* @description This form is for adding/editing a Group on the inventory page
|
* @description This form is for adding/editing a Group on the inventory page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default ['i18n', 'nestedGroupListState', 'nestedHostsListState',
|
export default ['i18n',
|
||||||
'buildHostAddState',
|
function(i18n){
|
||||||
function(i18n, nestedGroupListState, nestedHostsListState, buildHostAddState){
|
|
||||||
return {
|
return {
|
||||||
addTitle: 'CREATE GROUP',
|
addTitle: 'CREATE GROUP',
|
||||||
editTitle: '{{ name }}',
|
editTitle: '{{ name }}',
|
||||||
@@ -89,8 +88,7 @@ function(i18n, nestedGroupListState, nestedHostsListState, buildHostAddState){
|
|||||||
include: "NestedGroupListDefinition",
|
include: "NestedGroupListDefinition",
|
||||||
includeForm: "NestedGroupFormDefinition",
|
includeForm: "NestedGroupFormDefinition",
|
||||||
title: i18n._('Groups'),
|
title: i18n._('Groups'),
|
||||||
iterator: 'nested_group',
|
iterator: 'nested_group'
|
||||||
listState: nestedGroupListState
|
|
||||||
},
|
},
|
||||||
nested_hosts: {
|
nested_hosts: {
|
||||||
name: 'nested_hosts',
|
name: 'nested_hosts',
|
||||||
@@ -99,10 +97,7 @@ function(i18n, nestedGroupListState, nestedHostsListState, buildHostAddState){
|
|||||||
ngClick: "$state.go('inventories.edit.groups.edit.nested_hosts')",
|
ngClick: "$state.go('inventories.edit.groups.edit.nested_hosts')",
|
||||||
include: "NestedHostsListDefinition",
|
include: "NestedHostsListDefinition",
|
||||||
title: i18n._('Hosts'),
|
title: i18n._('Hosts'),
|
||||||
iterator: 'nested_hosts',
|
iterator: 'nested_hosts'
|
||||||
listState: nestedHostsListState,
|
|
||||||
addState: buildHostAddState,
|
|
||||||
// editState: buildGroupsEditState
|
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,82 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
import GroupsListController from './groups-list.controller';
|
|
||||||
export default ['GroupList', '$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function(GroupList, $stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
searchPrefix: `${list.iterator}`,
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s`,
|
|
||||||
url: `/${list.iterator}s`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
params: {
|
|
||||||
[list.iterator + '_search']: {
|
|
||||||
value: { order_by: field.order_by ? field.order_by : 'name' }
|
|
||||||
},
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'related': {
|
|
||||||
templateProvider: function(GroupList, generateList, $templateRequest, $stateParams, GetBasePath) {
|
|
||||||
let list = _.cloneDeep(GroupList);
|
|
||||||
if($stateParams && $stateParams.group) {
|
|
||||||
list.basePath = GetBasePath('groups') + _.last($stateParams.group) + '/children';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//reaches here if the user is on the root level group
|
|
||||||
list.basePath = GetBasePath('inventory') + $stateParams.inventory_id + '/root_groups';
|
|
||||||
}
|
|
||||||
|
|
||||||
let html = generateList.build({
|
|
||||||
list: list,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
// Include the custom group delete modal template
|
|
||||||
return $templateRequest(templateUrl('inventories/groups/list/groups-list')).then((template) => {
|
|
||||||
return html.concat(template);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
controller: GroupsListController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
ListDefinition: () => {
|
|
||||||
return list;
|
|
||||||
},
|
|
||||||
Dataset: ['ListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
|
||||||
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
|
||||||
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
|
||||||
let path, interpolator;
|
|
||||||
if (GetBasePath(list.basePath)) {
|
|
||||||
path = GetBasePath(list.basePath);
|
|
||||||
} else {
|
|
||||||
interpolator = $interpolate(list.basePath);
|
|
||||||
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
|
||||||
}
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
inventoryData: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
|
||||||
return InventoryManageService.getInventory($stateParams.inventory_id).then(res => res.data);
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
// appy any default search parameters in form definition
|
|
||||||
if (field.search) {
|
|
||||||
state.params[`${field.iterator}_search`].value = _.merge(state.params[`${field.iterator}_search`].value, field.search);
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -30,11 +30,6 @@
|
|||||||
$scope[`${list.iterator}_dataset`] = Dataset.data;
|
$scope[`${list.iterator}_dataset`] = Dataset.data;
|
||||||
$scope[list.name] = $scope[`${list.iterator}_dataset`].results;
|
$scope[list.name] = $scope[`${list.iterator}_dataset`].results;
|
||||||
|
|
||||||
// The ncy breadcrumb directive will look at this attribute when attempting to bind to the correct scope.
|
|
||||||
// In this case, we don't want to incidentally bind to this scope when editing a host or a group. See:
|
|
||||||
// https://github.com/ncuillery/angular-breadcrumb/issues/42 for a little more information on the
|
|
||||||
// problem that this solves.
|
|
||||||
$scope.ncyBreadcrumbIgnore = true;
|
|
||||||
if($state.current.name === "inventories.edit.groups") {
|
if($state.current.name === "inventories.edit.groups") {
|
||||||
$scope.rowBeingEdited = $state.params.group_id;
|
$scope.rowBeingEdited = $state.params.group_id;
|
||||||
$scope.listBeingEdited = "groups";
|
$scope.listBeingEdited = "groups";
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
import {templateUrl} from '../../../shared/template-url/template-url.factory';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.groups",
|
||||||
|
url: "/groups?{group_search:queryset}",
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['GroupList', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
||||||
|
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
||||||
|
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
||||||
|
let path, interpolator;
|
||||||
|
if (GetBasePath(list.basePath)) {
|
||||||
|
path = GetBasePath(list.basePath);
|
||||||
|
} else {
|
||||||
|
interpolator = $interpolate(list.basePath);
|
||||||
|
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
||||||
|
}
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
inventoryData: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
||||||
|
return InventoryManageService.getInventory($stateParams.inventory_id).then(res => res.data);
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
params: {
|
||||||
|
group_search: {
|
||||||
|
value: {
|
||||||
|
page_size: "20",
|
||||||
|
order_by: "name"
|
||||||
|
},
|
||||||
|
dynamic: true,
|
||||||
|
squash: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit",
|
||||||
|
label: N_("GROUPS")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'related': {
|
||||||
|
templateProvider: function(GroupList, generateList, $templateRequest, $stateParams, GetBasePath) {
|
||||||
|
let list = _.cloneDeep(GroupList);
|
||||||
|
if($stateParams && $stateParams.group) {
|
||||||
|
list.basePath = GetBasePath('groups') + _.last($stateParams.group) + '/children';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//reaches here if the user is on the root level group
|
||||||
|
list.basePath = GetBasePath('inventory') + $stateParams.inventory_id + '/root_groups';
|
||||||
|
}
|
||||||
|
|
||||||
|
let html = generateList.build({
|
||||||
|
list: list,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
// Include the custom group delete modal template
|
||||||
|
return $templateRequest(templateUrl('inventories/groups/list/groups-list')).then((template) => {
|
||||||
|
return html.concat(template);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'GroupsListController'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -4,10 +4,8 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import buildGroupsListState from './build-groups-list-state.factory';
|
|
||||||
import controller from './groups-list.controller';
|
import controller from './groups-list.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('groupsList', [])
|
angular.module('groupsList', [])
|
||||||
.factory('buildGroupsListState', buildGroupsListState)
|
|
||||||
.controller('GroupsListController', controller);
|
.controller('GroupsListController', controller);
|
||||||
|
|||||||
@@ -4,16 +4,12 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import nestedGroupListState from './nested-groups-list-state.factory';
|
|
||||||
import nestedGroupAddState from './nested-groups-add-state.factory';
|
|
||||||
import nestedGroupListDefinition from './nested-groups.list';
|
import nestedGroupListDefinition from './nested-groups.list';
|
||||||
import nestedGroupFormDefinition from './nested-groups.form';
|
import nestedGroupFormDefinition from './nested-groups.form';
|
||||||
import controller from './nested-groups-list.controller';
|
import controller from './nested-groups-list.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('nestedGroups', [])
|
angular.module('nestedGroups', [])
|
||||||
.factory('nestedGroupListState', nestedGroupListState)
|
|
||||||
.factory('nestedGroupAddState', nestedGroupAddState)
|
|
||||||
.value('NestedGroupListDefinition', nestedGroupListDefinition)
|
.value('NestedGroupListDefinition', nestedGroupListDefinition)
|
||||||
.factory('NestedGroupFormDefinition', nestedGroupFormDefinition)
|
.factory('NestedGroupFormDefinition', nestedGroupFormDefinition)
|
||||||
.controller('NestedGroupsListController', controller);
|
.controller('NestedGroupsListController', controller);
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
import GroupAddController from '../add/groups-add.controller';
|
|
||||||
|
|
||||||
export default ['$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function($stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition, params) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s.add`,
|
|
||||||
url: `/add`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'nestedGroupForm@inventories': {
|
|
||||||
templateProvider: function(GenerateForm, GroupForm) {
|
|
||||||
let form = GroupForm;
|
|
||||||
return GenerateForm.buildHTML(form, {
|
|
||||||
mode: 'add',
|
|
||||||
related: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
controller: GroupAddController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
'FormDefinition': [params.form, function(definition) {
|
|
||||||
return definition;
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.groups.edit.nested_groups.add",
|
||||||
|
url: "/add",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.groups.edit.nested_groups",
|
||||||
|
label: N_("CREATE GROUP")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'nestedGroupForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, GroupForm) {
|
||||||
|
let form = GroupForm;
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'add',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'GroupAddController'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
import NestedGroupsListController from './nested-groups-list.controller';
|
|
||||||
export default ['$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function($stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
searchPrefix: `${list.iterator}`,
|
|
||||||
squash: '',
|
|
||||||
name: `${formStateDefinition.name}.nested_groups`,
|
|
||||||
url: `/${list.iterator}s`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
params: {
|
|
||||||
[list.iterator + '_search']: {
|
|
||||||
value: { order_by: field.order_by ? field.order_by : 'name' }
|
|
||||||
},
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
// 'related@inventories.edit.groups.edit': {
|
|
||||||
'related': {
|
|
||||||
templateProvider: function(NestedGroupListDefinition, generateList) {
|
|
||||||
let list = _.cloneDeep(NestedGroupListDefinition);
|
|
||||||
|
|
||||||
let html = generateList.build({
|
|
||||||
list: list,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
// Include the custom group delete modal template
|
|
||||||
// return $templateRequest(templateUrl('inventories/groups/list/groups-list')).then((template) => {
|
|
||||||
// return html.concat(template);
|
|
||||||
// });
|
|
||||||
return html;
|
|
||||||
},
|
|
||||||
controller: NestedGroupsListController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
ListDefinition: () => {
|
|
||||||
return list;
|
|
||||||
},
|
|
||||||
Dataset: ['ListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
|
||||||
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
|
||||||
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
|
||||||
let path, interpolator;
|
|
||||||
if (GetBasePath(list.basePath)) {
|
|
||||||
path = GetBasePath(list.basePath);
|
|
||||||
} else {
|
|
||||||
interpolator = $interpolate(list.basePath);
|
|
||||||
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
|
||||||
}
|
|
||||||
if($stateParams.group_id){
|
|
||||||
path = `api/v2/groups/${$stateParams.group_id}/children`;
|
|
||||||
}
|
|
||||||
else if($stateParams.host_id){
|
|
||||||
path = GetBasePath('hosts') + $stateParams.host_id + '/all_groups';
|
|
||||||
}
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
host: ['$stateParams', 'HostManageService', function($stateParams, HostManageService) {
|
|
||||||
if($stateParams.host_id){
|
|
||||||
return HostManageService.get({ id: $stateParams.host_id }).then(function(res) {
|
|
||||||
return res.data.results[0];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}],
|
|
||||||
inventoryData: ['InventoryManageService', '$stateParams', 'host', function(InventoryManageService, $stateParams, host) {
|
|
||||||
var id = ($stateParams.inventory_id) ? $stateParams.inventory_id : host.summary_fields.inventory.id;
|
|
||||||
return InventoryManageService.getInventory(id).then(res => res.data);
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
// appy any default search parameters in form definition
|
|
||||||
if (field.search) {
|
|
||||||
state.params[`${field.iterator}_search`].value = _.merge(state.params[`${field.iterator}_search`].value, field.search);
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -30,11 +30,6 @@
|
|||||||
$scope[`${list.iterator}_dataset`] = Dataset.data;
|
$scope[`${list.iterator}_dataset`] = Dataset.data;
|
||||||
$scope[list.name] = $scope[`${list.iterator}_dataset`].results;
|
$scope[list.name] = $scope[`${list.iterator}_dataset`].results;
|
||||||
|
|
||||||
// The ncy breadcrumb directive will look at this attribute when attempting to bind to the correct scope.
|
|
||||||
// In this case, we don't want to incidentally bind to this scope when editing a host or a group. See:
|
|
||||||
// https://github.com/ncuillery/angular-breadcrumb/issues/42 for a little more information on the
|
|
||||||
// problem that this solves.
|
|
||||||
$scope.ncyBreadcrumbIgnore = true;
|
|
||||||
if($state.current.name === "inventories.edit.groups.edit.nested_groups.edit") {
|
if($state.current.name === "inventories.edit.groups.edit.nested_groups.edit") {
|
||||||
$scope.rowBeingEdited = $state.params.group_id;
|
$scope.rowBeingEdited = $state.params.group_id;
|
||||||
$scope.listBeingEdited = "groups";
|
$scope.listBeingEdited = "groups";
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
* @description This form is for adding/editing a Group on the inventory page
|
* @description This form is for adding/editing a Group on the inventory page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default ['i18n', 'nestedGroupListState',
|
export default ['i18n',
|
||||||
function(i18n, nestedGroupListState){
|
function(i18n){
|
||||||
return {
|
return {
|
||||||
addTitle: 'CREATE GROUP',
|
addTitle: 'CREATE GROUP',
|
||||||
editTitle: '{{ name }}',
|
editTitle: '{{ name }}',
|
||||||
@@ -87,8 +87,7 @@ function(i18n, nestedGroupListState){
|
|||||||
include: "RelatedGroupListDefinition",
|
include: "RelatedGroupListDefinition",
|
||||||
includeForm: "RelatedGroupFormDefinition",
|
includeForm: "RelatedGroupFormDefinition",
|
||||||
title: i18n._('Groups'),
|
title: i18n._('Groups'),
|
||||||
iterator: 'related_group',
|
iterator: 'related_group'
|
||||||
listState: nestedGroupListState
|
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
export default {
|
||||||
|
url: "/nested_groups?{nested_group_search:queryset}",
|
||||||
|
params: {
|
||||||
|
nested_group_search: {
|
||||||
|
value: {
|
||||||
|
page_size: "20",
|
||||||
|
order_by: "name"
|
||||||
|
},
|
||||||
|
dynamic: true,
|
||||||
|
squash: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
// 'related@inventories.edit.groups.edit': {
|
||||||
|
'related': {
|
||||||
|
templateProvider: function(NestedGroupListDefinition, generateList) {
|
||||||
|
let list = _.cloneDeep(NestedGroupListDefinition);
|
||||||
|
|
||||||
|
let html = generateList.build({
|
||||||
|
list: list,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
// Include the custom group delete modal template
|
||||||
|
// return $templateRequest(templateUrl('inventories/groups/list/groups-list')).then((template) => {
|
||||||
|
// return html.concat(template);
|
||||||
|
// });
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'NestedGroupsListController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['NestedGroupListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
||||||
|
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
||||||
|
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
||||||
|
let path, interpolator;
|
||||||
|
if (GetBasePath(list.basePath)) {
|
||||||
|
path = GetBasePath(list.basePath);
|
||||||
|
} else {
|
||||||
|
interpolator = $interpolate(list.basePath);
|
||||||
|
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
||||||
|
}
|
||||||
|
if($stateParams.group_id){
|
||||||
|
path = `api/v2/groups/${$stateParams.group_id}/children`;
|
||||||
|
}
|
||||||
|
else if($stateParams.host_id){
|
||||||
|
path = GetBasePath('hosts') + $stateParams.host_id + '/all_groups';
|
||||||
|
}
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
host: ['$stateParams', 'HostManageService', function($stateParams, HostManageService) {
|
||||||
|
if($stateParams.host_id){
|
||||||
|
return HostManageService.get({ id: $stateParams.host_id }).then(function(res) {
|
||||||
|
return res.data.results[0];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
inventoryData: ['InventoryManageService', '$stateParams', 'host', function(InventoryManageService, $stateParams, host) {
|
||||||
|
var id = ($stateParams.inventory_id) ? $stateParams.inventory_id : host.summary_fields.inventory.id;
|
||||||
|
return InventoryManageService.getInventory(id).then(res => res.data);
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -4,14 +4,12 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import nestedHostsListState from './nested-hosts-list-state.factory';
|
|
||||||
import nestedHostsListDefinition from './nested-hosts.list';
|
import nestedHostsListDefinition from './nested-hosts.list';
|
||||||
import nestedHostsFormDefinition from './nested-hosts.form';
|
import nestedHostsFormDefinition from './nested-hosts.form';
|
||||||
import controller from './nested-hosts-list.controller';
|
import controller from './nested-hosts-list.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('nestedHosts', [])
|
angular.module('nestedHosts', [])
|
||||||
.factory('nestedHostsListState', nestedHostsListState)
|
|
||||||
.value('NestedHostsListDefinition', nestedHostsListDefinition)
|
.value('NestedHostsListDefinition', nestedHostsListDefinition)
|
||||||
.factory('NestedHostsFormDefinition', nestedHostsFormDefinition)
|
.factory('NestedHostsFormDefinition', nestedHostsFormDefinition)
|
||||||
.controller('NestedHostsListController', controller);
|
.controller('NestedHostsListController', controller);
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.groups.edit.nested_hosts.add",
|
||||||
|
url: "/add",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.groups.edit.nested_hosts",
|
||||||
|
label: N_("CREATE HOST")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'hostForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, RelatedHostsFormDefinition) {
|
||||||
|
let form = RelatedHostsFormDefinition;
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'add',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'RelatedHostAddController'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
export default {
|
||||||
|
name: "inventories.edit.groups.edit.nested_hosts.edit",
|
||||||
|
url: "/edit/:host_id",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.groups.edit",
|
||||||
|
label: "ASSOCIATED HOSTS"
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'hostForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, RelatedHostsFormDefinition, NestedHostsFormDefinition, $stateParams) {
|
||||||
|
let form = RelatedHostsFormDefinition;
|
||||||
|
if($stateParams.group_id){
|
||||||
|
form = NestedHostsFormDefinition;
|
||||||
|
}
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'edit',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'RelatedHostEditController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
host: ['$stateParams', 'HostManageService', function($stateParams, HostManageService) {
|
||||||
|
return HostManageService.get({ id: $stateParams.host_id }).then(function(res) {
|
||||||
|
return res.data.results[0];
|
||||||
|
});
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
import NestedHostsListController from './nested-hosts-list.controller';
|
|
||||||
export default ['NestedHostsListDefinition', '$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function(NestedHostsListDefinition, $stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
searchPrefix: `${list.iterator}`,
|
|
||||||
squash: '',
|
|
||||||
name: `${formStateDefinition.name}.nested_hosts`,
|
|
||||||
url: `/${list.iterator}s`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
params: {
|
|
||||||
[list.iterator + '_search']: {
|
|
||||||
value: { order_by: field.order_by ? field.order_by : 'name' }
|
|
||||||
},
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
// 'related@inventories.edit.groups.edit': {
|
|
||||||
'related': {
|
|
||||||
templateProvider: function(NestedHostsListDefinition, generateList) {
|
|
||||||
let list = _.cloneDeep(NestedHostsListDefinition);
|
|
||||||
|
|
||||||
let html = generateList.build({
|
|
||||||
list: list,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
// Include the custom group delete modal template
|
|
||||||
// return $templateRequest(templateUrl('inventories/groups/list/groups-list')).then((template) => {
|
|
||||||
// return html.concat(template);
|
|
||||||
// });
|
|
||||||
return html;
|
|
||||||
},
|
|
||||||
controller: NestedHostsListController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
ListDefinition: () => {
|
|
||||||
return list;
|
|
||||||
},
|
|
||||||
Dataset: ['ListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
|
||||||
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
|
||||||
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
|
||||||
let path, interpolator;
|
|
||||||
if (GetBasePath(list.basePath)) {
|
|
||||||
path = GetBasePath(list.basePath);
|
|
||||||
} else {
|
|
||||||
interpolator = $interpolate(list.basePath);
|
|
||||||
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
|
||||||
}
|
|
||||||
path = `api/v2/groups/${$stateParams.group_id}/all_hosts`;
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
inventoryData: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
|
||||||
return InventoryManageService.getInventory($stateParams.inventory_id).then(res => res.data);
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
// appy any default search parameters in form definition
|
|
||||||
if (field.search) {
|
|
||||||
state.params[`${field.iterator}_search`].value = _.merge(state.params[`${field.iterator}_search`].value, field.search);
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
* @description This form is for adding/editing a host on the inventory page
|
* @description This form is for adding/editing a host on the inventory page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default ['i18n', 'nestedGroupListState',
|
export default ['i18n',
|
||||||
function(i18n, nestedGroupListState) {
|
function(i18n) {
|
||||||
return {
|
return {
|
||||||
|
|
||||||
addTitle: i18n._('CREATE HOST'),
|
addTitle: i18n._('CREATE HOST'),
|
||||||
@@ -120,8 +120,7 @@ function(i18n, nestedGroupListState) {
|
|||||||
include: "NestedGroupListDefinition",
|
include: "NestedGroupListDefinition",
|
||||||
includeForm: "NestedGroupFormDefinition",
|
includeForm: "NestedGroupFormDefinition",
|
||||||
title: i18n._('Groups'),
|
title: i18n._('Groups'),
|
||||||
iterator: 'nested_group',
|
iterator: 'nested_group'
|
||||||
listState: nestedGroupListState
|
|
||||||
},
|
},
|
||||||
insights: {
|
insights: {
|
||||||
name: 'insights',
|
name: 'insights',
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.groups.edit.nested_hosts",
|
||||||
|
url: "/nested_hosts?{nested_host_search:queryset}",
|
||||||
|
params: {
|
||||||
|
nested_host_search: {
|
||||||
|
value: {
|
||||||
|
page_size: "20",
|
||||||
|
order_by: "name"
|
||||||
|
},
|
||||||
|
dynamic: true,
|
||||||
|
squash: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.groups.edit",
|
||||||
|
label: N_("ASSOCIATED HOSTS")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
// 'related@inventories.edit.groups.edit': {
|
||||||
|
'related': {
|
||||||
|
templateProvider: function(NestedHostsListDefinition, generateList) {
|
||||||
|
let list = _.cloneDeep(NestedHostsListDefinition);
|
||||||
|
|
||||||
|
let html = generateList.build({
|
||||||
|
list: list,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
// Include the custom group delete modal template
|
||||||
|
// return $templateRequest(templateUrl('inventories/groups/list/groups-list')).then((template) => {
|
||||||
|
// return html.concat(template);
|
||||||
|
// });
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'NestedHostsListController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['NestedHostsListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
||||||
|
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
||||||
|
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
||||||
|
let path, interpolator;
|
||||||
|
if (GetBasePath(list.basePath)) {
|
||||||
|
path = GetBasePath(list.basePath);
|
||||||
|
} else {
|
||||||
|
interpolator = $interpolate(list.basePath);
|
||||||
|
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
||||||
|
}
|
||||||
|
path = `api/v2/groups/${$stateParams.group_id}/all_hosts`;
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
inventoryData: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
||||||
|
return InventoryManageService.getInventory($stateParams.inventory_id).then(res => res.data);
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -5,8 +5,8 @@
|
|||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
export default
|
export default
|
||||||
['$scope', '$state', '$stateParams', 'DashboardHostsForm', 'GenerateForm', 'ParseTypeChange', 'DashboardHostService', 'host',
|
['$scope', '$state', '$stateParams', 'DashboardHostsForm', 'GenerateForm', 'ParseTypeChange', 'DashboardHostService', 'host', '$rootScope',
|
||||||
function($scope, $state, $stateParams, DashboardHostsForm, GenerateForm, ParseTypeChange, DashboardHostService, host){
|
function($scope, $state, $stateParams, DashboardHostsForm, GenerateForm, ParseTypeChange, DashboardHostService, host, $rootScope){
|
||||||
$scope.parseType = 'yaml';
|
$scope.parseType = 'yaml';
|
||||||
$scope.formCancel = function(){
|
$scope.formCancel = function(){
|
||||||
$state.go('^', null, {reload: true});
|
$state.go('^', null, {reload: true});
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
};
|
};
|
||||||
var init = function(){
|
var init = function(){
|
||||||
$scope.host = host.data;
|
$scope.host = host.data;
|
||||||
$scope.name = host.data.name;
|
$rootScope.breadcrumb.host_name = host.data.name;
|
||||||
$scope.description = host.data.description;
|
$scope.description = host.data.description;
|
||||||
$scope.variables = getVars(host.data.variables);
|
$scope.variables = getVars(host.data.variables);
|
||||||
ParseTypeChange({
|
ParseTypeChange({
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
* @description This form is for adding/editing a host on the inventory page
|
* @description This form is for adding/editing a host on the inventory page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default ['i18n', 'nestedGroupListState',
|
export default ['i18n',
|
||||||
function(i18n, nestedGroupListState) {
|
function(i18n) {
|
||||||
return {
|
return {
|
||||||
|
|
||||||
addTitle: i18n._('CREATE HOST'),
|
addTitle: i18n._('CREATE HOST'),
|
||||||
@@ -115,12 +115,11 @@ function(i18n, nestedGroupListState) {
|
|||||||
name: 'nested_groups',
|
name: 'nested_groups',
|
||||||
awToolTip: i18n._('Please save before defining groups'),
|
awToolTip: i18n._('Please save before defining groups'),
|
||||||
dataPlacement: 'top',
|
dataPlacement: 'top',
|
||||||
ngClick: "groupsTab()",
|
ngClick: "$state.go('hosts.edit.nested_groups')",
|
||||||
include: "NestedGroupListDefinition",
|
include: "NestedGroupListDefinition",
|
||||||
includeForm: "NestedGroupFormDefinition",
|
includeForm: "NestedGroupFormDefinition",
|
||||||
title: i18n._('Groups'),
|
title: i18n._('Groups'),
|
||||||
iterator: 'nested_group',
|
iterator: 'nested_group'
|
||||||
listState: nestedGroupListState
|
|
||||||
},
|
},
|
||||||
insights: {
|
insights: {
|
||||||
name: 'insights',
|
name: 'insights',
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
export default ['i18n', 'buildHostListState', function(i18n, buildHostListState) {
|
export default ['i18n', function(i18n) {
|
||||||
return {
|
return {
|
||||||
|
|
||||||
addTitle: i18n._('NEW SMART INVENTORY'),
|
addTitle: i18n._('NEW SMART INVENTORY'),
|
||||||
@@ -139,10 +139,7 @@ export default ['i18n', 'buildHostListState', function(i18n, buildHostListState)
|
|||||||
name: 'hosts',
|
name: 'hosts',
|
||||||
include: "RelatedHostsListDefinition",
|
include: "RelatedHostsListDefinition",
|
||||||
title: i18n._('Hosts'),
|
title: i18n._('Hosts'),
|
||||||
iterator: 'host',
|
iterator: 'host'
|
||||||
listState: buildHostListState,
|
|
||||||
// addState: buildGroupsAddState,
|
|
||||||
// editState: buildGroupsEditState
|
|
||||||
},
|
},
|
||||||
//this is a placeholder for when we're ready for completed jobs
|
//this is a placeholder for when we're ready for completed jobs
|
||||||
completed_jobs: {
|
completed_jobs: {
|
||||||
|
|||||||
27
awx/ui/client/src/inventories/insights/insights.route.js
Normal file
27
awx/ui/client/src/inventories/insights/insights.route.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import {templateUrl} from '../../shared/template-url/template-url.factory';
|
||||||
|
import { N_ } from '../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
url: '/insights',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_("INSIGHTS")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'related': {
|
||||||
|
controller: 'InsightsController',
|
||||||
|
templateUrl: templateUrl('inventories/insights/insights')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Facts: ['$stateParams', 'GetBasePath', 'Rest',
|
||||||
|
function($stateParams, GetBasePath, Rest) {
|
||||||
|
let ansibleFactsUrl = GetBasePath('hosts') + $stateParams.host_id + '/ansible_facts';
|
||||||
|
Rest.setUrl(ansibleFactsUrl);
|
||||||
|
return Rest.get()
|
||||||
|
.success(function(data) {
|
||||||
|
return data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
34
awx/ui/client/src/inventories/inventories.route.js
Normal file
34
awx/ui/client/src/inventories/inventories.route.js
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import {templateUrl} from '../shared/template-url/template-url.factory';
|
||||||
|
import { N_ } from '../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'inventories', // top-most node in the generated tree (will replace this state definition)
|
||||||
|
route: '/inventories',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_('INVENTORIES')
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'@': {
|
||||||
|
templateUrl: templateUrl('inventories/inventories')
|
||||||
|
},
|
||||||
|
'list@inventories': {
|
||||||
|
templateProvider: function(InventoryList, generateList) {
|
||||||
|
let html = generateList.build({
|
||||||
|
list: InventoryList,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'InventoryListController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
searchPrefix: 'inventory',
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['InventoryList', 'QuerySet', '$stateParams', 'GetBasePath',
|
||||||
|
function(list, qs, $stateParams, GetBasePath) {
|
||||||
|
let path = GetBasePath(list.basePath) || GetBasePath(list.name);
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -10,15 +10,8 @@
|
|||||||
* @description This form is for adding/editing an inventory
|
* @description This form is for adding/editing an inventory
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default ['i18n', 'buildGroupsListState', 'buildGroupsAddState',
|
export default ['i18n', 'InventoryCompletedJobsList',
|
||||||
'buildGroupsEditState', 'buildHostListState', 'buildHostAddState',
|
function(i18n, InventoryCompletedJobsList) {
|
||||||
'buildHostEditState', 'buildSourcesListState', 'buildSourcesAddState',
|
|
||||||
'buildSourcesEditState', 'buildInventoryCompletedJobsState',
|
|
||||||
'InventoryCompletedJobsList',
|
|
||||||
function(i18n, buildGroupsListState, buildGroupsAddState, buildGroupsEditState,
|
|
||||||
buildHostListState, buildHostAddState, buildHostEditState,
|
|
||||||
buildSourcesListState, buildSourcesAddState,buildSourcesEditState,
|
|
||||||
buildInventoryCompletedJobsState, InventoryCompletedJobsList) {
|
|
||||||
|
|
||||||
var completed_jobs_object = {
|
var completed_jobs_object = {
|
||||||
name: 'completed_jobs',
|
name: 'completed_jobs',
|
||||||
@@ -28,7 +21,7 @@ function(i18n, buildGroupsListState, buildGroupsAddState, buildGroupsEditState,
|
|||||||
title: i18n._('Completed Jobs'),
|
title: i18n._('Completed Jobs'),
|
||||||
iterator: 'completed_job',
|
iterator: 'completed_job',
|
||||||
generateList: true,
|
generateList: true,
|
||||||
listState: buildInventoryCompletedJobsState,
|
skipGenerator: true,
|
||||||
search: {
|
search: {
|
||||||
"or__job__inventory": ''
|
"or__job__inventory": ''
|
||||||
}
|
}
|
||||||
@@ -164,9 +157,7 @@ function(i18n, buildGroupsListState, buildGroupsAddState, buildGroupsEditState,
|
|||||||
include: "GroupList",
|
include: "GroupList",
|
||||||
title: i18n._('Groups'),
|
title: i18n._('Groups'),
|
||||||
iterator: 'group',
|
iterator: 'group',
|
||||||
listState: buildGroupsListState,
|
skipGenerator: true
|
||||||
addState: buildGroupsAddState,
|
|
||||||
editState: buildGroupsEditState
|
|
||||||
},
|
},
|
||||||
hosts: {
|
hosts: {
|
||||||
name: 'hosts',
|
name: 'hosts',
|
||||||
@@ -175,9 +166,7 @@ function(i18n, buildGroupsListState, buildGroupsAddState, buildGroupsEditState,
|
|||||||
include: "RelatedHostsListDefinition",
|
include: "RelatedHostsListDefinition",
|
||||||
title: i18n._('Hosts'),
|
title: i18n._('Hosts'),
|
||||||
iterator: 'host',
|
iterator: 'host',
|
||||||
listState: buildHostListState,
|
skipGenerator: true
|
||||||
addState: buildHostAddState,
|
|
||||||
editState: buildHostEditState
|
|
||||||
},
|
},
|
||||||
inventory_sources: {
|
inventory_sources: {
|
||||||
name: 'inventory_sources',
|
name: 'inventory_sources',
|
||||||
@@ -187,9 +176,7 @@ function(i18n, buildGroupsListState, buildGroupsAddState, buildGroupsEditState,
|
|||||||
includeForm: "SourcesFormDefinition",
|
includeForm: "SourcesFormDefinition",
|
||||||
title: i18n._('Sources'),
|
title: i18n._('Sources'),
|
||||||
iterator: 'inventory_source',
|
iterator: 'inventory_source',
|
||||||
listState: buildSourcesListState,
|
skipGenerator: true
|
||||||
addState: buildSourcesAddState,
|
|
||||||
editState: buildSourcesEditState
|
|
||||||
},
|
},
|
||||||
completed_jobs: completed_jobs_object
|
completed_jobs: completed_jobs_object
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,29 @@ import ansibleFacts from './ansible_facts/main';
|
|||||||
import insights from './insights/main';
|
import insights from './insights/main';
|
||||||
import { copyMoveGroupRoute, copyMoveHostRoute } from './copy-move/copy-move.route';
|
import { copyMoveGroupRoute, copyMoveHostRoute } from './copy-move/copy-move.route';
|
||||||
import copyMove from './copy-move/main';
|
import copyMove from './copy-move/main';
|
||||||
|
import inventoryCompletedJobsRoute from './completed_jobs/completed_jobs.route';
|
||||||
|
import inventorySourceEditRoute from './sources/edit/sources-edit.route';
|
||||||
|
import inventorySourceAddRoute from './sources/add/sources-add.route';
|
||||||
|
import inventorySourceListRoute from './sources/list/sources-list.route';
|
||||||
|
import inventorySourceListScheduleRoute from './sources/list/schedule/sources-schedule.route';
|
||||||
|
import inventorySourceListScheduleAddRoute from './sources/list/schedule/sources-schedule-add.route';
|
||||||
|
import inventorySourceListScheduleEditRoute from './sources/list/schedule/sources-schedule-edit.route';
|
||||||
|
import inventoryAdhocCredential from './adhoc/adhoc-credential.route';
|
||||||
|
import inventoryGroupsList from './groups/list/groups-list.route';
|
||||||
|
import inventoryGroupsAdd from './groups/add/groups-add.route';
|
||||||
|
import inventoryGroupsEdit from './groups/edit/groups-edit.route';
|
||||||
|
import nestedGroups from './groups/nested-groups/nested-groups.route';
|
||||||
|
import nestedGroupsAdd from './groups/nested-groups/nested-groups-add.route';
|
||||||
|
import nestedHosts from './groups/nested-hosts/nested-hosts.route';
|
||||||
|
import inventoryHosts from './related-hosts/related-host.route';
|
||||||
|
import inventoriesList from './inventories.route';
|
||||||
|
import inventoryHostsAdd from './related-hosts/add/host-add.route';
|
||||||
|
import inventoryHostsEdit from './related-hosts/edit/host-edit.route';
|
||||||
|
import nestedHostsAdd from './groups/nested-hosts/nested-hosts-add.route';
|
||||||
|
import nestedHostsEdit from './groups/nested-hosts/nested-hosts-edit.route';
|
||||||
|
import ansibleFactsRoute from './ansible_facts/ansible_facts.route';
|
||||||
|
import insightsRoute from './insights/insights.route';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('inventory', [
|
angular.module('inventory', [
|
||||||
adhoc.name,
|
adhoc.name,
|
||||||
@@ -46,62 +69,6 @@ angular.module('inventory', [
|
|||||||
let stateDefinitions = stateDefinitionsProvider.$get(),
|
let stateDefinitions = stateDefinitionsProvider.$get(),
|
||||||
stateExtender = $stateExtenderProvider.$get();
|
stateExtender = $stateExtenderProvider.$get();
|
||||||
|
|
||||||
function factsConfig(stateName) {
|
|
||||||
return {
|
|
||||||
name: stateName,
|
|
||||||
url: '/ansible_facts',
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
label: N_("FACTS")
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'related': {
|
|
||||||
controller: 'AnsibleFactsController',
|
|
||||||
templateUrl: templateUrl('inventories/ansible_facts/ansible_facts')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
Facts: ['$stateParams', 'GetBasePath', 'Rest',
|
|
||||||
function($stateParams, GetBasePath, Rest) {
|
|
||||||
let ansibleFactsUrl = GetBasePath('hosts') + $stateParams.host_id + '/ansible_facts';
|
|
||||||
Rest.setUrl(ansibleFactsUrl);
|
|
||||||
return Rest.get()
|
|
||||||
.success(function(data) {
|
|
||||||
return data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function insightsConfig(stateName) {
|
|
||||||
return {
|
|
||||||
name: stateName,
|
|
||||||
url: '/insights',
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
label: N_("INSIGHTS")
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'related': {
|
|
||||||
controller: 'InsightsController',
|
|
||||||
templateUrl: templateUrl('inventories/insights/insights')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
Facts: ['$stateParams', 'GetBasePath', 'Rest',
|
|
||||||
function($stateParams, GetBasePath, Rest) {
|
|
||||||
let ansibleFactsUrl = GetBasePath('hosts') + $stateParams.host_id + '/ansible_facts';
|
|
||||||
Rest.setUrl(ansibleFactsUrl);
|
|
||||||
return Rest.get()
|
|
||||||
.success(function(data) {
|
|
||||||
return data;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function generateInventoryStates() {
|
function generateInventoryStates() {
|
||||||
|
|
||||||
let basicInventoryAdd = stateDefinitions.generateTree({
|
let basicInventoryAdd = stateDefinitions.generateTree({
|
||||||
@@ -121,6 +88,9 @@ angular.module('inventory', [
|
|||||||
form: 'InventoryForm',
|
form: 'InventoryForm',
|
||||||
controllers: {
|
controllers: {
|
||||||
edit: 'InventoryEditController'
|
edit: 'InventoryEditController'
|
||||||
|
},
|
||||||
|
breadcrumbs: {
|
||||||
|
edit: '{{breadcrumb.inventory_name}}'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -144,151 +114,38 @@ angular.module('inventory', [
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let adhocCredentialLookup = {
|
let inventoryGroupsEditNestedGroups = _.cloneDeep(nestedGroups);
|
||||||
searchPrefix: 'credential',
|
inventoryGroupsEditNestedGroups.name = "inventories.edit.groups.edit.nested_groups";
|
||||||
name: 'inventories.edit.adhoc.credential',
|
inventoryGroupsEditNestedGroups.ncyBreadcrumb = {
|
||||||
url: '/credential',
|
parent: "inventories.edit.groups.edit",
|
||||||
data: {
|
label: "ASSOCIATED GROUPS"
|
||||||
formChildState: true
|
|
||||||
},
|
|
||||||
params: {
|
|
||||||
credential_search: {
|
|
||||||
value: {
|
|
||||||
page_size: '5'
|
|
||||||
},
|
|
||||||
squash: true,
|
|
||||||
dynamic: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
skip: true
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'related': {
|
|
||||||
templateProvider: function(ListDefinition, generateList) {
|
|
||||||
let list_html = generateList.build({
|
|
||||||
mode: 'lookup',
|
|
||||||
list: ListDefinition,
|
|
||||||
input_type: 'radio'
|
|
||||||
});
|
|
||||||
return `<lookup-modal>${list_html}</lookup-modal>`;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
ListDefinition: ['CredentialList', function(CredentialList) {
|
|
||||||
let list = _.cloneDeep(CredentialList);
|
|
||||||
list.lookupConfirmText = 'SELECT';
|
|
||||||
return list;
|
|
||||||
}],
|
|
||||||
Dataset: ['ListDefinition', 'QuerySet', '$stateParams', 'GetBasePath',
|
|
||||||
(list, qs, $stateParams, GetBasePath) => {
|
|
||||||
let path = GetBasePath(list.name) || GetBasePath(list.basePath);
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
onExit: function($state) {
|
|
||||||
if ($state.transition) {
|
|
||||||
$('#form-modal').modal('hide');
|
|
||||||
$('.modal-backdrop').remove();
|
|
||||||
$('body').removeClass('modal-open');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let listSchedules = {
|
let inventoryGroupsEditNestedHostsEditGroups = _.cloneDeep(nestedGroups);
|
||||||
name: 'inventories.edit.inventory_sources.edit.schedules',
|
inventoryGroupsEditNestedHostsEditGroups.name = "inventories.edit.groups.edit.nested_hosts.edit.nested_groups";
|
||||||
url: '/schedules',
|
inventoryGroupsEditNestedHostsEditGroups.ncyBreadcrumb = {
|
||||||
searchPrefix: 'schedule',
|
parent: "inventories.edit.groups.edit.nested_hosts.edit",
|
||||||
ncyBreadcrumb: {
|
label: "ASSOCIATED GROUPS"
|
||||||
label: N_('SCHEDULES')
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath', 'inventorySourceData',
|
|
||||||
function(list, qs, $stateParams, GetBasePath, inventorySourceData) {
|
|
||||||
let path = `${inventorySourceData.related.schedules}`;
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
ParentObject: ['inventorySourceData', function(inventorySourceData) {
|
|
||||||
return inventorySourceData;
|
|
||||||
}],
|
|
||||||
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', 'inventorySourceData',
|
|
||||||
(SchedulesList, inventorySourceData) => {
|
|
||||||
let list = _.cloneDeep(SchedulesList);
|
|
||||||
list.basePath = `${inventorySourceData.related.schedules}`;
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
// clear form template when views render in this substate
|
|
||||||
'form': {
|
|
||||||
templateProvider: () => ''
|
|
||||||
},
|
|
||||||
// target the un-named ui-view @ root level
|
|
||||||
'@': {
|
|
||||||
templateProvider: function(ScheduleList, generateList, ParentObject) {
|
|
||||||
// include name of parent resource in listTitle
|
|
||||||
ScheduleList.listTitle = `${ParentObject.name}<div class='List-titleLockup'></div>` + N_('SCHEDULES');
|
|
||||||
let html = generateList.build({
|
|
||||||
list: ScheduleList,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
html = generateList.wrapPanel(html);
|
|
||||||
return "<div class='InventoryManage-container'>" + generateList.insertFormView() + html + "</div>";
|
|
||||||
},
|
|
||||||
controller: 'schedulerListController'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let addSchedule = {
|
let inventoryHostsEditGroups = _.cloneDeep(nestedGroups);
|
||||||
name: 'inventories.edit.inventory_sources.edit.schedules.add',
|
inventoryHostsEditGroups.name = "inventories.edit.hosts.edit.nested_groups";
|
||||||
url: '/add',
|
inventoryHostsEditGroups.ncyBreadcrumb = {
|
||||||
ncyBreadcrumb: {
|
parent: "inventories.edit.hosts.edit",
|
||||||
label: N_("CREATE SCHEDULE")
|
label: "ASSOCIATED GROUPS"
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'form': {
|
|
||||||
controller: 'schedulerAddController',
|
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let editSchedule = {
|
let relatedHostsAnsibleFacts = _.cloneDeep(ansibleFactsRoute);
|
||||||
name: 'inventories.edit.inventory_sources.edit.schedules.edit',
|
relatedHostsAnsibleFacts.name = 'inventories.edit.hosts.edit.ansible_facts';
|
||||||
url: '/:schedule_id',
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
label: "{{schedule_obj.name}}"
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'form': {
|
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm"),
|
|
||||||
controller: 'schedulerEditController',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let relatedHostsAnsibleFacts = factsConfig('inventories.edit.hosts.edit.ansible_facts');
|
let nestedHostsAnsibleFacts = _.cloneDeep(ansibleFactsRoute);
|
||||||
let nestedHostsAnsibleFacts = factsConfig('inventories.edit.groups.edit.nested_hosts.edit.ansible_facts');
|
nestedHostsAnsibleFacts.name = 'inventories.edit.groups.edit.nested_hosts.edit.ansible_facts';
|
||||||
let relatedHostsInsights = insightsConfig('inventories.edit.hosts.edit.insights');
|
|
||||||
let nestedHostsInsights = insightsConfig('inventories.edit.groups.edit.nested_hosts.edit.insights');
|
let relatedHostsInsights = _.cloneDeep(insightsRoute);
|
||||||
|
relatedHostsInsights.name = 'inventories.edit.hosts.edit.insights';
|
||||||
|
|
||||||
|
let nestedHostsInsights = _.cloneDeep(insightsRoute);
|
||||||
|
nestedHostsInsights.name = 'inventories.edit.groups.edit.nested_hosts.edit.insights';
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
basicInventoryAdd,
|
basicInventoryAdd,
|
||||||
@@ -300,48 +157,35 @@ angular.module('inventory', [
|
|||||||
states: _.reduce(generated, (result, definition) => {
|
states: _.reduce(generated, (result, definition) => {
|
||||||
return result.concat(definition.states);
|
return result.concat(definition.states);
|
||||||
}, [
|
}, [
|
||||||
stateExtender.buildDefinition({
|
stateExtender.buildDefinition(inventoriesList),
|
||||||
name: 'inventories', // top-most node in the generated tree (will replace this state definition)
|
|
||||||
route: '/inventories',
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
label: N_('INVENTORIES')
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'@': {
|
|
||||||
templateUrl: templateUrl('inventories/inventories')
|
|
||||||
},
|
|
||||||
'list@inventories': {
|
|
||||||
templateProvider: function(InventoryList, generateList) {
|
|
||||||
let html = generateList.build({
|
|
||||||
list: InventoryList,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
return html;
|
|
||||||
},
|
|
||||||
controller: 'InventoryListController'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
searchPrefix: 'inventory',
|
|
||||||
resolve: {
|
|
||||||
Dataset: ['InventoryList', 'QuerySet', '$stateParams', 'GetBasePath',
|
|
||||||
function(list, qs, $stateParams, GetBasePath) {
|
|
||||||
let path = GetBasePath(list.basePath) || GetBasePath(list.name);
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
stateExtender.buildDefinition(adHocRoute),
|
stateExtender.buildDefinition(adHocRoute),
|
||||||
stateExtender.buildDefinition(adhocCredentialLookup),
|
stateExtender.buildDefinition(inventoryAdhocCredential),
|
||||||
stateExtender.buildDefinition(listSchedules),
|
stateExtender.buildDefinition(inventorySourceListScheduleRoute),
|
||||||
stateExtender.buildDefinition(addSchedule),
|
stateExtender.buildDefinition(inventorySourceListScheduleAddRoute),
|
||||||
stateExtender.buildDefinition(editSchedule),
|
stateExtender.buildDefinition(inventorySourceListScheduleEditRoute),
|
||||||
stateExtender.buildDefinition(relatedHostsAnsibleFacts),
|
stateExtender.buildDefinition(relatedHostsAnsibleFacts),
|
||||||
stateExtender.buildDefinition(nestedHostsAnsibleFacts),
|
stateExtender.buildDefinition(nestedHostsAnsibleFacts),
|
||||||
stateExtender.buildDefinition(relatedHostsInsights),
|
stateExtender.buildDefinition(relatedHostsInsights),
|
||||||
stateExtender.buildDefinition(nestedHostsInsights),
|
stateExtender.buildDefinition(nestedHostsInsights),
|
||||||
stateExtender.buildDefinition(copyMoveGroupRoute),
|
stateExtender.buildDefinition(copyMoveGroupRoute),
|
||||||
stateExtender.buildDefinition(copyMoveHostRoute)
|
stateExtender.buildDefinition(copyMoveHostRoute),
|
||||||
|
stateExtender.buildDefinition(inventoryGroupsList),
|
||||||
|
stateExtender.buildDefinition(inventoryGroupsAdd),
|
||||||
|
stateExtender.buildDefinition(inventoryGroupsEdit),
|
||||||
|
stateExtender.buildDefinition(inventoryGroupsEditNestedGroups),
|
||||||
|
stateExtender.buildDefinition(nestedGroupsAdd),
|
||||||
|
stateExtender.buildDefinition(nestedHosts),
|
||||||
|
stateExtender.buildDefinition(nestedHostsAdd),
|
||||||
|
stateExtender.buildDefinition(nestedHostsEdit),
|
||||||
|
stateExtender.buildDefinition(inventoryGroupsEditNestedHostsEditGroups),
|
||||||
|
stateExtender.buildDefinition(inventoryHosts),
|
||||||
|
stateExtender.buildDefinition(inventoryHostsAdd),
|
||||||
|
stateExtender.buildDefinition(inventoryHostsEdit),
|
||||||
|
stateExtender.buildDefinition(inventoryHostsEditGroups),
|
||||||
|
stateExtender.buildDefinition(inventorySourceListRoute),
|
||||||
|
stateExtender.buildDefinition(inventorySourceAddRoute),
|
||||||
|
stateExtender.buildDefinition(inventorySourceEditRoute),
|
||||||
|
stateExtender.buildDefinition(inventoryCompletedJobsRoute)
|
||||||
])
|
])
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@@ -358,6 +202,9 @@ angular.module('inventory', [
|
|||||||
list: 'HostListController',
|
list: 'HostListController',
|
||||||
edit: 'HostEditController'
|
edit: 'HostEditController'
|
||||||
},
|
},
|
||||||
|
breadcrumbs: {
|
||||||
|
edit: '{{breadcrumb.host_name}}'
|
||||||
|
},
|
||||||
urls: {
|
urls: {
|
||||||
list: '/hosts'
|
list: '/hosts'
|
||||||
},
|
},
|
||||||
@@ -392,8 +239,18 @@ angular.module('inventory', [
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let hostAnsibleFacts = factsConfig('hosts.edit.ansible_facts');
|
let hostAnsibleFacts = _.cloneDeep(ansibleFactsRoute);
|
||||||
let hostInsights = insightsConfig('hosts.edit.insights');
|
hostAnsibleFacts.name = 'hosts.edit.ansible_facts';
|
||||||
|
|
||||||
|
let hostInsights = _.cloneDeep(insightsRoute);
|
||||||
|
hostInsights.name = 'hosts.edit.insights';
|
||||||
|
|
||||||
|
let hostsEditGroups = _.cloneDeep(nestedGroups);
|
||||||
|
hostsEditGroups.name = "hosts.edit.nested_groups";
|
||||||
|
hostsEditGroups.ncyBreadcrumb = {
|
||||||
|
parent: "hosts.edit",
|
||||||
|
label: "ASSOCIATED GROUPS"
|
||||||
|
};
|
||||||
|
|
||||||
return Promise.all([
|
return Promise.all([
|
||||||
hostTree
|
hostTree
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
import RelatedHostAddController from './host-add.controller';
|
|
||||||
|
|
||||||
export default ['$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function($stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition, params) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s.add`,
|
|
||||||
url: `/add`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'hostForm@inventories': {
|
|
||||||
templateProvider: function(GenerateForm, RelatedHostsFormDefinition) {
|
|
||||||
let form = RelatedHostsFormDefinition;
|
|
||||||
return GenerateForm.buildHTML(form, {
|
|
||||||
mode: 'add',
|
|
||||||
related: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
controller: RelatedHostAddController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
'FormDefinition': [params.form, function(definition) {
|
|
||||||
return definition;
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.hosts.add",
|
||||||
|
url: "/add",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.hosts",
|
||||||
|
label: N_("CREATE HOST")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'hostForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, RelatedHostsFormDefinition) {
|
||||||
|
let form = RelatedHostsFormDefinition;
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'add',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'RelatedHostAddController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -4,10 +4,8 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import buildHostAddState from './build-host-add-state.factory';
|
|
||||||
import controller from './host-add.controller';
|
import controller from './host-add.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('relatedHostsAdd', [])
|
angular.module('relatedHostsAdd', [])
|
||||||
.factory('buildHostAddState', buildHostAddState)
|
|
||||||
.controller('RelatedHostAddController', controller);
|
.controller('RelatedHostAddController', controller);
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
import RelatedHostEditController from './host-edit.controller';
|
|
||||||
|
|
||||||
export default ['$stateExtender', 'templateUrl', '$injector',
|
|
||||||
'RelatedHostsFormDefinition', 'NestedHostsFormDefinition',
|
|
||||||
'nestedGroupListState',
|
|
||||||
function($stateExtender, templateUrl, $injector,
|
|
||||||
RelatedHostsFormDefinition, NestedHostsFormDefinition,
|
|
||||||
nestedGroupListState){
|
|
||||||
var val = function(field, formStateDefinition, params) {
|
|
||||||
let state, states = [],
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s.edit`,
|
|
||||||
url: `/edit/:host_id`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'hostForm@inventories': {
|
|
||||||
templateProvider: function(GenerateForm, RelatedHostsFormDefinition, NestedHostsFormDefinition, $stateParams) {
|
|
||||||
let form = RelatedHostsFormDefinition;
|
|
||||||
if($stateParams.group_id){
|
|
||||||
form = NestedHostsFormDefinition;
|
|
||||||
}
|
|
||||||
return GenerateForm.buildHTML(form, {
|
|
||||||
mode: 'edit',
|
|
||||||
related: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
controller: RelatedHostEditController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
'FormDefinition': [params.form, function(definition) {
|
|
||||||
return definition;
|
|
||||||
}],
|
|
||||||
host: ['$stateParams', 'HostManageService', function($stateParams, HostManageService) {
|
|
||||||
return HostManageService.get({ id: $stateParams.host_id }).then(function(res) {
|
|
||||||
return res.data.results[0];
|
|
||||||
});
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var relatedGroupListState;
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
if(stateConfig.name === "inventories.edit.groups.edit.nested_hosts.edit"){
|
|
||||||
relatedGroupListState = nestedGroupListState(NestedHostsFormDefinition.related.nested_groups, state, params);
|
|
||||||
relatedGroupListState = $stateExtender.buildDefinition(relatedGroupListState);
|
|
||||||
states.push(state, relatedGroupListState);
|
|
||||||
return states;
|
|
||||||
}
|
|
||||||
if(stateConfig.name === "inventories.edit.hosts.edit"){
|
|
||||||
relatedGroupListState = nestedGroupListState(RelatedHostsFormDefinition.related.nested_groups, state, params);
|
|
||||||
relatedGroupListState = $stateExtender.buildDefinition(relatedGroupListState);
|
|
||||||
states.push(state, relatedGroupListState);
|
|
||||||
return states;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
export default {
|
||||||
|
name: "inventories.edit.hosts.edit",
|
||||||
|
url: "/edit/:host_id",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.hosts",
|
||||||
|
label: "HOSTS"
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'hostForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, RelatedHostsFormDefinition, NestedHostsFormDefinition, $stateParams) {
|
||||||
|
let form = RelatedHostsFormDefinition;
|
||||||
|
if($stateParams.group_id){
|
||||||
|
form = NestedHostsFormDefinition;
|
||||||
|
}
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'edit',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'RelatedHostEditController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
host: ['$stateParams', 'HostManageService', function($stateParams, HostManageService) {
|
||||||
|
return HostManageService.get({ id: $stateParams.host_id }).then(function(res) {
|
||||||
|
return res.data.results[0];
|
||||||
|
});
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -3,10 +3,8 @@
|
|||||||
*
|
*
|
||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
import buildHostEditState from './build-host-edit-state.factory';
|
|
||||||
import controller from './host-edit.controller';
|
import controller from './host-edit.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('relatedHostEdit', [])
|
angular.module('relatedHostEdit', [])
|
||||||
.factory('buildHostEditState', buildHostEditState)
|
|
||||||
.controller('RelatedHostEditController', controller);
|
.controller('RelatedHostEditController', controller);
|
||||||
|
|||||||
@@ -1,89 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
import RelatedHostListController from './host-list.controller';
|
|
||||||
export default ['RelatedHostsListDefinition', '$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function(RelatedHostsListDefinition, $stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
searchPrefix: `${list.iterator}`,
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s`,
|
|
||||||
url: `/${list.iterator}s`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
params: {
|
|
||||||
[list.iterator + '_search']: {
|
|
||||||
value: { order_by: field.order_by ? field.order_by : 'name' }
|
|
||||||
},
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'related': {
|
|
||||||
templateProvider: function(RelatedHostsListDefinition, generateList, $stateParams, GetBasePath) {
|
|
||||||
let list = _.cloneDeep(RelatedHostsListDefinition);
|
|
||||||
if($stateParams && $stateParams.group) {
|
|
||||||
list.basePath = GetBasePath('groups') + _.last($stateParams.group) + '/all_hosts';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//reaches here if the user is on the root level group
|
|
||||||
list.basePath = GetBasePath('inventory') + $stateParams.inventory_id + '/hosts';
|
|
||||||
}
|
|
||||||
let html = generateList.build({
|
|
||||||
list: list,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
return html;
|
|
||||||
},
|
|
||||||
controller: RelatedHostListController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
ListDefinition: () => {
|
|
||||||
return list;
|
|
||||||
},
|
|
||||||
Dataset: ['ListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
|
||||||
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
|
||||||
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
|
||||||
let path, interpolator;
|
|
||||||
if (GetBasePath(list.basePath)) {
|
|
||||||
path = GetBasePath(list.basePath);
|
|
||||||
} else {
|
|
||||||
interpolator = $interpolate(list.basePath);
|
|
||||||
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
|
||||||
}
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
hostsUrl: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
|
||||||
return $stateParams.group && $stateParams.group.length > 0 ?
|
|
||||||
// nested context - provide all hosts managed by nodes
|
|
||||||
InventoryManageService.childHostsUrl(_.last($stateParams.group)) :
|
|
||||||
// root context - provide all hosts in an inventory
|
|
||||||
InventoryManageService.rootHostsUrl($stateParams.inventory_id);
|
|
||||||
}],
|
|
||||||
hostsDataset: ['RelatedHostsListDefinition', 'QuerySet', '$stateParams', 'hostsUrl', (list, qs, $stateParams, hostsUrl) => {
|
|
||||||
let path = hostsUrl;
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}],
|
|
||||||
inventoryData: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
|
||||||
return InventoryManageService.getInventory($stateParams.inventory_id).then(res => res.data);
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
// appy any default search parameters in form definition
|
|
||||||
if (field.search) {
|
|
||||||
state.params[`${field.iterator}_search`].value = _.merge(state.params[`${field.iterator}_search`].value, field.search);
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -4,10 +4,8 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import buildHostListState from './build-host-list-state.factory';
|
|
||||||
import RelatedHostListController from './host-list.controller';
|
import RelatedHostListController from './host-list.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('relatedHostList', [])
|
angular.module('relatedHostList', [])
|
||||||
.factory('buildHostListState', buildHostListState)
|
|
||||||
.controller('RelatedHostListController', RelatedHostListController);
|
.controller('RelatedHostListController', RelatedHostListController);
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
* @description This form is for adding/editing a host on the inventory page
|
* @description This form is for adding/editing a host on the inventory page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default ['i18n', 'nestedGroupListState',
|
export default ['i18n',
|
||||||
function(i18n,nestedGroupListState) {
|
function(i18n) {
|
||||||
return {
|
return {
|
||||||
|
|
||||||
addTitle: i18n._('CREATE HOST'),
|
addTitle: i18n._('CREATE HOST'),
|
||||||
@@ -120,8 +120,7 @@ function(i18n,nestedGroupListState) {
|
|||||||
include: "NestedGroupListDefinition",
|
include: "NestedGroupListDefinition",
|
||||||
includeForm: "NestedGroupFormDefinition",
|
includeForm: "NestedGroupFormDefinition",
|
||||||
title: i18n._('Groups'),
|
title: i18n._('Groups'),
|
||||||
iterator: 'nested_group',
|
iterator: 'nested_group'
|
||||||
listState: nestedGroupListState
|
|
||||||
},
|
},
|
||||||
insights: {
|
insights: {
|
||||||
name: 'insights',
|
name: 'insights',
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
import { N_ } from '../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.hosts",
|
||||||
|
url: "/hosts?{host_search:queryset}",
|
||||||
|
params: {
|
||||||
|
host_search: {
|
||||||
|
value: {
|
||||||
|
page_size: "20",
|
||||||
|
order_by: "name"
|
||||||
|
},
|
||||||
|
dynamic: true,
|
||||||
|
squash:""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit",
|
||||||
|
label: N_("HOSTS")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'related': {
|
||||||
|
templateProvider: function(RelatedHostsListDefinition, generateList, $stateParams, GetBasePath) {
|
||||||
|
let list = _.cloneDeep(RelatedHostsListDefinition);
|
||||||
|
if($stateParams && $stateParams.group) {
|
||||||
|
list.basePath = GetBasePath('groups') + _.last($stateParams.group) + '/all_hosts';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//reaches here if the user is on the root level group
|
||||||
|
list.basePath = GetBasePath('inventory') + $stateParams.inventory_id + '/hosts';
|
||||||
|
}
|
||||||
|
let html = generateList.build({
|
||||||
|
list: list,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'RelatedHostListController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['RelatedHostsListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
||||||
|
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
||||||
|
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
||||||
|
let path, interpolator;
|
||||||
|
if (GetBasePath(list.basePath)) {
|
||||||
|
path = GetBasePath(list.basePath);
|
||||||
|
} else {
|
||||||
|
interpolator = $interpolate(list.basePath);
|
||||||
|
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
||||||
|
}
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
hostsUrl: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
||||||
|
return $stateParams.group && $stateParams.group.length > 0 ?
|
||||||
|
// nested context - provide all hosts managed by nodes
|
||||||
|
InventoryManageService.childHostsUrl(_.last($stateParams.group)) :
|
||||||
|
// root context - provide all hosts in an inventory
|
||||||
|
InventoryManageService.rootHostsUrl($stateParams.inventory_id);
|
||||||
|
}],
|
||||||
|
hostsDataset: ['RelatedHostsListDefinition', 'QuerySet', '$stateParams', 'hostsUrl', (list, qs, $stateParams, hostsUrl) => {
|
||||||
|
let path = hostsUrl;
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}],
|
||||||
|
inventoryData: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
||||||
|
return InventoryManageService.getInventory($stateParams.inventory_id).then(res => res.data);
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
import SourcesAddController from './sources-add.controller';
|
|
||||||
|
|
||||||
export default ['$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function($stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition, params) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s.add`,
|
|
||||||
url: `/add`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'sourcesForm@inventories': {
|
|
||||||
templateProvider: function(GenerateForm, SourcesFormDefinition) {
|
|
||||||
let form = SourcesFormDefinition;
|
|
||||||
return GenerateForm.buildHTML(form, {
|
|
||||||
mode: 'add',
|
|
||||||
related: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
controller: SourcesAddController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
'FormDefinition': [params.form, function(definition) {
|
|
||||||
return definition;
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -4,10 +4,8 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import buildSourcesAddState from './build-sources-add-state.factory';
|
|
||||||
import controller from './sources-add.controller';
|
import controller from './sources-add.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('sourcesAdd', [])
|
angular.module('sourcesAdd', [])
|
||||||
.factory('buildSourcesAddState', buildSourcesAddState)
|
|
||||||
.controller('SourcesAddController', controller);
|
.controller('SourcesAddController', controller);
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.inventory_sources.add",
|
||||||
|
url: "/add",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.inventory_sources",
|
||||||
|
label: N_("CREATE INVENTORY SOURCE")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'sourcesForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, SourcesFormDefinition) {
|
||||||
|
let form = SourcesFormDefinition;
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'add',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'SourcesAddController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
|
|
||||||
import SourcesEditController from './sources-edit.controller';
|
|
||||||
|
|
||||||
export default ['$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function($stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition, params) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s.edit`,
|
|
||||||
url: `/edit/:inventory_source_id`,
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'groupForm@inventories': {
|
|
||||||
templateProvider: function(GenerateForm, SourcesFormDefinition) {
|
|
||||||
let form = SourcesFormDefinition;
|
|
||||||
return GenerateForm.buildHTML(form, {
|
|
||||||
mode: 'edit',
|
|
||||||
related: false
|
|
||||||
});
|
|
||||||
},
|
|
||||||
controller: SourcesEditController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
'FormDefinition': [params.form, function(definition) {
|
|
||||||
return definition;
|
|
||||||
}],
|
|
||||||
inventorySourceData: ['$stateParams', 'SourcesService', function($stateParams, SourcesService) {
|
|
||||||
return SourcesService.get({id: $stateParams.inventory_source_id }).then(res => res.data.results[0]);
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -4,10 +4,8 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import buildSourcesEditState from './build-sources-edit-state.factory';
|
|
||||||
import controller from './sources-edit.controller';
|
import controller from './sources-edit.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('sourcesEdit', [])
|
angular.module('sourcesEdit', [])
|
||||||
.factory('buildSourcesEditState', buildSourcesEditState)
|
|
||||||
.controller('SourcesEditController', controller);
|
.controller('SourcesEditController', controller);
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.inventory_sources.edit",
|
||||||
|
url: "/edit/:inventory_source_id",
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit.inventory_sources",
|
||||||
|
label: N_("INVENTORY SOURCES")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'groupForm@inventories': {
|
||||||
|
templateProvider: function(GenerateForm, SourcesFormDefinition) {
|
||||||
|
let form = SourcesFormDefinition;
|
||||||
|
return GenerateForm.buildHTML(form, {
|
||||||
|
mode: 'edit',
|
||||||
|
related: false
|
||||||
|
});
|
||||||
|
},
|
||||||
|
controller: 'SourcesEditController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
inventorySourceData: ['$stateParams', 'SourcesService', function($stateParams, SourcesService) {
|
||||||
|
return SourcesService.get({id: $stateParams.inventory_source_id }).then(res => res.data.results[0]);
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
/*************************************************
|
|
||||||
* Copyright (c) 2017 Ansible, Inc.
|
|
||||||
*
|
|
||||||
* All Rights Reserved
|
|
||||||
*************************************************/
|
|
||||||
import SourcesListController from './sources-list.controller';
|
|
||||||
export default ['SourcesListDefinition', '$stateExtender', 'templateUrl', '$injector',
|
|
||||||
function(SourcesListDefinition, $stateExtender, templateUrl, $injector){
|
|
||||||
var val = function(field, formStateDefinition) {
|
|
||||||
let state,
|
|
||||||
list = field.include ? $injector.get(field.include) : field,
|
|
||||||
breadcrumbLabel = (field.iterator.replace('_', ' ') + 's').toUpperCase(),
|
|
||||||
stateConfig = {
|
|
||||||
searchPrefix: `${list.iterator}`,
|
|
||||||
name: `${formStateDefinition.name}.${list.iterator}s`,
|
|
||||||
url: `/${list.iterator}s`,
|
|
||||||
data: {
|
|
||||||
socket: {
|
|
||||||
"groups": {
|
|
||||||
"jobs": ["status_changed"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: `${formStateDefinition.name}`,
|
|
||||||
label: `${breadcrumbLabel}`
|
|
||||||
},
|
|
||||||
params: {
|
|
||||||
[list.iterator + '_search']: {
|
|
||||||
value: { order_by: field.order_by ? field.order_by : 'name' }
|
|
||||||
},
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'related': {
|
|
||||||
templateProvider: function(SourcesListDefinition, generateList) {
|
|
||||||
let list = _.cloneDeep(SourcesListDefinition);
|
|
||||||
let html = generateList.build({
|
|
||||||
list: list,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
// Include the custom group delete modal template
|
|
||||||
// return $templateRequest(templateUrl('inventories/groups/list/groups-list')).then((template) => {
|
|
||||||
// return html.concat(template);
|
|
||||||
// });
|
|
||||||
return html;
|
|
||||||
},
|
|
||||||
controller: SourcesListController
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
ListDefinition: () => {
|
|
||||||
return list;
|
|
||||||
},
|
|
||||||
Dataset: ['ListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
|
||||||
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
|
||||||
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
|
||||||
let path, interpolator;
|
|
||||||
if (GetBasePath(list.basePath)) {
|
|
||||||
path = GetBasePath(list.basePath);
|
|
||||||
} else {
|
|
||||||
interpolator = $interpolate(list.basePath);
|
|
||||||
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
|
||||||
}
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
inventoryData: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
|
||||||
return InventoryManageService.getInventory($stateParams.inventory_id).then(res => res.data);
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
state = $stateExtender.buildDefinition(stateConfig);
|
|
||||||
// appy any default search parameters in form definition
|
|
||||||
// if (field.search) {
|
|
||||||
// state.params[`${field.iterator}_search`].value = _.merge(state.params[`${field.iterator}_search`].value, field.search);
|
|
||||||
// }
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
@@ -4,10 +4,8 @@
|
|||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*************************************************/
|
*************************************************/
|
||||||
|
|
||||||
import buildSourcesListState from './build-sources-list-state.factory';
|
|
||||||
import controller from './sources-list.controller';
|
import controller from './sources-list.controller';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('sourcesList', [])
|
angular.module('sourcesList', [])
|
||||||
.factory('buildSourcesListState', buildSourcesListState)
|
|
||||||
.controller('SourcesListController', controller);
|
.controller('SourcesListController', controller);
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { N_ } from '../../../../i18n';
|
||||||
|
import {templateUrl} from '../../../../shared/template-url/template-url.factory';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'inventories.edit.inventory_sources.edit.schedules.add',
|
||||||
|
url: '/add',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_("CREATE SCHEDULE")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'form': {
|
||||||
|
controller: 'schedulerAddController',
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import {templateUrl} from '../../../../shared/template-url/template-url.factory';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'inventories.edit.inventory_sources.edit.schedules.edit',
|
||||||
|
url: '/:schedule_id',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: "{{schedule_obj.name}}"
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'form': {
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
|
controller: 'schedulerEditController',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
import { N_ } from '../../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'inventories.edit.inventory_sources.edit.schedules',
|
||||||
|
url: '/schedules',
|
||||||
|
searchPrefix: 'schedule',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_('SCHEDULES')
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath', 'inventorySourceData',
|
||||||
|
function(list, qs, $stateParams, GetBasePath, inventorySourceData) {
|
||||||
|
let path = `${inventorySourceData.related.schedules}`;
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
ParentObject: ['inventorySourceData', function(inventorySourceData) {
|
||||||
|
return inventorySourceData;
|
||||||
|
}],
|
||||||
|
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', 'inventorySourceData',
|
||||||
|
(SchedulesList, inventorySourceData) => {
|
||||||
|
let list = _.cloneDeep(SchedulesList);
|
||||||
|
list.basePath = `${inventorySourceData.related.schedules}`;
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
// clear form template when views render in this substate
|
||||||
|
'form': {
|
||||||
|
templateProvider: () => ''
|
||||||
|
},
|
||||||
|
// target the un-named ui-view @ root level
|
||||||
|
'@': {
|
||||||
|
templateProvider: function(ScheduleList, generateList, ParentObject) {
|
||||||
|
// include name of parent resource in listTitle
|
||||||
|
ScheduleList.listTitle = `${ParentObject.name}<div class='List-titleLockup'></div>` + N_('SCHEDULES');
|
||||||
|
let html = generateList.build({
|
||||||
|
list: ScheduleList,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
html = generateList.wrapPanel(html);
|
||||||
|
return "<div class='InventoryManage-container'>" + generateList.insertFormView() + html + "</div>";
|
||||||
|
},
|
||||||
|
controller: 'schedulerListController'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -34,12 +34,6 @@
|
|||||||
$scope[`${list.iterator}_dataset`] = Dataset.data;
|
$scope[`${list.iterator}_dataset`] = Dataset.data;
|
||||||
$scope[list.name] = $scope[`${list.iterator}_dataset`].results;
|
$scope[list.name] = $scope[`${list.iterator}_dataset`].results;
|
||||||
|
|
||||||
// The ncy breadcrumb directive will look at this attribute when attempting to bind to the correct scope.
|
|
||||||
// In this case, we don't want to incidentally bind to this scope when editing a host or a group. See:
|
|
||||||
// https://github.com/ncuillery/angular-breadcrumb/issues/42 for a little more information on the
|
|
||||||
// problem that this solves.
|
|
||||||
$scope.ncyBreadcrumbIgnore = true;
|
|
||||||
|
|
||||||
$scope.inventory_id = $stateParams.inventory_id;
|
$scope.inventory_id = $stateParams.inventory_id;
|
||||||
_.forEach($scope[list.name], buildStatusIndicators);
|
_.forEach($scope[list.name], buildStatusIndicators);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
import { N_ } from '../../../i18n';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "inventories.edit.inventory_sources",
|
||||||
|
url: "/inventory_sources?{inventory_source_search:queryset}",
|
||||||
|
params: {
|
||||||
|
inventory_source_search: {
|
||||||
|
value: {
|
||||||
|
page_size: "20",
|
||||||
|
order_by: "name"
|
||||||
|
},
|
||||||
|
dynamic: true,
|
||||||
|
squash: ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
socket: {
|
||||||
|
groups: {
|
||||||
|
jobs: ["status_changed"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: "inventories.edit",
|
||||||
|
label: N_("SOURCES")
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'related': {
|
||||||
|
templateProvider: function(SourcesListDefinition, generateList) {
|
||||||
|
let list = _.cloneDeep(SourcesListDefinition);
|
||||||
|
let html = generateList.build({
|
||||||
|
list: list,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
// Include the custom group delete modal template
|
||||||
|
// return $templateRequest(templateUrl('inventories/groups/list/groups-list')).then((template) => {
|
||||||
|
// return html.concat(template);
|
||||||
|
// });
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'SourcesListController'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['SourcesListDefinition', 'QuerySet', '$stateParams', 'GetBasePath', '$interpolate', '$rootScope',
|
||||||
|
(list, qs, $stateParams, GetBasePath, $interpolate, $rootScope) => {
|
||||||
|
// allow related list definitions to use interpolated $rootScope / $stateParams in basePath field
|
||||||
|
let path, interpolator;
|
||||||
|
if (GetBasePath(list.basePath)) {
|
||||||
|
path = GetBasePath(list.basePath);
|
||||||
|
} else {
|
||||||
|
interpolator = $interpolate(list.basePath);
|
||||||
|
path = interpolator({ $rootScope: $rootScope, $stateParams: $stateParams });
|
||||||
|
}
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
inventoryData: ['InventoryManageService', '$stateParams', function(InventoryManageService, $stateParams) {
|
||||||
|
return InventoryManageService.getInventory($stateParams.inventory_id).then(res => res.data);
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -181,12 +181,13 @@ function($injector, $stateExtender, $log, i18n) {
|
|||||||
break;
|
break;
|
||||||
case 'edit':
|
case 'edit':
|
||||||
url = params.urls && params.urls.edit ? params.urls.edit : (params.url ? params.url : `/:${form.name}_id`);
|
url = params.urls && params.urls.edit ? params.urls.edit : (params.url ? params.url : `/:${form.name}_id`);
|
||||||
|
let breadcrumbLabel = params.breadcrumbs && params.breadcrumbs.edit ? params.breadcrumbs.edit : '{{parentObject.name || name}}';
|
||||||
let formNodeState = {
|
let formNodeState = {
|
||||||
name: params.name || `${params.parent}.edit`,
|
name: params.name || `${params.parent}.edit`,
|
||||||
url: url,
|
url: url,
|
||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
[params.parent ? 'parent' : null]: `${params.parent}`,
|
[params.parent ? 'parent' : null]: `${params.parent}`,
|
||||||
label: '{{parentObject.name || name}}'
|
label: breadcrumbLabel
|
||||||
},
|
},
|
||||||
views: {
|
views: {
|
||||||
'form': {
|
'form': {
|
||||||
@@ -246,7 +247,6 @@ function($injector, $stateExtender, $log, i18n) {
|
|||||||
* @returns {array} Array of state definitions [{...}, {...}, ...]
|
* @returns {array} Array of state definitions [{...}, {...}, ...]
|
||||||
*/
|
*/
|
||||||
generateFormListDefinitions: function(form, formStateDefinition, params) {
|
generateFormListDefinitions: function(form, formStateDefinition, params) {
|
||||||
var that = this;
|
|
||||||
function buildRbacUserTeamDirective(){
|
function buildRbacUserTeamDirective(){
|
||||||
let states = [];
|
let states = [];
|
||||||
|
|
||||||
@@ -553,34 +553,7 @@ function($injector, $stateExtender, $log, i18n) {
|
|||||||
function buildListNodes(field) {
|
function buildListNodes(field) {
|
||||||
let states = [];
|
let states = [];
|
||||||
if(!field.skipGenerator) {
|
if(!field.skipGenerator) {
|
||||||
if(field && (field.listState || field.addState || field.editState)){
|
if(field.iterator === 'notification'){
|
||||||
if(field && field.listState){
|
|
||||||
states.push(field.listState(field, formStateDefinition));
|
|
||||||
states = _.flatten(states);
|
|
||||||
}
|
|
||||||
if(field && field.addState){
|
|
||||||
let formState = field.addState(field, formStateDefinition, params);
|
|
||||||
states.push(formState);
|
|
||||||
// intent below is to add lookup states for any add-forms
|
|
||||||
if(field.includeForm){
|
|
||||||
let form = field.includeForm ? $injector.get(field.includeForm) : field;
|
|
||||||
states.push(that.generateLookupNodes(form, formState));
|
|
||||||
}
|
|
||||||
states = _.flatten(states);
|
|
||||||
}
|
|
||||||
if(field && field.editState){
|
|
||||||
let formState = field.editState(field, formStateDefinition, params);
|
|
||||||
states.push(formState);
|
|
||||||
// intent below is to add lookup states for any edit-forms
|
|
||||||
if(field.includeForm){
|
|
||||||
let form = field.includeForm ? $injector.get(field.includeForm) : field;
|
|
||||||
states.push(that.generateLookupNodes(form, formState));
|
|
||||||
states.push(that.generateFormListDefinitions(form, formState, params));
|
|
||||||
}
|
|
||||||
states = _.flatten(states);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(field.iterator === 'notification'){
|
|
||||||
states.push(buildNotificationState(field));
|
states.push(buildNotificationState(field));
|
||||||
states = _.flatten(states);
|
states = _.flatten(states);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user