From 5f07e4daaf7fd1a7e2bff4296a62a5acf527dcbb Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Mon, 31 Jan 2022 17:19:31 +0530 Subject: [PATCH] ui: fix filtering readonly details while VM update (#5887) * ui: fix filtering readonly details while VM update * refactor * error on add Fixes #5724 Signed-off-by: Abhishek Kumar --- ui/src/components/view/DetailSettings.vue | 45 ++++++++++++++--------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/ui/src/components/view/DetailSettings.vue b/ui/src/components/view/DetailSettings.vue index 2588c11fb2e..7d143ba52ef 100644 --- a/ui/src/components/view/DetailSettings.vue +++ b/ui/src/components/view/DetailSettings.vue @@ -173,13 +173,6 @@ export default { this.deployasistemplate = json.listtemplatesresponse.template[0].deployasis }) }, - filterOrReadOnlyDetails () { - for (var i = 0; i < this.details.length; i++) { - if (!this.allowEditOfDetail(this.details[i].name)) { - this.details.splice(i, 1) - } - } - }, allowEditOfDetail (name) { if (this.resource.readonlydetails) { if (this.resource.readonlydetails.split(',').map(item => item.trim()).includes(name)) { @@ -211,6 +204,27 @@ export default { (this.resource.domainid === this.$store.getters.userInfo.domainid && this.resource.account === this.$store.getters.userInfo.account) || this.resource.project && this.resource.projectid === this.$store.getters.project.id }, + getDetailsParam (details) { + var params = {} + var filteredDetails = details + if (this.resource.readonlydetails && filteredDetails) { + filteredDetails = [] + var readOnlyDetailNames = this.resource.readonlydetails.split(',').map(item => item.trim()) + for (var detail of this.details) { + if (!readOnlyDetailNames.includes(detail.name)) { + filteredDetails.push(detail) + } + } + } + if (filteredDetails.length === 0) { + params.cleanupdetails = true + } else { + filteredDetails.forEach(function (item, index) { + params['details[0].' + item.name] = item.value + }) + } + return params + }, runApi () { var apiName = '' if (this.resourceType === 'UserVm') { @@ -226,14 +240,8 @@ export default { return } - const params = { id: this.resource.id } - if (this.details.length === 0) { - params.cleanupdetails = true - } else { - this.details.forEach(function (item, index) { - params['details[0].' + item.name] = item.value - }) - } + var params = { id: this.resource.id } + params = Object.assign(params, this.getDetailsParam(this.details)) this.loading = true api(apiName, params).then(json => { var details = {} @@ -259,18 +267,19 @@ export default { this.error = this.$t('message.error.provide.setting') return } + if (!this.allowEditOfDetail(this.newKey)) { + this.error = this.$t('error.unable.to.proceed') + return + } this.error = false this.details.push({ name: this.newKey, value: this.newValue }) - this.filterOrReadOnlyDetails() this.runApi() }, updateDetail (index) { - this.filterOrReadOnlyDetails() this.runApi() }, deleteDetail (index) { this.details.splice(index, 1) - this.filterOrReadOnlyDetails() this.runApi() }, onShowAddDetail () {