From 8c756c49b2e7d20da9b4cde5ea6840ae8044bd8c Mon Sep 17 00:00:00 2001 From: Marliana Lara Date: Mon, 12 Jun 2017 16:01:40 -0400 Subject: [PATCH] Add Multiselect checklist modal to Instance Group Fields Update Issue: #5849 --- .../instance-groups-modal.directive.js | 106 ++++++++++++++++++ .../instance-groups-modal.partial.html | 24 ++++ .../instance-groups-multiselect.controller.js | 10 ++ .../instance-groups.directive.js | 18 +++ .../instance-groups.partial.html | 12 ++ .../instance-groups/instance-groups.list.js | 3 +- awx/ui/client/src/instance-groups/main.js | 11 +- awx/ui/client/src/inventories/main.js | 22 ++++ .../standard/add/inventory-add.controller.js | 11 +- .../edit/inventory-edit.controller.js | 31 +---- .../inventories/standard/inventory.form.js | 5 +- .../add/organizations-add.controller.js | 11 +- .../edit/organizations-edit.controller.js | 32 +----- awx/ui/client/src/organizations/main.js | 40 +++---- .../src/organizations/organizations.form.js | 7 +- .../client/src/templates/job-template.form.js | 7 +- .../job-template-add.controller.js | 13 +-- .../job-template-edit.controller.js | 31 +---- awx/ui/client/src/templates/main.js | 43 +++---- 19 files changed, 260 insertions(+), 177 deletions(-) create mode 100644 awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive.js create mode 100644 awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.partial.html create mode 100644 awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-multiselect.controller.js create mode 100644 awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.directive.js create mode 100644 awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.partial.html diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive.js b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive.js new file mode 100644 index 0000000000..a808289d43 --- /dev/null +++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive.js @@ -0,0 +1,106 @@ +export default ['templateUrl', function(templateUrl) { + return { + restrict: 'E', + scope: { + instanceGroups: '=' + }, + templateUrl: templateUrl('instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal'), + + link: function(scope, element) { + + $('#instance-groups-modal').on('hidden.bs.modal', function () { + $('#instance-groups-modal').off('hidden.bs.modal'); + $(element).remove(); + }); + scope.showModal = function() { + $('#instance-groups-modal').modal('show'); + }; + + scope.destroyModal = function() { + $('#instance-groups-modal').modal('hide'); + }; + }, + + controller: ['$scope', '$compile', 'QuerySet', 'GetBasePath','generateList', 'InstanceGroupList', function($scope, $compile, qs, GetBasePath, GenerateList, InstanceGroupList) { + + function init() { + + $scope.instance_group_queryset = { + order_by: 'name', + page_size: 5 + }; + + $scope.instance_group_default_params = { + order_by: 'name', + page_size: 5 + }; + + qs.search(GetBasePath('instance_groups'), $scope.instance_groups_queryset) + .then(res => { + $scope.instance_group_dataset = res.data; + $scope.instance_groups = $scope.instance_group_dataset.results; + + let instanceGroupList = _.cloneDeep(InstanceGroupList); + + instanceGroupList.listTitle = false; + instanceGroupList.well = false; + instanceGroupList.multiSelect = true; + instanceGroupList.multiSelectExtended = true; + delete instanceGroupList.fields.capacity; + delete instanceGroupList.fields.jobs_running; + + let html = `${GenerateList.build({ + list: instanceGroupList, + input_type: 'instance-groups-modal-body' + })}`; + + $scope.list = instanceGroupList; + $('#instance-groups-modal-body').append($compile(html)($scope)); + + if ($scope.instanceGroups) { + $scope.instance_groups.map( (item) => { + isSelected(item); + }); + } + + $scope.showModal(); + }); + + } + + init(); + + function isSelected(item) { + if(_.find($scope.instanceGroups, {id: item.id})){ + item.isSelected = true; + if (!$scope.igTags) { + $scope.igTags = []; + } + $scope.igTags.push(item); + } + return item; + } + + $scope.$on("selectedOrDeselected", function(e, value) { + let item = value.value; + if (value.isSelected) { + if(!$scope.igTags) { + $scope.igTags = []; + } + $scope.igTags.push(item); + } else { + _.remove($scope.igTags, { id: item.id }); + } + }); + + $scope.cancelForm = function() { + $scope.destroyModal(); + }; + + $scope.saveForm = function() { + $scope.instanceGroups = $scope.igTags; + $scope.destroyModal(); + }; + }] + }; +}]; \ No newline at end of file diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.partial.html b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.partial.html new file mode 100644 index 0000000000..82fe26b395 --- /dev/null +++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.partial.html @@ -0,0 +1,24 @@ + diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-multiselect.controller.js b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-multiselect.controller.js new file mode 100644 index 0000000000..304ac7aa4e --- /dev/null +++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-multiselect.controller.js @@ -0,0 +1,10 @@ +export default ['$scope', + function($scope) { + + $scope.instanceGroupsTags = []; + + $scope.$watch('instanceGroups', function() { + $scope.instanceGroupsTags = _.map($scope.instanceGroups, (item) => item.name); + }, true); + } +]; \ No newline at end of file diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.directive.js b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.directive.js new file mode 100644 index 0000000000..2396a97ab5 --- /dev/null +++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.directive.js @@ -0,0 +1,18 @@ +import instanceGroupsMultiselectController from './instance-groups-multiselect.controller'; +export default ['templateUrl', '$compile', + function(templateUrl, $compile) { + return { + scope: { + instanceGroups: '=' + }, + restrict: 'E', + templateUrl: templateUrl('instance-groups/instance-groups-multiselect/instance-groups'), + controller: instanceGroupsMultiselectController, + link: function(scope) { + scope.openInstanceGroupsModal = function() { + $('#content-container').append($compile('')(scope)); + }; + } + }; + } +]; \ No newline at end of file diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.partial.html b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.partial.html new file mode 100644 index 0000000000..27ffc7f50b --- /dev/null +++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.partial.html @@ -0,0 +1,12 @@ +
+ + + + + + {{ tag }} + + +
\ No newline at end of file diff --git a/awx/ui/client/src/instance-groups/instance-groups.list.js b/awx/ui/client/src/instance-groups/instance-groups.list.js index 0be89f9260..a6827a9291 100644 --- a/awx/ui/client/src/instance-groups/instance-groups.list.js +++ b/awx/ui/client/src/instance-groups/instance-groups.list.js @@ -3,6 +3,7 @@ export default ['i18n', function(i18n) { name: 'instance_groups' , basePath: 'instance_groups', iterator: 'instance_group', + editTitle: i18n._('INSTANCE GROUPS'), listTitle: i18n._('INSTANCE GROUPS'), index: false, hover: false, @@ -18,7 +19,7 @@ export default ['i18n', function(i18n) { label: i18n._('Capacity'), nosort: true, }, - running_jobs: { + jobs_running: { label: i18n._('Running Jobs'), nosort: true, }, diff --git a/awx/ui/client/src/instance-groups/main.js b/awx/ui/client/src/instance-groups/main.js index 7747d36913..c73e7069b8 100644 --- a/awx/ui/client/src/instance-groups/main.js +++ b/awx/ui/client/src/instance-groups/main.js @@ -1,13 +1,17 @@ import InstanceGroupsList from './list/instance-groups-list.controller'; +import instanceGroupsMultiselect from './instance-groups-multiselect/instance-groups.directive'; +import instanceGroupsModal from './instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive'; import list from './instance-groups.list'; import service from './instance-groups.service'; import { N_ } from '../i18n'; export default angular.module('instanceGroups', []) - .factory('InstanceGroupList', list) .service('InstanceGroupsService', service) + .factory('InstanceGroupList', list) .controller('InstanceGroupsList', InstanceGroupsList) + .directive('instanceGroupsMultiselect', instanceGroupsMultiselect) + .directive('instanceGroupsModal', instanceGroupsModal) .config(['$stateProvider', 'stateDefinitionsProvider', function($stateProvider, stateDefinitionsProvider) { let stateDefinitions = stateDefinitionsProvider.$get(); @@ -21,16 +25,11 @@ angular.module('instanceGroups', []) controllers: { list: 'InstanceGroupsList' }, - data: { - activityStream: true, - activityStreamTarget: 'instanceGroup' - }, ncyBreadcrumb: { parent: 'setup', label: N_('INSTANCE GROUPS') } }) }); - } ]); \ No newline at end of file diff --git a/awx/ui/client/src/inventories/main.js b/awx/ui/client/src/inventories/main.js index 0ab8f7a384..361d7620c8 100644 --- a/awx/ui/client/src/inventories/main.js +++ b/awx/ui/client/src/inventories/main.js @@ -115,6 +115,28 @@ angular.module('inventory', [ data: { activityStream: true, activityStreamTarget: 'inventory' + }, + resolve: { + edit: { + InstanceGroupsData: ['$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors', + function($stateParams, Rest, GetBasePath, ProcessErrors){ + let path = `${GetBasePath('inventory')}${$stateParams.inventory_id}/instance_groups/`; + Rest.setUrl(path); + return Rest.get() + .then(({data}) => { + if (data.results.length > 0) { + return data.results; + } + }) + .catch(({data, status}) => { + ProcessErrors(null, data, status, null, { + hdr: 'Error!', + msg: 'Failed to get instance groups. GET returned ' + + 'status: ' + status + }); + }); + }] + } } }); diff --git a/awx/ui/client/src/inventories/standard/add/inventory-add.controller.js b/awx/ui/client/src/inventories/standard/add/inventory-add.controller.js index 200aa4c9ba..af1f2cae85 100644 --- a/awx/ui/client/src/inventories/standard/add/inventory-add.controller.js +++ b/awx/ui/client/src/inventories/standard/add/inventory-add.controller.js @@ -13,7 +13,7 @@ function InventoriesAdd($scope, $location, GenerateForm, InventoryForm, rbacUiControlService, Rest, Alert, ProcessErrors, ClearScope, GetBasePath, ParseTypeChange, Wait, ToJSON, - $state, canAdd, CreateSelect2, InstanceGroupsService, InstanceGroupsData) { + $state, canAdd, CreateSelect2, InstanceGroupsService) { $scope.canAdd = canAdd; @@ -42,13 +42,6 @@ function InventoriesAdd($scope, $location, }); } - $scope.instanceGroupOptions = InstanceGroupsData; - CreateSelect2({ - element: '#inventory_instance_groups', - multiple: true, - addNew: false - }); - // Save $scope.formSave = function() { Wait('start'); @@ -104,5 +97,5 @@ function InventoriesAdd($scope, $location, export default ['$scope', '$location', 'GenerateForm', 'InventoryForm', 'rbacUiControlService', 'Rest', 'Alert', 'ProcessErrors', 'ClearScope', 'GetBasePath', 'ParseTypeChange', - 'Wait', 'ToJSON', '$state','canAdd', 'CreateSelect2', 'InstanceGroupsService', 'InstanceGroupsData', InventoriesAdd + 'Wait', 'ToJSON', '$state','canAdd', 'CreateSelect2', 'InstanceGroupsService', InventoriesAdd ]; \ No newline at end of file diff --git a/awx/ui/client/src/inventories/standard/edit/inventory-edit.controller.js b/awx/ui/client/src/inventories/standard/edit/inventory-edit.controller.js index f510800a58..1a0cc2f3dc 100644 --- a/awx/ui/client/src/inventories/standard/edit/inventory-edit.controller.js +++ b/awx/ui/client/src/inventories/standard/edit/inventory-edit.controller.js @@ -35,36 +35,7 @@ function InventoriesEdit($scope, $location, $scope.organization_name = inventoryData.summary_fields.organization.name; $scope.inventory_variables = inventoryData.variables === null || inventoryData.variables === '' ? '---' : ParseVariableString(inventoryData.variables); $scope.parseType = 'yaml'; - - $scope.instanceGroupOptions = InstanceGroupsData; - CreateSelect2({ - element: '#inventory_instance_groups', - multiple: true, - addNew: false - }); - - Rest.setUrl(instance_group_url); - Rest.get() - .then(({data}) => { - if (data.results.length > 0) { - var opts = data.results - .map(i => ({id: i.id + "", - name: i.name})); - CreateSelect2({ - element:'#inventory_instance_groups', - multiple: true, - addNew: false, - opts: opts - }); - } - }) - .catch(({data, status}) => { - ProcessErrors($scope, data, status, form, { - hdr: 'Error!', - msg: 'Failed to get instance groups. GET returned ' + - 'status: ' + status - }); - }); + $scope.instance_groups = InstanceGroupsData; $rootScope.$on('$stateChangeSuccess', function(event, toState) { if(toState.name === 'inventories.edit') { diff --git a/awx/ui/client/src/inventories/standard/inventory.form.js b/awx/ui/client/src/inventories/standard/inventory.form.js index fc9b92b48a..06e79d7239 100644 --- a/awx/ui/client/src/inventories/standard/inventory.form.js +++ b/awx/ui/client/src/inventories/standard/inventory.form.js @@ -81,13 +81,12 @@ function(i18n, InventoryCompletedJobsList) { }, instance_groups: { label: i18n._('Instance Groups'), - type: 'select', + type: 'custom', awPopOver: "

" + i18n._("Select the Instance Groups for this Inventory to run on.") + "

", dataTitle: i18n._('Instance Groups'), dataPlacement: 'right', dataContainer: 'body', - multiSelect: true, - ngOptions: 'group.name for group in instanceGroupOptions track by group.id', + control: '', }, inventory_variables: { realName: 'variables', diff --git a/awx/ui/client/src/organizations/add/organizations-add.controller.js b/awx/ui/client/src/organizations/add/organizations-add.controller.js index bf41511786..b8d2140374 100644 --- a/awx/ui/client/src/organizations/add/organizations-add.controller.js +++ b/awx/ui/client/src/organizations/add/organizations-add.controller.js @@ -6,9 +6,9 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', 'OrganizationForm', 'GenerateForm', 'Rest', 'Alert', - 'ProcessErrors', 'ClearScope', 'GetBasePath', 'Wait', 'CreateSelect2', '$state','InstanceGroupsService','InstanceGroupsData', + 'ProcessErrors', 'ClearScope', 'GetBasePath', 'Wait', 'CreateSelect2', '$state','InstanceGroupsService', function($scope, $rootScope, $location, $stateParams, OrganizationForm, - GenerateForm, Rest, Alert, ProcessErrors, ClearScope, GetBasePath, Wait, CreateSelect2, $state, InstanceGroupsService, InstanceGroupsData) { + GenerateForm, Rest, Alert, ProcessErrors, ClearScope, GetBasePath, Wait, CreateSelect2, $state, InstanceGroupsService) { Rest.setUrl(GetBasePath('organizations')); Rest.options() @@ -33,13 +33,6 @@ export default ['$scope', '$rootScope', '$location', '$stateParams', GenerateForm.applyDefaults(form, $scope); } - $scope.instanceGroupOptions = InstanceGroupsData; - CreateSelect2({ - element: '#organization_instance_groups', - multiple: true, - addNew: false - }); - // Save $scope.formSave = function() { Wait('start'); diff --git a/awx/ui/client/src/organizations/edit/organizations-edit.controller.js b/awx/ui/client/src/organizations/edit/organizations-edit.controller.js index d0054cc4b4..7c7b48e7d2 100644 --- a/awx/ui/client/src/organizations/edit/organizations-edit.controller.js +++ b/awx/ui/client/src/organizations/edit/organizations-edit.controller.js @@ -30,37 +30,7 @@ export default ['$scope', '$location', '$stateParams', }); $scope.$emit("HideOrgListHeader"); - $scope.organization_id = id; - - $scope.instanceGroupOptions = InstanceGroupsData; - CreateSelect2({ - element: '#organization_instance_groups', - multiple: true, - addNew: false - }); - - Rest.setUrl(instance_group_url); - Rest.get() - .then(({data}) => { - if (data.results.length > 0) { - let opts = data.results - .map(i => ({id: i.id + "", - name: i.name})); - CreateSelect2({ - element: '#organization_instance_groups', - multiple: true, - addNew: false, - opts: opts - }); - } - }) - .catch(({data, status}) => { - ProcessErrors($scope, data, status, form, { - hdr: 'Error!', - msg: 'Failed to get instance groups. GET returned ' + - 'status: ' + status - }); - }); + $scope.instance_groups = InstanceGroupsData; } diff --git a/awx/ui/client/src/organizations/main.js b/awx/ui/client/src/organizations/main.js index d9f80edbe9..11b903dcf7 100644 --- a/awx/ui/client/src/organizations/main.js +++ b/awx/ui/client/src/organizations/main.js @@ -27,23 +27,7 @@ angular.module('Organizations', [ .config(['$stateProvider', 'stateDefinitionsProvider', '$stateExtenderProvider', function($stateProvider, stateDefinitionsProvider, $stateExtenderProvider) { let stateExtender = $stateExtenderProvider.$get(), - stateDefinitions = stateDefinitionsProvider.$get(), - organizationResolve = { - InstanceGroupsData: ['Rest', 'GetBasePath', 'ProcessErrors', (Rest, GetBasePath, ProcessErrors) => { - const url = GetBasePath('instance_groups'); - Rest.setUrl(url); - return Rest.get() - .then(({data}) => { - return data.results.map((i) => ({name: i.name, id: i.id})); - }) - .catch(({data, status}) => { - ProcessErrors(null, data, status, null, { - hdr: 'Error!', - msg: 'Failed to get instance groups info. GET returned status: ' + status - }); - }); - }] - }; + stateDefinitions = stateDefinitionsProvider.$get(); // lazily generate a tree of substates which will replace this node in ui-router's stateRegistry // see: stateDefinition.factory for usage documentation @@ -72,8 +56,26 @@ angular.module('Organizations', [ activityStreamTarget: 'organization' }, resolve: { - add: organizationResolve, - edit: organizationResolve + edit: { + InstanceGroupsData: ['$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors', + function($stateParams, Rest, GetBasePath, ProcessErrors){ + let path = `${GetBasePath('organizations')}${$stateParams.organization_id}/instance_groups/`; + Rest.setUrl(path); + return Rest.get() + .then(({data}) => { + if (data.results.length > 0) { + return data.results; + } + }) + .catch(({data, status}) => { + ProcessErrors(null, data, status, null, { + hdr: 'Error!', + msg: 'Failed to get instance groups. GET returned ' + + 'status: ' + status + }); + }); + }] + } } // concat manually-defined state definitions with generated defintions }).then((generated) => { diff --git a/awx/ui/client/src/organizations/organizations.form.js b/awx/ui/client/src/organizations/organizations.form.js index 0d88f0c6ae..588523b677 100644 --- a/awx/ui/client/src/organizations/organizations.form.js +++ b/awx/ui/client/src/organizations/organizations.form.js @@ -36,13 +36,12 @@ export default ['NotificationsList', 'i18n', }, instance_groups: { label: i18n._('Instance Groups'), - type: 'select', + type: 'custom', awPopOver: "

" + i18n._("Select the Instance Groups for this Organization to run on.") + "

", + dataTitle: i18n._('Instance Groups'), dataContainer: 'body', dataPlacement: 'right', - dataTitle: i18n._('Instance Groups'), - multiSelect: true, - ngOptions: 'group.name for group in instanceGroupOptions track by group.id', + control: '', } }, diff --git a/awx/ui/client/src/templates/job-template.form.js b/awx/ui/client/src/templates/job-template.form.js index 9aa50f0505..abf1f94ef6 100644 --- a/awx/ui/client/src/templates/job-template.form.js +++ b/awx/ui/client/src/templates/job-template.form.js @@ -245,13 +245,12 @@ function(NotificationsList, CompletedJobsList, i18n) { }, instance_groups: { label: i18n._('Instance Groups'), - type: 'select', + type: 'custom', awPopOver: "

" + i18n._("Select the Instance Groups for this Job Template to run on.") + "

", + dataTitle: i18n._('Instance Groups'), dataContainer: 'body', dataPlacement: 'right', - dataTitle: i18n._('Instance Groups'), - multiSelect: true, - ngOptions: 'group.name for group in instanceGroupOptions track by group.id', + control: '', }, job_tags: { label: i18n._('Job Tags'), diff --git a/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js b/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js index 35861eea98..5625bcb0d9 100644 --- a/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js +++ b/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js @@ -9,14 +9,13 @@ '$stateParams', 'JobTemplateForm', 'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'ClearScope', 'GetBasePath', 'md5Setup', 'ParseTypeChange', 'Wait', 'Empty', 'ToJSON', 'CallbackHelpInit', 'GetChoices', '$state', - 'CreateSelect2', '$q', 'i18n', 'Inventory', 'Project', 'InstanceGroupsService', 'InstanceGroupsData', + 'CreateSelect2', '$q', 'i18n', 'Inventory', 'Project', 'InstanceGroupsService', function( $filter, $scope, $stateParams, JobTemplateForm, GenerateForm, Rest, Alert, ProcessErrors, ClearScope, GetBasePath, md5Setup, ParseTypeChange, Wait, Empty, ToJSON, CallbackHelpInit, GetChoices, - $state, CreateSelect2, $q, i18n, Inventory, Project, InstanceGroupsService, - InstanceGroupsData + $state, CreateSelect2, $q, i18n, Inventory, Project, InstanceGroupsService ) { Rest.setUrl(GetBasePath('job_templates')); @@ -48,13 +47,6 @@ $scope.mode = "add"; $scope.parseType = 'yaml'; - $scope.instanceGroupOptions = InstanceGroupsData; - CreateSelect2({ - element: '#job_template_instance_groups', - multiple: true, - addNew: false - }); - md5Setup({ scope: $scope, master: master, @@ -244,6 +236,7 @@ $state.go('templates.editJobTemplate', {job_template_id: id}, {reload: true}); } + if ($scope.removeTemplateSaveSuccess) { $scope.removeTemplateSaveSuccess(); } diff --git a/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js b/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js index a6faab1f0b..11f5a5e451 100644 --- a/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js +++ b/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js @@ -54,36 +54,7 @@ export default $scope.mode = 'edit'; $scope.parseType = 'yaml'; $scope.showJobType = false; - - $scope.instanceGroupOptions = InstanceGroupsData; - CreateSelect2({ - element: '#job_template_instance_groups', - multiple: true, - addNew: false - }); - - Rest.setUrl(instance_group_url); - Rest.get() - .then(({data}) => { - if (data.results.length > 0) { - let opts = data.results - .map(i => ({id: i.id + "", - name: i.name})); - CreateSelect2({ - element: '#job_template_instance_groups', - multiple: true, - addNew: false, - opts: opts - }); - } - }) - .catch(({data, status}) => { - ProcessErrors($scope, data, status, form, { - hdr: 'Error!', - msg: 'Failed to get instance groups. GET returned ' + - 'status: ' + status - }); - }); + $scope.instance_groups = InstanceGroupsData; SurveyControllerInit({ scope: $scope, diff --git a/awx/ui/client/src/templates/main.js b/awx/ui/client/src/templates/main.js index f4c8da4db8..c2af4a85a0 100644 --- a/awx/ui/client/src/templates/main.js +++ b/awx/ui/client/src/templates/main.js @@ -46,24 +46,7 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplatesA let stateTree, addJobTemplate, editJobTemplate, addWorkflow, editWorkflow, workflowMaker, inventoryLookup, credentialLookup, stateDefinitions = stateDefinitionsProvider.$get(), - stateExtender = $stateExtenderProvider.$get(), - instanceGroupsResolve = { - InstanceGroupsData: ['Rest', 'GetBasePath', 'ProcessErrors', (Rest, GetBasePath, ProcessErrors) => { - const url = GetBasePath('instance_groups'); - Rest.setUrl(url); - return Rest.get() - .then(({data}) => { - return data.results.map((i) => ({name: i.name, id: i.id})); - }) - .catch(({data, status}) => { - ProcessErrors(null, data, status, null, { - hdr: 'Error!', - msg: 'Failed to get instance groups info. GET returned status: ' + status - }); - }); - }] - }; - + stateExtender = $stateExtenderProvider.$get(); function generateStateTree() { @@ -102,8 +85,7 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplatesA }); }); } - }], - InstanceGroupsData: instanceGroupsResolve.InstanceGroupsData + }] } } }); @@ -125,7 +107,26 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplatesA activityStreamId: 'job_template_id' }, resolve: { - edit: instanceGroupsResolve + edit: { + InstanceGroupsData: ['$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors', + function($stateParams, Rest, GetBasePath, ProcessErrors){ + let path = `${GetBasePath('job_templates')}${$stateParams.job_template_id}/instance_groups/`; + Rest.setUrl(path); + return Rest.get() + .then(({data}) => { + if (data.results.length > 0) { + return data.results; + } + }) + .catch(({data, status}) => { + ProcessErrors(null, data, status, null, { + hdr: 'Error!', + msg: 'Failed to get instance groups. GET returned ' + + 'status: ' + status + }); + }); + }] + } } });