rb-document-form-constructor 0.3.1 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- 'use strict';var crypto=require('crypto');function _interopDefaultLegacy(e){return e&&typeof e==='object'&&'default'in e?e:{'default':e}}var crypto__default=/*#__PURE__*/_interopDefaultLegacy(crypto);function ownKeys(object, enumerableOnly) {
1
+ 'use strict';var Vue=require('vue'),crypto=require('crypto');function _interopDefaultLegacy(e){return e&&typeof e==='object'&&'default'in e?e:{'default':e}}var Vue__default=/*#__PURE__*/_interopDefaultLegacy(Vue);var crypto__default=/*#__PURE__*/_interopDefaultLegacy(crypto);function ownKeys(object, enumerableOnly) {
2
2
  var keys = Object.keys(object);
3
3
 
4
4
  if (Object.getOwnPropertySymbols) {
@@ -4949,6 +4949,12 @@ var __applyRefProps = function __applyRefProps(input, refConfig) {
4949
4949
  }
4950
4950
  };
4951
4951
 
4952
+ var __filterInputsByMultiple = function __filterInputsByMultiple(inputs, multiple) {
4953
+ return inputs.filter(function (i) {
4954
+ return i.multiple && multiple || !i.multiple && !multiple;
4955
+ });
4956
+ };
4957
+
4952
4958
  var fcInputs = {
4953
4959
  string: {
4954
4960
  text: 'Текст',
@@ -5112,25 +5118,38 @@ var UtFormConstructor = {
5112
5118
  }
5113
5119
  },
5114
5120
  getInputTypes: function getInputTypes(field) {
5121
+ var inputs = [];
5122
+
5115
5123
  if (!field) {
5116
- return [];
5124
+ return inputs;
5117
5125
  }
5118
5126
 
5119
5127
  if (field.dict && !this.config.refInputs[field.ref]) {
5120
- return this.config.dictInputs;
5121
- }
5122
-
5123
- if (field.ref) {
5124
- return this.config.refInputs[field.ref];
5128
+ inputs = __filterInputsByMultiple(this.config.dictInputs, field.multiple);
5129
+ } else if (field.ref) {
5130
+ inputs = __filterInputsByMultiple(this.config.refInputs[field.ref], field.multiple);
5131
+ } else {
5132
+ inputs = __filterInputsByMultiple(this.config.primitiveInputs[field.type], field.multiple);
5125
5133
  }
5126
5134
 
5127
- return this.config.primitiveInputs[field.type];
5135
+ return inputs;
5136
+ },
5137
+ hasMultipleInputTypes: function hasMultipleInputTypes(field) {
5138
+ var inputs = this.getInputTypes(_objectSpread2(_objectSpread2({}, field), {}, {
5139
+ multiple: true
5140
+ }));
5141
+ return inputs && inputs.length > 0;
5128
5142
  },
5129
5143
  getDefaultInput: function getDefaultInput(field) {
5130
5144
  var input = null;
5145
+ var inputs = this.getInputTypes(field);
5146
+
5147
+ if (!inputs) {
5148
+ input = this.primitiveInputs[0];
5149
+ }
5131
5150
 
5132
5151
  if (field.ref && this.config.refInputs[field.ref]) {
5133
- input = __clone(this.config.refInputs[field.ref][0]);
5152
+ input = __clone(inputs[0]);
5134
5153
 
5135
5154
  __applyDefaultProps(input);
5136
5155
 
@@ -5138,12 +5157,12 @@ var UtFormConstructor = {
5138
5157
  __applyRefProps(input, this.config.refInputConfigs[field.ref][input.name]);
5139
5158
  }
5140
5159
  } else if (field.dict) {
5141
- input = __clone(this.config.dictInputs[0]);
5160
+ input = __clone(inputs[0]);
5142
5161
  input.props.dict.default = field.ref;
5143
5162
 
5144
5163
  __applyDefaultProps(input);
5145
5164
  } else {
5146
- input = __clone(this.config.primitiveInputs[field.type][0]);
5165
+ input = __clone(inputs[0]);
5147
5166
 
5148
5167
  __applyDefaultProps(input);
5149
5168
  }
@@ -5181,17 +5200,12 @@ var UtFormConstructor = {
5181
5200
  runRule: function runRule(context, script) {
5182
5201
  context = context ? context : {};
5183
5202
  context['console'] = console;
5184
- var appendScript = '';
5185
- /*for(let v in context) {
5186
- appendScript = appendScript + `var ${v} = this.${v};\n`;
5187
- }
5188
- appendScript = appendScript? appendScript + '\n': '';*/
5189
5203
 
5190
5204
  var func = function func(script) {
5191
5205
  return notevil(script, context);
5192
5206
  };
5193
5207
 
5194
- func.call(context, appendScript + script);
5208
+ func.call(context, script);
5195
5209
  }
5196
5210
  };//
5197
5211
  //
@@ -10856,6 +10870,15 @@ if (typeof window !== "undefined" && "Vue" in window) {
10856
10870
  });
10857
10871
  this.innerFacets = JSON.parse(JSON.stringify(innerFacets));
10858
10872
  this.allFacets = JSON.parse(JSON.stringify(innerFacets));
10873
+ },
10874
+ getVisibleFields: function getVisibleFields(facet) {
10875
+ if (!facet || !facet.fields) {
10876
+ return [];
10877
+ }
10878
+
10879
+ return facet.fields.filter(function (field) {
10880
+ return !field.hiddenOnFormConfig;
10881
+ });
10859
10882
  }
10860
10883
  },
10861
10884
  created: function created() {
@@ -10890,7 +10913,7 @@ var __vue_render__$4 = function __vue_render__() {
10890
10913
  expression: "facetSearchStr"
10891
10914
  }
10892
10915
  })], 1)], 1)], 1)], 1), _vm._ssrNode(" "), _vm._ssrNode("<div class=\"rb-facet-list\">", "</div>", _vm._l(_vm.innerFacets, function (facet) {
10893
- return facet.fields && facet.fields.length > 0 ? _vm._ssrNode("<div class=\"rb-facet\">", "</div>", [_vm._ssrNode("<h6 class=\"rb-facet-label d-flex cursor-pointer\">", "</h6>", [_c('rb-text', {
10916
+ return _vm.getVisibleFields(facet).length > 0 ? _vm._ssrNode("<div class=\"rb-facet\">", "</div>", [_vm._ssrNode("<h6 class=\"rb-facet-label d-flex cursor-pointer\">", "</h6>", [_c('rb-text', {
10894
10917
  staticClass: "flex-fill"
10895
10918
  }, [_vm._v(_vm._s(facet.labelRu))]), _vm._ssrNode(" "), _c('rb-icon', {
10896
10919
  attrs: {
@@ -10919,7 +10942,7 @@ var __vue_render__$4 = function __vue_render__() {
10919
10942
  },
10920
10943
  expression: "facet.fields"
10921
10944
  }
10922
- }, _vm._l(facet.fields, function (field) {
10945
+ }, _vm._l(_vm.getVisibleFields(facet), function (field) {
10923
10946
  return _c('b-list-group-item', {
10924
10947
  key: field.name,
10925
10948
  staticClass: "cursor-pointer"
@@ -10937,7 +10960,7 @@ var __vue_inject_styles__$4 = undefined;
10937
10960
  var __vue_scope_id__$4 = undefined;
10938
10961
  /* module identifier */
10939
10962
 
10940
- var __vue_module_identifier__$4 = "data-v-0fee67ee";
10963
+ var __vue_module_identifier__$4 = "data-v-be2c30ac";
10941
10964
  /* functional template */
10942
10965
 
10943
10966
  var __vue_is_functional_template__$4 = false;
@@ -11022,17 +11045,24 @@ var script$3 = {
11022
11045
  return {};
11023
11046
  }
11024
11047
  },
11025
- validationState: {
11026
- type: Object,
11027
- default: function _default() {
11028
- return {};
11029
- }
11048
+ refDataSuffix: {
11049
+ type: String,
11050
+ default: 'Data'
11030
11051
  }
11031
11052
  },
11053
+ data: function data() {
11054
+ return {
11055
+ validationState: {}
11056
+ };
11057
+ },
11032
11058
  methods: {
11033
11059
  onEventFired: function onEventFired(eventName, event, field) {
11034
11060
  var _this = this;
11035
11061
 
11062
+ if (eventName === 'input' && field.ref) {
11063
+ this.doc[field.name + this.refDataSuffix] = null;
11064
+ }
11065
+
11036
11066
  if (field.rules) {
11037
11067
  field.rules.forEach(function (rule) {
11038
11068
  if (rule.event === eventName && rule.script) {
@@ -11045,16 +11075,45 @@ var script$3 = {
11045
11075
  }
11046
11076
  });
11047
11077
  }
11078
+ },
11079
+ validate: function validate() {
11080
+ var _this2 = this;
11081
+
11082
+ this.formConfig.sections.forEach(function (s) {
11083
+ s.columns.forEach(function (c) {
11084
+ c.fields.forEach(function (f) {
11085
+ if (f.required && _this2.doc[f.name] == null) {
11086
+ Vue__default["default"].set(_this2.validationState, f.name, false);
11087
+ Vue__default["default"].set(_this2.validationState, "".concat(f.name, "__feedback"), "\u041F\u043E\u043B\u0435 ".concat(f.labelRu, " \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E"));
11088
+ } else {
11089
+ Vue__default["default"].set(_this2.validationState, f.name, null);
11090
+ }
11091
+
11092
+ _this2.onEventFired('validate', {
11093
+ validationState: _this2.validationState,
11094
+ doc: _this2.doc
11095
+ }, f);
11096
+ });
11097
+ });
11098
+ });
11099
+
11100
+ for (var fieldName in this.validationState) {
11101
+ if (this.validationState[fieldName] === false) {
11102
+ return false;
11103
+ }
11104
+ }
11105
+
11106
+ return true;
11048
11107
  }
11049
11108
  },
11050
11109
  created: function created() {
11051
- var _this2 = this;
11110
+ var _this3 = this;
11052
11111
 
11053
11112
  if (this.applyDefaultValues) {
11054
11113
  this.formConfig.sections.forEach(function (r) {
11055
11114
  r.columns.forEach(function (c) {
11056
11115
  c.fields.forEach(function (f) {
11057
- _this2.$set(_this2.doc, f.name, f.defaultValue == null ? null : f.defaultValue);
11116
+ _this3.$set(_this3.doc, f.name, f.defaultValue == null ? null : f.defaultValue);
11058
11117
  });
11059
11118
  });
11060
11119
  });
@@ -11122,7 +11181,7 @@ var __vue_render__$3 = function __vue_render__() {
11122
11181
  },
11123
11182
  expression: "doc[field.name]"
11124
11183
  }
11125
- }, 'component', field.input.propsData, false))], 1)], 1)], 1) : _vm._e()];
11184
+ }, 'component', field.input.propsData, false)), _vm._v(" "), !_vm.validationState[field.name] ? _c('b-form-invalid-feedback', [_vm._v("\n " + _vm._s(_vm.validationState[field.name + "__feedback"]) + "\n ")]) : _vm._e()], 1)], 1)], 1) : _vm._e()];
11126
11185
  })], 2);
11127
11186
  }), 0)]) : _vm._e();
11128
11187
  }), 0);
@@ -11137,7 +11196,7 @@ var __vue_inject_styles__$3 = undefined;
11137
11196
  var __vue_scope_id__$3 = undefined;
11138
11197
  /* module identifier */
11139
11198
 
11140
- var __vue_module_identifier__$3 = "data-v-60c54c35";
11199
+ var __vue_module_identifier__$3 = "data-v-6a1523d3";
11141
11200
  /* functional template */
11142
11201
 
11143
11202
  var __vue_is_functional_template__$3 = false;
@@ -11445,7 +11504,11 @@ var __vue_render__$2 = function __vue_render__() {
11445
11504
  attrs: {
11446
11505
  "value": 'click'
11447
11506
  }
11448
- }, [_vm._v("\n Клик\n ")])], 1)], 1)], 1), _vm._v(" "), _c('b-col', {
11507
+ }, [_vm._v("\n Клик\n ")]), _vm._v(" "), _c('b-form-select-option', {
11508
+ attrs: {
11509
+ "value": 'validate'
11510
+ }
11511
+ }, [_vm._v("\n Валидация\n ")])], 1)], 1)], 1), _vm._v(" "), _c('b-col', {
11449
11512
  attrs: {
11450
11513
  "lg": "12"
11451
11514
  }
@@ -11553,7 +11616,7 @@ var __vue_inject_styles__$2 = undefined;
11553
11616
  var __vue_scope_id__$2 = undefined;
11554
11617
  /* module identifier */
11555
11618
 
11556
- var __vue_module_identifier__$2 = "data-v-3e86235a";
11619
+ var __vue_module_identifier__$2 = "data-v-397a42e7";
11557
11620
  /* functional template */
11558
11621
 
11559
11622
  var __vue_is_functional_template__$2 = false;
@@ -11612,6 +11675,12 @@ var FieldRuleFormModal = __vue_component__$3;var script$1 = {
11612
11675
  },
11613
11676
  rules: function rules() {
11614
11677
  return UtFormConstructor.getAvailableFieldRules(this.field);
11678
+ },
11679
+ hasMultipleInputTypes: function hasMultipleInputTypes() {
11680
+ return UtFormConstructor.hasMultipleInputTypes(this.field);
11681
+ },
11682
+ multiple: function multiple() {
11683
+ return this.field && this.field.multiple;
11615
11684
  }
11616
11685
  },
11617
11686
  watch: {
@@ -11631,6 +11700,10 @@ var FieldRuleFormModal = __vue_component__$3;var script$1 = {
11631
11700
  },
11632
11701
  currentInputName: function currentInputName() {
11633
11702
  this.field.input = UtFormConstructor.getInputTypeByName(this.currentInputName, this.field);
11703
+ },
11704
+ multiple: function multiple() {
11705
+ var input = UtFormConstructor.getDefaultInput(this.field);
11706
+ this.currentInputName = input.name;
11634
11707
  }
11635
11708
  },
11636
11709
  methods: {
@@ -11802,7 +11875,8 @@ var __vue_render__$1 = function __vue_render__() {
11802
11875
  }
11803
11876
  }, [_c('b-checkbox', {
11804
11877
  attrs: {
11805
- "size": "lg"
11878
+ "size": "lg",
11879
+ "disabled": !_vm.hasMultipleInputTypes
11806
11880
  },
11807
11881
  model: {
11808
11882
  value: _vm.field.multiple,
@@ -11811,7 +11885,7 @@ var __vue_render__$1 = function __vue_render__() {
11811
11885
  },
11812
11886
  expression: "field.multiple"
11813
11887
  }
11814
- }, [_vm._v("Множественное")])], 1)], 1), _vm._v(" "), _c('b-form-row', [_c('b-col', {
11888
+ }, [_vm._v("\n Множественное\n ")])], 1)], 1), _vm._v(" "), _c('b-form-row', [_c('b-col', {
11815
11889
  attrs: {
11816
11890
  "lg": "12"
11817
11891
  }
@@ -11980,7 +12054,7 @@ var __vue_inject_styles__$1 = undefined;
11980
12054
  var __vue_scope_id__$1 = undefined;
11981
12055
  /* module identifier */
11982
12056
 
11983
- var __vue_module_identifier__$1 = "data-v-6fd56ef5";
12057
+ var __vue_module_identifier__$1 = "data-v-e86e382e";
11984
12058
  /* functional template */
11985
12059
 
11986
12060
  var __vue_is_functional_template__$1 = false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rb-document-form-constructor",
3
- "version": "0.3.1",
3
+ "version": "0.3.5",
4
4
  "description": "",
5
5
  "main": "dist/rb-document-form-constructor.ssr.js",
6
6
  "browser": "dist/rb-document-form-constructor.esm.js",
@@ -16,7 +16,7 @@
16
16
  "prebuild": "rimraf ./dist",
17
17
  "build": "cross-env NODE_ENV=production rollup --config build/rollup.config.js",
18
18
  "build:ssr": "cross-env NODE_ENV=production rollup --config build/rollup.config.js --format cjs",
19
- "build:es": "cross-env NODE_ENV=production rollup --config build/rollup.config.js --format es",
19
+ "build:es": "cross-env NODE_ENV=pеroduction rollup --config build/rollup.config.js --format es",
20
20
  "build:unpkg": "cross-env kNODE_ENV=production rollup --config build/rollup.config.js --format iife"
21
21
  },
22
22
  "dependencies": {
@@ -19,6 +19,9 @@
19
19
  @change="onEventFired('change', $event, field)"
20
20
  @click="onEventFired('click', $event, field)"
21
21
  v-bind="field.input.propsData"></component>
22
+ <b-form-invalid-feedback v-if="!validationState[field.name]">
23
+ {{validationState[`${field.name}__feedback`]}}
24
+ </b-form-invalid-feedback>
22
25
  </b-form-group>
23
26
  </b-col>
24
27
  </b-form-row>
@@ -30,6 +33,7 @@
30
33
  </template>
31
34
 
32
35
  <script>
36
+ import Vue from 'vue';
33
37
  import {UtFormConstructor} from "../utils/UtFormConstructor";
34
38
 
35
39
  export default {
@@ -38,10 +42,19 @@
38
42
  formConfig: Object,
39
43
  applyDefaultValues: {type: Boolean, default: true},
40
44
  doc: {type: Object, default: () => ({})},
41
- validationState: {type: Object, default: () => ({})}
45
+ refDataSuffix: {type: String, default: 'Data'}
46
+ },
47
+ data() {
48
+ return {
49
+ validationState: {}
50
+ }
42
51
  },
43
52
  methods: {
44
53
  onEventFired(eventName, event, field) {
54
+ if (eventName === 'input' && field.ref) {
55
+ this.doc[field.name + this.refDataSuffix] = null;
56
+ }
57
+
45
58
  if (field.rules) {
46
59
  field.rules.forEach(rule => {
47
60
  if (rule.event === eventName && rule.script) {
@@ -54,6 +67,34 @@
54
67
  }
55
68
  })
56
69
  }
70
+ },
71
+ validate() {
72
+ this.formConfig.sections.forEach(s => {
73
+ s.columns.forEach(c => {
74
+ c.fields.forEach(f => {
75
+ if (f.required && this.doc[f.name] == null) {
76
+ Vue.set(this.validationState, f.name, false);
77
+ Vue.set(this.validationState, `${f.name}__feedback`,
78
+ `Поле ${f.labelRu} обязательно`);
79
+ } else {
80
+ Vue.set(this.validationState, f.name, null);
81
+ }
82
+
83
+ this.onEventFired('validate', {
84
+ validationState: this.validationState,
85
+ doc: this.doc,
86
+ }, f);
87
+ })
88
+ })
89
+ });
90
+
91
+ for (let fieldName in this.validationState) {
92
+ if (this.validationState[fieldName] === false) {
93
+ return false;
94
+ }
95
+ }
96
+
97
+ return true;
57
98
  }
58
99
  },
59
100
  created() {
@@ -13,7 +13,7 @@
13
13
  </b-form>
14
14
  <div class="rb-facet-list">
15
15
  <div class="rb-facet" v-for="facet in innerFacets"
16
- :key="facet.name" v-if="facet.fields && facet.fields.length > 0">
16
+ :key="facet.name" v-if="getVisibleFields(facet).length > 0">
17
17
  <h6 class="rb-facet-label d-flex cursor-pointer" @click="facet.expanded = !facet.expanded">
18
18
  <rb-text class="flex-fill">{{facet.labelRu}}</rb-text>
19
19
  <rb-icon :icon="facet.expanded? iconCollapseFacet: iconExpandFacet"></rb-icon>
@@ -26,7 +26,8 @@
26
26
  :group="{name: 'fields', pull: 'clone', put: false}"
27
27
  @end="onFieldMoveEnd($event)"
28
28
  ghost-class="rb-facet-field-moving">
29
- <b-list-group-item v-for="field in facet.fields" :key="field.name"
29
+ <b-list-group-item v-for="field in getVisibleFields(facet)"
30
+ :key="field.name"
30
31
  class="cursor-pointer">
31
32
  <rb-text>{{field.labelRu}}</rb-text>
32
33
  </b-list-group-item>
@@ -103,6 +104,13 @@
103
104
  let innerFacets = this.facets.map(f => ({...f, expanded: false}));
104
105
  this.innerFacets = JSON.parse(JSON.stringify(innerFacets));
105
106
  this.allFacets = JSON.parse(JSON.stringify(innerFacets));
107
+ },
108
+ getVisibleFields(facet) {
109
+ if (!facet || !facet.fields) {
110
+ return [];
111
+ }
112
+
113
+ return facet.fields.filter(field => !field.hiddenOnFormConfig);
106
114
  }
107
115
  },
108
116
  created() {
@@ -40,7 +40,9 @@
40
40
  </b-form-row>
41
41
  <b-form-row>
42
42
  <b-col lg="12">
43
- <b-checkbox size="lg" v-model="field.multiple">Множественное</b-checkbox>
43
+ <b-checkbox size="lg" v-model="field.multiple" :disabled="!hasMultipleInputTypes">
44
+ Множественное
45
+ </b-checkbox>
44
46
  </b-col>
45
47
  </b-form-row>
46
48
  <b-form-row>
@@ -130,7 +132,6 @@
130
132
  </template>
131
133
 
132
134
  <script>
133
- import {UtFormConfig} from "@/utils/UtFormConfig";
134
135
  import FieldRuleFormModal from "./FieldRuleFormModal";
135
136
  import {v4 as uuidv4} from 'uuid';
136
137
  import {UtFormConstructor} from "../utils/UtFormConstructor";
@@ -177,6 +178,12 @@
177
178
  },
178
179
  rules() {
179
180
  return UtFormConstructor.getAvailableFieldRules(this.field);
181
+ },
182
+ hasMultipleInputTypes() {
183
+ return UtFormConstructor.hasMultipleInputTypes(this.field);
184
+ },
185
+ multiple() {
186
+ return this.field && this.field.multiple;
180
187
  }
181
188
  },
182
189
  watch: {
@@ -196,6 +203,10 @@
196
203
  currentInputName() {
197
204
  this.field.input = UtFormConstructor.getInputTypeByName(this.currentInputName, this.field);
198
205
  },
206
+ multiple() {
207
+ let input = UtFormConstructor.getDefaultInput(this.field);
208
+ this.currentInputName = input.name;
209
+ }
199
210
  },
200
211
  methods: {
201
212
  hide() {
@@ -53,6 +53,9 @@
53
53
  <b-form-select-option :value="'click'">
54
54
  Клик
55
55
  </b-form-select-option>
56
+ <b-form-select-option :value="'validate'">
57
+ Валидация
58
+ </b-form-select-option>
56
59
  </b-form-select>
57
60
  </b-form-group>
58
61
  </b-col>