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 @@
+
+
+
+
+
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 @@
{{ title }}
-
{{ message }}
+
{{ message }}
+