From 0f85c867a0771863786d88f4aafd57ae8bfa3084 Mon Sep 17 00:00:00 2001 From: Jake McDermott Date: Tue, 6 Nov 2018 22:20:51 -0500 Subject: [PATCH] fix project cred lookups when many credential types exist --- .../projects/add/projects-add.controller.js | 10 ++--- .../projects/edit/projects-edit.controller.js | 13 +++--- awx/ui/client/src/projects/main.js | 40 ++++++++++++++++++- 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/awx/ui/client/src/projects/add/projects-add.controller.js b/awx/ui/client/src/projects/add/projects-add.controller.js index 4f2d9a0b5f..a76c80d496 100644 --- a/awx/ui/client/src/projects/add/projects-add.controller.js +++ b/awx/ui/client/src/projects/add/projects-add.controller.js @@ -7,10 +7,10 @@ export default ['$scope', '$location', '$stateParams', 'GenerateForm', 'ProjectsForm', 'Rest', 'Alert', 'ProcessErrors', 'GetBasePath', 'GetProjectPath', 'GetChoices', 'Wait', '$state', 'CreateSelect2', 'i18n', - 'CredentialTypes', 'ConfigData', 'resolvedModels', + 'ConfigData', 'resolvedModels', 'scmCredentialType', function($scope, $location, $stateParams, GenerateForm, ProjectsForm, Rest, Alert, ProcessErrors, GetBasePath, GetProjectPath, GetChoices, Wait, $state, - CreateSelect2, i18n, CredentialTypes, ConfigData, resolvedModels) { + CreateSelect2, i18n, ConfigData, resolvedModels, scmCredentialType) { let form = ProjectsForm(), base = $location.path().replace(/^\//, '').split('/')[0], @@ -191,13 +191,9 @@ export default ['$scope', '$location', '$stateParams', 'GenerateForm', $scope.lookupCredential = function(){ // Perform a lookup on the credential_type. Git, Mercurial, and Subversion // all use SCM as their credential type. - let credType = _.filter(CredentialTypes, function(credType){ - return ($scope.scm_type.value !== "insights" && credType.kind === "scm" || - $scope.scm_type.value === "insights" && credType.kind === "insights"); - }); $state.go('.credential', { credential_search: { - credential_type: credType[0].id, + credential_type: scmCredentialType, page_size: '5', page: '1' } diff --git a/awx/ui/client/src/projects/edit/projects-edit.controller.js b/awx/ui/client/src/projects/edit/projects-edit.controller.js index 4aee689dd3..8169f297d8 100644 --- a/awx/ui/client/src/projects/edit/projects-edit.controller.js +++ b/awx/ui/client/src/projects/edit/projects-edit.controller.js @@ -8,12 +8,12 @@ export default ['$scope', '$rootScope', '$stateParams', 'ProjectsForm', 'Rest', 'Alert', 'ProcessErrors', 'GenerateForm', 'Prompt', 'GetBasePath', 'GetProjectPath', 'Authorization', 'GetChoices', 'Empty', 'Wait', 'ProjectUpdate', '$state', 'CreateSelect2', 'ToggleNotification', - 'i18n', 'CredentialTypes', 'OrgAdminLookup', 'ConfigData', + 'i18n', 'OrgAdminLookup', 'ConfigData', 'scmCredentialType', function($scope, $rootScope, $stateParams, ProjectsForm, Rest, Alert, ProcessErrors, GenerateForm, Prompt, GetBasePath, GetProjectPath, Authorization, GetChoices, Empty, Wait, ProjectUpdate, - $state, CreateSelect2, ToggleNotification, i18n, CredentialTypes, - OrgAdminLookup, ConfigData) { + $state, CreateSelect2, ToggleNotification, i18n, OrgAdminLookup, + ConfigData, scmCredentialType) { let form = ProjectsForm(), defaultUrl = GetBasePath('projects') + $stateParams.project_id + '/', @@ -321,13 +321,10 @@ export default ['$scope', '$rootScope', '$stateParams', 'ProjectsForm', 'Rest', $scope.lookupCredential = function(){ // Perform a lookup on the credential_type. Git, Mercurial, and Subversion // all use SCM as their credential type. - let credType = _.filter(CredentialTypes, function(credType){ - return ($scope.scm_type.value !== "insights" && credType.kind === "scm" || - $scope.scm_type.value === "insights" && credType.kind === "insights"); - }); + $state.go('.credential', { credential_search: { - credential_type: credType[0].id, + credential_type: scmCredentialType, page_size: '5', page: '1' } diff --git a/awx/ui/client/src/projects/main.js b/awx/ui/client/src/projects/main.js index ebb3aa7bb9..206df6923b 100644 --- a/awx/ui/client/src/projects/main.js +++ b/awx/ui/client/src/projects/main.js @@ -20,6 +20,25 @@ import { import ProjectsTemplatesRoute from '~features/templates/routes/projectsTemplatesList.route'; import projectsListRoute from '~features/projects/routes/projectsList.route.js'; + +function ResolveScmCredentialType (GetBasePath, Rest, ProcessErrors) { + Rest.setUrl(GetBasePath('credential_types') + '?kind=scm'); + + return Rest.get() + .then(({ data }) => { + return data.results[0].id; + }) + .catch(({ data, status }) => { + ProcessErrors(null, data, status, null, { + hdr: 'Error!', + msg: 'Failed to get credential type data: ' + status + }); + }); +} + +ResolveScmCredentialType.$inject = ['GetBasePath', 'Rest', 'ProcessErrors']; + + export default angular.module('Projects', []) .controller('ProjectsAdd', ProjectsAdd) @@ -34,19 +53,29 @@ angular.module('Projects', []) let stateDefinitions = stateDefinitionsProvider.$get(); let stateExtender = $stateExtenderProvider.$get(); + const projectsAddName = 'projects.add'; + const projectsEditName = 'projects.edit'; + function generateStateTree() { let projectAdd = stateDefinitions.generateTree({ - name: 'projects.add', + name: projectsAddName, url: '/add', modes: ['add'], form: 'ProjectsForm', controllers: { add: 'ProjectsAdd', }, + }) + .then(res => { + const stateIndex = res.states.findIndex(s => s.name === projectsAddName); + + res.states[stateIndex].resolve.scmCredentialType = ResolveScmCredentialType; + + return res; }); let projectEdit = stateDefinitions.generateTree({ - name: 'projects.edit', + name: projectsEditName, url: '/:project_id', modes: ['edit'], form: 'ProjectsForm', @@ -61,6 +90,13 @@ angular.module('Projects', []) breadcrumbs: { edit: '{{breadcrumb.project_name}}' }, + }) + .then(res => { + const stateIndex = res.states.findIndex(s => s.name === projectsEditName); + + res.states[stateIndex].resolve.scmCredentialType = ResolveScmCredentialType; + + return res; }); return Promise.all([