This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack-primate.git
The following commit(s) were added to refs/heads/master by this push:
new 6670549 autogenview: fix form-fill logic for uuids
6670549 is described below
commit 66705495a75bab59fcc5172d999af37f5c49c44d
Author: Rohit Yadav <[email protected]>
AuthorDate: Thu May 21 14:09:39 2020 +0530
autogenview: fix form-fill logic for uuids
Fixes #341
This fixes the issue that some forms will fail to be submitted if the
parameters are processed incorrectly. Also synchornises a-switch using
explicit form model.
Signed-off-by: Rohit Yadav <[email protected]>
---
src/views/AutogenView.vue | 75 +++++++++++++++++++++++++++++++----------------
1 file changed, 50 insertions(+), 25 deletions(-)
diff --git a/src/views/AutogenView.vue b/src/views/AutogenView.vue
index f2ebc7e..fb8df99 100644
--- a/src/views/AutogenView.vue
+++ b/src/views/AutogenView.vue
@@ -137,6 +137,7 @@
v-decorator="[field.name, {
rules: [{ required: field.required, message: 'Please
provide input' }]
}]"
+ v-model="formModel[field.name]"
:placeholder="field.description"
/>
</span>
@@ -154,9 +155,8 @@
</a-select>
</span>
<span
- v-else-if="field.type==='uuid' ||
- (field.name==='account' && !['addAccountToProject',
'createAccount'].includes(currentAction.api)) ||
- field.name==='keypair'">
+ v-else-if="field.name==='keypair' ||
+ (field.name==='account' && !['addAccountToProject',
'createAccount'].includes(currentAction.api))">
<a-select
showSearch
optionFilterProp="children"
@@ -174,6 +174,25 @@
</a-select-option>
</a-select>
</span>
+ <span
+ v-else-if="field.type==='uuid'">
+ <a-select
+ showSearch
+ optionFilterProp="children"
+ v-decorator="[field.name, {
+ rules: [{ required: field.required, message: 'Please
select option' }]
+ }]"
+ :loading="field.loading"
+ :placeholder="field.description"
+ :filterOption="(input, option) => {
+ return
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase())
>= 0
+ }"
+ >
+ <a-select-option v-for="opt in field.opts" :key="opt.id">
+ {{ opt.name || opt.description || opt.traffictype ||
opt.publicip }}
+ </a-select-option>
+ </a-select>
+ </span>
<span v-else-if="field.type==='list'">
<a-select
:loading="field.loading"
@@ -321,7 +340,8 @@ export default {
actions: [],
treeData: [],
treeSelected: {},
- actionData: []
+ actionData: [],
+ formModel: {}
}
},
computed: {
@@ -564,6 +584,8 @@ export default {
this.currentAction = {}
},
execAction (action) {
+ this.form = this.$form.createForm(this)
+ this.formModel = {}
this.actionData = []
if (action.component && action.api && !action.popup) {
this.$router.push({ name: action.api })
@@ -657,6 +679,9 @@ export default {
continue
}
param.opts = json[obj][res]
+ if (['listTemplates', 'listIsos'].includes(possibleApi)) {
+ param.opts = [...new Map(param.opts.map(x => [x.id,
x])).values()]
+ }
this.$forceUpdate()
break
}
@@ -696,7 +721,7 @@ export default {
this.currentAction.paramFields.map(field => {
let fieldValue = null
let fieldName = null
- if (field.type === 'uuid' || field.type === 'list' || field.name ===
'account' || (this.currentAction.mapping && field.name in
this.currentAction.mapping)) {
+ if (field.type === 'list' || field.name === 'account' ||
(this.currentAction.mapping && field.name in this.currentAction.mapping)) {
fieldName = field.name.replace('ids', 'name').replace('id', 'name')
} else {
fieldName = field.name
@@ -704,6 +729,7 @@ export default {
fieldValue = this.resource[fieldName] ? this.resource[fieldName] : null
if (fieldValue) {
form.getFieldDecorator(field.name, { initialValue: fieldValue })
+ this.formModel[field.name] = fieldValue
}
})
},
@@ -720,30 +746,29 @@ export default {
for (const key in values) {
const input = values[key]
for (const param of this.currentAction.params) {
- if (param.name === key) {
- if (input === undefined) {
- if (param.type === 'boolean') {
- params[key] = false
- }
- break
+ if (param.name !== key) {
+ continue
+ }
+ if (input === undefined || input === null) {
+ if (param.type === 'boolean') {
+ params[key] = false
}
- if (this.currentAction.mapping && key in
this.currentAction.mapping && this.currentAction.mapping[key].options) {
- params[key] = this.currentAction.mapping[key].options[input]
- } else if (param.type === 'uuid') {
- params[key] = param.opts[input].id
- } else if (param.type === 'list') {
- params[key] = input.map(e => { return param.opts[e].id
}).reduce((str, name) => { return str + ',' + name })
- } else if (param.name === 'account' || param.name ===
'keypair') {
- if (['addAccountToProject',
'createAccount'].includes(this.currentAction.api)) {
- params[key] = input
- } else {
- params[key] = param.opts[input].name
- }
- } else {
+ break
+ }
+ if (this.currentAction.mapping && key in
this.currentAction.mapping && this.currentAction.mapping[key].options) {
+ params[key] = this.currentAction.mapping[key].options[input]
+ } else if (param.type === 'list') {
+ params[key] = input.map(e => { return param.opts[e].id
}).reduce((str, name) => { return str + ',' + name })
+ } else if (param.name === 'account' || param.name === 'keypair')
{
+ if (['addAccountToProject',
'createAccount'].includes(this.currentAction.api)) {
params[key] = input
+ } else {
+ params[key] = param.opts[input].name
}
- break
+ } else {
+ params[key] = input
}
+ break
}
}