@sankhyalabs/sankhyablocks 1.1.24 → 1.1.25

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.
Files changed (180) hide show
  1. package/dist/cjs/ApplicationUtils-05b74ee9.js +39 -0
  2. package/dist/cjs/AssetsUtils-7e3c38f9.js +24 -0
  3. package/dist/cjs/CSSVarsUtils-75ca9c64.js +19 -0
  4. package/dist/cjs/ez-action-chip.cjs.entry.js +27 -0
  5. package/dist/cjs/ez-application.cjs.entry.js +26 -0
  6. package/dist/cjs/ez-button_4.cjs.entry.js +660 -0
  7. package/dist/cjs/ez-calendar.cjs.entry.js +223 -0
  8. package/dist/cjs/ez-collapsible-box.cjs.entry.js +47 -0
  9. package/dist/cjs/ez-combo-box.cjs.entry.js +278 -0
  10. package/dist/cjs/ez-date-input.cjs.entry.js +102 -0
  11. package/dist/cjs/ez-date-time-input.cjs.entry.js +145 -0
  12. package/dist/cjs/ez-dialog.cjs.entry.js +89 -0
  13. package/dist/cjs/ez-form.cjs.entry.js +463 -0
  14. package/dist/cjs/ez-grid.cjs.entry.js +647 -0
  15. package/dist/cjs/ez-icon.cjs.entry.js +41 -0
  16. package/dist/cjs/ez-label-chip.cjs.entry.js +104 -0
  17. package/dist/cjs/ez-modal_2.cjs.entry.js +316 -0
  18. package/dist/cjs/ez-number-input.cjs.entry.js +86 -0
  19. package/dist/cjs/ez-popover.cjs.entry.js +120 -0
  20. package/dist/cjs/ez-popup.cjs.entry.js +48 -0
  21. package/dist/cjs/ez-search.cjs.entry.js +64 -0
  22. package/dist/cjs/ez-tabselector.cjs.entry.js +198 -0
  23. package/dist/cjs/ez-text-area.cjs.entry.js +114 -0
  24. package/dist/cjs/ez-text-input.cjs.entry.js +201 -0
  25. package/dist/cjs/ez-time-input.cjs.entry.js +118 -0
  26. package/dist/cjs/ez-toast.cjs.entry.js +44 -0
  27. package/dist/cjs/ez-upload.cjs.entry.js +356 -0
  28. package/dist/cjs/index-682c98b2.js +1771 -0
  29. package/dist/cjs/loader.cjs.js +2 -2
  30. package/dist/cjs/sankhyablocks.cjs.js +2 -2
  31. package/dist/cjs/snk-application.cjs.entry.js +6 -41
  32. package/dist/cjs/test-du.cjs.entry.js +76 -0
  33. package/dist/collection/collection-manifest.json +36 -1
  34. package/dist/collection/components/snk-application/snk-application.js +2 -1
  35. package/dist/{collection/temp → components}/ApplicationUtils.js +37 -36
  36. package/dist/components/AssetsUtils.js +22 -0
  37. package/dist/components/CSSVarsUtils.js +17 -0
  38. package/dist/components/ez-action-chip.js +44 -0
  39. package/dist/components/ez-application.js +39 -0
  40. package/dist/components/ez-button.js +6 -0
  41. package/dist/components/ez-button2.js +105 -0
  42. package/dist/components/ez-calendar.js +6 -0
  43. package/dist/components/ez-calendar2.js +242 -0
  44. package/dist/components/ez-check.js +6 -0
  45. package/dist/components/ez-check2.js +94 -0
  46. package/dist/components/ez-collapsible-box.js +67 -0
  47. package/dist/components/ez-combo-box.js +6 -0
  48. package/dist/components/ez-combo-box2.js +311 -0
  49. package/dist/components/ez-date-input.js +135 -0
  50. package/dist/components/ez-date-time-input.js +179 -0
  51. package/dist/components/ez-dialog.js +124 -0
  52. package/dist/components/ez-form.js +6 -0
  53. package/dist/components/ez-form2.js +485 -0
  54. package/dist/components/ez-grid.js +738 -0
  55. package/dist/components/ez-icon.js +6 -0
  56. package/dist/components/ez-icon2.js +56 -0
  57. package/dist/components/ez-label-chip.js +125 -0
  58. package/dist/components/ez-list.js +6 -0
  59. package/dist/components/ez-list2.js +523 -0
  60. package/dist/components/ez-modal.js +6 -0
  61. package/dist/components/ez-modal2.js +82 -0
  62. package/dist/components/ez-number-input.js +115 -0
  63. package/dist/components/ez-popover.js +145 -0
  64. package/dist/components/ez-popup.js +67 -0
  65. package/dist/components/ez-search.js +100 -0
  66. package/dist/components/ez-tabselector.js +6 -0
  67. package/dist/components/ez-tabselector2.js +213 -0
  68. package/dist/components/ez-text-area.js +137 -0
  69. package/dist/components/ez-text-input.js +6 -0
  70. package/dist/components/ez-text-input2.js +223 -0
  71. package/dist/components/ez-time-input.js +153 -0
  72. package/dist/components/ez-toast.js +64 -0
  73. package/dist/components/ez-upload.js +382 -0
  74. package/dist/components/grid-config.js +6 -0
  75. package/dist/components/grid-config2.js +318 -0
  76. package/dist/components/select-box.js +6 -0
  77. package/dist/components/select-box2.js +47 -0
  78. package/dist/components/snk-application.js +1 -36
  79. package/dist/components/test-du.js +101 -0
  80. package/dist/esm/ApplicationUtils-e0b6d857.js +37 -0
  81. package/dist/esm/AssetsUtils-6e6624dc.js +22 -0
  82. package/dist/esm/CSSVarsUtils-0787c3f3.js +17 -0
  83. package/dist/esm/ez-action-chip.entry.js +23 -0
  84. package/dist/esm/ez-application.entry.js +22 -0
  85. package/dist/esm/ez-button_4.entry.js +653 -0
  86. package/dist/esm/ez-calendar.entry.js +219 -0
  87. package/dist/esm/ez-collapsible-box.entry.js +43 -0
  88. package/dist/esm/ez-combo-box.entry.js +274 -0
  89. package/dist/esm/ez-date-input.entry.js +98 -0
  90. package/dist/esm/ez-date-time-input.entry.js +141 -0
  91. package/dist/esm/ez-dialog.entry.js +85 -0
  92. package/dist/esm/ez-form.entry.js +459 -0
  93. package/dist/esm/ez-grid.entry.js +643 -0
  94. package/dist/esm/ez-icon.entry.js +37 -0
  95. package/dist/esm/ez-label-chip.entry.js +100 -0
  96. package/dist/esm/ez-modal_2.entry.js +311 -0
  97. package/dist/esm/ez-number-input.entry.js +82 -0
  98. package/dist/esm/ez-popover.entry.js +116 -0
  99. package/dist/esm/ez-popup.entry.js +44 -0
  100. package/dist/esm/ez-search.entry.js +60 -0
  101. package/dist/esm/ez-tabselector.entry.js +194 -0
  102. package/dist/esm/ez-text-area.entry.js +110 -0
  103. package/dist/esm/ez-text-input.entry.js +197 -0
  104. package/dist/esm/ez-time-input.entry.js +114 -0
  105. package/dist/esm/ez-toast.entry.js +40 -0
  106. package/dist/esm/ez-upload.entry.js +352 -0
  107. package/dist/esm/index-35088a3f.js +1740 -0
  108. package/dist/esm/loader.js +2 -2
  109. package/dist/esm/sankhyablocks.js +2 -2
  110. package/dist/esm/snk-application.entry.js +2 -37
  111. package/dist/esm/test-du.entry.js +72 -0
  112. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-action-chip/ez-action-chip.css +67 -0
  113. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-application/ez-application.css +3 -0
  114. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-button/ez-button.css +180 -0
  115. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-calendar/ez-calendar.css +319 -0
  116. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-check/ez-check.css +327 -0
  117. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-collapsible-box/ez-collapsible-box.css +162 -0
  118. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-combo-box/ez-combo-box.css +217 -0
  119. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-date-input/ez-date-input.css +49 -0
  120. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-date-time-input/ez-date-time-input.css +44 -0
  121. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-dialog/ez-dialog.css +527 -0
  122. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-form/ez-form.css +5 -0
  123. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-grid/ez-grid.css +31 -0
  124. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-grid/subcomponents/gridconfig/grid-config.css +129 -0
  125. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-grid/subcomponents/select-box/select-box.css +10 -0
  126. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-icon/ez-icon.css +176 -0
  127. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-label-chip/ez-label-chip.css +139 -0
  128. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-list/ez-list.css +335 -0
  129. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-modal/ez-modal.css +358 -0
  130. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-number-input/ez-number-input.css +4 -0
  131. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-popover/ez-popover.css +44 -0
  132. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-popup/ez-popup.css +405 -0
  133. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-search/ez-search.css +3 -0
  134. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-tabselector/ez-tabselector.css +138 -0
  135. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-text-area/ez-text-area.css +165 -0
  136. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-text-input/ez-text-input.css +196 -0
  137. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-time-input/ez-time-input.css +10 -0
  138. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-toast/ez-toast.css +127 -0
  139. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/ez-upload/ez-upload.css +568 -0
  140. package/dist/node_modules/@sankhyalabs/ezui/dist/collection/components/test-du/test-du.css +3 -0
  141. package/dist/sankhyablocks/p-0183d259.entry.js +1 -0
  142. package/dist/sankhyablocks/p-01f23a70.entry.js +1 -0
  143. package/dist/sankhyablocks/p-07c32f68.entry.js +1 -0
  144. package/dist/sankhyablocks/p-0f90499d.entry.js +1 -0
  145. package/dist/sankhyablocks/p-105724a3.entry.js +1 -0
  146. package/dist/sankhyablocks/p-2ac02d48.entry.js +1 -0
  147. package/dist/sankhyablocks/p-35364a97.entry.js +1 -0
  148. package/dist/sankhyablocks/p-3f6aa9a7.entry.js +1 -0
  149. package/dist/sankhyablocks/p-5f9af495.entry.js +1 -0
  150. package/dist/sankhyablocks/p-60967cf0.js +1 -0
  151. package/dist/sankhyablocks/p-6ce33b60.entry.js +57 -0
  152. package/dist/sankhyablocks/p-70ad6c16.entry.js +1 -0
  153. package/dist/sankhyablocks/p-710bfffe.entry.js +1 -0
  154. package/dist/sankhyablocks/p-735440c1.entry.js +1 -0
  155. package/dist/sankhyablocks/p-811b4b9d.js +1 -0
  156. package/dist/sankhyablocks/p-813fe4f7.js +1 -0
  157. package/dist/sankhyablocks/p-85a9446b.js +2 -0
  158. package/dist/sankhyablocks/p-89a1100f.entry.js +1 -0
  159. package/dist/sankhyablocks/p-8b543003.entry.js +1 -0
  160. package/dist/sankhyablocks/p-9750632b.entry.js +1 -0
  161. package/dist/sankhyablocks/p-a96272f7.entry.js +1 -0
  162. package/dist/sankhyablocks/p-ac8842e5.entry.js +1 -0
  163. package/dist/sankhyablocks/p-ba64cc41.entry.js +1 -0
  164. package/dist/sankhyablocks/p-c1ede043.entry.js +1 -0
  165. package/dist/sankhyablocks/p-d90ebb85.entry.js +1 -0
  166. package/dist/sankhyablocks/p-e17dfaae.entry.js +1 -0
  167. package/dist/sankhyablocks/p-e5355a29.entry.js +1 -0
  168. package/dist/sankhyablocks/p-ef04b633.entry.js +1 -0
  169. package/dist/sankhyablocks/p-f6db07fb.entry.js +1 -0
  170. package/dist/sankhyablocks/p-fcd9bd92.entry.js +1 -0
  171. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  172. package/package.json +1 -1
  173. package/react/components.d.ts +29 -0
  174. package/react/components.js +29 -0
  175. package/react/components.js.map +1 -1
  176. package/dist/cjs/index-4720dab8.js +0 -735
  177. package/dist/esm/index-72d4e2e0.js +0 -709
  178. package/dist/sankhyablocks/p-45635e4f.entry.js +0 -57
  179. package/dist/sankhyablocks/p-a33afc3b.js +0 -2
  180. package/dist/types/temp/ApplicationUtils.d.ts +0 -11
@@ -0,0 +1,463 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-682c98b2.js');
6
+ const core = require('@sankhyalabs/core');
7
+ const redux = require('redux');
8
+ const ApplicationUtils = require('./ApplicationUtils-05b74ee9.js');
9
+
10
+ const buildTextArea = ({ name, label, readOnly }) => {
11
+ return (index.h("div", { class: "col col--sd-12 padding-horizontal--small", key: name },
12
+ index.h("ez-text-area", { enabled: !readOnly, label: label, "data-field-name": name })));
13
+ };
14
+
15
+ const buildTextInput = ({ name, label }) => {
16
+ return (index.h("div", { class: "col col--sd-12 col--tb-3 padding-horizontal--small" },
17
+ index.h("ez-text-input", { label: label, "data-field-name": name, key: name })));
18
+ };
19
+
20
+ const buildSwitch = (fieldConfig) => {
21
+ return buildField$1(fieldConfig.name, fieldConfig.label, fieldConfig.readOnly, true);
22
+ };
23
+ const buildCheckBox = (fieldConfig) => {
24
+ return buildField$1(fieldConfig.name, fieldConfig.label, fieldConfig.readOnly, false);
25
+ };
26
+ function buildField$1(fieldName, fieldLabel, readOnly, switchMode = false) {
27
+ return (index.h("div", { class: "col col--sd-12 col--tb-3 align--middle padding-horizontal--small padding-bottom--large" },
28
+ index.h("ez-check", { enabled: !readOnly, label: fieldLabel, mode: switchMode ? "switch" : "regular", "data-field-name": fieldName, key: fieldName })));
29
+ }
30
+
31
+ const buildComboBox = ({ name, label, readOnly }, properties) => {
32
+ const prop = properties === null || properties === void 0 ? void 0 : properties.options;
33
+ let options;
34
+ if (typeof prop === "string") {
35
+ const parsed = JSON.parse(prop);
36
+ options = Object.keys(parsed).map(key => { return { value: key, label: parsed[key] }; });
37
+ }
38
+ else {
39
+ options = prop;
40
+ }
41
+ return (index.h("div", { class: "col col--sd-12 col--tb-3 padding-horizontal--small" },
42
+ index.h("ez-combo-box", { enabled: !readOnly, label: label, "data-field-name": name, key: name, options: options })));
43
+ };
44
+
45
+ const buildSearch = ({ name, label, readOnly }) => {
46
+ return (index.h("div", { class: "col col--sd-12 col--tb-3 padding-horizontal--small" },
47
+ index.h("ez-search", { enabled: !readOnly, label: label, "data-field-name": name, key: name })));
48
+ };
49
+
50
+ const buildFile = ({ name, label, readOnly }) => {
51
+ return (index.h("div", { class: "col col--sd-12 padding-horizontal--small" },
52
+ index.h("ez-upload", { enabled: !readOnly, label: label, urlUpload: "", requestHeaders: "", maxFiles: 10, "data-field-name": name, key: name })));
53
+ };
54
+
55
+ const buildDate = ({ name, label, readOnly }) => {
56
+ return (index.h("div", { class: "col col--sd-12 col--tb-3 padding-horizontal--small" },
57
+ index.h("ez-date-input", { enabled: !readOnly, label: label, "data-field-name": name, key: name })));
58
+ };
59
+ const buildTime = ({ name, label }) => {
60
+ return (index.h("div", { class: "col col--sd-12 col--tb-3 padding-horizontal--small" },
61
+ index.h("ez-time-input", { label: label, "data-field-name": name, key: name })));
62
+ };
63
+ const buildTimeDate = ({ name, label }) => {
64
+ return (index.h("div", { class: "col col--sd-12 col--tb-3 padding-horizontal--small" },
65
+ index.h("ez-date-time-input", { label: label, "data-field-name": name, key: name })));
66
+ };
67
+
68
+ const buildDecimal = ({ name, label, readOnly }, properties) => {
69
+ const precision = Number((properties === null || properties === void 0 ? void 0 : properties.precision) || 2);
70
+ const prettyPrecision = Number((properties === null || properties === void 0 ? void 0 : properties.prettyPrecision) || precision);
71
+ return buildNumeric(name, label, readOnly, precision, prettyPrecision);
72
+ };
73
+ const buildInteger = ({ name, label, readOnly }) => {
74
+ return buildNumeric(name, label, readOnly, 0, 0);
75
+ };
76
+ function buildNumeric(fieldName, fieldLabel, readOnly, precision, prettyPrecision) {
77
+ return (index.h("div", { class: "col col--sd-12 col--tb-3 padding-horizontal--small" },
78
+ index.h("ez-number-input", { enabled: !readOnly, label: fieldLabel, precision: precision, prettyPrecision: prettyPrecision, "data-field-name": fieldName, key: fieldName })));
79
+ }
80
+
81
+ const uiBuilders = new Map();
82
+ uiBuilders.set(core.UserInterface.LONGTEXT, buildTextArea);
83
+ uiBuilders.set(core.UserInterface.CHECKBOX, buildCheckBox);
84
+ uiBuilders.set(core.UserInterface.SWITCH, buildSwitch);
85
+ uiBuilders.set(core.UserInterface.OPTIONSELECTOR, buildComboBox);
86
+ uiBuilders.set(core.UserInterface.SEARCH, buildSearch);
87
+ uiBuilders.set(core.UserInterface.FILE, buildFile);
88
+ uiBuilders.set(core.UserInterface.DATE, buildDate);
89
+ uiBuilders.set(core.UserInterface.TIME, buildTime);
90
+ uiBuilders.set(core.UserInterface.DATETIME, buildTimeDate);
91
+ uiBuilders.set(core.UserInterface.DECIMALNUMBER, buildDecimal);
92
+ uiBuilders.set(core.UserInterface.INTEGERNUMBER, buildInteger);
93
+ const buildField = (field) => {
94
+ const descriptor = field.descriptor;
95
+ const config = Object.assign({}, field.config);
96
+ let builder;
97
+ let props;
98
+ if (descriptor) {
99
+ if (!config.label) {
100
+ config.label = descriptor.label;
101
+ }
102
+ if (!config.name) {
103
+ config.name = descriptor.name;
104
+ }
105
+ if (config.required === undefined) {
106
+ config.required = descriptor.required;
107
+ }
108
+ if (config.readOnly === undefined) {
109
+ config.readOnly = descriptor.readOnly;
110
+ }
111
+ props = descriptor.properties;
112
+ builder = uiBuilders.get(descriptor.userInterface);
113
+ }
114
+ if (config.required) {
115
+ config.label = `* ${config.label} (obrigatório)`;
116
+ }
117
+ if (!builder) {
118
+ builder = buildTextInput;
119
+ }
120
+ return builder(config, props);
121
+ };
122
+
123
+ const FormItem = ({ source }) => {
124
+ if ("items" in source) {
125
+ const fieldSet = source;
126
+ return index.h("ez-collapsible-box", { label: source.label }, fieldSet.items.map(fi => buildField(fi)));
127
+ }
128
+ else {
129
+ return buildField(source);
130
+ }
131
+ };
132
+
133
+ const FormSheet = ({ store, source }) => {
134
+ return (index.h("div", { class: "box__container" },
135
+ index.h("div", { class: "row padding-vertical--small" }, source.items.map(item => index.h(FormItem, { store: store, source: item })))));
136
+ };
137
+
138
+ class FormMetadata {
139
+ constructor() {
140
+ this._sheets = new Map();
141
+ this._requiredFields = [];
142
+ this._cleanOnCopyFields = [];
143
+ }
144
+ getSheet(name) {
145
+ return this._sheets.get(name);
146
+ }
147
+ getAllSheets() {
148
+ return this._sheets;
149
+ }
150
+ addSheet(sheet) {
151
+ this._sheets.set(sheet.name, sheet);
152
+ this._requiredFields = this._requiredFields.concat(sheet.requiredFields);
153
+ this._cleanOnCopyFields = this._cleanOnCopyFields.concat(sheet.cleanOnCopyFields);
154
+ }
155
+ getRequiredFields() {
156
+ return this._requiredFields;
157
+ }
158
+ getCleanOnCopyFields() {
159
+ return this._cleanOnCopyFields;
160
+ }
161
+ }
162
+ const buildFromDataUnit = (dataUnit) => {
163
+ var _a;
164
+ const unitMD = dataUnit.metadata;
165
+ const metadata = new FormMetadata();
166
+ if (unitMD) {
167
+ const visibleFields = (_a = unitMD.fields) === null || _a === void 0 ? void 0 : _a.filter(descriptor => descriptor.visible !== false);
168
+ metadata.addSheet({
169
+ label: unitMD.label,
170
+ name: unitMD.name,
171
+ items: visibleFields.map(descriptor => { return { descriptor }; }),
172
+ requiredFields: visibleFields
173
+ .filter(descriptor => descriptor.required)
174
+ .map(descriptor => descriptor.name),
175
+ cleanOnCopyFields: visibleFields
176
+ .filter(descriptor => { var _a; return (_a = descriptor.properties) === null || _a === void 0 ? void 0 : _a.cleanOnCopy; })
177
+ .map(descriptor => descriptor.name)
178
+ });
179
+ }
180
+ return metadata;
181
+ };
182
+ function getTabConfig(tab, sheets) {
183
+ const tabConfig = (typeof tab === "string" ? Array.from(sheets.keys()).find(t => t.label === tab) : tab);
184
+ return tabConfig || { label: tab, visible: true };
185
+ }
186
+ const buildFromConfig = (fields, dataUnit) => {
187
+ const sheets = new Map();
188
+ const requiredFields = [];
189
+ const cleanOnCopyFields = [];
190
+ fields.forEach(config => {
191
+ var _a;
192
+ if (config.visible !== false) {
193
+ const tabConfig = getTabConfig(config.tab || "Geral", sheets);
194
+ const descriptor = dataUnit.getField(config.name);
195
+ if (descriptor && tabConfig.visible) {
196
+ if (!sheets.has(tabConfig)) {
197
+ sheets.set(tabConfig, new Map());
198
+ }
199
+ const tabItens = sheets.get(tabConfig);
200
+ const isRequired = config.required === undefined ? descriptor.required : config.required;
201
+ if (isRequired) {
202
+ requiredFields.push(config.name);
203
+ }
204
+ const clearOnCopy = config.cleanOnCopy === undefined ? (_a = descriptor.properties) === null || _a === void 0 ? void 0 : _a.cleanOnCopy : config.cleanOnCopy;
205
+ if (clearOnCopy) {
206
+ cleanOnCopyFields.push(config.name);
207
+ }
208
+ const fieldMD = { config, descriptor };
209
+ const group = config.group;
210
+ if (group) {
211
+ const key = `group::${group}`;
212
+ if (!tabItens.has(key)) {
213
+ tabItens.set(key, { label: group, items: [fieldMD] });
214
+ }
215
+ else {
216
+ tabItens.get(key).items.push(fieldMD);
217
+ }
218
+ }
219
+ else {
220
+ tabItens.set(config.name, fieldMD);
221
+ }
222
+ }
223
+ }
224
+ });
225
+ const metadata = new FormMetadata();
226
+ Array.from(sheets.entries())
227
+ .sort((a, b) => (a[0].order || 10000) - (b[0].order || 10000))
228
+ .forEach(([key, value]) => {
229
+ metadata.addSheet({
230
+ label: key.label,
231
+ name: key.label,
232
+ items: Array.from(value.values()),
233
+ requiredFields,
234
+ cleanOnCopyFields
235
+ });
236
+ });
237
+ return metadata;
238
+ };
239
+
240
+ const inicialState = {};
241
+ /////////////////////////////// REDUCERS ///////////////////////////////
242
+ function formReducer(state = inicialState, action) {
243
+ switch (action.type) {
244
+ case FormActions.METADATA_LOADED:
245
+ return Object.assign(Object.assign({}, state), { formMetadata: action.payload });
246
+ case FormActions.CHANGE_TAB:
247
+ return Object.assign(Object.assign({}, state), { currentSheet: action.payload });
248
+ default:
249
+ return state;
250
+ }
251
+ }
252
+ /////////////////////////////// ACTION CREATORS ///////////////////////////////
253
+ function loadMetadata(formMetadata) {
254
+ return {
255
+ type: FormActions.METADATA_LOADED,
256
+ payload: formMetadata
257
+ };
258
+ }
259
+ function changeTab(currentSheet) {
260
+ return {
261
+ type: FormActions.CHANGE_TAB,
262
+ payload: currentSheet.tabKey
263
+ };
264
+ }
265
+ /////////////////////////////// SELECTORS ///////////////////////////////
266
+ function selectFormMetadata(state) {
267
+ return state.formMetadata;
268
+ }
269
+ function selectCurrentSheet(state) {
270
+ return state.currentSheet ? state.formMetadata.getSheet(state.currentSheet) : Array.from(state.formMetadata.getAllSheets().values())[0];
271
+ }
272
+ /////////////////////////////// TYPES ///////////////////////////////
273
+ var FormActions;
274
+ (function (FormActions) {
275
+ FormActions["METADATA_LOADED"] = "FORM/METADATA_LOADED";
276
+ FormActions["CHANGE_TAB"] = "FORM/CHANGE_TAB";
277
+ })(FormActions || (FormActions = {}));
278
+
279
+ class DataBinder {
280
+ constructor(dataUnit) {
281
+ this._fields = new Map();
282
+ this._dataUnit = dataUnit;
283
+ this._dataUnit.subscribe(_action => {
284
+ var _a;
285
+ (_a = this._fields) === null || _a === void 0 ? void 0 : _a.forEach(field => {
286
+ this.updateValue(field.fieldName, field.field);
287
+ });
288
+ });
289
+ }
290
+ bind(fields) {
291
+ fields.forEach(fieldElement => {
292
+ const fieldName = fieldElement.dataset.fieldName;
293
+ this.updateBind(fieldName, fieldElement);
294
+ this.updateValue(fieldName, fieldElement);
295
+ });
296
+ }
297
+ updateValue(fieldName, field) {
298
+ field["value"] = this._dataUnit.getFieldValue(fieldName);
299
+ }
300
+ updateBind(fieldName, field) {
301
+ const oldBind = this._fields.get(fieldName);
302
+ if (oldBind) {
303
+ oldBind.destroy();
304
+ }
305
+ this._fields.set(fieldName, Bind.create(fieldName, field, (fieldName, newValue) => this.setFieldValue(fieldName, newValue)));
306
+ this.bindSearchOptionsLoader(fieldName, field);
307
+ }
308
+ setFieldValue(fieldName, newValue) {
309
+ if (this._dataUnit.records.length === 0) {
310
+ this._dataUnit.addRecord();
311
+ }
312
+ this._dataUnit.setFieldValue(fieldName, newValue);
313
+ }
314
+ bindSearchOptionsLoader(fieldName, field) {
315
+ if (field.nodeName === "EZ-SEARCH" && field["optionLoader"] === undefined) {
316
+ const loader = core.ApplicationContext.getContextValue("__EZUI__SEARCH__OPTION__LOADER__");
317
+ if (loader) {
318
+ field["optionLoader"] = (arg) => {
319
+ return loader(arg, fieldName, this._dataUnit);
320
+ };
321
+ }
322
+ }
323
+ }
324
+ }
325
+ class Bind {
326
+ destroy() {
327
+ this.field.removeEventListener(this.eventName, this.eventListener);
328
+ }
329
+ static create(fieldName, field, callback) {
330
+ const b = new Bind();
331
+ b.fieldName = fieldName;
332
+ b.field = field;
333
+ //FIXME: Verificar se o field é um EzField
334
+ b.eventListener = (evt) => { callback(fieldName, evt.detail); };
335
+ b.eventName = "ezChange";
336
+ b.field.addEventListener(b.eventName, b.eventListener);
337
+ return b;
338
+ }
339
+ }
340
+
341
+ const ezFormCss = "ez-form{display:flex;flex-direction:column;width:100%}";
342
+
343
+ const EzForm = class {
344
+ constructor(hostRef) {
345
+ index.registerInstance(this, hostRef);
346
+ }
347
+ submit() {
348
+ return Promise.resolve();
349
+ }
350
+ cancel() {
351
+ return Promise.resolve();
352
+ }
353
+ validate() {
354
+ return new Promise((accept, reject) => {
355
+ const metadata = selectFormMetadata(this._store.getState());
356
+ const requiredFields = this._staticFields
357
+ .filter(f => f.dataset.required)
358
+ .map(f => f.dataset.fieldName)
359
+ .concat(metadata.getRequiredFields());
360
+ const records = this.dataUnit.records;
361
+ for (let i = 0; i < records.length; i++) {
362
+ if (!this.validateRequired(requiredFields, records[i])) {
363
+ reject();
364
+ break;
365
+ }
366
+ }
367
+ accept();
368
+ });
369
+ }
370
+ configChanged() {
371
+ this.processMetadata();
372
+ }
373
+ validateRequired(requiredFields, record) {
374
+ const invalidFields = [];
375
+ requiredFields.forEach(field => {
376
+ const value = record[field];
377
+ const fieldElem = this._element.querySelector(`[data-field-name=${field}]`);
378
+ if (value === null || value === undefined || value === "") {
379
+ invalidFields.push(field);
380
+ fieldElem["errorMessage"] = "Essa informação é obrigatória";
381
+ }
382
+ else {
383
+ fieldElem["errorMessage"] = "";
384
+ }
385
+ });
386
+ const isValid = invalidFields.length === 0;
387
+ if (!isValid) {
388
+ ApplicationUtils.ApplicationUtils.info("Há pelo menos um campo obrigatório não preenchido.");
389
+ }
390
+ return isValid;
391
+ }
392
+ getDynamicContent() {
393
+ var _a;
394
+ const formMD = selectFormMetadata(this._store.getState());
395
+ if (!formMD)
396
+ return null;
397
+ const currentSheet = selectCurrentSheet((_a = this._store) === null || _a === void 0 ? void 0 : _a.getState());
398
+ if (!currentSheet) {
399
+ return null;
400
+ }
401
+ const allSheets = Array.from(formMD.getAllSheets().values());
402
+ const result = [];
403
+ if (allSheets.length > 1) {
404
+ result.push(index.h("ez-tabselector", { onEzChange: (evt) => this._store.dispatch(changeTab(evt.detail)), selectedTab: currentSheet.name }, allSheets.map(s => index.h("ez-tab", { tabKey: s.name, label: s.label }))));
405
+ }
406
+ result.push(index.h(FormSheet, { store: this._store, source: currentSheet }));
407
+ return result;
408
+ }
409
+ processMetadata() {
410
+ if (!this.isStatic()) {
411
+ const metadata = this.config && this.config.length > 0 ? buildFromConfig(this.config, this.dataUnit) : buildFromDataUnit(this.dataUnit);
412
+ this._store.dispatch(loadMetadata(metadata));
413
+ }
414
+ }
415
+ isStatic() {
416
+ var _a;
417
+ return ((_a = this._staticFields) === null || _a === void 0 ? void 0 : _a.length) > 0;
418
+ }
419
+ interceptAction(action) {
420
+ if (action.type === core.Action.RECORDS_COPIED) {
421
+ const metadata = selectFormMetadata(this._store.getState());
422
+ const cleanFields = metadata.getCleanOnCopyFields();
423
+ if (cleanFields) {
424
+ const records = action.payload;
425
+ return new core.DataUnitAction(core.Action.RECORDS_COPIED, records.map(record => {
426
+ const newRecord = Object.assign({}, record);
427
+ cleanFields.forEach(fieldName => delete newRecord[fieldName]);
428
+ return newRecord;
429
+ }));
430
+ }
431
+ }
432
+ return action;
433
+ }
434
+ componentWillLoad() {
435
+ if (this.dataUnit === undefined) {
436
+ this.dataUnit = new core.DataUnit("ez-form");
437
+ }
438
+ this.dataUnit.addInterceptor(this);
439
+ this.dataUnit.subscribe(action => {
440
+ if (action.type === core.Action.METADATA_LOADED) {
441
+ this.processMetadata();
442
+ }
443
+ });
444
+ this._dataBinder = new DataBinder(this.dataUnit);
445
+ this._store = redux.createStore(formReducer);
446
+ this._store.subscribe(() => index.forceUpdate(this));
447
+ this._staticFields = Array.from(this._element.querySelectorAll("[data-field-name]"));
448
+ this.processMetadata();
449
+ }
450
+ componentDidRender() {
451
+ this._dataBinder.bind(Array.from(this._element.querySelectorAll("[data-field-name]")));
452
+ }
453
+ render() {
454
+ return (index.h(index.Host, null, this.isStatic() ? null : this.getDynamicContent()));
455
+ }
456
+ get _element() { return index.getElement(this); }
457
+ static get watchers() { return {
458
+ "config": ["configChanged"]
459
+ }; }
460
+ };
461
+ EzForm.style = ezFormCss;
462
+
463
+ exports.ez_form = EzForm;