rb-document-form-constructor 0.2.9 → 0.3.3

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,3 +1,4 @@
1
+ import Vue from 'vue';
1
2
  import crypto from 'crypto';
2
3
 
3
4
  const UtFormConfig = {
@@ -79,6 +80,20 @@ const UtFormConfig = {
79
80
  }
80
81
  });
81
82
  return fields;
83
+ },
84
+
85
+ parseFacets(formConfig) {
86
+ let facets = [];
87
+ formConfig.sections.every(section => {
88
+ section.columns.every(c => {
89
+ c.fields.forEach(f => {
90
+ if (!facets.indexOf(f.facet)) {
91
+ facets.push(f.facet);
92
+ }
93
+ });
94
+ });
95
+ });
96
+ return facets;
82
97
  }
83
98
 
84
99
  };
@@ -4841,6 +4856,12 @@ let __applyRefProps = function (input, refConfig) {
4841
4856
  }
4842
4857
  };
4843
4858
 
4859
+ let __filterInputsByMultiple = function (inputs, multiple) {
4860
+ return inputs.filter(i => {
4861
+ return i.multiple && multiple || !i.multiple && !multiple;
4862
+ });
4863
+ };
4864
+
4844
4865
  let fcInputs = {
4845
4866
  string: {
4846
4867
  text: 'Текст',
@@ -5006,26 +5027,40 @@ const UtFormConstructor = {
5006
5027
  },
5007
5028
 
5008
5029
  getInputTypes(field) {
5030
+ let inputs = [];
5031
+
5009
5032
  if (!field) {
5010
- return [];
5033
+ return inputs;
5011
5034
  }
5012
5035
 
5013
5036
  if (field.dict && !this.config.refInputs[field.ref]) {
5014
- return this.config.dictInputs;
5037
+ inputs = __filterInputsByMultiple(this.config.dictInputs, field.multiple);
5038
+ } else if (field.ref) {
5039
+ inputs = __filterInputsByMultiple(this.config.refInputs[field.ref], field.multiple);
5040
+ } else {
5041
+ inputs = __filterInputsByMultiple(this.config.primitiveInputs[field.type], field.multiple);
5015
5042
  }
5016
5043
 
5017
- if (field.ref) {
5018
- return this.config.refInputs[field.ref];
5019
- }
5044
+ return inputs;
5045
+ },
5020
5046
 
5021
- return this.config.primitiveInputs[field.type];
5047
+ hasMultipleInputTypes(field) {
5048
+ let inputs = this.getInputTypes({ ...field,
5049
+ multiple: true
5050
+ });
5051
+ return inputs && inputs.length > 0;
5022
5052
  },
5023
5053
 
5024
5054
  getDefaultInput(field) {
5025
5055
  let input = null;
5056
+ let inputs = this.getInputTypes(field);
5057
+
5058
+ if (!inputs) {
5059
+ input = this.primitiveInputs[0];
5060
+ }
5026
5061
 
5027
5062
  if (field.ref && this.config.refInputs[field.ref]) {
5028
- input = __clone(this.config.refInputs[field.ref][0]);
5063
+ input = __clone(inputs[0]);
5029
5064
 
5030
5065
  __applyDefaultProps(input);
5031
5066
 
@@ -5033,12 +5068,12 @@ const UtFormConstructor = {
5033
5068
  __applyRefProps(input, this.config.refInputConfigs[field.ref][input.name]);
5034
5069
  }
5035
5070
  } else if (field.dict) {
5036
- input = __clone(this.config.dictInputs[0]);
5071
+ input = __clone(inputs[0]);
5037
5072
  input.props.dict.default = field.ref;
5038
5073
 
5039
5074
  __applyDefaultProps(input);
5040
5075
  } else {
5041
- input = __clone(this.config.primitiveInputs[field.type][0]);
5076
+ input = __clone(inputs[0]);
5042
5077
 
5043
5078
  __applyDefaultProps(input);
5044
5079
  }
@@ -5080,17 +5115,12 @@ const UtFormConstructor = {
5080
5115
  runRule(context, script) {
5081
5116
  context = context ? context : {};
5082
5117
  context['console'] = console;
5083
- let appendScript = '';
5084
- /*for(let v in context) {
5085
- appendScript = appendScript + `var ${v} = this.${v};\n`;
5086
- }
5087
- appendScript = appendScript? appendScript + '\n': '';*/
5088
5118
 
5089
5119
  let func = function (script) {
5090
5120
  return notevil(script, context);
5091
5121
  };
5092
5122
 
5093
- func.call(context, appendScript + script);
5123
+ func.call(context, script);
5094
5124
  }
5095
5125
 
5096
5126
  };
@@ -10972,13 +11002,24 @@ var script$3 = {
10972
11002
  type: Object,
10973
11003
  default: () => ({})
10974
11004
  },
10975
- validationState: {
10976
- type: Object,
10977
- default: () => ({})
11005
+ refDataSuffix: {
11006
+ type: String,
11007
+ default: 'Data'
10978
11008
  }
10979
11009
  },
11010
+
11011
+ data() {
11012
+ return {
11013
+ validationState: {}
11014
+ };
11015
+ },
11016
+
10980
11017
  methods: {
10981
11018
  onEventFired(eventName, event, field) {
11019
+ if (eventName === 'input' && field.ref) {
11020
+ this.doc[field.name + this.refDataSuffix] = null;
11021
+ }
11022
+
10982
11023
  if (field.rules) {
10983
11024
  field.rules.forEach(rule => {
10984
11025
  if (rule.event === eventName && rule.script) {
@@ -10991,6 +11032,34 @@ var script$3 = {
10991
11032
  }
10992
11033
  });
10993
11034
  }
11035
+ },
11036
+
11037
+ validate() {
11038
+ this.formConfig.sections.forEach(s => {
11039
+ s.columns.forEach(c => {
11040
+ c.fields.forEach(f => {
11041
+ if (f.required && this.doc[f.name] == null) {
11042
+ Vue.set(this.validationState, f.name, false);
11043
+ Vue.set(this.validationState, `${f.name}__feedback`, `Поле ${f.labelRu} обязательно`);
11044
+ } else {
11045
+ Vue.set(this.validationState, f.name, null);
11046
+ }
11047
+
11048
+ this.onEventFired('validate', {
11049
+ validationState: this.validationState,
11050
+ doc: this.doc
11051
+ }, f);
11052
+ });
11053
+ });
11054
+ });
11055
+
11056
+ for (let fieldName in this.validationState) {
11057
+ if (!this.validationState[fieldName]) {
11058
+ return false;
11059
+ }
11060
+ }
11061
+
11062
+ return true;
10994
11063
  }
10995
11064
 
10996
11065
  },
@@ -11023,7 +11092,7 @@ var __vue_render__$3 = function () {
11023
11092
  return _c('b-form', {
11024
11093
  staticClass: "rb-doc-form"
11025
11094
  }, _vm._l(_vm.formConfig.sections, function (section) {
11026
- return _c('div', {
11095
+ return _vm.formConfig && _vm.formConfig.sections ? _c('div', {
11027
11096
  key: section.labelRu,
11028
11097
  staticClass: "rb-form-section"
11029
11098
  }, [_c('h4', [_vm._v(_vm._s(section.labelRu))]), _vm._v(" "), _c('div', {
@@ -11071,9 +11140,9 @@ var __vue_render__$3 = function () {
11071
11140
  },
11072
11141
  expression: "doc[field.name]"
11073
11142
  }
11074
- }, 'component', field.input.propsData, false))], 1)], 1)], 1) : _vm._e()];
11143
+ }, '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()];
11075
11144
  })], 2);
11076
- }), 0)]);
11145
+ }), 0)]) : _vm._e();
11077
11146
  }), 0);
11078
11147
  };
11079
11148
 
@@ -11413,7 +11482,11 @@ var __vue_render__$2 = function () {
11413
11482
  attrs: {
11414
11483
  "value": 'click'
11415
11484
  }
11416
- }, [_vm._v("\n Клик\n ")])], 1)], 1)], 1), _vm._v(" "), _c('b-col', {
11485
+ }, [_vm._v("\n Клик\n ")]), _vm._v(" "), _c('b-form-select-option', {
11486
+ attrs: {
11487
+ "value": 'validate'
11488
+ }
11489
+ }, [_vm._v("\n Валидация\n ")])], 1)], 1)], 1), _vm._v(" "), _c('b-col', {
11417
11490
  attrs: {
11418
11491
  "lg": "12"
11419
11492
  }
@@ -11589,6 +11662,14 @@ var script$1 = {
11589
11662
 
11590
11663
  rules() {
11591
11664
  return UtFormConstructor.getAvailableFieldRules(this.field);
11665
+ },
11666
+
11667
+ hasMultipleInputTypes() {
11668
+ return UtFormConstructor.hasMultipleInputTypes(this.field);
11669
+ },
11670
+
11671
+ multiple() {
11672
+ return this.field && this.field.multiple;
11592
11673
  }
11593
11674
 
11594
11675
  },
@@ -11612,6 +11693,11 @@ var script$1 = {
11612
11693
 
11613
11694
  currentInputName() {
11614
11695
  this.field.input = UtFormConstructor.getInputTypeByName(this.currentInputName, this.field);
11696
+ },
11697
+
11698
+ multiple() {
11699
+ let input = UtFormConstructor.getDefaultInput(this.field);
11700
+ this.currentInputName = input.name;
11615
11701
  }
11616
11702
 
11617
11703
  },
@@ -11790,7 +11876,8 @@ var __vue_render__$1 = function () {
11790
11876
  }
11791
11877
  }, [_c('b-checkbox', {
11792
11878
  attrs: {
11793
- "size": "lg"
11879
+ "size": "lg",
11880
+ "disabled": !_vm.hasMultipleInputTypes
11794
11881
  },
11795
11882
  model: {
11796
11883
  value: _vm.field.multiple,
@@ -11799,7 +11886,7 @@ var __vue_render__$1 = function () {
11799
11886
  },
11800
11887
  expression: "field.multiple"
11801
11888
  }
11802
- }, [_vm._v("Множественное")])], 1)], 1), _vm._v(" "), _c('b-form-row', [_c('b-col', {
11889
+ }, [_vm._v("\n Множественное\n ")])], 1)], 1), _vm._v(" "), _c('b-form-row', [_c('b-col', {
11803
11890
  attrs: {
11804
11891
  "lg": "12"
11805
11892
  }