|
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