|
1 | 1 | <template lang="pug">
|
2 |
| -div |
3 |
| - fieldset.vue-form-generator(v-if='schema != null', :is='tag') |
| 2 | +div.vue-form-generator(v-if='schema != null') |
| 3 | + fieldset(v-if="schema.fields", :is='tag') |
4 | 4 | template(v-for='field in fields')
|
5 | 5 | .form-group(v-if='fieldVisible(field)', :class='getFieldRowClasses(field)')
|
6 | 6 | label(v-if="fieldTypeHasLabel(field)", :for="getFieldID(field)")
|
|
9 | 9 | i.icon
|
10 | 10 | .helpText(v-html='field.help')
|
11 | 11 | .field-wrap
|
12 |
| - component(:is='getFieldType(field)', :disabled='fieldDisabled(field)', :model='model', :schema.sync='field', @model-updated='modelUpdated', @validated="onFieldValidated") |
| 12 | + component(:is='getFieldType(field)', :disabled='fieldDisabled(field)', :model='model', :schema='field', :formOptions='options', @model-updated='modelUpdated', @validated="onFieldValidated") |
13 | 13 | .buttons(v-if='buttonVisibility(field)')
|
14 | 14 | button(v-for='btn in field.buttons', @click='buttonClickHandler(btn, field)', :class='btn.classes') {{ btn.label }}
|
15 | 15 | .hint(v-if='field.hint') {{ field.hint }}
|
16 | 16 | .errors.help-block(v-if='fieldErrors(field).length > 0')
|
17 | 17 | span(v-for='(error, index) in fieldErrors(field)', track-by='index') {{ error }}
|
| 18 | + |
| 19 | + template(v-for='group in groups') |
| 20 | + fieldset |
| 21 | + legend(v-if='group.legend') {{ group.legend }} |
| 22 | + template(v-for='field in group.fields') |
| 23 | + .form-group(v-if='fieldVisible(field)', :class='getFieldRowClasses(field)') |
| 24 | + label(v-if="fieldTypeHasLabel(field)", :for="getFieldID(field)") |
| 25 | + | {{ field.label }} |
| 26 | + span.help(v-if='field.help') |
| 27 | + i.icon |
| 28 | + .helpText(v-html='field.help') |
| 29 | + .field-wrap |
| 30 | + component(:is='getFieldType(field)', :disabled='fieldDisabled(field)', :model='model', :schema='field', :formOptions='options',@model-updated='modelUpdated', @validated="onFieldValidated") |
| 31 | + .buttons(v-if='buttonVisibility(field)') |
| 32 | + button(v-for='btn in field.buttons', @click='buttonClickHandler(btn, field)', :class='btn.classes') {{ btn.label }} |
| 33 | + .hint(v-if='field.hint') {{ field.hint }} |
| 34 | + .errors.help-block(v-if='fieldErrors(field).length > 0') |
| 35 | + span(v-for='(error, index) in fieldErrors(field)', track-by='index') {{ error }} |
18 | 36 | </template>
|
19 | 37 |
|
20 | 38 | <script>
|
21 | 39 | // import Vue from "vue";
|
22 | 40 | import {each, isFunction, isNil, isArray, isString} from "lodash";
|
23 |
| - import getFieldID from "./fields/abstractField"; |
| 41 | + import { slugifyFormID } from "./utils/schema"; |
24 | 42 |
|
25 | 43 | // Load all fields from '../fields' folder
|
26 | 44 | let fieldComponents = {};
|
|
46 | 64 | export default {
|
47 | 65 | components: fieldComponents,
|
48 | 66 |
|
49 |
| - mixins: [ getFieldID ], |
50 |
| -
|
51 | 67 | props: {
|
52 | 68 | schema: Object,
|
53 | 69 |
|
|
93 | 109 | computed: {
|
94 | 110 | fields() {
|
95 | 111 | let res = [];
|
96 |
| - if (this.schema) { |
| 112 | + if (this.schema && this.schema.fields) { |
97 | 113 | each(this.schema.fields, (field) => {
|
98 | 114 | if (!this.multiple || field.multi === true)
|
99 | 115 | res.push(field);
|
100 | 116 | });
|
101 | 117 | }
|
102 | 118 |
|
| 119 | + return res; |
| 120 | + }, |
| 121 | + groups() { |
| 122 | + let res = []; |
| 123 | + if (this.schema && this.schema.groups) { |
| 124 | + each(this.schema.groups, (group) => { |
| 125 | + res.push(group); |
| 126 | + }); |
| 127 | + } |
| 128 | +
|
103 | 129 | return res;
|
104 | 130 | }
|
105 | 131 | },
|
|
315 | 341 | fieldErrors(field) {
|
316 | 342 | let res = this.errors.filter(e => e.field == field);
|
317 | 343 | return res.map(item => item.error);
|
318 |
| - } |
| 344 | + }, |
| 345 | +
|
| 346 | + getFieldID(schema) { |
| 347 | + const idPrefix = this.options && this.options.fieldIdPrefix ? this.options.fieldIdPrefix : ""; |
| 348 | + return slugifyFormID(schema, idPrefix); |
| 349 | + } |
319 | 350 | }
|
320 | 351 | };
|
321 | 352 |
|
|
0 commit comments