@sankhyalabs/sankhyablocks 0.0.0-bugfix-dev-KB-78242.2 → 0.0.0-bugfix-dev-KB-80932.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 (175) hide show
  1. package/dist/cjs/{ConfigStorage-f079f5fd.js → ConfigStorage-d024aec8.js} +2 -2
  2. package/dist/cjs/{ContinuousInsertUtils-64e47516.js → ContinuousInsertUtils-54d44192.js} +5 -5
  3. package/dist/cjs/{DataFetcher-e059eb72.js → DataFetcher-65879b2c.js} +188 -56
  4. package/dist/cjs/{SnkFormConfigManager-63369164.js → SnkFormConfigManager-ae3185b2.js} +2 -2
  5. package/dist/cjs/{auth-fetcher-4f853233.js → auth-fetcher-8480751c.js} +1 -1
  6. package/dist/cjs/{dataunit-fetcher-228016f4.js → dataunit-fetcher-8ea97d88.js} +2 -2
  7. package/dist/cjs/{form-config-fetcher-39397ac5.js → form-config-fetcher-90126e4c.js} +38 -1
  8. package/dist/cjs/index-f9e81701.js +8 -4
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/{pesquisa-fetcher-a9bfeb22.js → pesquisa-fetcher-f3454c23.js} +179 -1
  11. package/dist/cjs/pesquisa-grid_2.cjs.entry.js +133 -0
  12. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  13. package/dist/cjs/{snk-actions-button_4.cjs.entry.js → snk-actions-button_5.cjs.entry.js} +99 -9
  14. package/dist/cjs/snk-application.cjs.entry.js +144 -21
  15. package/dist/cjs/snk-attach.cjs.entry.js +13 -9
  16. package/dist/cjs/snk-config-options_3.cjs.entry.js +4 -4
  17. package/dist/cjs/snk-crud.cjs.entry.js +8 -7
  18. package/dist/cjs/snk-data-exporter.cjs.entry.js +29 -18
  19. package/dist/cjs/{snk-data-unit-3d9b6ed4.js → snk-data-unit-72ef8777.js} +1 -1
  20. package/dist/cjs/snk-data-unit.cjs.entry.js +3 -3
  21. package/dist/cjs/snk-detail-view.cjs.entry.js +7 -7
  22. package/dist/cjs/snk-filter-bar_4.cjs.entry.js +27 -11
  23. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +3 -3
  24. package/dist/cjs/snk-grid.cjs.entry.js +9 -8
  25. package/dist/cjs/{snk-guides-viewer-2139481c.js → snk-guides-viewer-ea5d0907.js} +5 -5
  26. package/dist/cjs/snk-guides-viewer.cjs.entry.js +7 -7
  27. package/dist/cjs/snk-personalized-filter.cjs.entry.js +3 -3
  28. package/dist/cjs/snk-pesquisa.cjs.entry.js +105 -31
  29. package/dist/cjs/snk-simple-crud.cjs.entry.js +27 -29
  30. package/dist/collection/collection-manifest.json +3 -0
  31. package/dist/collection/components/snk-actions-button/actions/index.js +4 -4
  32. package/dist/collection/components/snk-application/request-listener/DebouncedRequestListener.js +4 -3
  33. package/dist/collection/components/snk-application/snk-application.css +34 -0
  34. package/dist/collection/components/snk-application/snk-application.js +197 -14
  35. package/dist/collection/components/snk-attach/structure/builder/taskbar-builder.js +8 -4
  36. package/dist/collection/components/snk-crud/snk-crud.js +39 -20
  37. package/dist/collection/components/snk-data-exporter/exporter-strategy/ClientSideExporterStrategy.js +11 -5
  38. package/dist/collection/components/snk-data-exporter/exporter-strategy/ServerSideExporterStrategy.js +11 -4
  39. package/dist/collection/components/snk-data-exporter/interfaces/IExporterProvider.js +1 -1
  40. package/dist/collection/components/snk-data-exporter/snk-data-exporter.js +1 -3
  41. package/dist/collection/components/snk-data-exporter/utils/ParserExport.js +1 -1
  42. package/dist/collection/components/snk-filter-bar/filter-modal/snk-filter-modal.js +3 -1
  43. package/dist/collection/components/snk-filter-bar/snk-filter-bar.js +40 -8
  44. package/dist/collection/components/snk-grid/snk-grid.js +39 -20
  45. package/dist/collection/components/snk-pesquisa/pesquisa-grid/pesquisa-grid.css +10 -0
  46. package/dist/collection/components/snk-pesquisa/pesquisa-grid/pesquisa-grid.js +190 -0
  47. package/dist/collection/components/snk-pesquisa/pesquisa-tree/pesquisa-tree.css +25 -0
  48. package/dist/collection/components/snk-pesquisa/pesquisa-tree/pesquisa-tree.js +179 -0
  49. package/dist/collection/components/snk-pesquisa/pesquisaHelper.js +89 -0
  50. package/dist/collection/components/snk-pesquisa/snk-pesquisa.css +24 -5
  51. package/dist/collection/components/snk-pesquisa/snk-pesquisa.js +168 -32
  52. package/dist/collection/components/snk-simple-crud/snk-simple-crud.js +56 -41
  53. package/dist/collection/components/snk-simple-form-config/snk-simple-form-config.css +22 -0
  54. package/dist/collection/components/snk-simple-form-config/snk-simple-form-config.js +181 -0
  55. package/dist/collection/lib/dataUnit/dataUnitInMemoryUtils.js +1 -1
  56. package/dist/collection/lib/http/data-fetcher/fetchers/form-config-fetcher.js +41 -4
  57. package/dist/collection/lib/http/data-fetcher/fetchers/pesquisa-fetcher.js +92 -3
  58. package/dist/components/ContinuousInsertUtils.js +2 -3
  59. package/dist/components/DataFetcher.js +188 -56
  60. package/dist/components/ISave.js +346 -1
  61. package/dist/components/dataunit-fetcher.js +1 -1
  62. package/dist/components/form-config-fetcher.js +37 -0
  63. package/dist/components/index.d.ts +3 -0
  64. package/dist/components/index.js +3 -0
  65. package/dist/components/pesquisa-grid.d.ts +11 -0
  66. package/dist/components/pesquisa-grid.js +6 -0
  67. package/dist/components/pesquisa-grid2.js +86 -0
  68. package/dist/components/pesquisa-tree.d.ts +11 -0
  69. package/dist/components/pesquisa-tree.js +6 -0
  70. package/dist/components/pesquisa-tree2.js +82 -0
  71. package/dist/components/snk-actions-button2.js +4 -5
  72. package/dist/components/snk-application2.js +159 -20
  73. package/dist/components/snk-attach2.js +20 -35
  74. package/dist/components/snk-crud.js +66 -59
  75. package/dist/components/snk-data-exporter2.js +25 -15
  76. package/dist/components/snk-detail-view2.js +84 -94
  77. package/dist/components/snk-filter-bar2.js +23 -8
  78. package/dist/components/snk-filter-modal.js +3 -1
  79. package/dist/components/snk-grid2.js +5 -4
  80. package/dist/components/snk-pesquisa2.js +118 -33
  81. package/dist/components/snk-simple-crud2.js +35 -56
  82. package/dist/components/snk-simple-form-config.d.ts +11 -0
  83. package/dist/components/snk-simple-form-config.js +6 -0
  84. package/dist/components/snk-simple-form-config2.js +120 -0
  85. package/dist/components/teste-pesquisa.js +13 -1
  86. package/dist/esm/{ConfigStorage-6514d66e.js → ConfigStorage-373bb440.js} +2 -2
  87. package/dist/esm/{ContinuousInsertUtils-b62906f9.js → ContinuousInsertUtils-25e7bd9a.js} +5 -5
  88. package/dist/esm/{DataFetcher-5034df59.js → DataFetcher-5221b992.js} +188 -56
  89. package/dist/esm/{SnkFormConfigManager-b409c745.js → SnkFormConfigManager-b65e6db0.js} +2 -2
  90. package/dist/esm/{auth-fetcher-ca5d3a49.js → auth-fetcher-e32fe8a4.js} +1 -1
  91. package/dist/esm/{dataunit-fetcher-56cb648b.js → dataunit-fetcher-8dd93d8b.js} +2 -2
  92. package/dist/esm/{form-config-fetcher-a7d3e277.js → form-config-fetcher-126e2471.js} +38 -1
  93. package/dist/esm/index-a7d3d3f1.js +8 -4
  94. package/dist/esm/loader.js +1 -1
  95. package/dist/{components/pesquisa-fetcher.js → esm/pesquisa-fetcher-0af41f09.js} +180 -3
  96. package/dist/esm/pesquisa-grid_2.entry.js +128 -0
  97. package/dist/esm/sankhyablocks.js +1 -1
  98. package/dist/esm/{snk-actions-button_4.entry.js → snk-actions-button_5.entry.js} +99 -10
  99. package/dist/esm/snk-application.entry.js +146 -23
  100. package/dist/esm/snk-attach.entry.js +13 -9
  101. package/dist/esm/snk-config-options_3.entry.js +4 -4
  102. package/dist/esm/snk-crud.entry.js +8 -7
  103. package/dist/esm/snk-data-exporter.entry.js +29 -18
  104. package/dist/esm/{snk-data-unit-9fa7d2b9.js → snk-data-unit-11a49fc3.js} +1 -1
  105. package/dist/esm/snk-data-unit.entry.js +3 -3
  106. package/dist/esm/snk-detail-view.entry.js +7 -7
  107. package/dist/esm/snk-filter-bar_4.entry.js +28 -12
  108. package/dist/esm/snk-filter-modal-item.entry.js +3 -3
  109. package/dist/esm/snk-grid.entry.js +9 -8
  110. package/dist/esm/{snk-guides-viewer-b7ed39eb.js → snk-guides-viewer-830f5fb9.js} +5 -5
  111. package/dist/esm/snk-guides-viewer.entry.js +7 -7
  112. package/dist/esm/snk-personalized-filter.entry.js +3 -3
  113. package/dist/esm/snk-pesquisa.entry.js +105 -31
  114. package/dist/esm/snk-simple-crud.entry.js +27 -29
  115. package/dist/sankhyablocks/{p-0e206e62.js → p-05b6ff91.js} +1 -1
  116. package/dist/sankhyablocks/p-09067bee.entry.js +1 -0
  117. package/dist/sankhyablocks/p-0cda2226.entry.js +11 -0
  118. package/dist/sankhyablocks/p-1435701f.js +26 -0
  119. package/dist/sankhyablocks/{p-e97be1c8.js → p-171b7623.js} +1 -1
  120. package/dist/sankhyablocks/{p-9ffd9fc7.js → p-19dc71e9.js} +1 -1
  121. package/dist/sankhyablocks/{p-0d2a2e9e.entry.js → p-1a91d1f3.entry.js} +1 -1
  122. package/dist/sankhyablocks/{p-aa003d4e.entry.js → p-1cf39cfd.entry.js} +1 -1
  123. package/dist/sankhyablocks/{p-bb8ef149.entry.js → p-254c59d2.entry.js} +1 -1
  124. package/dist/sankhyablocks/p-422eb699.entry.js +1 -0
  125. package/dist/sankhyablocks/{p-a2c790ac.entry.js → p-469384a2.entry.js} +1 -1
  126. package/dist/sankhyablocks/p-54f5354a.entry.js +1 -0
  127. package/dist/sankhyablocks/{p-342eeb3b.js → p-60e4db34.js} +1 -1
  128. package/dist/sankhyablocks/p-618a29ed.entry.js +1 -0
  129. package/dist/sankhyablocks/p-798386c7.js +6 -0
  130. package/dist/sankhyablocks/{p-fca0e5cc.entry.js → p-82ee6dc3.entry.js} +1 -1
  131. package/dist/sankhyablocks/{p-e4391e16.js → p-8a1ee5b5.js} +1 -1
  132. package/dist/sankhyablocks/p-8bd86610.entry.js +1 -0
  133. package/dist/sankhyablocks/p-b50a0753.entry.js +1 -0
  134. package/dist/sankhyablocks/p-d62228fb.js +1 -0
  135. package/dist/sankhyablocks/p-d92d4f91.entry.js +1 -0
  136. package/dist/sankhyablocks/{p-47d24ac8.js → p-ddefbbc7.js} +1 -1
  137. package/dist/sankhyablocks/p-e5430b29.entry.js +1 -0
  138. package/dist/sankhyablocks/p-f0b9303b.js +1 -0
  139. package/dist/sankhyablocks/p-f258690a.entry.js +1 -0
  140. package/dist/sankhyablocks/{p-ec43fcc8.entry.js → p-f975370f.entry.js} +1 -1
  141. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  142. package/dist/types/components/snk-application/snk-application.d.ts +22 -4
  143. package/dist/types/components/snk-crud/snk-crud.d.ts +8 -4
  144. package/dist/types/components/snk-data-exporter/exporter-strategy/ClientSideExporterStrategy.d.ts +1 -0
  145. package/dist/types/components/snk-data-exporter/exporter-strategy/ServerSideExporterStrategy.d.ts +1 -0
  146. package/dist/types/components/snk-data-exporter/utils/ParserExport.d.ts +1 -1
  147. package/dist/types/components/snk-filter-bar/snk-filter-bar.d.ts +6 -1
  148. package/dist/types/components/snk-grid/snk-grid.d.ts +8 -4
  149. package/dist/types/components/snk-pesquisa/pesquisa-grid/pesquisa-grid.d.ts +38 -0
  150. package/dist/types/components/snk-pesquisa/pesquisa-tree/pesquisa-tree.d.ts +29 -0
  151. package/dist/types/components/snk-pesquisa/pesquisaHelper.d.ts +19 -0
  152. package/dist/types/components/snk-pesquisa/snk-pesquisa.d.ts +35 -1
  153. package/dist/types/components/snk-simple-crud/snk-simple-crud.d.ts +10 -4
  154. package/dist/types/components/snk-simple-form-config/snk-simple-form-config.d.ts +34 -0
  155. package/dist/types/components.d.ts +244 -23
  156. package/dist/types/lib/http/data-fetcher/fetchers/form-config-fetcher.d.ts +8 -2
  157. package/dist/types/lib/http/data-fetcher/fetchers/pesquisa-fetcher.d.ts +10 -1
  158. package/package.json +1 -1
  159. package/react/components.d.ts +3 -0
  160. package/react/components.js +3 -0
  161. package/react/components.js.map +1 -1
  162. package/dist/esm/pesquisa-fetcher-6bc2e41a.js +0 -169
  163. package/dist/sankhyablocks/p-00278e07.js +0 -1
  164. package/dist/sankhyablocks/p-0387d9d7.entry.js +0 -1
  165. package/dist/sankhyablocks/p-126c58ea.js +0 -26
  166. package/dist/sankhyablocks/p-1d3ce0d9.entry.js +0 -1
  167. package/dist/sankhyablocks/p-341465ce.js +0 -6
  168. package/dist/sankhyablocks/p-3728d2aa.entry.js +0 -11
  169. package/dist/sankhyablocks/p-4138da61.entry.js +0 -1
  170. package/dist/sankhyablocks/p-5d9788b3.entry.js +0 -1
  171. package/dist/sankhyablocks/p-7075b789.entry.js +0 -1
  172. package/dist/sankhyablocks/p-aaf94476.js +0 -1
  173. package/dist/sankhyablocks/p-af7f7b3e.entry.js +0 -1
  174. package/dist/sankhyablocks/p-d1791da2.entry.js +0 -1
  175. package/dist/sankhyablocks/p-eb7c9cf4.entry.js +0 -1
@@ -0,0 +1,179 @@
1
+ import { Fragment, h, Host } from '@stencil/core';
2
+ import { ApplicationUtils } from '@sankhyalabs/ezui/dist/collection/utils';
3
+ export class PesquisaTree {
4
+ constructor() {
5
+ this.treeLoader = undefined;
6
+ this.argument = undefined;
7
+ this.allowsNonAnalytic = false;
8
+ this.items = [];
9
+ }
10
+ async applyFilter() {
11
+ await this._tree.applyFilter(this.argument);
12
+ }
13
+ async loadTree() {
14
+ if (!this.treeLoader || typeof this.treeLoader !== 'function')
15
+ return;
16
+ const response = await this.treeLoader((this.argument || '').trim());
17
+ this.items = [...response];
18
+ }
19
+ expandOrCloseAllItems(items, expanded) {
20
+ return items.map(item => (Object.assign(Object.assign({}, item), { expanded, children: item.children ? this.expandOrCloseAllItems(item.children, expanded) : undefined })));
21
+ }
22
+ handleExpandAll() {
23
+ this.items = [...this.expandOrCloseAllItems(this.items, true)];
24
+ }
25
+ handleCloseAll() {
26
+ this.items = [...this.expandOrCloseAllItems(this.items, false)];
27
+ }
28
+ handleDbClick(item) {
29
+ var _a;
30
+ if (!this.allowsNonAnalytic && !((_a = item['props']) === null || _a === void 0 ? void 0 : _a['analitico'])) {
31
+ const title = 'Erro';
32
+ const message = `Há pelo menos um registro inválido selecionado. Você deve selecionar itens do tipo 'analítico'.`;
33
+ ApplicationUtils.error(title, message);
34
+ return;
35
+ }
36
+ const option = {
37
+ value: item.id,
38
+ label: item.label,
39
+ };
40
+ this.pesquisaTreeSelectItem.emit(option);
41
+ }
42
+ async componentWillLoad() {
43
+ await this.loadTree();
44
+ }
45
+ renderEmptyMessate() {
46
+ return (h("div", { class: "ez-flex ez-flex--justify-center ez-flex--align-items-center ez-margin--large ez-text ez-text--xlarge ez-text--secondary" }, h("span", null, "Nenhum registro encontrado...")));
47
+ }
48
+ render() {
49
+ var _a;
50
+ return (h(Host, null, !((_a = this.items) === null || _a === void 0 ? void 0 : _a.length) ?
51
+ this.renderEmptyMessate() :
52
+ h(Fragment, null, h("div", { class: 'actions-container' }, h("ez-button", { size: 'small', mode: 'icon', class: 'ez-margin-right--small', iconName: 'show-list', title: "Expandir", onClick: () => this.handleExpandAll() }), h("ez-button", { size: 'small', mode: 'icon', iconName: 'hide-list', title: "Recolher", onClick: () => this.handleCloseAll() })), h("ez-tree", { ref: (element) => this._tree = element, onEzDbClickItem: ({ detail }) => this.handleDbClick(detail), items: this.items }))));
53
+ }
54
+ static get is() { return "pesquisa-tree"; }
55
+ static get encapsulation() { return "scoped"; }
56
+ static get originalStyleUrls() {
57
+ return {
58
+ "$": ["pesquisa-tree.css"]
59
+ };
60
+ }
61
+ static get styleUrls() {
62
+ return {
63
+ "$": ["pesquisa-tree.css"]
64
+ };
65
+ }
66
+ static get properties() {
67
+ return {
68
+ "treeLoader": {
69
+ "type": "unknown",
70
+ "mutable": false,
71
+ "complexType": {
72
+ "original": "(text: string) => Promise<Array<ITreeItem>>",
73
+ "resolved": "(text: string) => Promise<ITreeItem[]>",
74
+ "references": {
75
+ "Promise": {
76
+ "location": "global"
77
+ },
78
+ "Array": {
79
+ "location": "global"
80
+ },
81
+ "ITreeItem": {
82
+ "location": "import",
83
+ "path": "@sankhyalabs/ezui/.diststorybook/types/components/ez-tree/interfaces/ITreeItem"
84
+ }
85
+ }
86
+ },
87
+ "required": false,
88
+ "optional": true,
89
+ "docs": {
90
+ "tags": [],
91
+ "text": "Fun\u00E7\u00E3o respons\u00E1vel por carregar a \u00E1rvore hier\u00E1rquica do componente"
92
+ }
93
+ },
94
+ "argument": {
95
+ "type": "string",
96
+ "mutable": true,
97
+ "complexType": {
98
+ "original": "string",
99
+ "resolved": "string",
100
+ "references": {}
101
+ },
102
+ "required": false,
103
+ "optional": false,
104
+ "docs": {
105
+ "tags": [],
106
+ "text": "Argumentos que ser\u00E3o usados ao chamar a fun\u00E7\u00E3o treeLoader."
107
+ },
108
+ "attribute": "argument",
109
+ "reflect": false
110
+ },
111
+ "allowsNonAnalytic": {
112
+ "type": "boolean",
113
+ "mutable": false,
114
+ "complexType": {
115
+ "original": "boolean",
116
+ "resolved": "boolean",
117
+ "references": {}
118
+ },
119
+ "required": false,
120
+ "optional": false,
121
+ "docs": {
122
+ "tags": [],
123
+ "text": "Define se permite sele\u00E7\u00E3o de items n\u00E3o anal\u00EDticos"
124
+ },
125
+ "attribute": "allows-non-analytic",
126
+ "reflect": false,
127
+ "defaultValue": "false"
128
+ }
129
+ };
130
+ }
131
+ static get states() {
132
+ return {
133
+ "items": {}
134
+ };
135
+ }
136
+ static get events() {
137
+ return [{
138
+ "method": "pesquisaTreeSelectItem",
139
+ "name": "pesquisaTreeSelectItem",
140
+ "bubbles": true,
141
+ "cancelable": true,
142
+ "composed": true,
143
+ "docs": {
144
+ "tags": [],
145
+ "text": ""
146
+ },
147
+ "complexType": {
148
+ "original": "IOption",
149
+ "resolved": "IOption",
150
+ "references": {
151
+ "IOption": {
152
+ "location": "import",
153
+ "path": "@sankhyalabs/ezui/.diststorybook/types/components/ez-combo-box/ez-combo-box"
154
+ }
155
+ }
156
+ }
157
+ }];
158
+ }
159
+ static get methods() {
160
+ return {
161
+ "applyFilter": {
162
+ "complexType": {
163
+ "signature": "() => Promise<void>",
164
+ "parameters": [],
165
+ "references": {
166
+ "Promise": {
167
+ "location": "global"
168
+ }
169
+ },
170
+ "return": "Promise<void>"
171
+ },
172
+ "docs": {
173
+ "text": "",
174
+ "tags": []
175
+ }
176
+ }
177
+ };
178
+ }
179
+ }
@@ -0,0 +1,89 @@
1
+ import { DataType, UserInterface } from '@sankhyalabs/core';
2
+ export function buildGridMetadata(rawValue) {
3
+ const fieldsMetadata = buildFieldsMetadata(rawValue.fieldsMetadata);
4
+ const duName = rawValue.descriptionField;
5
+ const duLabel = rawValue.entityDescription;
6
+ return {
7
+ label: duLabel,
8
+ name: duName,
9
+ fields: fieldsMetadata,
10
+ };
11
+ }
12
+ function buildFieldsMetadata(rawMetadata) {
13
+ if (!rawMetadata || !rawMetadata.length)
14
+ return [];
15
+ return rawMetadata.map(field => {
16
+ return {
17
+ name: field['fieldName'],
18
+ label: field['description'],
19
+ dataType: buildDataType(field['type']),
20
+ userInterface: buildUserInterface(field),
21
+ properties: bildProperties(field)
22
+ };
23
+ });
24
+ }
25
+ function bildProperties(field) {
26
+ const properties = {};
27
+ properties['options'] = buildOptions(field);
28
+ properties['mask'] = buildMask(field);
29
+ return properties;
30
+ }
31
+ function buildMask(field) {
32
+ const fieldUI = field['uiType'];
33
+ return fieldUI ? String(fieldUI).toLowerCase() : undefined;
34
+ }
35
+ function buildOptions(field) {
36
+ const optionsJson = field.options;
37
+ if (!optionsJson)
38
+ return undefined;
39
+ const options = [];
40
+ Object.keys(optionsJson).forEach(key => {
41
+ options.push({
42
+ label: key,
43
+ value: optionsJson[key]
44
+ });
45
+ });
46
+ return options;
47
+ }
48
+ function buildUserInterface(field) {
49
+ const options = field.options;
50
+ if (options && Object.keys(options).length > 0)
51
+ return UserInterface.OPTIONSELECTOR;
52
+ if (field['type'] === 'D')
53
+ return UserInterface.DATE;
54
+ if (field['type'] === 'H')
55
+ return UserInterface.DATETIME;
56
+ if (field['type'] === 'T')
57
+ return UserInterface.TIME;
58
+ return undefined;
59
+ }
60
+ function buildDataType(rawType) {
61
+ switch (rawType) {
62
+ case 'F':
63
+ return DataType.NUMBER;
64
+ case 'D':
65
+ case 'H':
66
+ return DataType.DATE;
67
+ case 'B':
68
+ return DataType.OBJECT;
69
+ default:
70
+ return DataType.TEXT;
71
+ }
72
+ }
73
+ export function parseLegacyTree(legacy) {
74
+ var _a, _b;
75
+ const structure = (_b = (_a = legacy.arvore) === null || _a === void 0 ? void 0 : _a.no) !== null && _b !== void 0 ? _b : [];
76
+ return structure.map(parseLegacyItem);
77
+ }
78
+ function parseLegacyItem(node) {
79
+ return Object.assign({ id: node.codigo, label: `${node.caminho} - ${node.descricao}`, bold: node.analitico === "N", props: { analitico: node.analitico === 'S' } }, (node.no && { children: node.no.map(parseLegacyItem) }));
80
+ }
81
+ export function parseGridConfig(rawConfig) {
82
+ var _a, _b;
83
+ const columns = [];
84
+ const fields = (_b = (_a = rawConfig === null || rawConfig === void 0 ? void 0 : rawConfig.gridConfig) === null || _a === void 0 ? void 0 : _a.field) !== null && _b !== void 0 ? _b : {};
85
+ Object.keys(fields).forEach(key => columns.push(fields[key]));
86
+ if (!columns.length)
87
+ return undefined;
88
+ return { columns };
89
+ }
@@ -10,6 +10,10 @@
10
10
  /* records */
11
11
  /*@doc Define a cor da fonte do indicador de registros do componente.*/
12
12
  --snk-pesquisa__records--color: var(--text--primary, #626e82);
13
+ /* records */
14
+ /*@doc Define a cor da fonte do indicador de registros do componente.*/
15
+ --snk-pesquisa__records--color-secondary: var(--text--secondary, #626e82);
16
+ /* records */
13
17
  /*@doc Define o espaçamento vertical do indicador de registros do componente.*/
14
18
  --snk-pesquisa__records--padding-vertical: var(--space--medium, 12px);
15
19
 
@@ -69,9 +73,9 @@
69
73
  .snk-pesquisa__content {
70
74
  display: flex;
71
75
  flex-direction: column;
72
- overflow-y: auto;
73
- scrollbar-width: thin;
76
+ overflow-y: hidden;
74
77
 
78
+ scrollbar-width: thin;
75
79
  /*public*/
76
80
  scrollbar-color: var(--snk-pesquisa__scrollbar--color-clicked) var(--snk-pesquisa__scrollbar--color-background);
77
81
  padding-right: var(--snk-pesquisa__content--padding-right);
@@ -109,16 +113,31 @@
109
113
  background-color: var(--snk-pesquisa__scrollbar--color-clicked);
110
114
  }
111
115
 
112
- .snk-pesquisa__records {
113
- /*public*/
116
+ .snk-pesquisa__records-label{
117
+ display: flex;
118
+ flex-direction: row;
119
+ justify-content: space-between;
120
+
114
121
  font-family: var(--snk-pesquisa--font-family);
115
122
  font-weight: var(--snk-pesquisa--font-weight);
116
123
  font-size: var(--snk-pesquisa--font-size);
117
- color: var(--snk-pesquisa__records--color);
118
124
  padding-bottom: var(--snk-pesquisa__records--padding-vertical);
119
125
  padding-top: var(--snk-pesquisa__records--padding-vertical);
120
126
  }
121
127
 
128
+ .snk-pesquisa__records {
129
+ color: var(--snk-pesquisa__records--color);
130
+ }
131
+
132
+ .snk-pesquisa__records-limit {
133
+ color: var(--snk-pesquisa__records--color-secondary);
134
+ }
135
+
136
+ .snk-pesquisa__records-limit.hidden,
137
+ .snk-pesquisa__records.hidden {
138
+ visibility: hidden;
139
+ }
140
+
122
141
  .snk-pesquisa__btn {
123
142
  outline: none;
124
143
  border: none;
@@ -1,5 +1,8 @@
1
- import { ObjectUtils, StringUtils, ElementIDUtils } from '@sankhyalabs/core';
1
+ import { ElementIDUtils, ObjectUtils, StringUtils } from '@sankhyalabs/core';
2
2
  import { h, Host } from '@stencil/core';
3
+ import { buildGridMetadata } from './pesquisaHelper';
4
+ import { PesquisaFetcher } from '../../lib';
5
+ import { EzScrollDirection } from '@sankhyalabs/ezui/dist/collection/components/ez-scroller/EzScrollDirection';
3
6
  export class SnkPesquisa {
4
7
  constructor() {
5
8
  this._mdByName = {};
@@ -11,11 +14,18 @@ export class SnkPesquisa {
11
14
  this._changeDeboucingTimeout = null;
12
15
  this._limitCharsToSearch = 3;
13
16
  this._deboucingTime = 450;
17
+ this._gridDataSource = [];
18
+ this.pesquisaFetcher = new PesquisaFetcher();
14
19
  this._itemList = undefined;
15
20
  this._startLoading = false;
21
+ this._presentationMode = "list";
16
22
  this.searchLoader = undefined;
23
+ this.treeLoader = undefined;
17
24
  this.selectItem = undefined;
25
+ this.entityName = undefined;
18
26
  this.argument = undefined;
27
+ this.isHierarchyEntity = false;
28
+ this.allowsNonAnalytic = false;
19
29
  }
20
30
  observeArgument() {
21
31
  if (this._textInput) {
@@ -53,36 +63,42 @@ export class SnkPesquisa {
53
63
  this._startLoading = true;
54
64
  this.searchLoader(argument)
55
65
  .then((resp) => {
66
+ if (!resp)
67
+ return;
68
+ this.processSearchResponse(resp);
69
+ }).finally(() => {
56
70
  this._startLoading = false;
57
- if (resp) {
58
- resp = ObjectUtils.stringToObject(resp.json.$);
59
- let descriptionField = resp.descriptionField;
60
- let pkField = resp.pkField;
61
- if (pkField) {
62
- let newItemList = [];
63
- resp.data.forEach((item) => {
64
- var _a;
65
- let fieldsMetadata = this.filterFieldsMetadata(resp, item);
66
- let fields = this.buildFirstFields(item['__matchFields'], fieldsMetadata);
67
- let exibitionItem = {
68
- key: this.highlightValue(item['__matchFields'], (_a = item[pkField]) === null || _a === void 0 ? void 0 : _a.toString(), fields, true),
69
- title: descriptionField ? this.highlightValue(item['__matchFields'], item[descriptionField], fields, true) : "",
70
- details: this.buildDetails(fields, item)
71
- };
72
- newItemList.push(exibitionItem);
73
- });
74
- this._itemList = newItemList;
75
- }
76
- }
77
- }).catch((error) => {
78
- this._startLoading = false;
79
- this._itemList = [];
80
- console.warn(error);
81
71
  });
82
72
  }
83
73
  }
74
+ processSearchResponse(resp) {
75
+ resp = ObjectUtils.stringToObject(resp.json.$);
76
+ let descriptionField = resp.descriptionField;
77
+ let pkField = resp.pkField;
78
+ if (!pkField)
79
+ return;
80
+ this._gridMetadata = buildGridMetadata(resp);
81
+ this._gridDataSource = [...resp.data];
82
+ this._pkField = pkField;
83
+ this._descriptionField = descriptionField;
84
+ this._itemList = this.buildCardItemList(resp, pkField, descriptionField);
85
+ }
86
+ buildCardItemList(resp, pkField, descriptionField) {
87
+ var _a;
88
+ let newItemList = (_a = resp.data) === null || _a === void 0 ? void 0 : _a.map((item) => {
89
+ var _a;
90
+ let fieldsMetadata = this.filterFieldsMetadata(resp, item);
91
+ let fields = this.buildFirstFields(item['__matchFields'], fieldsMetadata);
92
+ return {
93
+ key: this.highlightValue(item['__matchFields'], (_a = item[pkField]) === null || _a === void 0 ? void 0 : _a.toString(), fields, true),
94
+ title: descriptionField ? this.highlightValue(item['__matchFields'], item[descriptionField], fields, true) : '',
95
+ details: this.buildDetails(fields, item),
96
+ };
97
+ });
98
+ return newItemList;
99
+ }
84
100
  filterFieldsMetadata(resp, item) {
85
- let fieldsMetadata = resp.fieldsMetadata.filter((field) => {
101
+ return resp.fieldsMetadata.filter((field) => {
86
102
  let accept = !StringUtils.isEmpty(item[field.fieldName]) &&
87
103
  field.visible !== false &&
88
104
  field.type !== 'B' &&
@@ -99,7 +115,6 @@ export class SnkPesquisa {
99
115
  }
100
116
  return accept;
101
117
  });
102
- return fieldsMetadata;
103
118
  }
104
119
  removeAtIndex(array, index) {
105
120
  if (index >= 0 && index < array.length) {
@@ -257,6 +272,7 @@ export class SnkPesquisa {
257
272
  this.selectItem(option);
258
273
  }
259
274
  onChangeValue(event) {
275
+ var _a;
260
276
  this.clearDeboucingTimeout();
261
277
  if (this._startLoading) {
262
278
  this._changeDeboucingTimeout = setTimeout(() => {
@@ -265,6 +281,10 @@ export class SnkPesquisa {
265
281
  return;
266
282
  }
267
283
  this.argument = (event.detail || "").trim();
284
+ if (this.isHierarchyEntity && this._presentationMode === 'list') {
285
+ (_a = this._pesquisaTree) === null || _a === void 0 ? void 0 : _a.applyFilter();
286
+ return;
287
+ }
268
288
  const argumentNumber = this.getArgumentNumber();
269
289
  if (this.argument && (!isNaN(argumentNumber) || this.argument.length >= this._limitCharsToSearch)) {
270
290
  this._changeDeboucingTimeout = setTimeout(() => {
@@ -295,16 +315,59 @@ export class SnkPesquisa {
295
315
  : 'Nenhum registro encontrado'
296
316
  : 'Os resultados de sua pesquisa aparecerão aqui...';
297
317
  }
298
- componentDidLoad() {
318
+ async componentWillLoad() {
319
+ const mode = await this.pesquisaFetcher.loadPresentationConfig(this.entityName);
320
+ this._presentationMode = mode === 'list' ? 'list' : 'table';
321
+ }
322
+ async componentDidLoad() {
299
323
  ElementIDUtils.addIDInfo(this._element);
300
324
  }
325
+ async onClickList() {
326
+ this._presentationMode = this._presentationMode === 'list' ? 'table' : 'list';
327
+ await this.pesquisaFetcher.savePresentationConfig(this.entityName, this._presentationMode);
328
+ }
329
+ enableListButton() {
330
+ var _a;
331
+ return ((_a = this._itemList) === null || _a === void 0 ? void 0 : _a.length) > 0;
332
+ }
333
+ //Os limites de exibição são diferentes para lista e grade
334
+ hideLimitMessage() {
335
+ if (!this._itemList)
336
+ return true;
337
+ if (this._presentationMode === "list") {
338
+ if (this.isHierarchyEntity)
339
+ return true;
340
+ return this._itemList.length <= 100;
341
+ }
342
+ return this._itemList.length <= 150;
343
+ }
344
+ hideRecordsMessage() {
345
+ return (this._presentationMode === "list" && this.isHierarchyEntity);
346
+ }
347
+ renderContent() {
348
+ if (!this._itemList)
349
+ return;
350
+ if (this._presentationMode === 'list') {
351
+ return this.isHierarchyEntity ? this.renderTree() : this.renderCards();
352
+ }
353
+ return this.renderPesquisaGrid();
354
+ }
355
+ renderTree() {
356
+ return h("ez-scroller", { direction: EzScrollDirection.VERTICAL }, h("pesquisa-tree", { ref: (element) => this._pesquisaTree = element, argument: this.argument, treeLoader: this.treeLoader, allowsNonAnalytic: this.allowsNonAnalytic, onPesquisaTreeSelectItem: ({ detail }) => this.selectItem(detail) }));
357
+ }
358
+ renderCards() {
359
+ return (h("ez-scroller", { direction: EzScrollDirection.VERTICAL }, h("div", { class: "snk-pesquisa__cards-container" }, this._itemList.map((item) => {
360
+ return (h("ez-card-item", { onEzClick: (event) => this.createOption(event.detail), item: item }));
361
+ }))));
362
+ }
363
+ renderPesquisaGrid() {
364
+ return h("pesquisa-grid", { metadata: this._gridMetadata, dataSource: this._gridDataSource, pkField: this._pkField, descriptionField: this._descriptionField, entityName: this.entityName, onPesquisaGridSelectItem: ({ detail }) => this.selectItem(detail) });
365
+ }
301
366
  render() {
302
367
  var _a;
303
368
  return (h(Host, null, h("div", { class: "snk-pesquisa" }, h("div", { class: "snk-pesquisa__input" }, h("ez-text-input", { label: "Buscar", class: "ez-margin-right--medium", canShowError: false, ref: (ref) => this._textInput = ref, onEzChange: (event) => this.onChangeValue(event), value: this.argument, "data-element-id": "searchInput" }, h("ez-icon", { slot: "leftIcon", iconName: "search" }), this.argument && ((_a = this._textInput) === null || _a === void 0 ? void 0 : _a.value)
304
369
  ? h("button", { slot: "rightIcon", class: "snk-pesquisa__btn", onClick: () => this.clearSearch() }, h("ez-icon", { iconName: "close" }))
305
- : undefined), h("ez-button", { class: "ez-button--primary", label: "Pesquisar", onClick: () => this.onClickSearch() })), h("label", { class: "snk-pesquisa__records" }, this.getMessageView()), h("div", { class: "snk-pesquisa__content" }, this._itemList && this._itemList.map((item) => {
306
- return (h("ez-card-item", { onEzClick: (event) => this.createOption(event.detail), item: item }));
307
- })))));
370
+ : undefined), h("ez-button", { class: "ez-button--primary", label: "Pesquisar", onClick: () => this.onClickSearch() }), h("ez-button", { class: "ez-margin-left--medium", mode: "icon", iconName: this._presentationMode === 'list' ? 'table' : 'list', title: this._presentationMode === 'list' ? 'Modo grade' : 'Modo lista', onClick: async () => await this.onClickList(), enabled: this.enableListButton() })), h("div", { class: "snk-pesquisa__records-label" }, h("label", { class: `snk-pesquisa__records ${this.hideRecordsMessage() ? "hidden" : ""}` }, this.getMessageView()), h("label", { class: `snk-pesquisa__records-limit ${this.hideLimitMessage() ? "hidden" : ""}` }, "Essa pesquisa foi limitada, existem mais resultados.")), h("div", { class: "snk-pesquisa__content" }, this.renderContent()))));
308
371
  }
309
372
  static get is() { return "snk-pesquisa"; }
310
373
  static get encapsulation() { return "scoped"; }
@@ -339,6 +402,25 @@ export class SnkPesquisa {
339
402
  "text": "Fun\u00E7\u00E3o respons\u00E1vel em carregar os itens do componente snk-pesquisa."
340
403
  }
341
404
  },
405
+ "treeLoader": {
406
+ "type": "unknown",
407
+ "mutable": false,
408
+ "complexType": {
409
+ "original": "(text: string) => Promise<any>",
410
+ "resolved": "(text: string) => Promise<any>",
411
+ "references": {
412
+ "Promise": {
413
+ "location": "global"
414
+ }
415
+ }
416
+ },
417
+ "required": false,
418
+ "optional": true,
419
+ "docs": {
420
+ "tags": [],
421
+ "text": "Fun\u00E7\u00E3o respons\u00E1vel por carregar a \u00E1rvore hier\u00E1rquica do componente"
422
+ }
423
+ },
342
424
  "selectItem": {
343
425
  "type": "unknown",
344
426
  "mutable": false,
@@ -359,6 +441,23 @@ export class SnkPesquisa {
359
441
  "text": "Fun\u00E7\u00E3o disparada ao selecionar um item."
360
442
  }
361
443
  },
444
+ "entityName": {
445
+ "type": "string",
446
+ "mutable": false,
447
+ "complexType": {
448
+ "original": "string",
449
+ "resolved": "string",
450
+ "references": {}
451
+ },
452
+ "required": false,
453
+ "optional": false,
454
+ "docs": {
455
+ "tags": [],
456
+ "text": "Nome da entidade onde a pesquisa \u00E9 aplicada."
457
+ },
458
+ "attribute": "entity-name",
459
+ "reflect": false
460
+ },
362
461
  "argument": {
363
462
  "type": "string",
364
463
  "mutable": true,
@@ -375,13 +474,50 @@ export class SnkPesquisa {
375
474
  },
376
475
  "attribute": "argument",
377
476
  "reflect": false
477
+ },
478
+ "isHierarchyEntity": {
479
+ "type": "boolean",
480
+ "mutable": false,
481
+ "complexType": {
482
+ "original": "boolean",
483
+ "resolved": "boolean",
484
+ "references": {}
485
+ },
486
+ "required": false,
487
+ "optional": false,
488
+ "docs": {
489
+ "tags": [],
490
+ "text": "Define se a popup de pesquisa possuir\u00E1 ou n\u00E3o modo Hierarquico."
491
+ },
492
+ "attribute": "is-hierarchy-entity",
493
+ "reflect": false,
494
+ "defaultValue": "false"
495
+ },
496
+ "allowsNonAnalytic": {
497
+ "type": "boolean",
498
+ "mutable": false,
499
+ "complexType": {
500
+ "original": "boolean",
501
+ "resolved": "boolean",
502
+ "references": {}
503
+ },
504
+ "required": false,
505
+ "optional": false,
506
+ "docs": {
507
+ "tags": [],
508
+ "text": "Define se permite sele\u00E7\u00E3o de items n\u00E3o anal\u00EDticos"
509
+ },
510
+ "attribute": "allows-non-analytic",
511
+ "reflect": false,
512
+ "defaultValue": "false"
378
513
  }
379
514
  };
380
515
  }
381
516
  static get states() {
382
517
  return {
383
518
  "_itemList": {},
384
- "_startLoading": {}
519
+ "_startLoading": {},
520
+ "_presentationMode": {}
385
521
  };
386
522
  }
387
523
  static get elementRef() { return "_element"; }