diff --git a/awx/ui/client/features/credentials/add-credentials.controller.js b/awx/ui/client/features/credentials/add-credentials.controller.js index 699cddb45a..50daf0b9ca 100644 --- a/awx/ui/client/features/credentials/add-credentials.controller.js +++ b/awx/ui/client/features/credentials/add-credentials.controller.js @@ -32,7 +32,7 @@ function AddCredentialsController (models, $state) { }; vm.form.onSaveSuccess = res => { - $state.go('credentials.edit', { id: res.data.id }, { reload: true }); + $state.go('credentials.edit', { credential_id: res.data.id }, { reload: true }); }; } diff --git a/awx/ui/client/features/credentials/add-edit-credentials.view.html b/awx/ui/client/features/credentials/add-edit-credentials.view.html index 9214adda59..b2839da6b5 100644 --- a/awx/ui/client/features/credentials/add-edit-credentials.view.html +++ b/awx/ui/client/features/credentials/add-edit-credentials.view.html @@ -1,3 +1,4 @@ +
{{ vm.panelTitle }} diff --git a/awx/ui/client/features/credentials/index.js b/awx/ui/client/features/credentials/index.js index 661d3deedc..1b936ccd97 100644 --- a/awx/ui/client/features/credentials/index.js +++ b/awx/ui/client/features/credentials/index.js @@ -1,12 +1,40 @@ +import PermissionsList from '../../src/access/permissions-list.controller'; +import CredentialForm from '../../src/credentials/credentials.form'; import CredentialList from '../../src/credentials/credentials.list'; import ListController from '../../src/credentials/list/credentials-list.controller'; import AddController from './add-credentials.controller.js'; import EditController from './edit-credentials.controller.js'; -import { N_ } from '../../src/i18n'; +import {N_} from '../../src/i18n'; -function config ($stateExtenderProvider, pathServiceProvider) { +function CredentialsResolve ($q, $stateParams, Me, Credential, CredentialType) { + let id = $stateParams.credential_id; + + let promises = { + me: new Me('get'), + credentialType: new CredentialType('get') + }; + + if (id) { + promises.credential = new Credential(['get', 'options'], [id, id]); + } else { + promises.credential = new Credential('options'); + } + + return $q.all(promises); +} + +CredentialsResolve.$inject = [ + '$q', + '$stateParams', + 'MeModel', + 'CredentialModel', + 'CredentialTypeModel' +]; + +function CredentialsConfig ($stateProvider, $stateExtenderProvider, stateDefinitionsProvider, pathServiceProvider) { let pathService = pathServiceProvider.$get(); let stateExtender = $stateExtenderProvider.$get(); + let stateDefinitions = stateDefinitionsProvider.$get(); stateExtender.addState({ name: 'credentials', @@ -41,31 +69,6 @@ function config ($stateExtenderProvider, pathServiceProvider) { } }); - function CredentialsResolve ($q, $stateParams, Me, Credential, CredentialType) { - let id = $stateParams.id; - - let promises = { - me: new Me('get'), - credentialType: new CredentialType('get') - }; - - if (id) { - promises.credential = new Credential(['get', 'options'], [id, id]); - } else { - promises.credential = new Credential('options'); - } - - return $q.all(promises); - } - - CredentialsResolve.$inject = [ - '$q', - '$stateParams', - 'MeModel', - 'CredentialModel', - 'CredentialTypeModel' - ]; - stateExtender.addState({ name: 'credentials.add', route: '/add', @@ -86,7 +89,7 @@ function config ($stateExtenderProvider, pathServiceProvider) { stateExtender.addState({ name: 'credentials.edit', - route: '/edit/:id', + route: '/:credential_id', ncyBreadcrumb: { label: N_('EDIT') }, @@ -101,15 +104,80 @@ function config ($stateExtenderProvider, pathServiceProvider) { resolvedModels: CredentialsResolve } }); + + stateExtender.addState({ + name: "credentials.edit.permissions", + url: "/permissions?{permission_search:queryset}", + resolve: { + ListDefinition: ['CredentialList', CredentialList => CredentialList], + Dataset: [ + 'CredentialList', + 'QuerySet', + '$stateParams', + 'GetBasePath', + '$interpolate', + '$rootScope', + '$state', + (list, qs, $stateParams, GetBasePath, $interpolate, $rootScope, $state) => { + list.basePath = 'api/v2/credentials/2/access_list/'; + // 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`].order_by = 'username'; + return qs.search(path, $stateParams[`${list.iterator}_search`]); + + } + ] + }, + params: { + permission_search: { + value: { + page_size: 20, + order_by: 'username' + }, + dynamic: true, + squash: "" + } + }, + ncyBreadcrumb: { + parent: "credentials.edit", + label: "PERMISSIONS" + }, + views: { + 'permissions': { + controller: PermissionsList, + templateProvider: function(CredentialForm, CredentialList, GenerateForm) { + let form = CredentialForm; + let list = CredentialList; + + let html = GenerateForm.buildCollection({ + mode: 'edit', + related: 'permissions', + form: typeof(form) === 'function' ? form() : form + }); + + return html; + } + } + } + }); } -config.$inject = [ +CredentialsConfig.$inject = [ + '$stateProvider', '$stateExtenderProvider', + 'stateDefinitionsProvider', 'PathServiceProvider' ]; angular .module('at.features.credentials', []) - .config(config) + .config(CredentialsConfig) .controller('AddController', AddController) .controller('EditController', EditController); diff --git a/awx/ui/client/features/credentials/index.view.html b/awx/ui/client/features/credentials/index.view.html index 31993f35b5..6bde9bf7ba 100644 --- a/awx/ui/client/features/credentials/index.view.html +++ b/awx/ui/client/features/credentials/index.view.html @@ -1,3 +1,4 @@ +
diff --git a/awx/ui/client/lib/components/input/lookup.directive.js b/awx/ui/client/lib/components/input/lookup.directive.js index c8316ec8f3..950edeca39 100644 --- a/awx/ui/client/lib/components/input/lookup.directive.js +++ b/awx/ui/client/lib/components/input/lookup.directive.js @@ -12,11 +12,37 @@ function atInputLookupLink (scope, element, attrs, controllers) { function AtInputLookupController (baseInputController) { let vm = this || {}; + vm.lookup = {}; + vm.init = (scope, element, form) => { baseInputController.call(vm, 'input', scope, element, form); + vm.lookup.modal = { + title: 'Select Organization', + buttons: [ + { + type: 'cancel' + }, + { + type: 'select' + } + ] + }; + + vm.lookup.search = { + placeholder: 'test' + }; + + vm.lookup.table = { + + }; + vm.check(); }; + + vm.search = () => { + vm.modal.show('test'); + }; } AtInputLookupController.$inject = ['BaseInputController']; diff --git a/awx/ui/client/lib/components/input/lookup.partial.html b/awx/ui/client/lib/components/input/lookup.partial.html index a77505db33..d5f0ca89b7 100644 --- a/awx/ui/client/lib/components/input/lookup.partial.html +++ b/awx/ui/client/lib/components/input/lookup.partial.html @@ -5,7 +5,8 @@
@@ -21,4 +22,9 @@
+ + + + + diff --git a/awx/ui/client/lib/components/modal/modal.partial.html b/awx/ui/client/lib/components/modal/modal.partial.html index 69df2bc984..9d96d1ff2a 100644 --- a/awx/ui/client/lib/components/modal/modal.partial.html +++ b/awx/ui/client/lib/components/modal/modal.partial.html @@ -8,7 +8,8 @@