@sankhyalabs/sankhyablocks 8.8.0-dev.3 → 8.8.0-rc.10

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 (120) hide show
  1. package/dist/cjs/{ConfigStorage-bdb539ce.js → ConfigStorage-908ce5bc.js} +2 -2
  2. package/dist/cjs/{DataFetcher-016f1661.js → DataFetcher-713f0749.js} +2 -2
  3. package/dist/cjs/PreloadManager-e26d237f.js +224 -0
  4. package/dist/cjs/{SnkFormConfigManager-c9d38de1.js → SnkFormConfigManager-793ade39.js} +2 -2
  5. package/dist/cjs/{SnkMultiSelectionListDataSource-45893a0c.js → SnkMultiSelectionListDataSource-d74d2336.js} +10 -6
  6. package/dist/cjs/{auth-fetcher-73ee0989.js → auth-fetcher-555ff856.js} +1 -1
  7. package/dist/cjs/{dataunit-fetcher-2454608a.js → dataunit-fetcher-66c0b7af.js} +46 -276
  8. package/dist/cjs/{form-config-fetcher-5e5ec5be.js → form-config-fetcher-17775a75.js} +1 -1
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/{pesquisa-fetcher-63a8c652.js → pesquisa-fetcher-34922b83.js} +1 -1
  11. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  12. package/dist/cjs/snk-actions-button.cjs.entry.js +6 -4
  13. package/dist/cjs/snk-application.cjs.entry.js +16 -6
  14. package/dist/cjs/snk-attach.cjs.entry.js +4 -2
  15. package/dist/cjs/snk-crud.cjs.entry.js +7 -5
  16. package/dist/cjs/snk-data-exporter.cjs.entry.js +1 -1
  17. package/dist/cjs/snk-detail-view.cjs.entry.js +24 -8
  18. package/dist/cjs/snk-filter-bar.cjs.entry.js +19 -4
  19. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +3 -3
  20. package/dist/cjs/snk-form-config.cjs.entry.js +2 -2
  21. package/dist/cjs/snk-form.cjs.entry.js +4 -4
  22. package/dist/cjs/snk-grid-config.cjs.entry.js +3 -3
  23. package/dist/cjs/snk-grid.cjs.entry.js +8 -7
  24. package/dist/cjs/{snk-guides-viewer-018c1c8e.js → snk-guides-viewer-2317c71e.js} +78 -5
  25. package/dist/cjs/snk-guides-viewer.cjs.entry.js +9 -7
  26. package/dist/cjs/snk-personalized-filter.cjs.entry.js +3 -3
  27. package/dist/cjs/snk-simple-crud.cjs.entry.js +8 -5
  28. package/dist/collection/components/snk-application/snk-application.js +1 -0
  29. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +18 -1
  30. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +80 -8
  31. package/dist/collection/components/snk-filter-bar/filter-item/dataunitfilter/data-unit-filter-builder.js +17 -2
  32. package/dist/collection/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.js +5 -5
  33. package/dist/collection/components/snk-grid/snk-grid.js +1 -0
  34. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +2 -2
  35. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/DataUnitDataLoader.js +6 -1
  36. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/ArrayRepository.js +3 -0
  37. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.js +21 -61
  38. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/dataunit-fetcher.js +1 -0
  39. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js +28 -9
  40. package/dist/collection/lib/workspace/workspace.js +7 -0
  41. package/dist/components/DataFetcher.js +2 -2
  42. package/dist/components/SnkMultiSelectionListDataSource.js +5 -5
  43. package/dist/components/dataunit-fetcher.js +59 -70
  44. package/dist/components/snk-application2.js +8 -0
  45. package/dist/components/snk-detail-view2.js +88 -2
  46. package/dist/components/snk-filter-bar2.js +17 -2
  47. package/dist/components/snk-grid2.js +1 -0
  48. package/dist/esm/{ConfigStorage-9840d004.js → ConfigStorage-48648d45.js} +2 -2
  49. package/dist/esm/{DataFetcher-07935045.js → DataFetcher-79f78222.js} +2 -2
  50. package/dist/esm/PreloadManager-8826b96a.js +222 -0
  51. package/dist/esm/{SnkFormConfigManager-a7c4ac16.js → SnkFormConfigManager-3c15f319.js} +2 -2
  52. package/dist/esm/{SnkMultiSelectionListDataSource-a0b69ac4.js → SnkMultiSelectionListDataSource-27572f47.js} +6 -6
  53. package/dist/esm/{auth-fetcher-1afab780.js → auth-fetcher-e260d0cd.js} +1 -1
  54. package/dist/esm/{dataunit-fetcher-493182bc.js → dataunit-fetcher-831feb12.js} +39 -268
  55. package/dist/esm/{form-config-fetcher-5b886892.js → form-config-fetcher-e1603e66.js} +1 -1
  56. package/dist/esm/loader.js +1 -1
  57. package/dist/esm/{pesquisa-fetcher-7c46996d.js → pesquisa-fetcher-8e922c9d.js} +1 -1
  58. package/dist/esm/sankhyablocks.js +1 -1
  59. package/dist/esm/snk-actions-button.entry.js +6 -4
  60. package/dist/esm/snk-application.entry.js +16 -6
  61. package/dist/esm/snk-attach.entry.js +4 -2
  62. package/dist/esm/snk-crud.entry.js +7 -5
  63. package/dist/esm/snk-data-exporter.entry.js +1 -1
  64. package/dist/esm/snk-detail-view.entry.js +24 -8
  65. package/dist/esm/snk-filter-bar.entry.js +20 -5
  66. package/dist/esm/snk-filter-modal-item.entry.js +3 -3
  67. package/dist/esm/snk-form-config.entry.js +2 -2
  68. package/dist/esm/snk-form.entry.js +4 -4
  69. package/dist/esm/snk-grid-config.entry.js +3 -3
  70. package/dist/esm/snk-grid.entry.js +8 -7
  71. package/dist/esm/{snk-guides-viewer-7c120bc6.js → snk-guides-viewer-3ba271c1.js} +79 -6
  72. package/dist/esm/snk-guides-viewer.entry.js +9 -7
  73. package/dist/esm/snk-personalized-filter.entry.js +3 -3
  74. package/dist/esm/snk-simple-crud.entry.js +8 -5
  75. package/dist/sankhyablocks/p-25882572.entry.js +1 -0
  76. package/dist/sankhyablocks/{p-b19c272c.js → p-2b39abbc.js} +1 -1
  77. package/dist/sankhyablocks/{p-1b985000.entry.js → p-2ecd9a19.entry.js} +1 -1
  78. package/dist/sankhyablocks/p-3926383d.entry.js +1 -0
  79. package/dist/sankhyablocks/{p-de9eb242.entry.js → p-395567f3.entry.js} +1 -1
  80. package/dist/sankhyablocks/p-3c4f0354.js +1 -0
  81. package/dist/sankhyablocks/p-3ccb321d.entry.js +1 -0
  82. package/dist/sankhyablocks/{p-efb2e247.js → p-41d156dd.js} +1 -1
  83. package/dist/sankhyablocks/{p-0f2b03e5.js → p-4651b43f.js} +1 -1
  84. package/dist/sankhyablocks/p-57543969.js +1 -0
  85. package/dist/sankhyablocks/p-5f6113c8.js +60 -0
  86. package/dist/sankhyablocks/{p-54efcc8d.entry.js → p-747043a5.entry.js} +1 -1
  87. package/dist/sankhyablocks/p-77756526.js +1 -0
  88. package/dist/sankhyablocks/{p-96dd0c41.js → p-8015cbfb.js} +1 -1
  89. package/dist/sankhyablocks/{p-562896d0.entry.js → p-80692cbd.entry.js} +1 -1
  90. package/dist/sankhyablocks/p-a1cce4f5.entry.js +1 -0
  91. package/dist/sankhyablocks/{p-afdb6ddc.entry.js → p-abff11ef.entry.js} +1 -1
  92. package/dist/sankhyablocks/{p-9246d7df.entry.js → p-afacdce6.entry.js} +1 -1
  93. package/dist/sankhyablocks/p-b86bee20.entry.js +11 -0
  94. package/dist/sankhyablocks/{p-4f7b9c50.js → p-c9399ce6.js} +1 -1
  95. package/dist/sankhyablocks/p-d0b36421.js +1 -0
  96. package/dist/sankhyablocks/p-eb25c85f.entry.js +1 -0
  97. package/dist/sankhyablocks/p-f07a5363.entry.js +1 -0
  98. package/dist/sankhyablocks/p-f1743d68.entry.js +1 -0
  99. package/dist/sankhyablocks/p-f2e798f1.entry.js +1 -0
  100. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  101. package/dist/types/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.d.ts +3 -0
  102. package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +22 -11
  103. package/dist/types/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.d.ts +1 -0
  104. package/dist/types/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.d.ts +3 -6
  105. package/dist/types/lib/http/data-fetcher/fetchers/data-unit/interfaces/ILoadingInfo.d.ts +2 -0
  106. package/dist/types/lib/workspace/workspace.d.ts +1 -0
  107. package/package.json +1 -1
  108. package/dist/sankhyablocks/p-21d01a8c.entry.js +0 -1
  109. package/dist/sankhyablocks/p-43f36d85.entry.js +0 -1
  110. package/dist/sankhyablocks/p-53091bcd.js +0 -1
  111. package/dist/sankhyablocks/p-7650d823.js +0 -1
  112. package/dist/sankhyablocks/p-8f7e0bbd.entry.js +0 -1
  113. package/dist/sankhyablocks/p-9256574e.entry.js +0 -11
  114. package/dist/sankhyablocks/p-b9b7bfce.entry.js +0 -1
  115. package/dist/sankhyablocks/p-bdfcc2e2.js +0 -59
  116. package/dist/sankhyablocks/p-db45a464.entry.js +0 -1
  117. package/dist/sankhyablocks/p-de1196c8.js +0 -1
  118. package/dist/sankhyablocks/p-e13c3fbc.entry.js +0 -1
  119. package/dist/sankhyablocks/p-e33b308f.entry.js +0 -1
  120. package/dist/sankhyablocks/p-f34b9087.entry.js +0 -1
@@ -0,0 +1,222 @@
1
+ import { FieldComparator, SortMode, DataUnit } from '@sankhyalabs/core';
2
+ import { ColumnFilterManager } from '@sankhyalabs/ezui/dist/collection/components/ez-grid/utils';
3
+
4
+ class ArrayRepository {
5
+ constructor(equalsFunction) {
6
+ this._list = [];
7
+ this._equalsFunction = equalsFunction;
8
+ }
9
+ async load(filterFunction, sortingFunction, offset, limit) {
10
+ let result = [].concat(this._list);
11
+ if (filterFunction != undefined) {
12
+ result = this._list.filter(item => filterFunction(item));
13
+ }
14
+ if (sortingFunction != undefined) {
15
+ result = result.sort(sortingFunction);
16
+ }
17
+ const count = result.length;
18
+ if (limit != undefined) {
19
+ const start = offset || 0;
20
+ const end = limit ? start + limit : result.length;
21
+ result = result.slice(start, end);
22
+ }
23
+ return Promise.resolve({ result, count });
24
+ }
25
+ async distict(itemProcessor) {
26
+ const processedItems = [];
27
+ let hasEmpty = false;
28
+ for (const item of this._list) {
29
+ const processedItem = itemProcessor(item);
30
+ if (processedItem == undefined) {
31
+ continue;
32
+ }
33
+ if (processedItem.value == undefined) {
34
+ hasEmpty = true;
35
+ continue;
36
+ }
37
+ processedItems.push(processedItem);
38
+ }
39
+ if (hasEmpty) {
40
+ processedItems.push({ key: "", value: null });
41
+ }
42
+ return Promise.resolve(new Map(processedItems.map(item => [item.key, item.value])));
43
+ }
44
+ async push(items) {
45
+ this._list.push(...items);
46
+ }
47
+ async clear() {
48
+ this._list = [];
49
+ }
50
+ async delete(items) {
51
+ this._list = this._list.filter(item => {
52
+ for (const removed of items) {
53
+ if (this._equalsFunction(item, removed)) {
54
+ return false;
55
+ }
56
+ }
57
+ return true;
58
+ });
59
+ }
60
+ async update(items) {
61
+ this._list = this._list.map(existingItem => {
62
+ const newItem = items.find(newItem => this._equalsFunction(existingItem, newItem));
63
+ return newItem == undefined ? existingItem : newItem;
64
+ });
65
+ }
66
+ async insert(itemReference, items) {
67
+ const itemPosition = this._list.indexOf(itemReference);
68
+ if (itemPosition == -1) {
69
+ this._list.push(...items);
70
+ return;
71
+ }
72
+ this._list = this._list.slice(0, itemPosition).concat(items).concat(this._list.slice(itemPosition));
73
+ }
74
+ isOperating() {
75
+ return true;
76
+ }
77
+ async isEmpty() {
78
+ return Promise.resolve(this._list.length === 0);
79
+ }
80
+ async count() {
81
+ return Promise.resolve(this._list.length);
82
+ }
83
+ }
84
+
85
+ class PreloadManager {
86
+ static setLoadingStatus(dataUnit, loadingInProgress) {
87
+ this._loadingStatus.set(dataUnit.name, loadingInProgress);
88
+ }
89
+ static isCacheEnabled(_dataUnit) {
90
+ return true;
91
+ }
92
+ static cacheRecords(dataUnit, records, resetDatabase, loadingInProgress) {
93
+ PreloadManager.setLoadingStatus(dataUnit, loadingInProgress);
94
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
95
+ this.getRepository(dataUnit).push(records);
96
+ }
97
+ else {
98
+ if (resetDatabase) {
99
+ this._repositories.delete(dataUnit.name);
100
+ }
101
+ }
102
+ }
103
+ static getSortingFunction(dataUnit, sorting) {
104
+ if (sorting == undefined || sorting.length == 0) {
105
+ return undefined;
106
+ }
107
+ return (recordA, recordB) => {
108
+ for (const sort of sorting) {
109
+ const result = FieldComparator.compare(dataUnit.getField(sort.field), recordA, recordB, sort.mode === SortMode.ASC);
110
+ if (result != 0) {
111
+ return result;
112
+ }
113
+ }
114
+ };
115
+ }
116
+ static async getDistinct(dataUnit, fieldName) {
117
+ if (!PreloadManager.isCacheEnabled(dataUnit)) {
118
+ return Promise.resolve(ColumnFilterManager.compileDistinct(fieldName, dataUnit));
119
+ }
120
+ let filterFunction;
121
+ const request = dataUnit.getLastLoadRequest();
122
+ if (request != undefined) {
123
+ const columnFilters = ColumnFilterManager.getColumnFilters(request.filters);
124
+ filterFunction = ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
125
+ }
126
+ return new Promise((accept, reject) => {
127
+ PreloadManager.getRepository(dataUnit).distict(record => {
128
+ if (filterFunction != undefined && !filterFunction(record)) {
129
+ return undefined;
130
+ }
131
+ const fieldValue = record[fieldName];
132
+ if (fieldValue == undefined) {
133
+ return { key: null, value: null };
134
+ }
135
+ const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
136
+ return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
137
+ })
138
+ .then(result => {
139
+ if (result == undefined) {
140
+ accept(undefined);
141
+ return;
142
+ }
143
+ accept(Array.from(result.entries()).map(([label, value]) => ({ label, value, check: true })));
144
+ })
145
+ .catch(reason => reject(reason));
146
+ });
147
+ }
148
+ static async loadData(dataUnit, request, loadFromServer) {
149
+ try {
150
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
151
+ let useCache = request.source === "EZ_GRID_LOADING_SOURCE" || request.source === DataUnit.CHANGING_PAGE_LOADING_SOURCE;
152
+ if (useCache) {
153
+ const isCacheEmpty = await PreloadManager.getRepository(dataUnit).isEmpty();
154
+ if (!isCacheEmpty) {
155
+ return PreloadManager.loadFromCache(dataUnit, request);
156
+ }
157
+ }
158
+ //Como não vamos aproveitar o cache, ele precisa ser limpo.
159
+ PreloadManager.getRepository(dataUnit).clear().catch(() => { });
160
+ }
161
+ return loadFromServer(dataUnit, request);
162
+ }
163
+ catch (error) {
164
+ console.error(error);
165
+ return Promise.reject(error);
166
+ }
167
+ }
168
+ static insertRecords(dataUnit, reference, records) {
169
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
170
+ PreloadManager.getRepository(dataUnit).insert(reference, records);
171
+ }
172
+ }
173
+ static updateRecords(dataUnit, records) {
174
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
175
+ PreloadManager.getRepository(dataUnit).update(records);
176
+ }
177
+ }
178
+ static removeRecords(dataUnit, records) {
179
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
180
+ PreloadManager.getRepository(dataUnit).delete(records);
181
+ }
182
+ }
183
+ static async countRecords(dataUnit) {
184
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
185
+ return PreloadManager.getRepository(dataUnit).count();
186
+ }
187
+ return Promise.resolve(0);
188
+ }
189
+ static getRepository(dataUnit) {
190
+ const name = dataUnit.name;
191
+ if (!PreloadManager._repositories.has(name)) {
192
+ PreloadManager._repositories.set(name, new ArrayRepository((recordA, recordB) => recordA.__record__id__ === recordB.__record__id__));
193
+ }
194
+ return PreloadManager._repositories.get(name);
195
+ }
196
+ static async loadFromCache(dataUnit, request) {
197
+ return new Promise((accept, reject) => {
198
+ const columnFilters = ColumnFilterManager.getColumnFilters(request.filters);
199
+ const { limit, offset, sort } = request;
200
+ PreloadManager.getRepository(dataUnit)
201
+ .load(ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values())), PreloadManager.getSortingFunction(dataUnit, sort), offset, limit)
202
+ .then(loadResult => {
203
+ const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
204
+ const { count, result: records } = loadResult;
205
+ const firstRecord = count == 0 ? 0 : offset + 1;
206
+ const lastRecord = offset + Math.min(records.length, limit);
207
+ const currentPage = offset / limit;
208
+ const paginationInfo = {
209
+ count, currentPage, firstRecord, lastRecord,
210
+ hasMore: stillLoading || (lastRecord < count),
211
+ total: stillLoading ? undefined : count
212
+ };
213
+ accept({ records, paginationInfo });
214
+ })
215
+ .catch(reason => reject(reason));
216
+ });
217
+ }
218
+ }
219
+ PreloadManager._repositories = new Map();
220
+ PreloadManager._loadingStatus = new Map();
221
+
222
+ export { PreloadManager as P };
@@ -1,6 +1,6 @@
1
- import { C as ConfigStorage } from './ConfigStorage-9840d004.js';
1
+ import { C as ConfigStorage } from './ConfigStorage-48648d45.js';
2
2
  import { ObjectUtils } from '@sankhyalabs/core';
3
- import { F as FormConfigFetcher } from './form-config-fetcher-5b886892.js';
3
+ import { F as FormConfigFetcher } from './form-config-fetcher-e1603e66.js';
4
4
 
5
5
  class SnkFormConfigManager {
6
6
  constructor(configName, resourceID, onConfigChange) {
@@ -1,5 +1,6 @@
1
1
  import { UserInterface, DateUtils } from '@sankhyalabs/core';
2
- import { P as PreloadManager } from './dataunit-fetcher-493182bc.js';
2
+ import InMemoryFilterColumnDataSource from '@sankhyalabs/ezui/dist/collection/components/ez-grid/utils/InMemoryFilterColumnDataSource';
3
+ import { P as PreloadManager } from './PreloadManager-8826b96a.js';
3
4
 
4
5
  class SnkMultiSelectionListDataSource {
5
6
  setDataUnit(dataUnit) {
@@ -19,11 +20,7 @@ class SnkMultiSelectionListDataSource {
19
20
  if (fieldName == undefined) {
20
21
  return Promise.resolve(undefined);
21
22
  }
22
- const result = await PreloadManager.getDistinct(this._dataUnit, fieldName);
23
- if (result == undefined) {
24
- return Promise.resolve(undefined);
25
- }
26
- return Promise.resolve(Array.from(result.entries()).map(([label, value]) => ({ label: String(label), value, check: true })));
23
+ return Promise.resolve(await PreloadManager.getDistinct(this._dataUnit, fieldName));
27
24
  }
28
25
  fetchData(filterTerm, fieldName) {
29
26
  return new Promise(resolve => {
@@ -38,6 +35,9 @@ class SnkMultiSelectionListDataSource {
38
35
  });
39
36
  });
40
37
  }
38
+ sortItems(fieldName, items) {
39
+ return InMemoryFilterColumnDataSource.defaultSorterMultSelectionOption(this._dataUnit, fieldName, items);
40
+ }
41
41
  }
42
42
 
43
43
  export { SnkMultiSelectionListDataSource as S };
@@ -1,5 +1,5 @@
1
1
  import { ObjectUtils } from '@sankhyalabs/core';
2
- import { R as ResourceFetcher } from './form-config-fetcher-5b886892.js';
2
+ import { R as ResourceFetcher } from './form-config-fetcher-e1603e66.js';
3
3
 
4
4
  class AuthFetcher extends ResourceFetcher {
5
5
  getData(resourceID) {
@@ -1,264 +1,10 @@
1
- import { FieldComparator, SortMode, DataUnit, defaultDataLoader, DataType, DateUtils, StringUtils, ChangeOperation, UserInterface, DataUnitStorage } from '@sankhyalabs/core';
2
- import { D as DataFetcher, d as dist } from './DataFetcher-07935045.js';
1
+ import { DataUnit, defaultDataLoader, DataType, DateUtils, StringUtils, ChangeOperation, UserInterface, DataUnitStorage } from '@sankhyalabs/core';
2
+ import { D as DataFetcher, d as dist } from './DataFetcher-79f78222.js';
3
3
  import { DISTINCT_FILTER_NAME_PREFIX } from '@sankhyalabs/ezui/dist/collection/utils/constants';
4
4
  import { DataUnitTransient } from '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
5
+ import { P as PreloadManager } from './PreloadManager-8826b96a.js';
5
6
  import { R as ResourceIDUtils } from './ResourceIDUtils-a114189a.js';
6
7
 
7
- class ArrayRepository {
8
- constructor(equalsFunction) {
9
- this._list = [];
10
- this._equalsFunction = equalsFunction;
11
- }
12
- async load(filterFunction, sortingFunction, offset, limit) {
13
- let result = [].concat(this._list);
14
- if (filterFunction != undefined) {
15
- result = this._list.filter(item => filterFunction(item));
16
- }
17
- if (sortingFunction != undefined) {
18
- result = result.sort(sortingFunction);
19
- }
20
- const count = result.length;
21
- if (limit != undefined) {
22
- const start = offset || 0;
23
- const end = limit ? start + limit : result.length;
24
- result = result.slice(start, end);
25
- }
26
- return Promise.resolve({ result, count });
27
- }
28
- async distict(itemProcessor) {
29
- const processedItems = [];
30
- let hasEmpty = false;
31
- for (const item of this._list) {
32
- const processedItem = itemProcessor(item);
33
- if (processedItem == undefined) {
34
- hasEmpty = true;
35
- continue;
36
- }
37
- processedItems.push(processedItem);
38
- }
39
- if (hasEmpty) {
40
- processedItems.push({ key: "", value: null });
41
- }
42
- return Promise.resolve(new Map(processedItems.map(item => [item.key, item.value])));
43
- }
44
- async push(items) {
45
- this._list.push(...items);
46
- }
47
- async clear() {
48
- this._list = [];
49
- }
50
- async delete(items) {
51
- this._list = this._list.filter(item => {
52
- for (const removed of items) {
53
- if (this._equalsFunction(item, removed)) {
54
- return false;
55
- }
56
- }
57
- return true;
58
- });
59
- }
60
- async update(items) {
61
- this._list = this._list.map(existingItem => {
62
- const newItem = items.find(newItem => this._equalsFunction(existingItem, newItem));
63
- return newItem == undefined ? existingItem : newItem;
64
- });
65
- }
66
- async insert(itemReference, items) {
67
- const itemPosition = this._list.indexOf(itemReference);
68
- if (itemPosition == -1) {
69
- this._list.push(...items);
70
- return;
71
- }
72
- this._list = this._list.slice(0, itemPosition).concat(items).concat(this._list.slice(itemPosition));
73
- }
74
- isOperating() {
75
- return true;
76
- }
77
- async isEmpty() {
78
- return Promise.resolve(this._list.length === 0);
79
- }
80
- async count() {
81
- return Promise.resolve(this._list.length);
82
- }
83
- }
84
-
85
- const COLUMN_FILTER_PATTERN = /FILTRO_COLUNA_(.+)/;
86
- class PreloadManager {
87
- static setLoadingStatus(dataUnit, loadingInProgress) {
88
- this._loadingStatus.set(dataUnit.name, loadingInProgress);
89
- }
90
- static isCacheEnabled(dataUnit) {
91
- const dataUnitResourceId = PreloadManager.getResourceId(dataUnit.name);
92
- if (dataUnitResourceId !== this.applicationResourceID) {
93
- return false;
94
- }
95
- return this.getRepository(dataUnit).isOperating();
96
- }
97
- static getResourceId(dataUnitName) {
98
- const dataUnitNameInfo = DataUnitFetcher.parseDataUnitName(dataUnitName);
99
- return dataUnitNameInfo == undefined ? undefined : dataUnitNameInfo.resourceID;
100
- }
101
- static cacheRecords(dataUnit, records, resetDatabase, loadingInProgress) {
102
- PreloadManager.setLoadingStatus(dataUnit, loadingInProgress);
103
- if (PreloadManager.isCacheEnabled(dataUnit)) {
104
- this.getRepository(dataUnit).push(records);
105
- }
106
- else {
107
- if (resetDatabase) {
108
- this._repositories.delete(dataUnit.name);
109
- }
110
- }
111
- }
112
- static getSortingFunction(dataUnit, sorting) {
113
- if (sorting == undefined || sorting.length == 0) {
114
- return undefined;
115
- }
116
- return (recordA, recordB) => {
117
- for (const sort of sorting) {
118
- const result = FieldComparator.compare(dataUnit.getField(sort.field), recordA, recordB, sort.mode === SortMode.ASC);
119
- if (result != 0) {
120
- return result;
121
- }
122
- }
123
- };
124
- }
125
- static async getDistinct(dataUnit, fieldName) {
126
- if (!PreloadManager.isCacheEnabled(dataUnit)) {
127
- return Promise.resolve(undefined);
128
- }
129
- return new Promise((accept, reject) => {
130
- PreloadManager.getRepository(dataUnit).distict(record => {
131
- const fieldValue = record[fieldName];
132
- if (fieldValue == undefined) {
133
- return undefined;
134
- }
135
- const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
136
- return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
137
- })
138
- .then(result => {
139
- if (result != undefined && result.size > 0) {
140
- const field = dataUnit.getField(fieldName);
141
- const sortedMap = new Map(Array.from(result.entries())
142
- .sort((itemA, itemB) => FieldComparator.compareValues(field, itemA[1], itemB[1]))
143
- .map(([key, value]) => key === "" ? ["(Vazio)", value] : [key, value]));
144
- accept(sortedMap);
145
- return;
146
- }
147
- accept(result);
148
- })
149
- .catch(reason => reject(reason));
150
- });
151
- }
152
- static async loadData(dataUnit, request, loadFromServer) {
153
- try {
154
- if (PreloadManager.isCacheEnabled(dataUnit)) {
155
- let useCache = request.source === "EZ_GRID_LOADING_SOURCE" || request.source === DataUnit.CHANGING_PAGE_LOADING_SOURCE;
156
- if (useCache) {
157
- const isCacheEmpty = await PreloadManager.getRepository(dataUnit).isEmpty();
158
- if (!isCacheEmpty) {
159
- return PreloadManager.loadFromCache(dataUnit, request);
160
- }
161
- }
162
- //Como não vamos aproveitar o cache, ele precisa ser limpado.
163
- PreloadManager.getRepository(dataUnit).clear().catch(() => { });
164
- }
165
- return loadFromServer(dataUnit, request);
166
- }
167
- catch (error) {
168
- console.error(error);
169
- return Promise.reject(error);
170
- }
171
- }
172
- static insertRecords(dataUnit, reference, records) {
173
- if (PreloadManager.isCacheEnabled(dataUnit)) {
174
- PreloadManager.getRepository(dataUnit).insert(reference, records);
175
- }
176
- }
177
- static updateRecords(dataUnit, records) {
178
- if (PreloadManager.isCacheEnabled(dataUnit)) {
179
- PreloadManager.getRepository(dataUnit).update(records);
180
- }
181
- }
182
- static removeRecords(dataUnit, records) {
183
- if (PreloadManager.isCacheEnabled(dataUnit)) {
184
- PreloadManager.getRepository(dataUnit).delete(records);
185
- }
186
- }
187
- static async countRecords(dataUnit) {
188
- if (PreloadManager.isCacheEnabled(dataUnit)) {
189
- return PreloadManager.getRepository(dataUnit).count();
190
- }
191
- return Promise.resolve(0);
192
- }
193
- static getRepository(dataUnit) {
194
- const name = dataUnit.name;
195
- if (!PreloadManager._repositories.has(name)) {
196
- PreloadManager._repositories.set(name, new ArrayRepository((recordA, recordB) => recordA.__record__id__ === recordB.__record__id__));
197
- }
198
- return PreloadManager._repositories.get(name);
199
- }
200
- static getFilterFunction(dataUnit, filters) {
201
- if (filters != undefined && filters.length > 0) {
202
- return record => {
203
- for (const filter of filters) {
204
- if (!PreloadManager.recordMatchesFilter(dataUnit, record, filter)) {
205
- return false;
206
- }
207
- }
208
- return true;
209
- };
210
- }
211
- return undefined;
212
- }
213
- static recordMatchesFilter(dataUnit, record, columnFilter) {
214
- const fieldValue = record[columnFilter.columnName];
215
- for (let param of columnFilter.params) {
216
- const paramValue = dataUnit.valueFromString(columnFilter.columnName, param.value);
217
- if (FieldComparator.compareValues(dataUnit.getField(columnFilter.columnName), fieldValue, paramValue) === 0) {
218
- return true;
219
- }
220
- }
221
- return false;
222
- }
223
- static async loadFromCache(dataUnit, request) {
224
- return new Promise((accept, reject) => {
225
- const columnFilters = PreloadManager.getColumnFilters(request.filters);
226
- const { limit, offset, sort } = request;
227
- PreloadManager.getRepository(dataUnit)
228
- .load(PreloadManager.getFilterFunction(dataUnit, Array.from(columnFilters.values())), PreloadManager.getSortingFunction(dataUnit, sort), offset, limit)
229
- .then(loadResult => {
230
- const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
231
- const { count, result: records } = loadResult;
232
- const firstRecord = count == 0 ? 1 : offset + 1;
233
- const lastRecord = offset + Math.min(records.length, limit);
234
- const currentPage = offset / limit;
235
- const paginationInfo = {
236
- count, currentPage, firstRecord, lastRecord,
237
- hasMore: stillLoading || (lastRecord < count),
238
- total: stillLoading ? undefined : count
239
- };
240
- accept({ records, paginationInfo });
241
- })
242
- .catch(reason => reject(reason));
243
- });
244
- }
245
- static getColumnFilters(filters) {
246
- const columnFilters = new Map();
247
- if (filters == undefined || filters.length == 0) {
248
- return columnFilters;
249
- }
250
- filters.forEach(filter => {
251
- const match = COLUMN_FILTER_PATTERN.exec(filter.name);
252
- if (match) {
253
- columnFilters.set(filter.name, Object.assign({ columnName: match[1] }, filter));
254
- }
255
- });
256
- return columnFilters;
257
- }
258
- }
259
- PreloadManager._repositories = new Map();
260
- PreloadManager._loadingStatus = new Map();
261
-
262
8
  class InMemoryLoader {
263
9
  constructor(metadata, records) {
264
10
  this.metadata = metadata;
@@ -375,17 +121,36 @@ class DatasetStrategy {
375
121
  return Promise.resolve({ records: [], loadingInfo });
376
122
  }
377
123
  try {
124
+ const localSorting = [];
125
+ const serverSorting = [];
126
+ if (request.sort != undefined) {
127
+ for (const sort of request.sort) {
128
+ const descriptor = dataUnit.getField(sort.field);
129
+ const local = descriptor != undefined
130
+ && descriptor.properties != undefined
131
+ && descriptor.properties.calculated === "true";
132
+ if (local) {
133
+ localSorting.push(sort);
134
+ }
135
+ else {
136
+ serverSorting.push(sort);
137
+ }
138
+ }
139
+ }
378
140
  const fields = this.getFieldsList(dataUnit);
379
141
  const serviceName = "DatasetSP.loadRecords";
380
- const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo);
381
- const { result: responseRecords, pagerID: pagerId } = await DataFetcher.get().callServiceBroker(serviceName, requestBody);
142
+ const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, serverSorting);
143
+ const params = loadingInfo.quiet ? { urlParams: { quietMode: "true" } } : undefined;
144
+ const { result: responseRecords, pagerID: pagerId } = await DataFetcher.get().callServiceBroker(serviceName, requestBody, params);
382
145
  const records = this.processRecords(dataUnit, fields, responseRecords);
383
146
  const loadingInProgress = pagerId != undefined;
384
147
  const count = loadingInfo.count + records.length;
148
+ const needReload = !loadingInProgress && localSorting.length > 0;
385
149
  return Promise.resolve({
386
150
  records,
387
151
  loadingInfo: Object.assign(Object.assign({}, loadingInfo), { pagerId,
388
- loadingInProgress, total: loadingInProgress ? undefined : count, count })
152
+ loadingInProgress, total: loadingInProgress ? undefined : count, count,
153
+ needReload })
389
154
  });
390
155
  }
391
156
  catch (error) {
@@ -395,9 +160,10 @@ class DatasetStrategy {
395
160
  }
396
161
  getFieldsList(dataUnit) {
397
162
  let fields = ["__record__id__", "__record__label__"];
398
- dataUnit.metadata.fields.forEach(descriptor => {
399
- if (descriptor.standAlone)
163
+ dataUnit.metadata.fields.forEach((descriptor) => {
164
+ if (descriptor.standAlone) {
400
165
  return;
166
+ }
401
167
  fields = fields.concat(this.getFieldNames(descriptor));
402
168
  });
403
169
  return fields;
@@ -409,7 +175,7 @@ class DatasetStrategy {
409
175
  }
410
176
  return [descriptor.name, descriptionField];
411
177
  }
412
- buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo) {
178
+ buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, sorting) {
413
179
  const dataSetID = dataUnit.dataUnitId;
414
180
  const dataUnitName = dataUnit.name;
415
181
  const entityName = DataUnitFetcher.parseDataUnitName(dataUnitName).entityName;
@@ -430,13 +196,13 @@ class DatasetStrategy {
430
196
  tryJoinedFields: true,
431
197
  parallelLoader: true,
432
198
  crudListener: "br.com.sankhya.modelcore.dataset.DataUnitDatasetAdapter",
433
- txProperties: this.getTxProperties(dataUnitName, request),
199
+ txProperties: this.getTxProperties(dataUnitName, request, sorting),
434
200
  useDefaultRowsLimit: false
435
201
  }
436
202
  };
437
203
  return JSON.stringify(requestBody);
438
204
  }
439
- getTxProperties(dataUnitName, request) {
205
+ getTxProperties(dataUnitName, request, sorting) {
440
206
  const txProperties = {
441
207
  "__DATA_UNIT_ADAPTER__[dataUnitName]": dataUnitName
442
208
  };
@@ -444,7 +210,6 @@ class DatasetStrategy {
444
210
  if (serverSideFilters.length !== 0) {
445
211
  txProperties["__DATA_UNIT_ADAPTER__[criteria]"] = JSON.stringify(serverSideFilters);
446
212
  }
447
- const sorting = request.sort;
448
213
  if (sorting != undefined && sorting.length !== 0) {
449
214
  txProperties["__DATA_UNIT_ADAPTER__[sorting]"] = JSON.stringify(sorting);
450
215
  }
@@ -551,7 +316,7 @@ class DataUnitDataLoader {
551
316
  PreloadManager.cacheRecords(dataUnit, records, recreateCache, responseLoadingInfo.loadingInProgress);
552
317
  if (PreloadManager.isCacheEnabled(dataUnit) && responseLoadingInfo.loadingInProgress) {
553
318
  const newRequest = Object.assign(Object.assign({}, request), { offset: responseLoadingInfo.count });
554
- const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1 });
319
+ const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1, quiet: true });
555
320
  this.callLoader(dataUnit, newRequest, newLoadingInfo, dataLoader)
556
321
  .then(result => DataUnitDataLoader.afterLoadingPage(dataUnit, result.loadingInfo))
557
322
  .catch(reason => console.error(reason));
@@ -569,6 +334,11 @@ class DataUnitDataLoader {
569
334
  dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { count }));
570
335
  return;
571
336
  }
337
+ if (loadingInfo.needReload) {
338
+ //Ir para a primeira página, faz com que o loadData seja chamado novamente
339
+ dataUnit.gotoPage(0);
340
+ return;
341
+ }
572
342
  dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { total: count, count }));
573
343
  }
574
344
  static registryLoading(dataUnit, loadingInfo) {
@@ -634,6 +404,7 @@ class DataUnitFetcher {
634
404
  defaultValue
635
405
  label
636
406
  visible
407
+ standAlone
637
408
  readOnly
638
409
  required
639
410
  dataType
@@ -901,4 +672,4 @@ class DataUnitFetcher {
901
672
  }
902
673
  }
903
674
 
904
- export { DataUnitFetcher as D, InMemoryLoader as I, PreloadManager as P };
675
+ export { DataUnitFetcher as D, InMemoryLoader as I };
@@ -1,4 +1,4 @@
1
- import { d as dist, D as DataFetcher } from './DataFetcher-07935045.js';
1
+ import { d as dist, D as DataFetcher } from './DataFetcher-79f78222.js';
2
2
  import { ObjectUtils } from '@sankhyalabs/core';
3
3
 
4
4
  class ResourceFetcher {