@sankhyalabs/ezui 3.5.0 → 4.0.0

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 (236) 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 +11 -8
  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-list/ez-list.css +5 -2
  65. package/dist/collection/components/ez-list/ez-list.js +27 -6
  66. package/dist/collection/components/ez-sidebar-button/ez-sidebar-button.css +2 -0
  67. package/dist/collection/components/ez-tree/ez-tree.js +151 -3
  68. package/dist/collection/components/ez-tree/types/Node.js +7 -1
  69. package/dist/collection/components/ez-tree/types/Tree.js +6 -0
  70. package/dist/collection/{components/ez-form → utils/form}/DataBinder.js +118 -4
  71. package/dist/collection/{components/ez-form → utils/form}/FormMetadata.js +83 -36
  72. package/dist/collection/utils/form/index.js +2 -0
  73. package/dist/collection/utils/index.js +2 -0
  74. package/dist/custom-elements/index.js +712 -565
  75. package/dist/esm/ez-actions-button.entry.js +1 -1
  76. package/dist/esm/ez-alert.entry.js +1 -1
  77. package/dist/esm/ez-application.entry.js +1 -1
  78. package/dist/esm/ez-breadcrumb.entry.js +13 -3
  79. package/dist/esm/ez-button.entry.js +1 -1
  80. package/dist/esm/ez-calendar.entry.js +1 -1
  81. package/dist/esm/ez-card-item.entry.js +1 -1
  82. package/dist/esm/ez-check.entry.js +1 -1
  83. package/dist/esm/ez-chip.entry.js +1 -1
  84. package/dist/esm/ez-collapsible-box.entry.js +1 -1
  85. package/dist/esm/ez-combo-box.entry.js +17 -11
  86. package/dist/esm/ez-date-input.entry.js +2 -2
  87. package/dist/esm/ez-date-time-input.entry.js +4 -12
  88. package/dist/esm/ez-dialog.entry.js +1 -1
  89. package/dist/esm/ez-dropdown.entry.js +1 -1
  90. package/dist/esm/ez-file-item.entry.js +1 -1
  91. package/dist/esm/ez-filter-input_4.entry.js +67 -6
  92. package/dist/esm/ez-form-view.entry.js +30 -23
  93. package/dist/esm/ez-form.entry.js +563 -546
  94. package/dist/esm/ez-grid.entry.js +8 -5
  95. package/dist/esm/ez-guide-navigator.entry.js +51 -3
  96. package/dist/esm/ez-icon.entry.js +1 -1
  97. package/dist/esm/ez-list.entry.js +11 -8
  98. package/dist/esm/ez-loading-bar.entry.js +1 -1
  99. package/dist/esm/ez-modal-container.entry.js +1 -1
  100. package/dist/esm/ez-modal.entry.js +1 -1
  101. package/dist/esm/ez-number-input.entry.js +1 -1
  102. package/dist/esm/ez-popover.entry.js +1 -1
  103. package/dist/esm/ez-popup.entry.js +1 -1
  104. package/dist/esm/ez-radio-button.entry.js +1 -1
  105. package/dist/esm/ez-search.entry.js +1 -1
  106. package/dist/esm/ez-tabselector.entry.js +1 -1
  107. package/dist/esm/ez-text-area.entry.js +1 -1
  108. package/dist/esm/ez-text-edit.entry.js +1 -1
  109. package/dist/esm/ez-text-input.entry.js +1 -1
  110. package/dist/esm/ez-time-input.entry.js +1 -1
  111. package/dist/esm/ez-toast.entry.js +1 -1
  112. package/dist/esm/ez-upload.entry.js +1 -1
  113. package/dist/esm/ez-view-stack.entry.js +1 -1
  114. package/dist/esm/ezui.js +3 -3
  115. package/dist/esm/{index-c27164d3.js → index-de655f48.js} +0 -5
  116. package/dist/esm/loader.js +3 -3
  117. package/dist/ezui/ezui.esm.js +1 -1
  118. package/dist/ezui/{p-85c1e00f.entry.js → p-06b3e801.entry.js} +1 -1
  119. package/dist/ezui/{p-216e1153.entry.js → p-07b99b94.entry.js} +1 -1
  120. package/dist/ezui/p-09271677.entry.js +1 -0
  121. package/dist/ezui/{p-044a3427.entry.js → p-0c7e81fe.entry.js} +1 -1
  122. package/dist/ezui/p-0e53898b.entry.js +1 -0
  123. package/dist/ezui/{p-124859c3.entry.js → p-36f7ec68.entry.js} +1 -1
  124. package/dist/ezui/p-4555df8f.entry.js +1 -0
  125. package/dist/ezui/{p-1806b3c6.entry.js → p-493e2af4.entry.js} +1 -1
  126. package/dist/ezui/p-50883460.entry.js +1 -0
  127. package/dist/ezui/p-581df847.entry.js +1 -0
  128. package/dist/ezui/{p-78b28632.entry.js → p-600f1732.entry.js} +1 -1
  129. package/dist/ezui/{p-74379544.entry.js → p-622c2d53.entry.js} +1 -1
  130. package/dist/ezui/{p-bb011a51.entry.js → p-62481744.entry.js} +1 -1
  131. package/dist/ezui/{p-064e558f.entry.js → p-6818dd0a.entry.js} +1 -1
  132. package/dist/ezui/{p-e8271a0e.entry.js → p-695facd0.entry.js} +1 -1
  133. package/dist/ezui/p-6cf406ff.entry.js +1 -0
  134. package/dist/ezui/{p-07d71b7a.entry.js → p-7147d43a.entry.js} +1 -1
  135. package/dist/ezui/{p-108acc0f.entry.js → p-7c8fb43e.entry.js} +1 -1
  136. package/dist/ezui/{p-00ea9b50.js → p-7ffd12e7.js} +2 -2
  137. package/dist/ezui/{p-aaba630e.entry.js → p-86d29565.entry.js} +1 -1
  138. package/dist/ezui/p-8d5ec02b.entry.js +1 -0
  139. package/dist/ezui/{p-149442dd.entry.js → p-9613fae6.entry.js} +1 -1
  140. package/dist/ezui/{p-38520b9c.entry.js → p-99d822cc.entry.js} +1 -1
  141. package/dist/ezui/p-9a1549c2.entry.js +1 -0
  142. package/dist/ezui/{p-330aef41.entry.js → p-a323b415.entry.js} +1 -1
  143. package/dist/ezui/{p-7ff5d0cc.entry.js → p-a4b281ca.entry.js} +1 -1
  144. package/dist/ezui/{p-e6cf82e8.entry.js → p-a67e056f.entry.js} +1 -1
  145. package/dist/ezui/p-ada6e6b0.entry.js +1 -0
  146. package/dist/ezui/{p-93c8bdc6.entry.js → p-b3c7b243.entry.js} +1 -1
  147. package/dist/ezui/{p-936ae3ac.entry.js → p-b941aeee.entry.js} +1 -1
  148. package/dist/ezui/{p-d015295f.entry.js → p-bbccda3f.entry.js} +1 -1
  149. package/dist/ezui/{p-66dba09c.entry.js → p-c0184982.entry.js} +1 -1
  150. package/dist/ezui/{p-ce1408dd.entry.js → p-cc40fcb3.entry.js} +1 -1
  151. package/dist/ezui/{p-80f79b1c.entry.js → p-cc5cfcb7.entry.js} +1 -1
  152. package/dist/ezui/{p-77c1ae43.entry.js → p-dc15b6d1.entry.js} +2 -2
  153. package/dist/ezui/{p-eae59101.entry.js → p-e6f3d036.entry.js} +1 -1
  154. package/dist/ezui/p-e748b5d3.entry.js +1 -0
  155. package/dist/ezui/{p-be4cc43f.entry.js → p-e85f1a6a.entry.js} +1 -1
  156. package/dist/ezui/{p-1cfae451.entry.js → p-eceb9382.entry.js} +1 -1
  157. package/dist/ezui/{p-bb0607a6.entry.js → p-fd87638e.entry.js} +1 -1
  158. package/dist/types/components/ez-breadcrumb/ez-breadcrumb.d.ts +2 -1
  159. package/dist/types/components/ez-combo-box/ez-combo-box.d.ts +0 -1
  160. package/dist/types/components/ez-form/ez-form.d.ts +3 -23
  161. package/dist/types/components/ez-form/store/form.slice.d.ts +2 -2
  162. package/dist/types/components/ez-form-view/ez-form-view.d.ts +7 -0
  163. package/dist/types/components/ez-form-view/fieldbuilder/templates/ComboBox.tpl.d.ts +1 -1
  164. package/dist/types/components/ez-form-view/fieldbuilder/templates/DateInput.tpl.d.ts +1 -1
  165. package/dist/types/components/ez-form-view/fieldbuilder/templates/FileInput.tpl.d.ts +1 -1
  166. package/dist/types/components/ez-form-view/fieldbuilder/templates/NumberInput.tpl.d.ts +2 -2
  167. package/dist/types/components/ez-form-view/fieldbuilder/templates/SearchInput.tpl.d.ts +1 -1
  168. package/dist/types/components/ez-form-view/fieldbuilder/templates/TextArea.tpl.d.ts +1 -1
  169. package/dist/types/components/ez-form-view/fieldbuilder/templates/TextInput.tpl.d.ts +1 -1
  170. package/dist/types/components/ez-form-view/interfaces/IFormViewField.d.ts +1 -0
  171. package/dist/types/components/ez-guide-navigator/ez-guide-navigator.d.ts +32 -0
  172. package/dist/types/components/ez-guide-navigator/interfaces/IGuideItem.d.ts +1 -0
  173. package/dist/types/components/ez-list/ez-list.d.ts +4 -0
  174. package/dist/types/components/ez-tree/ez-tree.d.ts +18 -0
  175. package/dist/types/components.d.ts +79 -31
  176. package/dist/types/utils/form/DataBinder.d.ts +31 -0
  177. package/dist/types/utils/form/FormMetadata.d.ts +23 -0
  178. package/dist/types/utils/form/index.d.ts +2 -0
  179. package/dist/types/utils/form/interfaces/IFormCardConfig.d.ts +5 -0
  180. package/dist/types/utils/form/interfaces/IFormConfig.d.ts +12 -0
  181. package/dist/types/utils/form/interfaces/IFormSheetMetadata.d.ts +6 -0
  182. package/dist/types/{components/ez-form → utils/form}/interfaces/IRecordValidator.d.ts +1 -2
  183. package/dist/types/utils/form/interfaces/ISummaryField.d.ts +4 -0
  184. package/dist/types/{interfaces/ez-form → utils/form/interfaces}/ITabConfig.d.ts +1 -0
  185. package/dist/types/{components/ez-form → utils/form}/interfaces/index.d.ts +6 -4
  186. package/dist/types/utils/index.d.ts +2 -0
  187. package/package.json +3 -3
  188. package/dist/collection/interfaces/ez-form/IDefaultConfig.js +0 -1
  189. package/dist/collection/interfaces/ez-form/IFieldConfig.js +0 -1
  190. package/dist/collection/interfaces/ez-form/IFieldMetadata.js +0 -1
  191. package/dist/collection/interfaces/ez-form/IFieldSetMetadata.js +0 -1
  192. package/dist/collection/interfaces/ez-form/IFormSheetMetadata.js +0 -1
  193. package/dist/collection/interfaces/ez-form/IInvalidField.js +0 -1
  194. package/dist/collection/interfaces/ez-form/IRecordValidator.js +0 -1
  195. package/dist/collection/interfaces/ez-form/IValidationResult.js +0 -1
  196. package/dist/collection/interfaces/ez-form/index.js +0 -1
  197. package/dist/ezui/p-1a1c2eda.entry.js +0 -1
  198. package/dist/ezui/p-51ecf138.entry.js +0 -1
  199. package/dist/ezui/p-5473e08d.entry.js +0 -1
  200. package/dist/ezui/p-74b3615b.entry.js +0 -1
  201. package/dist/ezui/p-77d70bae.entry.js +0 -1
  202. package/dist/ezui/p-90c3d4fd.entry.js +0 -1
  203. package/dist/ezui/p-97cfbd29.entry.js +0 -1
  204. package/dist/ezui/p-a0e47238.entry.js +0 -1
  205. package/dist/ezui/p-bfca509e.entry.js +0 -1
  206. package/dist/ezui/p-cd1e0679.entry.js +0 -1
  207. package/dist/types/components/ez-form/DataBinder.d.ts +0 -22
  208. package/dist/types/components/ez-form/FormMetadata.d.ts +0 -16
  209. package/dist/types/components/ez-form/interfaces/IFormConfig.d.ts +0 -7
  210. package/dist/types/components/ez-form/interfaces/IFormSheetMetadata.d.ts +0 -9
  211. package/dist/types/components/ez-form/interfaces/ITabConfig.d.ts +0 -5
  212. package/dist/types/interfaces/ez-form/IDefaultConfig.d.ts +0 -5
  213. package/dist/types/interfaces/ez-form/IFieldConfig.d.ts +0 -13
  214. package/dist/types/interfaces/ez-form/IFieldMetadata.d.ts +0 -6
  215. package/dist/types/interfaces/ez-form/IFieldSetMetadata.d.ts +0 -5
  216. package/dist/types/interfaces/ez-form/IFormConfig.d.ts +0 -7
  217. package/dist/types/interfaces/ez-form/IFormSheetMetadata.d.ts +0 -10
  218. package/dist/types/interfaces/ez-form/IInvalidField.d.ts +0 -4
  219. package/dist/types/interfaces/ez-form/IRecordValidator.d.ts +0 -6
  220. package/dist/types/interfaces/ez-form/IValidationResult.d.ts +0 -8
  221. package/dist/types/interfaces/ez-form/index.d.ts +0 -10
  222. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IDefaultConfig.js +0 -0
  223. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IFieldConfig.js +0 -0
  224. /package/dist/collection/{components/ez-form/interfaces/IFormConfig.js → utils/form/interfaces/IFormCardConfig.js} +0 -0
  225. /package/dist/collection/{interfaces/ez-form → utils/form/interfaces}/IFormConfig.js +0 -0
  226. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IFormSheetMetadata.js +0 -0
  227. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IInvalidField.js +0 -0
  228. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IRecordValidator.js +0 -0
  229. /package/dist/collection/{components/ez-form/interfaces/ITabConfig.js → utils/form/interfaces/ISummaryField.js} +0 -0
  230. /package/dist/collection/{interfaces/ez-form → utils/form/interfaces}/ITabConfig.js +0 -0
  231. /package/dist/collection/{components/ez-form → utils/form}/interfaces/IValidationResult.js +0 -0
  232. /package/dist/collection/{components/ez-form → utils/form}/interfaces/index.js +0 -0
  233. /package/dist/types/{components/ez-form → utils/form}/interfaces/IDefaultConfig.d.ts +0 -0
  234. /package/dist/types/{components/ez-form → utils/form}/interfaces/IFieldConfig.d.ts +0 -0
  235. /package/dist/types/{components/ez-form → utils/form}/interfaces/IInvalidField.d.ts +0 -0
  236. /package/dist/types/{components/ez-form → utils/form}/interfaces/IValidationResult.d.ts +0 -0
@@ -80,6 +80,55 @@ export class EzTree {
80
80
  async applyFilter(pattern) {
81
81
  this._tree.setFilterPattern(pattern);
82
82
  }
83
+ /**
84
+ * Atualiza um item
85
+ */
86
+ async updateItem(item) {
87
+ this._tree.updateItem(item);
88
+ }
89
+ /**
90
+ * Obtem um item pelo id
91
+ */
92
+ async getItem(id) {
93
+ return new Promise(resolve => {
94
+ const node = this._tree.getNode(id);
95
+ resolve(node === null || node === void 0 ? void 0 : node.item);
96
+ });
97
+ }
98
+ /**
99
+ * Obtem um array do caminho de itens da seleção atual.
100
+ * @returns Retorna um array do caminho de itens da seleção atual.
101
+ */
102
+ async getCurrentPath() {
103
+ var _a, _b, _c;
104
+ const node = (_a = this._tree) === null || _a === void 0 ? void 0 : _a.getNode(this.selectedId);
105
+ if (node == undefined) {
106
+ return;
107
+ }
108
+ const currentPath = [];
109
+ let parentNode;
110
+ let parentItem = (_b = node.parent) === null || _b === void 0 ? void 0 : _b.item;
111
+ currentPath.push(this.getItemPathAttrs(node.item));
112
+ while (parentItem != undefined) {
113
+ currentPath.unshift(this.getItemPathAttrs(parentItem));
114
+ parentNode = this._tree.getNode(parentItem.id);
115
+ parentItem = (_c = parentNode === null || parentNode === void 0 ? void 0 : parentNode.parent) === null || _c === void 0 ? void 0 : _c.item;
116
+ }
117
+ return currentPath;
118
+ }
119
+ /**
120
+ * Obtem o item pai a partir de um id
121
+ */
122
+ async getParent(id) {
123
+ return new Promise(resolve => {
124
+ var _a;
125
+ const node = this._tree.getNode(id);
126
+ if (node) {
127
+ resolve((_a = node.parent) === null || _a === void 0 ? void 0 : _a.item);
128
+ }
129
+ resolve(undefined);
130
+ });
131
+ }
83
132
  observeItems(newValue, oldValue) {
84
133
  if (ObjectUtils.objectToString(newValue) !== ObjectUtils.objectToString(oldValue)) {
85
134
  this._tree.load(this.items || []);
@@ -122,6 +171,9 @@ export class EzTree {
122
171
  event.preventDefault();
123
172
  }
124
173
  }
174
+ getItemPathAttrs({ id, label }) {
175
+ return { id, label };
176
+ }
125
177
  openClose(item) {
126
178
  if (item == undefined) {
127
179
  return;
@@ -205,9 +257,6 @@ export class EzTree {
205
257
  if (node) {
206
258
  this.value = node.item;
207
259
  }
208
- else {
209
- this.selectedId = undefined;
210
- }
211
260
  }
212
261
  render() {
213
262
  ElementIDUtils.addIDInfoIfNotExists(this._element, 'ezTree');
@@ -518,6 +567,105 @@ export class EzTree {
518
567
  "text": "Efetua a sele\u00E7\u00E3o de um item.",
519
568
  "tags": []
520
569
  }
570
+ },
571
+ "updateItem": {
572
+ "complexType": {
573
+ "signature": "(item: ITreeItem) => Promise<void>",
574
+ "parameters": [{
575
+ "tags": [],
576
+ "text": ""
577
+ }],
578
+ "references": {
579
+ "Promise": {
580
+ "location": "global"
581
+ },
582
+ "ITreeItem": {
583
+ "location": "import",
584
+ "path": "./interfaces/ITreeItem"
585
+ }
586
+ },
587
+ "return": "Promise<void>"
588
+ },
589
+ "docs": {
590
+ "text": "Atualiza um item",
591
+ "tags": []
592
+ }
593
+ },
594
+ "getItem": {
595
+ "complexType": {
596
+ "signature": "(id: string) => Promise<ITreeItem>",
597
+ "parameters": [{
598
+ "tags": [],
599
+ "text": ""
600
+ }],
601
+ "references": {
602
+ "Promise": {
603
+ "location": "global"
604
+ },
605
+ "ITreeItem": {
606
+ "location": "import",
607
+ "path": "./interfaces/ITreeItem"
608
+ }
609
+ },
610
+ "return": "Promise<ITreeItem>"
611
+ },
612
+ "docs": {
613
+ "text": "Obtem um item pelo id",
614
+ "tags": []
615
+ }
616
+ },
617
+ "getCurrentPath": {
618
+ "complexType": {
619
+ "signature": "() => Promise<Array<ITreeItem>>",
620
+ "parameters": [],
621
+ "references": {
622
+ "Promise": {
623
+ "location": "global"
624
+ },
625
+ "ITreeItem": {
626
+ "location": "import",
627
+ "path": "./interfaces/ITreeItem"
628
+ },
629
+ "Array": {
630
+ "location": "global"
631
+ },
632
+ "Node": {
633
+ "location": "import",
634
+ "path": "./types/Node"
635
+ }
636
+ },
637
+ "return": "Promise<ITreeItem[]>"
638
+ },
639
+ "docs": {
640
+ "text": "Obtem um array do caminho de itens da sele\u00E7\u00E3o atual.",
641
+ "tags": [{
642
+ "name": "returns",
643
+ "text": "Retorna um array do caminho de itens da sele\u00E7\u00E3o atual."
644
+ }]
645
+ }
646
+ },
647
+ "getParent": {
648
+ "complexType": {
649
+ "signature": "(id: string) => Promise<ITreeItem>",
650
+ "parameters": [{
651
+ "tags": [],
652
+ "text": ""
653
+ }],
654
+ "references": {
655
+ "Promise": {
656
+ "location": "global"
657
+ },
658
+ "ITreeItem": {
659
+ "location": "import",
660
+ "path": "./interfaces/ITreeItem"
661
+ }
662
+ },
663
+ "return": "Promise<ITreeItem>"
664
+ },
665
+ "docs": {
666
+ "text": "Obtem o item pai a partir de um id",
667
+ "tags": []
668
+ }
521
669
  }
522
670
  };
523
671
  }
@@ -81,7 +81,13 @@ export class Node {
81
81
  return this._isLazyLoad && !this._childrenLoaded;
82
82
  }
83
83
  isExpandable() {
84
- return this._isLazyLoad || this.children.size > 0 || Array.isArray(this.item.children);
84
+ if (this._isLazyLoad) {
85
+ return true;
86
+ }
87
+ if (this.children.size > 0) {
88
+ return true;
89
+ }
90
+ return false;
85
91
  }
86
92
  getChildren() {
87
93
  if (this.isPlaceHolder) {
@@ -57,6 +57,12 @@ export class Tree extends Node {
57
57
  return;
58
58
  }
59
59
  Object.keys(item).forEach(attrib => node.item[attrib] = item[attrib]);
60
+ if (item.children == undefined) {
61
+ node.children.clear();
62
+ }
63
+ else if (Array.isArray(item.children)) {
64
+ node.updateChildren(item.children);
65
+ }
60
66
  this._changeCallback();
61
67
  }
62
68
  async open(path) {
@@ -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';