From 98cf28d9f1cfc51720b25c03caf4ce9f939aaf6b Mon Sep 17 00:00:00 2001 From: gconsidine Date: Wed, 26 Jul 2017 17:49:05 -0400 Subject: [PATCH] Update model interaction --- .../credentials/add-credentials.controller.js | 5 +- .../edit-credentials.controller.js | 11 ++-- awx/ui/client/features/credentials/index.js | 10 +--- awx/ui/client/lib/models/Base.js | 52 +++++++++++++++++-- awx/ui/client/lib/models/Credential.js | 6 +-- awx/ui/client/lib/models/CredentialType.js | 29 ++++------- awx/ui/client/lib/models/Me.js | 6 +-- awx/ui/client/lib/models/Organization.js | 7 +-- .../list/credentials-list.controller.js | 2 +- 9 files changed, 82 insertions(+), 46 deletions(-) diff --git a/awx/ui/client/features/credentials/add-credentials.controller.js b/awx/ui/client/features/credentials/add-credentials.controller.js index 4e829f37ee..79fa9afd0c 100644 --- a/awx/ui/client/features/credentials/add-credentials.controller.js +++ b/awx/ui/client/features/credentials/add-credentials.controller.js @@ -31,9 +31,10 @@ function AddCredentialsController (models, $state, strings) { vm.form.inputs = { _get: id => { - let type = credentialType.getById(id); + let type = credentialType.graft(id); + type.mergeInputProperties(); - return credentialType.mergeInputProperties(type); + return type.get('inputs.fields'); }, _source: vm.form.credential_type, _reference: 'vm.form.inputs', diff --git a/awx/ui/client/features/credentials/edit-credentials.controller.js b/awx/ui/client/features/credentials/edit-credentials.controller.js index 19b05a834b..e49dfe51ce 100644 --- a/awx/ui/client/features/credentials/edit-credentials.controller.js +++ b/awx/ui/client/features/credentials/edit-credentials.controller.js @@ -56,14 +56,15 @@ function EditCredentialsController (models, $state, $scope, strings) { vm.form.inputs = { _get (id) { - let type = credentialType.getById(id); - let inputs = credentialType.mergeInputProperties(type); + let type = credentialType.graft(id); + + type.mergeInputProperties(); - if (type.id === credential.get('credential_type')) { - inputs = credential.assignInputGroupValues(inputs); + if (type.get('id') === credential.get('credential_type')) { + return credential.assignInputGroupValues(type.get('inputs.fields')); } - return inputs; + return type.get('inputs.fields'); }, _source: vm.form.credential_type, _reference: 'vm.form.inputs', diff --git a/awx/ui/client/features/credentials/index.js b/awx/ui/client/features/credentials/index.js index c939c98d5d..077e9562e1 100644 --- a/awx/ui/client/features/credentials/index.js +++ b/awx/ui/client/features/credentials/index.js @@ -5,7 +5,6 @@ import CredentialsStrings from './credentials.strings' function CredentialsResolve ($q, $stateParams, Me, Credential, CredentialType, Organization) { let id = $stateParams.credential_id; - let models; let promises = { me: new Me('get'), @@ -22,14 +21,9 @@ function CredentialsResolve ($q, $stateParams, Me, Credential, CredentialType, O promises.credential = new Credential(['get', 'options'], [id, id]); return $q.all(promises) - .then(_models_ => { - models = _models_; + .then(models => { let credentialTypeId = models.credential.get('credential_type'); - - return models.credentialType.graft(credentialTypeId); - }) - .then(selectedCredentialType => { - models.selectedCredentialType = selectedCredentialType; + models.selectedCredentialType = models.credentialType.graft(credentialTypeId); return models; }); diff --git a/awx/ui/client/lib/models/Base.js b/awx/ui/client/lib/models/Base.js index d1c8fd2936..0a4cef54fd 100644 --- a/awx/ui/client/lib/models/Base.js +++ b/awx/ui/client/lib/models/Base.js @@ -87,7 +87,34 @@ function get (keys) { return this.find('get', keys); } +function set (method, keys, value) { + if (!value) { + value = keys; + keys = method; + method = 'GET'; + } + + keys = keys.split('.'); + + if (keys.length === 1) { + model[keys[0]] = value; + } else { + let property = keys.splice(-1); + keys = keys.join('.'); + + let model = this.find(method, keys) + + model[property] = value; + } +} + function match (method, key, value) { + if(!value) { + value = key; + key = method; + method = 'GET'; + } + let model = this.model[method.toUpperCase()]; if (!model) { @@ -149,20 +176,39 @@ function normalizePath (resource) { return `${version}${resource}/`; } -function getById (id) { +function graft (id) { let item = this.get('results').filter(result => result.id === id); - return item ? item[0] : undefined; + item = item ? item[0] : undefined; + + if (!item) { + return undefined; + } + + return new this.Constructor('get', item, true); +} + +function create (method, resource, graft) { + this.promise = this.request(method, resource); + + if (graft) { + return this; + } + + return this.promise + .then(() => this); } function BaseModel (path) { this.model = {}; this.get = get; + this.set = set; this.options = options; this.find = find; this.match = match; this.normalizePath = normalizePath; - this.getById = getById; + this.graft = graft; + this.create = create; this.request = request; this.http = { get: httpGet.bind(this), diff --git a/awx/ui/client/lib/models/Credential.js b/awx/ui/client/lib/models/Credential.js index 19354bf8f0..9937ebe281 100644 --- a/awx/ui/client/lib/models/Credential.js +++ b/awx/ui/client/lib/models/Credential.js @@ -37,15 +37,15 @@ function clearTypeInputs () { delete this.model.GET.inputs; } -function CredentialModel (method, resource) { +function CredentialModel (method, resource, graft) { BaseModel.call(this, 'credentials'); + this.Constructor = CredentialModel; this.createFormSchema = createFormSchema.bind(this); this.assignInputGroupValues = assignInputGroupValues.bind(this); this.clearTypeInputs = clearTypeInputs.bind(this); - return this.request(method, resource) - .then(() => this); + return this.create(method, resource, graft); } function CredentialModelLoader (_BaseModel_ ) { diff --git a/awx/ui/client/lib/models/CredentialType.js b/awx/ui/client/lib/models/CredentialType.js index f0ab0d6f0f..e132c05ebb 100644 --- a/awx/ui/client/lib/models/CredentialType.js +++ b/awx/ui/client/lib/models/CredentialType.js @@ -14,33 +14,26 @@ function categorizeByKind () { })); } -function mergeInputProperties (type) { - return type.inputs.fields.map(field => { - if (!type.inputs.required || type.inputs.required.indexOf(field.id) === -1) { - field.required = false; - } else { - field.required = true; - } +function mergeInputProperties () { + let required = this.get('inputs.required'); - return field; + return this.get('inputs.fields').map((field, i) => { + if (!required || required.indexOf(field.id) === -1) { + this.set(`inputs.fields[${i}].required`, false); + } else { + this.set(`inputs.fields[${i}].required`, true); + } }); } -function graft (id) { - let data = this.getById(id); - - return new CredentialTypeModel('get', data); -} - -function CredentialTypeModel (method, id) { +function CredentialTypeModel (method, resource, graft) { BaseModel.call(this, 'credential_types'); + this.Constructor = CredentialTypeModel; this.categorizeByKind = categorizeByKind.bind(this); this.mergeInputProperties = mergeInputProperties.bind(this); - this.graft = graft.bind(this); - return this.request(method, id) - .then(() => this); + return this.create(method, resource, graft); } function CredentialTypeModelLoader (_BaseModel_) { diff --git a/awx/ui/client/lib/models/Me.js b/awx/ui/client/lib/models/Me.js index 2a36a5b2be..9393132e8e 100644 --- a/awx/ui/client/lib/models/Me.js +++ b/awx/ui/client/lib/models/Me.js @@ -4,13 +4,13 @@ function getSelf () { return this.get('results[0]'); } -function MeModel (method) { +function MeModel (method, resource, graft) { BaseModel.call(this, 'me'); + this.Constructor = MeModel; this.getSelf = getSelf.bind(this); - return this.request(method) - .then(() => this); + return this.create(method, resource, graft); } function MeModelLoader (_BaseModel_) { diff --git a/awx/ui/client/lib/models/Organization.js b/awx/ui/client/lib/models/Organization.js index 7dc7758f78..53448cd80f 100644 --- a/awx/ui/client/lib/models/Organization.js +++ b/awx/ui/client/lib/models/Organization.js @@ -1,10 +1,11 @@ let BaseModel; -function OrganizationModel (method) { +function OrganizationModel (method, resource, graft) { BaseModel.call(this, 'organizations'); - return this.request(method) - .then(() => this); + this.Constructor = OrganizationModel; + + return this.create(method, resource, graft); } function OrganizationModelLoader (_BaseModel_) { diff --git a/awx/ui/client/src/credentials/list/credentials-list.controller.js b/awx/ui/client/src/credentials/list/credentials-list.controller.js index 30acfc38c5..924f58e367 100644 --- a/awx/ui/client/src/credentials/list/credentials-list.controller.js +++ b/awx/ui/client/src/credentials/list/credentials-list.controller.js @@ -46,7 +46,7 @@ export default ['$scope', 'Rest', 'CredentialList', 'Prompt', 'ProcessErrors', ' } $scope[list.name].forEach(credential => { - credential.kind = credentialType.getById(credential.credential_type).name; + credential.kind = credentialType.match('id', credential.credential_type).name; }); }