@sankhyalabs/ezui 3.6.0 → 4.0.1

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 (232) hide show
  1. package/dist/cjs/ez-actions-button.cjs.entry.js +1 -1
  2. package/dist/cjs/ez-alert.cjs.entry.js +1 -1
  3. package/dist/cjs/ez-application.cjs.entry.js +1 -1
  4. package/dist/cjs/ez-breadcrumb.cjs.entry.js +12 -2
  5. package/dist/cjs/ez-button.cjs.entry.js +1 -1
  6. package/dist/cjs/ez-calendar.cjs.entry.js +1 -1
  7. package/dist/cjs/ez-card-item.cjs.entry.js +1 -1
  8. package/dist/cjs/ez-check.cjs.entry.js +1 -1
  9. package/dist/cjs/ez-chip.cjs.entry.js +1 -1
  10. package/dist/cjs/ez-collapsible-box.cjs.entry.js +1 -1
  11. package/dist/cjs/ez-combo-box.cjs.entry.js +16 -10
  12. package/dist/cjs/ez-date-input.cjs.entry.js +2 -2
  13. package/dist/cjs/ez-date-time-input.cjs.entry.js +4 -12
  14. package/dist/cjs/ez-dialog.cjs.entry.js +1 -1
  15. package/dist/cjs/ez-dropdown.cjs.entry.js +1 -1
  16. package/dist/cjs/ez-file-item.cjs.entry.js +1 -1
  17. package/dist/cjs/ez-filter-input_4.cjs.entry.js +67 -6
  18. package/dist/cjs/ez-form-view.cjs.entry.js +30 -23
  19. package/dist/cjs/ez-form.cjs.entry.js +562 -545
  20. package/dist/cjs/ez-grid.cjs.entry.js +8 -5
  21. package/dist/cjs/ez-guide-navigator.cjs.entry.js +51 -3
  22. package/dist/cjs/ez-icon.cjs.entry.js +1 -1
  23. package/dist/cjs/ez-list.cjs.entry.js +1 -1
  24. package/dist/cjs/ez-loading-bar.cjs.entry.js +1 -1
  25. package/dist/cjs/ez-modal-container.cjs.entry.js +1 -1
  26. package/dist/cjs/ez-modal.cjs.entry.js +1 -1
  27. package/dist/cjs/ez-number-input.cjs.entry.js +1 -1
  28. package/dist/cjs/ez-popover.cjs.entry.js +1 -1
  29. package/dist/cjs/ez-popup.cjs.entry.js +1 -1
  30. package/dist/cjs/ez-radio-button.cjs.entry.js +1 -1
  31. package/dist/cjs/ez-search.cjs.entry.js +1 -1
  32. package/dist/cjs/ez-tabselector.cjs.entry.js +1 -1
  33. package/dist/cjs/ez-text-area.cjs.entry.js +1 -1
  34. package/dist/cjs/ez-text-edit.cjs.entry.js +1 -1
  35. package/dist/cjs/ez-text-input.cjs.entry.js +1 -1
  36. package/dist/cjs/ez-time-input.cjs.entry.js +1 -1
  37. package/dist/cjs/ez-toast.cjs.entry.js +1 -1
  38. package/dist/cjs/ez-upload.cjs.entry.js +1 -1
  39. package/dist/cjs/ez-view-stack.cjs.entry.js +1 -1
  40. package/dist/cjs/ezui.cjs.js +2 -2
  41. package/dist/cjs/{index-b54f47a1.js → index-892780f1.js} +0 -5
  42. package/dist/cjs/loader.cjs.js +2 -2
  43. package/dist/collection/collection-manifest.json +2 -2
  44. package/dist/collection/components/ez-breadcrumb/ez-breadcrumb.js +12 -2
  45. package/dist/collection/components/ez-combo-box/ez-combo-box.js +16 -10
  46. package/dist/collection/components/ez-date-input/ez-date-input.js +1 -1
  47. package/dist/collection/components/ez-date-time-input/ez-date-time-input.js +3 -11
  48. package/dist/collection/components/ez-form/ez-form.css +0 -6
  49. package/dist/collection/components/ez-form/ez-form.js +18 -239
  50. package/dist/collection/components/ez-form-view/ez-form-view.js +51 -0
  51. package/dist/collection/components/ez-form-view/fieldbuilder/templates/CheckBox.tpl.js +4 -4
  52. package/dist/collection/components/ez-form-view/fieldbuilder/templates/ComboBox.tpl.js +2 -2
  53. package/dist/collection/components/ez-form-view/fieldbuilder/templates/DateInput.tpl.js +2 -2
  54. package/dist/collection/components/ez-form-view/fieldbuilder/templates/FileInput.tpl.js +2 -2
  55. package/dist/collection/components/ez-form-view/fieldbuilder/templates/NumberInput.tpl.js +6 -6
  56. package/dist/collection/components/ez-form-view/fieldbuilder/templates/SearchInput.tpl.js +2 -2
  57. package/dist/collection/components/ez-form-view/fieldbuilder/templates/TextArea.tpl.js +2 -2
  58. package/dist/collection/components/ez-form-view/fieldbuilder/templates/TextInput.tpl.js +2 -2
  59. package/dist/collection/components/ez-grid/controller/ag-grid/AgGridController.js +5 -2
  60. package/dist/collection/components/ez-grid/ez-grid.css +4 -2
  61. package/dist/collection/components/ez-grid/ez-grid.js +1 -1
  62. package/dist/collection/components/ez-guide-navigator/ez-guide-navigator.css +1 -1
  63. package/dist/collection/components/ez-guide-navigator/ez-guide-navigator.js +218 -1
  64. package/dist/collection/components/ez-sidebar-button/ez-sidebar-button.css +2 -0
  65. package/dist/collection/components/ez-tree/ez-tree.js +151 -3
  66. package/dist/collection/components/ez-tree/types/Node.js +7 -1
  67. package/dist/collection/components/ez-tree/types/Tree.js +6 -0
  68. package/dist/collection/{components/ez-form → utils/form}/DataBinder.js +118 -4
  69. package/dist/collection/{components/ez-form → utils/form}/FormMetadata.js +83 -36
  70. package/dist/collection/utils/form/index.js +2 -0
  71. package/dist/collection/utils/index.js +2 -0
  72. package/dist/custom-elements/index.js +701 -557
  73. package/dist/esm/ez-actions-button.entry.js +1 -1
  74. package/dist/esm/ez-alert.entry.js +1 -1
  75. package/dist/esm/ez-application.entry.js +1 -1
  76. package/dist/esm/ez-breadcrumb.entry.js +13 -3
  77. package/dist/esm/ez-button.entry.js +1 -1
  78. package/dist/esm/ez-calendar.entry.js +1 -1
  79. package/dist/esm/ez-card-item.entry.js +1 -1
  80. package/dist/esm/ez-check.entry.js +1 -1
  81. package/dist/esm/ez-chip.entry.js +1 -1
  82. package/dist/esm/ez-collapsible-box.entry.js +1 -1
  83. package/dist/esm/ez-combo-box.entry.js +17 -11
  84. package/dist/esm/ez-date-input.entry.js +2 -2
  85. package/dist/esm/ez-date-time-input.entry.js +4 -12
  86. package/dist/esm/ez-dialog.entry.js +1 -1
  87. package/dist/esm/ez-dropdown.entry.js +1 -1
  88. package/dist/esm/ez-file-item.entry.js +1 -1
  89. package/dist/esm/ez-filter-input_4.entry.js +67 -6
  90. package/dist/esm/ez-form-view.entry.js +30 -23
  91. package/dist/esm/ez-form.entry.js +563 -546
  92. package/dist/esm/ez-grid.entry.js +8 -5
  93. package/dist/esm/ez-guide-navigator.entry.js +51 -3
  94. package/dist/esm/ez-icon.entry.js +1 -1
  95. package/dist/esm/ez-list.entry.js +1 -1
  96. package/dist/esm/ez-loading-bar.entry.js +1 -1
  97. package/dist/esm/ez-modal-container.entry.js +1 -1
  98. package/dist/esm/ez-modal.entry.js +1 -1
  99. package/dist/esm/ez-number-input.entry.js +1 -1
  100. package/dist/esm/ez-popover.entry.js +1 -1
  101. package/dist/esm/ez-popup.entry.js +1 -1
  102. package/dist/esm/ez-radio-button.entry.js +1 -1
  103. package/dist/esm/ez-search.entry.js +1 -1
  104. package/dist/esm/ez-tabselector.entry.js +1 -1
  105. package/dist/esm/ez-text-area.entry.js +1 -1
  106. package/dist/esm/ez-text-edit.entry.js +1 -1
  107. package/dist/esm/ez-text-input.entry.js +1 -1
  108. package/dist/esm/ez-time-input.entry.js +1 -1
  109. package/dist/esm/ez-toast.entry.js +1 -1
  110. package/dist/esm/ez-upload.entry.js +1 -1
  111. package/dist/esm/ez-view-stack.entry.js +1 -1
  112. package/dist/esm/ezui.js +3 -3
  113. package/dist/esm/{index-c27164d3.js → index-de655f48.js} +0 -5
  114. package/dist/esm/loader.js +3 -3
  115. package/dist/ezui/ezui.esm.js +1 -1
  116. package/dist/ezui/{p-85c1e00f.entry.js → p-06b3e801.entry.js} +1 -1
  117. package/dist/ezui/{p-216e1153.entry.js → p-07b99b94.entry.js} +1 -1
  118. package/dist/ezui/p-09271677.entry.js +1 -0
  119. package/dist/ezui/{p-044a3427.entry.js → p-0c7e81fe.entry.js} +1 -1
  120. package/dist/ezui/p-0e53898b.entry.js +1 -0
  121. package/dist/ezui/{p-124859c3.entry.js → p-36f7ec68.entry.js} +1 -1
  122. package/dist/ezui/p-4555df8f.entry.js +1 -0
  123. package/dist/ezui/{p-1806b3c6.entry.js → p-493e2af4.entry.js} +1 -1
  124. package/dist/ezui/p-50883460.entry.js +1 -0
  125. package/dist/ezui/p-581df847.entry.js +1 -0
  126. package/dist/ezui/{p-78b28632.entry.js → p-600f1732.entry.js} +1 -1
  127. package/dist/ezui/{p-74379544.entry.js → p-622c2d53.entry.js} +1 -1
  128. package/dist/ezui/{p-bb011a51.entry.js → p-62481744.entry.js} +1 -1
  129. package/dist/ezui/{p-064e558f.entry.js → p-6818dd0a.entry.js} +1 -1
  130. package/dist/ezui/{p-e8271a0e.entry.js → p-695facd0.entry.js} +1 -1
  131. package/dist/ezui/p-6cf406ff.entry.js +1 -0
  132. package/dist/ezui/{p-07d71b7a.entry.js → p-7147d43a.entry.js} +1 -1
  133. package/dist/ezui/{p-108acc0f.entry.js → p-7c8fb43e.entry.js} +1 -1
  134. package/dist/ezui/{p-00ea9b50.js → p-7ffd12e7.js} +2 -2
  135. package/dist/ezui/{p-aaba630e.entry.js → p-86d29565.entry.js} +1 -1
  136. package/dist/ezui/{p-f978bebc.entry.js → p-8d5ec02b.entry.js} +1 -1
  137. package/dist/ezui/{p-149442dd.entry.js → p-9613fae6.entry.js} +1 -1
  138. package/dist/ezui/{p-38520b9c.entry.js → p-99d822cc.entry.js} +1 -1
  139. package/dist/ezui/p-9a1549c2.entry.js +1 -0
  140. package/dist/ezui/{p-330aef41.entry.js → p-a323b415.entry.js} +1 -1
  141. package/dist/ezui/{p-7ff5d0cc.entry.js → p-a4b281ca.entry.js} +1 -1
  142. package/dist/ezui/{p-e6cf82e8.entry.js → p-a67e056f.entry.js} +1 -1
  143. package/dist/ezui/p-ada6e6b0.entry.js +1 -0
  144. package/dist/ezui/{p-93c8bdc6.entry.js → p-b3c7b243.entry.js} +1 -1
  145. package/dist/ezui/{p-936ae3ac.entry.js → p-b941aeee.entry.js} +1 -1
  146. package/dist/ezui/{p-d015295f.entry.js → p-bbccda3f.entry.js} +1 -1
  147. package/dist/ezui/{p-66dba09c.entry.js → p-c0184982.entry.js} +1 -1
  148. package/dist/ezui/{p-ce1408dd.entry.js → p-cc40fcb3.entry.js} +1 -1
  149. package/dist/ezui/{p-80f79b1c.entry.js → p-cc5cfcb7.entry.js} +1 -1
  150. package/dist/ezui/{p-77c1ae43.entry.js → p-dc15b6d1.entry.js} +2 -2
  151. package/dist/ezui/{p-eae59101.entry.js → p-e6f3d036.entry.js} +1 -1
  152. package/dist/ezui/p-e748b5d3.entry.js +1 -0
  153. package/dist/ezui/{p-be4cc43f.entry.js → p-e85f1a6a.entry.js} +1 -1
  154. package/dist/ezui/{p-1cfae451.entry.js → p-eceb9382.entry.js} +1 -1
  155. package/dist/ezui/{p-bb0607a6.entry.js → p-fd87638e.entry.js} +1 -1
  156. package/dist/types/components/ez-breadcrumb/ez-breadcrumb.d.ts +2 -1
  157. package/dist/types/components/ez-combo-box/ez-combo-box.d.ts +0 -1
  158. package/dist/types/components/ez-form/ez-form.d.ts +3 -23
  159. package/dist/types/components/ez-form/store/form.slice.d.ts +2 -2
  160. package/dist/types/components/ez-form-view/ez-form-view.d.ts +7 -0
  161. package/dist/types/components/ez-form-view/fieldbuilder/templates/ComboBox.tpl.d.ts +1 -1
  162. package/dist/types/components/ez-form-view/fieldbuilder/templates/DateInput.tpl.d.ts +1 -1
  163. package/dist/types/components/ez-form-view/fieldbuilder/templates/FileInput.tpl.d.ts +1 -1
  164. package/dist/types/components/ez-form-view/fieldbuilder/templates/NumberInput.tpl.d.ts +2 -2
  165. package/dist/types/components/ez-form-view/fieldbuilder/templates/SearchInput.tpl.d.ts +1 -1
  166. package/dist/types/components/ez-form-view/fieldbuilder/templates/TextArea.tpl.d.ts +1 -1
  167. package/dist/types/components/ez-form-view/fieldbuilder/templates/TextInput.tpl.d.ts +1 -1
  168. package/dist/types/components/ez-form-view/interfaces/IFormViewField.d.ts +1 -0
  169. package/dist/types/components/ez-guide-navigator/ez-guide-navigator.d.ts +32 -0
  170. package/dist/types/components/ez-guide-navigator/interfaces/IGuideItem.d.ts +1 -0
  171. package/dist/types/components/ez-tree/ez-tree.d.ts +18 -0
  172. package/dist/types/components.d.ts +71 -31
  173. package/dist/types/utils/form/DataBinder.d.ts +31 -0
  174. package/dist/types/utils/form/FormMetadata.d.ts +23 -0
  175. package/dist/types/utils/form/index.d.ts +2 -0
  176. package/dist/types/utils/form/interfaces/IFormCardConfig.d.ts +5 -0
  177. package/dist/types/utils/form/interfaces/IFormConfig.d.ts +12 -0
  178. package/dist/types/utils/form/interfaces/IFormSheetMetadata.d.ts +6 -0
  179. package/dist/types/{components/ez-form → utils/form}/interfaces/IRecordValidator.d.ts +1 -2
  180. package/dist/types/utils/form/interfaces/ISummaryField.d.ts +4 -0
  181. package/dist/types/{interfaces/ez-form → utils/form/interfaces}/ITabConfig.d.ts +1 -0
  182. package/dist/types/{components/ez-form → utils/form}/interfaces/index.d.ts +6 -4
  183. package/dist/types/utils/index.d.ts +2 -0
  184. package/package.json +3 -3
  185. package/dist/collection/interfaces/ez-form/IDefaultConfig.js +0 -1
  186. package/dist/collection/interfaces/ez-form/IFieldConfig.js +0 -1
  187. package/dist/collection/interfaces/ez-form/IFieldMetadata.js +0 -1
  188. package/dist/collection/interfaces/ez-form/IFieldSetMetadata.js +0 -1
  189. package/dist/collection/interfaces/ez-form/IFormSheetMetadata.js +0 -1
  190. package/dist/collection/interfaces/ez-form/IInvalidField.js +0 -1
  191. package/dist/collection/interfaces/ez-form/IRecordValidator.js +0 -1
  192. package/dist/collection/interfaces/ez-form/IValidationResult.js +0 -1
  193. package/dist/collection/interfaces/ez-form/index.js +0 -1
  194. package/dist/ezui/p-1a1c2eda.entry.js +0 -1
  195. package/dist/ezui/p-51ecf138.entry.js +0 -1
  196. package/dist/ezui/p-5473e08d.entry.js +0 -1
  197. package/dist/ezui/p-77d70bae.entry.js +0 -1
  198. package/dist/ezui/p-90c3d4fd.entry.js +0 -1
  199. package/dist/ezui/p-97cfbd29.entry.js +0 -1
  200. package/dist/ezui/p-a0e47238.entry.js +0 -1
  201. package/dist/ezui/p-bfca509e.entry.js +0 -1
  202. package/dist/ezui/p-cd1e0679.entry.js +0 -1
  203. package/dist/types/components/ez-form/DataBinder.d.ts +0 -22
  204. package/dist/types/components/ez-form/FormMetadata.d.ts +0 -16
  205. package/dist/types/components/ez-form/interfaces/IFormConfig.d.ts +0 -7
  206. package/dist/types/components/ez-form/interfaces/IFormSheetMetadata.d.ts +0 -9
  207. package/dist/types/components/ez-form/interfaces/ITabConfig.d.ts +0 -5
  208. package/dist/types/interfaces/ez-form/IDefaultConfig.d.ts +0 -5
  209. package/dist/types/interfaces/ez-form/IFieldConfig.d.ts +0 -13
  210. package/dist/types/interfaces/ez-form/IFieldMetadata.d.ts +0 -6
  211. package/dist/types/interfaces/ez-form/IFieldSetMetadata.d.ts +0 -5
  212. package/dist/types/interfaces/ez-form/IFormConfig.d.ts +0 -7
  213. package/dist/types/interfaces/ez-form/IFormSheetMetadata.d.ts +0 -10
  214. package/dist/types/interfaces/ez-form/IInvalidField.d.ts +0 -4
  215. package/dist/types/interfaces/ez-form/IRecordValidator.d.ts +0 -6
  216. package/dist/types/interfaces/ez-form/IValidationResult.d.ts +0 -8
  217. package/dist/types/interfaces/ez-form/index.d.ts +0 -10
  218. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IDefaultConfig.js +0 -0
  219. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IFieldConfig.js +0 -0
  220. /package/dist/collection/{components/ez-form/interfaces/IFormConfig.js → utils/form/interfaces/IFormCardConfig.js} +0 -0
  221. /package/dist/collection/{interfaces/ez-form → utils/form/interfaces}/IFormConfig.js +0 -0
  222. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IFormSheetMetadata.js +0 -0
  223. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IInvalidField.js +0 -0
  224. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IRecordValidator.js +0 -0
  225. /package/dist/collection/{components/ez-form/interfaces/ITabConfig.js → utils/form/interfaces/ISummaryField.js} +0 -0
  226. /package/dist/collection/{interfaces/ez-form → utils/form/interfaces}/ITabConfig.js +0 -0
  227. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IValidationResult.js +0 -0
  228. /package/dist/collection/{components/ez-form → utils/form}/interfaces/index.js +0 -0
  229. /package/dist/types/{components/ez-form → utils/form}/interfaces/IDefaultConfig.d.ts +0 -0
  230. /package/dist/types/{components/ez-form → utils/form}/interfaces/IFieldConfig.d.ts +0 -0
  231. /package/dist/types/{components/ez-form → utils/form}/interfaces/IInvalidField.d.ts +0 -0
  232. /package/dist/types/{components/ez-form → utils/form}/interfaces/IValidationResult.d.ts +0 -0
@@ -1,4 +1,5 @@
1
- import { ApplicationContext, Action, WaitingChangeException } from "@sankhyalabs/core";
1
+ import { ApplicationContext, Action, WaitingChangeException, DataUnitAction } from "@sankhyalabs/core";
2
+ import ApplicationUtils from "../ApplicationUtils";
2
3
  export default class DataBinder {
3
4
  constructor(dataUnit) {
4
5
  this._invalidFields = new Map();
@@ -28,15 +29,21 @@ export default class DataBinder {
28
29
  this._fields = new Map();
29
30
  this._dataUnit = dataUnit;
30
31
  this._dataUnit.subscribe(this.onDataUnitEvent);
32
+ this._dataUnit.addInterceptor(this);
31
33
  }
32
- bind(fields) {
34
+ bind(fields, currentContextName, formMetadata, recordsValidator) {
33
35
  fields.forEach(fieldElement => {
34
- const fieldName = fieldElement.dataset.fieldName;
35
- this.updateBind(fieldName, fieldElement);
36
+ const { fieldName, contextName } = fieldElement.dataset;
37
+ if (contextName == undefined || contextName === currentContextName) {
38
+ this.updateBind(fieldName, fieldElement);
39
+ }
36
40
  });
41
+ this._formMetadata = formMetadata;
42
+ this._recordsValidator = recordsValidator;
37
43
  }
38
44
  onDisconnectedCallback() {
39
45
  this._dataUnit.unsubscribe(this.onDataUnitEvent);
46
+ this._dataUnit.removeInterceptor(this);
40
47
  }
41
48
  markInvalid(field) {
42
49
  this._invalidFields.set(field.name, field);
@@ -69,6 +76,67 @@ export default class DataBinder {
69
76
  }
70
77
  }
71
78
  }
79
+ validate() {
80
+ return new Promise((accept, reject) => {
81
+ var _a;
82
+ const records = this._dataUnit.getModifiedRecords();
83
+ for (let i = 0; i < records.length; i++) {
84
+ const record = records[i];
85
+ const invalidResults = [];
86
+ let validationResult = this.validateRequired(record);
87
+ if (validationResult && !validationResult.isValid) {
88
+ invalidResults.push(validationResult);
89
+ }
90
+ validationResult = (_a = this._recordsValidator) === null || _a === void 0 ? void 0 : _a.validateRecord(record);
91
+ if (validationResult && !validationResult.isValid) {
92
+ invalidResults.push(validationResult);
93
+ }
94
+ if (invalidResults.length > 0) {
95
+ this.processValidationResult(invalidResults);
96
+ reject();
97
+ break;
98
+ }
99
+ }
100
+ return accept();
101
+ });
102
+ }
103
+ validateRequired(record) {
104
+ const requiredFields = this._formMetadata.getRequiredFields();
105
+ const invalidFields = [];
106
+ new Set(requiredFields).forEach(field => {
107
+ const value = record[field];
108
+ if (value == undefined || value === "") {
109
+ const errorMessage = this.getErrorMessage(field);
110
+ if (errorMessage) {
111
+ invalidFields.push({ name: field, message: errorMessage });
112
+ }
113
+ else {
114
+ invalidFields.push({ name: field, message: "Essa informação é obrigatória" });
115
+ }
116
+ }
117
+ });
118
+ if (invalidFields.length > 0) {
119
+ return { isValid: false, invalidFields, infoMessage: "Há pelo menos um campo obrigatório não preenchido." };
120
+ }
121
+ return undefined;
122
+ }
123
+ processValidationResult(validationResult) {
124
+ validationResult.forEach(invalidResult => {
125
+ const invalidFields = invalidResult.invalidFields;
126
+ if (invalidFields) {
127
+ invalidFields.forEach(field => {
128
+ this.markInvalid(field);
129
+ });
130
+ }
131
+ if (invalidResult.infoMessage) {
132
+ ApplicationUtils.info(invalidResult.infoMessage);
133
+ }
134
+ if (invalidResult.errorMessage) {
135
+ const { errorTitle, errorMessage } = invalidResult;
136
+ ApplicationUtils.error(errorTitle, errorMessage);
137
+ }
138
+ });
139
+ }
72
140
  updateErrorMessage(fieldName, field) {
73
141
  const invalidField = this._invalidFields.get(fieldName);
74
142
  if (invalidField) {
@@ -161,6 +229,52 @@ export default class DataBinder {
161
229
  field["maxFiles"] = ((_b = descriptor.properties) === null || _b === void 0 ? void 0 : _b.MAX_FILES) || 0;
162
230
  }
163
231
  }
232
+ interceptAction(action) {
233
+ var _a;
234
+ if (action.type === Action.RECORDS_COPIED) {
235
+ const cleanFields = this._formMetadata.getCleanOnCopyFields();
236
+ if (cleanFields) {
237
+ const records = action.payload;
238
+ return new DataUnitAction(Action.RECORDS_COPIED, records.map(record => {
239
+ const newRecord = Object.assign({}, record);
240
+ cleanFields.forEach(fieldName => delete newRecord[fieldName]);
241
+ return newRecord;
242
+ }));
243
+ }
244
+ }
245
+ if (action.type === Action.SAVING_DATA) {
246
+ return new Promise((resolve) => {
247
+ this.validate()
248
+ .then(() => resolve(action))
249
+ .catch(() => { });
250
+ });
251
+ }
252
+ if (action.type === Action.RECORDS_ADDED) {
253
+ const defaultValues = (_a = this._formMetadata) === null || _a === void 0 ? void 0 : _a.getDefaultValues();
254
+ if (defaultValues) {
255
+ const records = action.payload;
256
+ return new DataUnitAction(Action.RECORDS_ADDED, records.map(record => {
257
+ const newRecord = Object.assign({}, record);
258
+ for (const field in defaultValues) {
259
+ const defaultValue = this.getFormattedValue(defaultValues[field]);
260
+ const recordValue = typeof defaultValue === "function" ? defaultValue() : defaultValue;
261
+ newRecord[field] = this._dataUnit.valueFromString(field, recordValue);
262
+ }
263
+ return newRecord;
264
+ }));
265
+ }
266
+ }
267
+ return action;
268
+ }
269
+ getFormattedValue(defaultValue) {
270
+ if (defaultValue == undefined || typeof defaultValue !== "object") {
271
+ return defaultValue;
272
+ }
273
+ if ("formattedValue" in defaultValue) {
274
+ return defaultValue.formattedValue;
275
+ }
276
+ return defaultValue.value;
277
+ }
164
278
  }
165
279
  class Bind {
166
280
  constructor() {
@@ -1,4 +1,6 @@
1
- import { UserInterface } from "@sankhyalabs/core";
1
+ import { DateUtils, UserInterface } from "@sankhyalabs/core";
2
+ const DETAIL_PATTERN = /child\[([^\]]+)\]/;
3
+ const REGEX_DEFAULT_VAR_KEY = /\$\{.+\}/;
2
4
  export class FormMetadata {
3
5
  constructor() {
4
6
  this._sheets = new Map();
@@ -6,6 +8,10 @@ export class FormMetadata {
6
8
  this._cleanOnCopyFields = [];
7
9
  this._defaultValues = {};
8
10
  }
11
+ static getDetailName(name) {
12
+ const result = DETAIL_PATTERN.exec(name);
13
+ return result ? result[1] : undefined;
14
+ }
9
15
  getSheet(name) {
10
16
  return this._sheets.get(name);
11
17
  }
@@ -14,47 +20,64 @@ export class FormMetadata {
14
20
  }
15
21
  addSheet(sheet) {
16
22
  this._sheets.set(sheet.name, sheet);
17
- this._requiredFields = this._requiredFields.concat(sheet.requiredFields);
18
- this._cleanOnCopyFields = this._cleanOnCopyFields.concat(sheet.cleanOnCopyFields);
19
- this._defaultValues = sheet.defaultValues;
23
+ }
24
+ addRequiredFields(fields) {
25
+ this._requiredFields = this._requiredFields.concat(fields);
20
26
  }
21
27
  getRequiredFields() {
22
28
  return this._requiredFields;
23
29
  }
30
+ addCleanOnCopyFields(fields) {
31
+ this._cleanOnCopyFields = this._cleanOnCopyFields.concat(fields);
32
+ }
24
33
  getCleanOnCopyFields() {
25
34
  return this._cleanOnCopyFields;
26
35
  }
36
+ addDefaultValues(defaultValues) {
37
+ return this._defaultValues = Object.assign(Object.assign({}, this._defaultValues), defaultValues);
38
+ }
27
39
  getDefaultValues() {
28
- return this._defaultValues;
40
+ const result = {};
41
+ Object.entries(this._defaultValues).forEach(([key, value]) => {
42
+ if (typeof value === "string") {
43
+ const result = REGEX_DEFAULT_VAR_KEY.exec(value);
44
+ if (result) {
45
+ value = this.getDefaultVar(result[0]);
46
+ }
47
+ }
48
+ result[key] = value;
49
+ });
50
+ return result;
51
+ }
52
+ getDefaultVar(name) {
53
+ if (name === "${data}") {
54
+ return DateUtils.getToday();
55
+ }
56
+ if (name === "${datahora}") {
57
+ return DateUtils.getToday(true);
58
+ }
59
+ return this._defaultVars ? this._defaultVars.get(name) : undefined;
60
+ }
61
+ setDefaultVars(vars) {
62
+ this._defaultVars = vars;
29
63
  }
30
64
  }
31
- export const buildFromDataUnit = (dataUnit) => {
65
+ export const buildFormConfigFromDataUnit = (dataUnit) => {
32
66
  const unitMD = dataUnit.metadata;
33
- const metadata = new FormMetadata();
67
+ let fields;
34
68
  if (unitMD) {
35
- const visibleFields = (unitMD.fields || []).filter(descriptor => descriptor.visible !== false);
36
- const fields = visibleFields.map(descriptor => buildFormField(descriptor));
37
- let defaultValues = {};
38
- visibleFields
39
- .filter(descriptor => descriptor.defaultValue)
40
- .forEach((descriptor) => defaultValues[descriptor.name] = descriptor.defaultValue);
41
- metadata.addSheet({
42
- name: unitMD.name,
43
- label: unitMD.label,
44
- fields,
45
- requiredFields: visibleFields
46
- .filter(descriptor => descriptor.required)
47
- .map(descriptor => descriptor.name),
48
- cleanOnCopyFields: visibleFields
49
- .filter(descriptor => { var _a, _b; return ((_a = descriptor.properties) === null || _a === void 0 ? void 0 : _a.cleanOnCopy) || ((_b = descriptor.properties) === null || _b === void 0 ? void 0 : _b.autoNum); })
50
- .map(descriptor => descriptor.name),
51
- defaultValues
52
- });
69
+ fields = unitMD.fields
70
+ .filter(descriptor => descriptor.visible !== false)
71
+ .map(descriptor => { return { name: descriptor.name, defaultValue: descriptor.defaultValue }; });
53
72
  }
54
- return metadata;
73
+ const config = { fields };
74
+ return config;
55
75
  };
56
- export const buildFromConfig = (config, dataUnit) => {
76
+ export const buildFormMetadata = (config, dataUnit, includeDetails = false) => {
57
77
  var _a, _b;
78
+ if (config == undefined) {
79
+ config = buildFormConfigFromDataUnit(dataUnit);
80
+ }
58
81
  const sheets = new Map();
59
82
  const hiddenTabs = new Map();
60
83
  const requiredFields = [];
@@ -66,7 +89,7 @@ export const buildFromConfig = (config, dataUnit) => {
66
89
  }
67
90
  });
68
91
  (_b = config === null || config === void 0 ? void 0 : config.fields) === null || _b === void 0 ? void 0 : _b.forEach((field) => {
69
- var _a, _b, _c, _d;
92
+ var _a, _b, _c;
70
93
  if (field.visible !== false) {
71
94
  const tabConfig = getTabConfig(field.tab || "__main", sheets);
72
95
  if (hiddenTabs.has(tabConfig.label)) {
@@ -83,29 +106,46 @@ export const buildFromConfig = (config, dataUnit) => {
83
106
  requiredFields.push(field.name);
84
107
  }
85
108
  const cleanOnCopy = field.cleanOnCopy == undefined ? (_a = descriptor.properties) === null || _a === void 0 ? void 0 : _a.cleanOnCopy : field.cleanOnCopy;
86
- if (cleanOnCopy || ((_b = descriptor.properties) === null || _b === void 0 ? void 0 : _b.autoNum) || ((_c = descriptor.properties) === null || _c === void 0 ? void 0 : _c.cleanOnCopy)) {
109
+ if (cleanOnCopy || ((_b = descriptor.properties) === null || _b === void 0 ? void 0 : _b.cleanOnCopy)) {
87
110
  cleanOnCopyFields.push(field.name);
88
111
  }
89
- const defaultValue = field.defaultValue == undefined ? (_d = descriptor.properties) === null || _d === void 0 ? void 0 : _d.defaultValue : field.defaultValue;
112
+ let defaultValue = field.defaultValue == undefined ? (_c = descriptor.properties) === null || _c === void 0 ? void 0 : _c.defaultValue : field.defaultValue;
90
113
  if (defaultValue) {
91
- defaultValues[field.name] = field.defaultValue;
114
+ if ((typeof defaultValue === "object") && defaultValue["type"] === "V") {
115
+ // Atualmente a configuração do formulário eventualmente deposita um objeto
116
+ // prototipado como {type: "V", value: "${nome.de.variavel}"} para campos com
117
+ // valor padrão do tipo variável. Dessa forma precisamos "desenvelopar" o valor
118
+ // para que a variável chegue corretamente a seu destino.
119
+ defaultValue = defaultValue["value"];
120
+ }
121
+ defaultValues[field.name] = defaultValue;
92
122
  }
93
123
  }
94
124
  }
95
125
  });
96
126
  const metadata = new FormMetadata();
127
+ metadata.setDefaultVars(config.defaultVars);
128
+ if (includeDetails) {
129
+ const unitMD = dataUnit.metadata;
130
+ if (unitMD != undefined && unitMD.children != undefined) {
131
+ unitMD.children.forEach(child => {
132
+ const { label, name, fields } = buildDetailSheet(child);
133
+ sheets.set({ name, label }, fields);
134
+ });
135
+ }
136
+ }
97
137
  Array.from(sheets.entries())
98
138
  .sort(sortTabs)
99
139
  .forEach(([key, fields]) => {
100
140
  metadata.addSheet({
101
141
  label: (key.label === "__main") ? "Principal" : key.label,
102
- name: key.label,
103
- fields,
104
- requiredFields,
105
- cleanOnCopyFields,
106
- defaultValues
142
+ name: key.name || key.label,
143
+ fields
107
144
  });
108
145
  });
146
+ metadata.addRequiredFields(requiredFields);
147
+ metadata.addCleanOnCopyFields(cleanOnCopyFields);
148
+ metadata.addDefaultValues(defaultValues);
109
149
  return metadata;
110
150
  };
111
151
  const buildFormField = (descriptor, config) => {
@@ -135,3 +175,10 @@ const getTabConfig = (tab, sheets) => {
135
175
  const sortTabs = (a, b) => {
136
176
  return a[0].label == '__main' ? -1 : (a[0].order || 10000) - (b[0].order || 10000);
137
177
  };
178
+ const buildDetailSheet = (child) => {
179
+ return {
180
+ name: `child[${child.name}]`,
181
+ label: child.label,
182
+ fields: []
183
+ };
184
+ };
@@ -0,0 +1,2 @@
1
+ export { FormMetadata, buildFormMetadata, buildFormConfigFromDataUnit } from "./FormMetadata";
2
+ export { default as DataBinder } from "./DataBinder";
@@ -2,3 +2,5 @@ export { default as ApplicationUtils } from './ApplicationUtils';
2
2
  export { default as CSSVarsUtils } from './CSSVarsUtils';
3
3
  export { DialogType } from '../components/ez-dialog/DialogType';
4
4
  export { CheckMode } from '../components/ez-check/CheckMode';
5
+ export { FormMetadata } from './form/FormMetadata';
6
+ export { default as DataBinder } from './form/DataBinder';