@sankhyalabs/ezui 0.0.0-bugfix-dev-59880.6 → 0.0.0-bugfix-dev-KB-61161.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 (178) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/ez-actions-button.cjs.entry.js +1 -1
  3. package/dist/cjs/ez-alert-list.cjs.entry.js +1 -1
  4. package/dist/cjs/ez-alert.cjs.entry.js +1 -1
  5. package/dist/cjs/ez-application.cjs.entry.js +1 -1
  6. package/dist/cjs/ez-badge.cjs.entry.js +1 -1
  7. package/dist/cjs/ez-breadcrumb.cjs.entry.js +1 -1
  8. package/dist/cjs/ez-button.cjs.entry.js +1 -1
  9. package/dist/cjs/ez-calendar.cjs.entry.js +1 -1
  10. package/dist/cjs/ez-card-item_3.cjs.entry.js +1 -1
  11. package/dist/cjs/ez-check.cjs.entry.js +1 -1
  12. package/dist/cjs/ez-chip.cjs.entry.js +1 -1
  13. package/dist/cjs/ez-collapsible-box.cjs.entry.js +1 -1
  14. package/dist/cjs/ez-combo-box.cjs.entry.js +1 -1
  15. package/dist/cjs/ez-custom-form-input_2.cjs.entry.js +10 -2
  16. package/dist/cjs/ez-date-input.cjs.entry.js +1 -1
  17. package/dist/cjs/ez-date-time-input.cjs.entry.js +1 -1
  18. package/dist/cjs/ez-dialog.cjs.entry.js +1 -1
  19. package/dist/cjs/ez-dropdown.cjs.entry.js +1 -1
  20. package/dist/cjs/ez-file-item.cjs.entry.js +1 -1
  21. package/dist/cjs/ez-form-view.cjs.entry.js +4 -5
  22. package/dist/cjs/ez-form.cjs.entry.js +27 -1
  23. package/dist/cjs/ez-grid.cjs.entry.js +28 -5
  24. package/dist/cjs/ez-guide-navigator.cjs.entry.js +1 -1
  25. package/dist/cjs/ez-icon.cjs.entry.js +1 -1
  26. package/dist/cjs/ez-list.cjs.entry.js +1 -1
  27. package/dist/cjs/ez-loading-bar.cjs.entry.js +1 -1
  28. package/dist/cjs/ez-modal-container.cjs.entry.js +1 -1
  29. package/dist/cjs/ez-modal.cjs.entry.js +1 -1
  30. package/dist/cjs/ez-multi-selection-list.cjs.entry.js +1 -1
  31. package/dist/cjs/ez-number-input.cjs.entry.js +28 -27
  32. package/dist/cjs/ez-popover.cjs.entry.js +1 -1
  33. package/dist/cjs/ez-popup.cjs.entry.js +1 -1
  34. package/dist/cjs/ez-radio-button.cjs.entry.js +1 -1
  35. package/dist/cjs/ez-scroller_3.cjs.entry.js +1 -1
  36. package/dist/cjs/ez-search.cjs.entry.js +1 -1
  37. package/dist/cjs/ez-skeleton.cjs.entry.js +1 -1
  38. package/dist/cjs/ez-split-button.cjs.entry.js +1 -1
  39. package/dist/cjs/ez-split-item.cjs.entry.js +1 -1
  40. package/dist/cjs/ez-split-panel.cjs.entry.js +2 -2
  41. package/dist/cjs/ez-tabselector.cjs.entry.js +1 -1
  42. package/dist/cjs/ez-text-area.cjs.entry.js +1 -1
  43. package/dist/cjs/ez-text-input.cjs.entry.js +1 -1
  44. package/dist/cjs/ez-time-input.cjs.entry.js +1 -1
  45. package/dist/cjs/ez-toast.cjs.entry.js +1 -1
  46. package/dist/cjs/ez-upload.cjs.entry.js +1 -1
  47. package/dist/cjs/ez-view-stack.cjs.entry.js +1 -1
  48. package/dist/cjs/ezui.cjs.js +2 -2
  49. package/dist/cjs/filter-column.cjs.entry.js +1 -1
  50. package/dist/cjs/{index-9e5554cb.js → index-a7b0c73d.js} +0 -3
  51. package/dist/cjs/loader.cjs.js +2 -2
  52. package/dist/collection/components/ez-form-view/custom-input/ez-custom-form-input.js +9 -1
  53. package/dist/collection/components/ez-form-view/ez-form-view.js +1 -1
  54. package/dist/collection/components/ez-form-view/fieldbuilder/templates/NumberInput.tpl.js +2 -3
  55. package/dist/collection/components/ez-grid/controller/ag-grid/AgGridController.js +17 -0
  56. package/dist/collection/components/ez-grid/controller/ag-grid/DataSource.js +1 -0
  57. package/dist/collection/components/ez-grid/controller/ag-grid/editor/templates/NumberInput.tpl.js +2 -3
  58. package/dist/collection/components/ez-grid/ez-grid.css +1 -0
  59. package/dist/collection/components/ez-grid/ez-grid.js +22 -0
  60. package/dist/collection/components/ez-number-input/ez-number-input.js +27 -31
  61. package/dist/collection/components/ez-split-panel/ez-split-panel.css +1 -0
  62. package/dist/collection/utils/form/DataBinder.js +26 -0
  63. package/dist/collection/utils/form/test/DataBinder.test.js +41 -4
  64. package/dist/collection/utils/form/test/resources/metadataTest.js +15 -0
  65. package/dist/custom-elements/index.js +95 -38
  66. package/dist/esm/ez-actions-button.entry.js +1 -1
  67. package/dist/esm/ez-alert-list.entry.js +1 -1
  68. package/dist/esm/ez-alert.entry.js +1 -1
  69. package/dist/esm/ez-application.entry.js +1 -1
  70. package/dist/esm/ez-badge.entry.js +1 -1
  71. package/dist/esm/ez-breadcrumb.entry.js +1 -1
  72. package/dist/esm/ez-button.entry.js +1 -1
  73. package/dist/esm/ez-calendar.entry.js +1 -1
  74. package/dist/esm/ez-card-item_3.entry.js +1 -1
  75. package/dist/esm/ez-check.entry.js +1 -1
  76. package/dist/esm/ez-chip.entry.js +1 -1
  77. package/dist/esm/ez-collapsible-box.entry.js +1 -1
  78. package/dist/esm/ez-combo-box.entry.js +1 -1
  79. package/dist/esm/ez-custom-form-input_2.entry.js +10 -2
  80. package/dist/esm/ez-date-input.entry.js +1 -1
  81. package/dist/esm/ez-date-time-input.entry.js +1 -1
  82. package/dist/esm/ez-dialog.entry.js +1 -1
  83. package/dist/esm/ez-dropdown.entry.js +1 -1
  84. package/dist/esm/ez-file-item.entry.js +1 -1
  85. package/dist/esm/ez-form-view.entry.js +4 -5
  86. package/dist/esm/ez-form.entry.js +28 -2
  87. package/dist/esm/ez-grid.entry.js +28 -5
  88. package/dist/esm/ez-guide-navigator.entry.js +1 -1
  89. package/dist/esm/ez-icon.entry.js +1 -1
  90. package/dist/esm/ez-list.entry.js +1 -1
  91. package/dist/esm/ez-loading-bar.entry.js +1 -1
  92. package/dist/esm/ez-modal-container.entry.js +1 -1
  93. package/dist/esm/ez-modal.entry.js +1 -1
  94. package/dist/esm/ez-multi-selection-list.entry.js +1 -1
  95. package/dist/esm/ez-number-input.entry.js +28 -27
  96. package/dist/esm/ez-popover.entry.js +1 -1
  97. package/dist/esm/ez-popup.entry.js +1 -1
  98. package/dist/esm/ez-radio-button.entry.js +1 -1
  99. package/dist/esm/ez-scroller_3.entry.js +1 -1
  100. package/dist/esm/ez-search.entry.js +1 -1
  101. package/dist/esm/ez-skeleton.entry.js +1 -1
  102. package/dist/esm/ez-split-button.entry.js +1 -1
  103. package/dist/esm/ez-split-item.entry.js +1 -1
  104. package/dist/esm/ez-split-panel.entry.js +2 -2
  105. package/dist/esm/ez-tabselector.entry.js +1 -1
  106. package/dist/esm/ez-text-area.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/filter-column.entry.js +1 -1
  114. package/dist/esm/{index-5a720e56.js → index-baa5e267.js} +1 -3
  115. package/dist/esm/loader.js +3 -3
  116. package/dist/ezui/ezui.esm.js +1 -1
  117. package/dist/ezui/{p-e6b38ade.entry.js → p-0306dff7.entry.js} +1 -1
  118. package/dist/ezui/{p-82ac8b06.entry.js → p-072e6347.entry.js} +1 -1
  119. package/dist/ezui/{p-91ccae0c.entry.js → p-09de35a2.entry.js} +1 -1
  120. package/dist/ezui/{p-017ad9f1.entry.js → p-1285c902.entry.js} +1 -1
  121. package/dist/ezui/p-13727aec.entry.js +1 -0
  122. package/dist/ezui/{p-f1c3f85d.entry.js → p-13d2fe2d.entry.js} +1 -1
  123. package/dist/ezui/{p-b2f6bc0a.entry.js → p-17be134a.entry.js} +1 -1
  124. package/dist/ezui/p-1a35324b.entry.js +1 -0
  125. package/dist/ezui/{p-81461d2f.entry.js → p-1e7a8633.entry.js} +1 -1
  126. package/dist/ezui/p-1ee2479b.entry.js +1 -0
  127. package/dist/ezui/{p-6b51c9cc.entry.js → p-1f50fa05.entry.js} +1 -1
  128. package/dist/ezui/{p-e4c7eb39.js → p-23a36bb6.js} +2 -2
  129. package/dist/ezui/{p-e151e795.entry.js → p-30775e7f.entry.js} +1 -1
  130. package/dist/ezui/{p-06fd16f1.entry.js → p-362c3c80.entry.js} +2 -2
  131. package/dist/ezui/{p-9634631d.entry.js → p-3faa2b46.entry.js} +1 -1
  132. package/dist/ezui/{p-0378416a.entry.js → p-44caad9a.entry.js} +1 -1
  133. package/dist/ezui/{p-f291db18.entry.js → p-49456b34.entry.js} +1 -1
  134. package/dist/ezui/{p-7567ccdd.entry.js → p-555c9018.entry.js} +1 -1
  135. package/dist/ezui/{p-c3b7a23e.entry.js → p-5bd5e68f.entry.js} +1 -1
  136. package/dist/ezui/{p-6fc26622.entry.js → p-5ed81457.entry.js} +1 -1
  137. package/dist/ezui/{p-f1c2c19e.entry.js → p-650e4b6d.entry.js} +1 -1
  138. package/dist/ezui/{p-fc194825.entry.js → p-6e429cff.entry.js} +1 -1
  139. package/dist/ezui/{p-11bfeca3.entry.js → p-77a4bd35.entry.js} +1 -1
  140. package/dist/ezui/{p-9c2e2d68.entry.js → p-784fe207.entry.js} +1 -1
  141. package/dist/ezui/{p-51e4c040.entry.js → p-786559c5.entry.js} +1 -1
  142. package/dist/ezui/{p-2af4e2de.entry.js → p-7922142b.entry.js} +1 -1
  143. package/dist/ezui/{p-9a23d513.entry.js → p-7af81663.entry.js} +1 -1
  144. package/dist/ezui/{p-3f8c33e0.entry.js → p-7bc07c31.entry.js} +1 -1
  145. package/dist/ezui/{p-9aa27e69.entry.js → p-84e439b9.entry.js} +1 -1
  146. package/dist/ezui/{p-8eef0f70.entry.js → p-85c8baae.entry.js} +1 -1
  147. package/dist/ezui/{p-82fa4b09.entry.js → p-8df1ca33.entry.js} +1 -1
  148. package/dist/ezui/{p-b0e71d23.entry.js → p-9050d2cd.entry.js} +1 -1
  149. package/dist/ezui/{p-0e551dd4.entry.js → p-91f626d3.entry.js} +1 -1
  150. package/dist/ezui/{p-31674f8e.entry.js → p-922ac38b.entry.js} +1 -1
  151. package/dist/ezui/p-99f46950.entry.js +1 -0
  152. package/dist/ezui/{p-c2b20f78.entry.js → p-9f5fa3f9.entry.js} +1 -1
  153. package/dist/ezui/{p-dfca5946.entry.js → p-a80b1287.entry.js} +1 -1
  154. package/dist/ezui/{p-24ca32a3.entry.js → p-af95cd16.entry.js} +1 -1
  155. package/dist/ezui/{p-dbeee5aa.entry.js → p-bae4e180.entry.js} +1 -1
  156. package/dist/ezui/{p-30951bd7.entry.js → p-baf80b13.entry.js} +1 -1
  157. package/dist/ezui/p-bc2f844e.entry.js +1 -0
  158. package/dist/ezui/{p-868b56f7.entry.js → p-bcb53f27.entry.js} +1 -1
  159. package/dist/ezui/{p-33792b2b.entry.js → p-bf79aaa1.entry.js} +1 -1
  160. package/dist/ezui/{p-03e774a2.entry.js → p-c942e4a7.entry.js} +1 -1
  161. package/dist/ezui/{p-2a6e44a0.entry.js → p-cc2dc4f4.entry.js} +1 -1
  162. package/dist/ezui/{p-cd1a2e6b.entry.js → p-d9401ea0.entry.js} +1 -1
  163. package/dist/ezui/{p-36180f4d.entry.js → p-e85c48d7.entry.js} +1 -1
  164. package/dist/ezui/{p-9a11e223.entry.js → p-f3c526cc.entry.js} +1 -1
  165. package/dist/types/components/ez-form-view/custom-input/ez-custom-form-input.d.ts +2 -0
  166. package/dist/types/components/ez-grid/controller/EzGridController.d.ts +1 -0
  167. package/dist/types/components/ez-grid/controller/ag-grid/AgGridController.d.ts +3 -0
  168. package/dist/types/components/ez-grid/ez-grid.d.ts +4 -0
  169. package/dist/types/components/ez-number-input/ez-number-input.d.ts +0 -2
  170. package/dist/types/components.d.ts +4 -0
  171. package/dist/types/utils/form/DataBinder.d.ts +3 -0
  172. package/dist/types/utils/form/test/resources/metadataTest.d.ts +2 -0
  173. package/package.json +1 -1
  174. package/dist/ezui/p-1ddcbf69.entry.js +0 -1
  175. package/dist/ezui/p-507ec8ed.entry.js +0 -1
  176. package/dist/ezui/p-6ec40dec.entry.js +0 -1
  177. package/dist/ezui/p-78e372ad.entry.js +0 -1
  178. package/dist/ezui/p-ecd3ffad.entry.js +0 -1
@@ -41,6 +41,8 @@ export class EzCustomFormInput {
41
41
  value: this.value,
42
42
  name: this.formViewField.name,
43
43
  currentEditor: this.builderFallback(this.formViewField),
44
+ setValue: (value) => this.setValue(value),
45
+ getValue: this.getValue,
44
46
  editorMetadata: {
45
47
  label: this.formViewField.label,
46
48
  hidden: ((_a = this.formViewField.props) === null || _a === void 0 ? void 0 : _a.visible) === false,
@@ -70,6 +72,12 @@ export class EzCustomFormInput {
70
72
  gui.setAttribute('value', this.value);
71
73
  this.gui = h("div", { key: StringUtils.generateUUID(), ref: el => el && el.appendChild(gui) });
72
74
  }
75
+ setValue(value) {
76
+ this.value = value;
77
+ }
78
+ getValue() {
79
+ return this.value;
80
+ }
73
81
  handleValue(gui) {
74
82
  //@ts-ignore
75
83
  gui.$children$.forEach((child) => {
@@ -128,7 +136,7 @@ export class EzCustomFormInput {
128
136
  },
129
137
  "value": {
130
138
  "type": "any",
131
- "mutable": false,
139
+ "mutable": true,
132
140
  "complexType": {
133
141
  "original": "any",
134
142
  "resolved": "any",
@@ -23,7 +23,7 @@ export class EzFormView {
23
23
  */
24
24
  async setFieldProp(fieldName, propName, value) {
25
25
  const fields = this.fields.map(field => {
26
- if (field.name === fieldName && (value || value === 0)) {
26
+ if (field.name === fieldName) {
27
27
  field.props = field.props || {};
28
28
  field.props[propName] = value;
29
29
  }
@@ -1,8 +1,7 @@
1
1
  import { h } from "@stencil/core";
2
2
  export const buildDecimal = ({ name, label, readOnly, props, contextName, canShowError }) => {
3
- var _a, _b;
4
- const precision = Number((_a = props === null || props === void 0 ? void 0 : props.precision) !== null && _a !== void 0 ? _a : 2);
5
- const prettyPrecision = Number((_b = props === null || props === void 0 ? void 0 : props.prettyPrecision) !== null && _b !== void 0 ? _b : precision);
3
+ const precision = Number((props === null || props === void 0 ? void 0 : props.precision) || 2);
4
+ const prettyPrecision = Number((props === null || props === void 0 ? void 0 : props.prettyPrecision) || precision);
6
5
  return buildNumeric(name, label, readOnly, precision, prettyPrecision, contextName, canShowError);
7
6
  };
8
7
  export const buildInteger = ({ name, label, readOnly, contextName, canShowError }) => {
@@ -119,6 +119,7 @@ export default class AgGridController {
119
119
  }
120
120
  initDatagrid(container, options) {
121
121
  var _a;
122
+ this._container = container;
122
123
  if (this._grid === undefined) {
123
124
  LicenseManager.setLicenseKey(ApplicationContext.getContextValue('__EZUI__GRID_LICENSE__'));
124
125
  this._columnStateChangeCallback = options.onColumnStateChange;
@@ -473,11 +474,27 @@ export default class AgGridController {
473
474
  }
474
475
  this._gridOptions.api.refreshServerSide({ purge: true });
475
476
  }
477
+ focusOnGridContainer() {
478
+ this._container.setAttribute('tabindex', '-1');
479
+ this._container.focus();
480
+ }
481
+ setFocus() {
482
+ var _a, _b;
483
+ if ((_b = (_a = this._dataUnit) === null || _a === void 0 ? void 0 : _a.records) === null || _b === void 0 ? void 0 : _b.length) {
484
+ this.setFocusFirstRow();
485
+ }
486
+ else {
487
+ this.focusOnGridContainer();
488
+ }
489
+ }
476
490
  setFocusFirstRow() {
477
491
  const firstRow = this._gridOptions.api.getDisplayedRowAtIndex(0);
478
492
  if (firstRow) {
479
493
  this.setFocusOnRow(firstRow.rowIndex);
480
494
  }
495
+ else {
496
+ this.focusOnGridContainer();
497
+ }
481
498
  }
482
499
  setFocusLastRow() {
483
500
  const lastRow = this._gridOptions.api.getDisplayedRowAtIndex(this._gridOptions.api.getLastDisplayedRow());
@@ -82,6 +82,7 @@ export default class DataSource {
82
82
  else {
83
83
  this._controller.selectRows(selectionInfo.recordIds, true);
84
84
  }
85
+ this._controller.setFocusFirstRow();
85
86
  }
86
87
  getRows(params) {
87
88
  if (this.needReload(params)) {
@@ -1,8 +1,7 @@
1
1
  import { HTMLBuilder } from "@sankhyalabs/core";
2
2
  export const buildDecimal = ({ readOnly, props }) => {
3
- var _a, _b;
4
- const precision = Number((_a = props === null || props === void 0 ? void 0 : props.precision) !== null && _a !== void 0 ? _a : 2);
5
- const prettyPrecision = Number((_b = props === null || props === void 0 ? void 0 : props.prettyPrecision) !== null && _b !== void 0 ? _b : precision);
3
+ const precision = Number((props === null || props === void 0 ? void 0 : props.precision) || 2);
4
+ const prettyPrecision = Number((props === null || props === void 0 ? void 0 : props.prettyPrecision) || precision);
6
5
  return buildNumeric(readOnly, precision, prettyPrecision);
7
6
  };
8
7
  export const buildInteger = ({ readOnly }) => {
@@ -31,6 +31,7 @@
31
31
  /*private*/
32
32
  padding-top: 15px;
33
33
  margin-top: -12px;
34
+ outline: none;
34
35
 
35
36
  /*public*/
36
37
  box-shadow: var(--ez-grid__container--shadow);
@@ -153,6 +153,12 @@ export class EzGrid {
153
153
  async getCustomValueFormatter(columnName) {
154
154
  return this._customFormatters.get(columnName);
155
155
  }
156
+ /**
157
+ * Atribui o foco para a grade.
158
+ */
159
+ async setFocus() {
160
+ this._gridController.setFocus();
161
+ }
156
162
  observeConfig(config) {
157
163
  this._gridController.setColumnsState(config === null || config === void 0 ? void 0 : config.columns);
158
164
  }
@@ -1150,6 +1156,22 @@ export class EzGrid {
1150
1156
  "text": "Retorna o formatador customizado da coluna caso exista.",
1151
1157
  "tags": []
1152
1158
  }
1159
+ },
1160
+ "setFocus": {
1161
+ "complexType": {
1162
+ "signature": "() => Promise<void>",
1163
+ "parameters": [],
1164
+ "references": {
1165
+ "Promise": {
1166
+ "location": "global"
1167
+ }
1168
+ },
1169
+ "return": "Promise<void>"
1170
+ },
1171
+ "docs": {
1172
+ "text": "Atribui o foco para a grade.",
1173
+ "tags": []
1174
+ }
1153
1175
  }
1154
1176
  };
1155
1177
  }
@@ -6,7 +6,6 @@ export class EzNumberInput {
6
6
  this._focused = false;
7
7
  this._changePending = false;
8
8
  this._valuePromiseCallbacks = [];
9
- this._value = undefined;
10
9
  this.label = undefined;
11
10
  this.value = undefined;
12
11
  this.enabled = true;
@@ -62,7 +61,24 @@ export class EzNumberInput {
62
61
  }
63
62
  observeValue(newValue, oldValue) {
64
63
  if (this._textInput && newValue != oldValue) {
65
- this.handleNewValue(newValue, oldValue);
64
+ const newValueValidated = this.validateValue(newValue);
65
+ const oldValueValidated = this.validateValue(oldValue);
66
+ if (newValueValidated === null) {
67
+ this._textInput.value = '';
68
+ }
69
+ if (newValueValidated != oldValueValidated) {
70
+ const textValue = this.getTextValue(newValueValidated) || '';
71
+ if ((this._textInput.value || '') !== textValue) {
72
+ const parsedNumber = this.getParsedNumber(textValue);
73
+ if (parsedNumber !== undefined || !this._focused) {
74
+ this._textInput.value = textValue;
75
+ this._focused = false;
76
+ this.errorMessage = "";
77
+ }
78
+ }
79
+ const valueEmitted = newValueValidated === null ? undefined : newValueValidated;
80
+ this.ezChange.emit(valueEmitted);
81
+ }
66
82
  }
67
83
  this._changePending = false;
68
84
  }
@@ -71,31 +87,12 @@ export class EzNumberInput {
71
87
  this.setInputValue();
72
88
  }
73
89
  }
74
- handleNewValue(newValue, oldValue) {
75
- const newValueValidated = this.validateValue(newValue);
76
- const oldValueValidated = this.validateValue(oldValue);
77
- if (newValueValidated === null) {
78
- this._value = '';
79
- }
80
- if (newValueValidated === oldValueValidated) {
81
- return;
82
- }
83
- const textValue = this.getTextValue(newValueValidated) || '';
84
- const parsedNumber = this.getParsedNumber(textValue);
85
- if ((this._value || '') !== textValue && (parsedNumber !== undefined || !this._focused)) {
86
- this._value = textValue;
87
- this._focused = false;
88
- this.errorMessage = "";
89
- }
90
- const valueEmitted = newValueValidated === null ? undefined : newValueValidated;
91
- this.ezChange.emit(valueEmitted);
92
- }
93
90
  validateValue(value) {
94
91
  return isNaN(value) || value === undefined ? null : value;
95
92
  }
96
93
  getTextValue(value) {
97
94
  if (value != undefined) {
98
- return this.precision >= 0 ? NumberUtils.format(value.toString(), Number(this.precision), Number(this.prettyPrecision)) : value.toString();
95
+ return this.precision > 0 ? NumberUtils.format(value.toString(), Number(this.precision), Number(this.prettyPrecision)) : value.toString();
99
96
  }
100
97
  return undefined;
101
98
  }
@@ -148,13 +145,17 @@ export class EzNumberInput {
148
145
  this.ezStartChange.emit({ waitmessage: "", blocking: false });
149
146
  }
150
147
  }
151
- getParsedNumber(value = this._textInput.value) {
148
+ getParsedNumber(value) {
149
+ var _a;
150
+ if (value === void 0) {
151
+ value = (_a = this._textInput) === null || _a === void 0 ? void 0 : _a.value;
152
+ }
152
153
  return (value === null || value === void 0 ? void 0 : value.trim()) ? NumberUtils.stringToNumber(value) : undefined;
153
154
  }
154
155
  setInputValue() {
155
156
  const textValue = this.getTextValue(this.value) || '';
156
- if ((this._value || '') !== textValue) {
157
- this._value = textValue;
157
+ if ((this._textInput.value || '') !== textValue) {
158
+ this._textInput.value = textValue;
158
159
  }
159
160
  }
160
161
  componentDidLoad() {
@@ -163,7 +164,7 @@ export class EzNumberInput {
163
164
  }
164
165
  render() {
165
166
  ElementIDUtils.addIDInfoIfNotExists(this._elem, 'input');
166
- return (h("ez-text-input", { class: "number__input", "data-element-id": ElementIDUtils.getInternalIDInfo("textInput"), ref: elem => this._textInput = elem, "data-slave-mode": "true", label: this.label, onBlur: () => this.handleBlur(), onInput: () => this.handleInput(), restrict: this.precision > 0 ? "0123456789-,." : "0123456789-", enabled: this.enabled, errorMessage: this.errorMessage, mode: this.mode, canShowError: this.canShowError, value: this._value }));
167
+ return (h("ez-text-input", { class: "number__input", "data-element-id": ElementIDUtils.getInternalIDInfo("textInput"), ref: elem => this._textInput = elem, "data-slave-mode": "true", label: this.label, onBlur: () => this.handleBlur(), onInput: () => this.handleInput(), restrict: this.precision > 0 ? "0123456789-,." : "0123456789-", enabled: this.enabled, errorMessage: this.errorMessage, mode: this.mode, canShowError: this.canShowError }));
167
168
  }
168
169
  static get is() { return "ez-number-input"; }
169
170
  static get encapsulation() { return "shadow"; }
@@ -320,11 +321,6 @@ export class EzNumberInput {
320
321
  }
321
322
  };
322
323
  }
323
- static get states() {
324
- return {
325
- "_value": {}
326
- };
327
- }
328
324
  static get events() {
329
325
  return [{
330
326
  "method": "ezChange",
@@ -4,4 +4,5 @@
4
4
  .ez-split-gutter {
5
5
  cursor: grab;
6
6
  background-color: transparent;
7
+ max-width: 100%;
7
8
  }
@@ -35,6 +35,13 @@ export default class DataBinder {
35
35
  this.applyDefaultValues();
36
36
  this._dataUnit.subscribe(this.onDataUnitEvent);
37
37
  this._dataUnit.addInterceptor(this);
38
+ this.setContextDataBinder(dataUnit);
39
+ }
40
+ setContextDataBinder(dataUnit) {
41
+ const dataBindersByDataUnit = ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__") || new Map();
42
+ const dataBinders = [...(dataBindersByDataUnit.get(dataUnit.dataUnitId) || []), this];
43
+ dataBindersByDataUnit.set(dataUnit.dataUnitId, dataBinders);
44
+ ApplicationContext.setContextValue("__DATABINDER_BY_DATAUNIT__", dataBindersByDataUnit);
38
45
  }
39
46
  applyDefaultValues() {
40
47
  const recordIds = (this._dataUnit.getAddedRecords() || []).map(r => r.__record__id__);
@@ -61,9 +68,17 @@ export default class DataBinder {
61
68
  getMessageForField: field => this.getErrorMessage(field)
62
69
  }, recordsValidator);
63
70
  }
71
+ disconnectDataUnit() {
72
+ const dataBindersByDataUnit = ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__") || new Map();
73
+ const dataBinders = dataBindersByDataUnit.get(this._dataUnit.dataUnitId);
74
+ const dataBindersFiltered = dataBinders.filter((dataBinder) => JSON.stringify(dataBinder) !== JSON.stringify(this));
75
+ dataBindersByDataUnit.set(this._dataUnit.dataUnitId, dataBindersFiltered);
76
+ ApplicationContext.setContextValue("__DATABINDER_BY_DATAUNIT__", dataBindersByDataUnit);
77
+ }
64
78
  onDisconnectedCallback() {
65
79
  this._dataUnit.unsubscribe(this.onDataUnitEvent);
66
80
  this._dataUnit.removeInterceptor(this);
81
+ this.disconnectDataUnit();
67
82
  }
68
83
  getCurrentRecordId() {
69
84
  const record = this._dataUnit.getSelectedRecord();
@@ -110,6 +125,17 @@ export default class DataBinder {
110
125
  validate() {
111
126
  return this._recordValidatorProcessor.validate();
112
127
  }
128
+ static async validateByDataunit(dataUnit) {
129
+ try {
130
+ const dataBindersByDataUnit = ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__");
131
+ const dataBinders = dataBindersByDataUnit.get(dataUnit.dataUnitId) || [];
132
+ await Promise.all(dataBinders.map((dataBinder) => dataBinder.validate()));
133
+ return true;
134
+ }
135
+ catch (_a) {
136
+ return false;
137
+ }
138
+ }
113
139
  updateErrorMessage(fieldName, field, message) {
114
140
  if (message == undefined) {
115
141
  message = this._dataUnit.getInvalidMessage(this.getCurrentRecordId(), fieldName);
@@ -1,9 +1,46 @@
1
- import { DataUnit } from "@sankhyalabs/core";
1
+ import { ApplicationContext, DataUnit } from "@sankhyalabs/core";
2
2
  import DataBinder from "../DataBinder";
3
+ import { metadataTest } from "./resources/metadataTest";
3
4
  describe('DataBinder', () => {
5
+ let dataBinder;
6
+ let dataUnit;
7
+ beforeEach(() => {
8
+ dataUnit = new DataUnit();
9
+ dataUnit.metadata = metadataTest;
10
+ dataUnit.addRecord();
11
+ dataUnit.selectFirst();
12
+ dataBinder = new DataBinder(dataUnit);
13
+ });
4
14
  it('constructor', async () => {
5
- const du = new DataUnit();
6
- const db = new DataBinder(du);
7
- expect(db).toBeTruthy();
15
+ expect(dataBinder).toBeTruthy();
16
+ });
17
+ it('ApplicationContext should be filled', () => {
18
+ const dataBindersByDataUnit = ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__") || new Map();
19
+ expect(dataBindersByDataUnit.get(dataUnit.dataUnitId).length).toBeGreaterThan(0);
20
+ });
21
+ it('ApplicationContext should be filled with two binders', () => {
22
+ new DataBinder(dataUnit);
23
+ const dataBindersByDataUnit = ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__") || new Map();
24
+ expect(dataBindersByDataUnit.get(dataUnit.dataUnitId).length).toBe(2);
25
+ });
26
+ it('should be invalid for empty fields', async () => {
27
+ const isValid = await DataBinder.validateByDataunit(dataUnit);
28
+ dataBinder['_recordValidatorProcessor'] = {
29
+ validate: () => Promise.reject(),
30
+ };
31
+ expect(isValid).toBe(false);
32
+ });
33
+ it('should be valid for filled fields', async () => {
34
+ await dataUnit.setFieldValue('NAME', 'João');
35
+ dataBinder['_recordValidatorProcessor'] = {
36
+ validate: () => Promise.resolve(),
37
+ };
38
+ const isValid = await DataBinder.validateByDataunit(dataUnit);
39
+ expect(isValid).toBe(true);
40
+ });
41
+ it('should be remove dataBinder on disconnected', async () => {
42
+ dataBinder.onDisconnectedCallback();
43
+ const dataBindersByDataUnit = ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__") || new Map();
44
+ expect(dataBindersByDataUnit.get(dataUnit.dataUnitId).length).toBe(0);
8
45
  });
9
46
  });
@@ -0,0 +1,15 @@
1
+ import { DataType, UserInterface } from "@sankhyalabs/core";
2
+ export const metadataTest = {
3
+ "name": "clients",
4
+ "label": "clients",
5
+ "fields": [
6
+ {
7
+ "name": "NAME",
8
+ "label": "Nome",
9
+ "dataType": DataType.TEXT,
10
+ "userInterface": UserInterface.SHORTTEXT,
11
+ "readOnly": false,
12
+ "required": true
13
+ },
14
+ ]
15
+ };