You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
willaengine/resources/js/Global/components/FormLoader/Wrapper.vue

57 lines
1.0 KiB

5 years ago
<template>
5 years ago
<div class="row">
5 years ago
<element-factory
5 years ago
v-for="element in elements"
5 years ago
:element="element"
5 years ago
:values="formValues"
5 years ago
:key="element.id"
></element-factory>
</div>
5 years ago
</template>
<script>
5 years ago
import Factory from "./FactoryPattern";
5 years ago
export default {
5 years ago
components: {
"element-factory": Factory
},
data: () => ({
}),
props: {
5 years ago
elements: {
required: true
},
values:{
required: false,
}
5 years ago
},
methods: {
setDefaultValue(elements, values = {}) {
for (const key in elements) {
if (elements.hasOwnProperty(key)) {
5 years ago
if (elements[key].type == "we-form") {
values[
elements[key].slug
] = this.setDefaultValue(elements[key].children);
5 years ago
} else {
5 years ago
values[elements[key].slug] = "";
5 years ago
}
}
5 years ago
}
return values;
5 years ago
}
5 years ago
},
computed: {
formValues:{
get() {
if (!this.values || Object.keys(this.values).length == 0) {
return this.setDefaultValue(this.elements);
}
return this.values;
},
set(values) {
this.$emit('values', values);
}
}
},
5 years ago
};
5 years ago
</script>