@sankhyalabs/sankhyablocks 8.8.0-rc.8 → 8.8.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 (87) hide show
  1. package/dist/cjs/{ConfigStorage-908ce5bc.js → ConfigStorage-c15716fd.js} +3 -0
  2. package/dist/cjs/PreloadManager-e26d237f.js +224 -0
  3. package/dist/cjs/{SnkFormConfigManager-793ade39.js → SnkFormConfigManager-29101e20.js} +1 -1
  4. package/dist/cjs/{SnkMultiSelectionListDataSource-f000a53f.js → SnkMultiSelectionListDataSource-d74d2336.js} +10 -6
  5. package/dist/cjs/{dataunit-fetcher-e86cba8a.js → dataunit-fetcher-66c0b7af.js} +10 -267
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  8. package/dist/cjs/snk-actions-button.cjs.entry.js +3 -1
  9. package/dist/cjs/snk-application.cjs.entry.js +4 -2
  10. package/dist/cjs/snk-attach.cjs.entry.js +3 -1
  11. package/dist/cjs/snk-crud.cjs.entry.js +3 -1
  12. package/dist/cjs/snk-detail-view.cjs.entry.js +21 -5
  13. package/dist/cjs/snk-filter-bar.cjs.entry.js +1 -1
  14. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +1 -1
  15. package/dist/cjs/snk-form.cjs.entry.js +2 -2
  16. package/dist/cjs/snk-grid-config.cjs.entry.js +1 -1
  17. package/dist/cjs/snk-grid.cjs.entry.js +5 -5
  18. package/dist/cjs/{snk-guides-viewer-f31449a8.js → snk-guides-viewer-b173ce35.js} +75 -2
  19. package/dist/cjs/snk-guides-viewer.cjs.entry.js +6 -4
  20. package/dist/cjs/snk-personalized-filter.cjs.entry.js +1 -1
  21. package/dist/cjs/snk-simple-crud.cjs.entry.js +5 -2
  22. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +18 -1
  23. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +80 -8
  24. package/dist/collection/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.js +5 -5
  25. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.js +15 -54
  26. package/dist/collection/lib/http/data-fetcher/fetchers/personalized-filter-fetcher.js +3 -0
  27. package/dist/components/ConfigStorage.js +3 -0
  28. package/dist/components/SnkMultiSelectionListDataSource.js +5 -5
  29. package/dist/components/dataunit-fetcher.js +15 -53
  30. package/dist/components/snk-detail-view2.js +88 -2
  31. package/dist/esm/{ConfigStorage-48648d45.js → ConfigStorage-79c81f36.js} +3 -0
  32. package/dist/esm/PreloadManager-8826b96a.js +222 -0
  33. package/dist/esm/{SnkFormConfigManager-3c15f319.js → SnkFormConfigManager-7723f3ec.js} +1 -1
  34. package/dist/esm/{SnkMultiSelectionListDataSource-922f0941.js → SnkMultiSelectionListDataSource-27572f47.js} +6 -6
  35. package/dist/esm/{dataunit-fetcher-ec40608e.js → dataunit-fetcher-831feb12.js} +3 -259
  36. package/dist/esm/loader.js +1 -1
  37. package/dist/esm/sankhyablocks.js +1 -1
  38. package/dist/esm/snk-actions-button.entry.js +3 -1
  39. package/dist/esm/snk-application.entry.js +4 -2
  40. package/dist/esm/snk-attach.entry.js +3 -1
  41. package/dist/esm/snk-crud.entry.js +3 -1
  42. package/dist/esm/snk-detail-view.entry.js +21 -5
  43. package/dist/esm/snk-filter-bar.entry.js +1 -1
  44. package/dist/esm/snk-filter-modal-item.entry.js +1 -1
  45. package/dist/esm/snk-form.entry.js +2 -2
  46. package/dist/esm/snk-grid-config.entry.js +1 -1
  47. package/dist/esm/snk-grid.entry.js +5 -5
  48. package/dist/esm/{snk-guides-viewer-9ecebfc3.js → snk-guides-viewer-e62e0edc.js} +76 -3
  49. package/dist/esm/snk-guides-viewer.entry.js +6 -4
  50. package/dist/esm/snk-personalized-filter.entry.js +1 -1
  51. package/dist/esm/snk-simple-crud.entry.js +5 -2
  52. package/dist/sankhyablocks/{p-abff11ef.entry.js → p-06e76ed2.entry.js} +1 -1
  53. package/dist/sankhyablocks/p-29176742.js +56 -0
  54. package/dist/sankhyablocks/{p-8015cbfb.js → p-2e6f1666.js} +1 -1
  55. package/dist/sankhyablocks/{p-2ecd9a19.entry.js → p-3bf4df20.entry.js} +1 -1
  56. package/dist/sankhyablocks/p-3c4f0354.js +1 -0
  57. package/dist/sankhyablocks/p-3ccb321d.entry.js +1 -0
  58. package/dist/sankhyablocks/{p-afacdce6.entry.js → p-47e4b6c9.entry.js} +1 -1
  59. package/dist/sankhyablocks/{p-395567f3.entry.js → p-4f5b995d.entry.js} +1 -1
  60. package/dist/sankhyablocks/p-5f6113c8.js +60 -0
  61. package/dist/sankhyablocks/{p-3c884841.entry.js → p-72b32e25.entry.js} +2 -2
  62. package/dist/sankhyablocks/p-77756526.js +1 -0
  63. package/dist/sankhyablocks/{p-f07a5363.entry.js → p-848b2e3b.entry.js} +1 -1
  64. package/dist/sankhyablocks/p-862e5bf6.entry.js +1 -0
  65. package/dist/sankhyablocks/p-95b05e58.entry.js +1 -0
  66. package/dist/sankhyablocks/p-a1cce4f5.entry.js +1 -0
  67. package/dist/sankhyablocks/p-d32fe25e.js +1 -0
  68. package/dist/sankhyablocks/p-eb1561bf.entry.js +1 -0
  69. package/dist/sankhyablocks/p-f1743d68.entry.js +1 -0
  70. package/dist/sankhyablocks/p-f2e798f1.entry.js +1 -0
  71. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  72. package/dist/types/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.d.ts +3 -0
  73. package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +22 -11
  74. package/dist/types/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.d.ts +1 -0
  75. package/dist/types/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.d.ts +3 -6
  76. package/package.json +4 -4
  77. package/dist/sankhyablocks/p-2b39abbc.js +0 -56
  78. package/dist/sankhyablocks/p-3307f385.entry.js +0 -1
  79. package/dist/sankhyablocks/p-3fd5b4c1.entry.js +0 -1
  80. package/dist/sankhyablocks/p-43cbd6ba.js +0 -1
  81. package/dist/sankhyablocks/p-4f74a21b.entry.js +0 -1
  82. package/dist/sankhyablocks/p-83954fc0.entry.js +0 -1
  83. package/dist/sankhyablocks/p-9713c75c.js +0 -60
  84. package/dist/sankhyablocks/p-c0c48f19.entry.js +0 -1
  85. package/dist/sankhyablocks/p-e040c626.entry.js +0 -1
  86. package/dist/sankhyablocks/p-efc9b851.entry.js +0 -1
  87. package/dist/sankhyablocks/p-f518057c.js +0 -1
@@ -273,6 +273,9 @@ class PersonalizedFilterFetcher {
273
273
  });
274
274
  }
275
275
  async savePersonalizedFilter(personalizedFilter, resourceID, configName) {
276
+ if (!personalizedFilter || Object.keys(personalizedFilter).length == 0) {
277
+ return Promise.reject(new Error("personalizedFilter não pode ser vazio"));
278
+ }
276
279
  let personalizedFilterParsed = JSON.parse(JSON.stringify(personalizedFilter));
277
280
  personalizedFilterParsed.assistent = JSON.stringify(personalizedFilterParsed.assistent);
278
281
  return new Promise((resolve, reject) => {
@@ -0,0 +1,224 @@
1
+ 'use strict';
2
+
3
+ const core = require('@sankhyalabs/core');
4
+ const utils = require('@sankhyalabs/ezui/dist/collection/components/ez-grid/utils');
5
+
6
+ class ArrayRepository {
7
+ constructor(equalsFunction) {
8
+ this._list = [];
9
+ this._equalsFunction = equalsFunction;
10
+ }
11
+ async load(filterFunction, sortingFunction, offset, limit) {
12
+ let result = [].concat(this._list);
13
+ if (filterFunction != undefined) {
14
+ result = this._list.filter(item => filterFunction(item));
15
+ }
16
+ if (sortingFunction != undefined) {
17
+ result = result.sort(sortingFunction);
18
+ }
19
+ const count = result.length;
20
+ if (limit != undefined) {
21
+ const start = offset || 0;
22
+ const end = limit ? start + limit : result.length;
23
+ result = result.slice(start, end);
24
+ }
25
+ return Promise.resolve({ result, count });
26
+ }
27
+ async distict(itemProcessor) {
28
+ const processedItems = [];
29
+ let hasEmpty = false;
30
+ for (const item of this._list) {
31
+ const processedItem = itemProcessor(item);
32
+ if (processedItem == undefined) {
33
+ continue;
34
+ }
35
+ if (processedItem.value == undefined) {
36
+ hasEmpty = true;
37
+ continue;
38
+ }
39
+ processedItems.push(processedItem);
40
+ }
41
+ if (hasEmpty) {
42
+ processedItems.push({ key: "", value: null });
43
+ }
44
+ return Promise.resolve(new Map(processedItems.map(item => [item.key, item.value])));
45
+ }
46
+ async push(items) {
47
+ this._list.push(...items);
48
+ }
49
+ async clear() {
50
+ this._list = [];
51
+ }
52
+ async delete(items) {
53
+ this._list = this._list.filter(item => {
54
+ for (const removed of items) {
55
+ if (this._equalsFunction(item, removed)) {
56
+ return false;
57
+ }
58
+ }
59
+ return true;
60
+ });
61
+ }
62
+ async update(items) {
63
+ this._list = this._list.map(existingItem => {
64
+ const newItem = items.find(newItem => this._equalsFunction(existingItem, newItem));
65
+ return newItem == undefined ? existingItem : newItem;
66
+ });
67
+ }
68
+ async insert(itemReference, items) {
69
+ const itemPosition = this._list.indexOf(itemReference);
70
+ if (itemPosition == -1) {
71
+ this._list.push(...items);
72
+ return;
73
+ }
74
+ this._list = this._list.slice(0, itemPosition).concat(items).concat(this._list.slice(itemPosition));
75
+ }
76
+ isOperating() {
77
+ return true;
78
+ }
79
+ async isEmpty() {
80
+ return Promise.resolve(this._list.length === 0);
81
+ }
82
+ async count() {
83
+ return Promise.resolve(this._list.length);
84
+ }
85
+ }
86
+
87
+ class PreloadManager {
88
+ static setLoadingStatus(dataUnit, loadingInProgress) {
89
+ this._loadingStatus.set(dataUnit.name, loadingInProgress);
90
+ }
91
+ static isCacheEnabled(_dataUnit) {
92
+ return true;
93
+ }
94
+ static cacheRecords(dataUnit, records, resetDatabase, loadingInProgress) {
95
+ PreloadManager.setLoadingStatus(dataUnit, loadingInProgress);
96
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
97
+ this.getRepository(dataUnit).push(records);
98
+ }
99
+ else {
100
+ if (resetDatabase) {
101
+ this._repositories.delete(dataUnit.name);
102
+ }
103
+ }
104
+ }
105
+ static getSortingFunction(dataUnit, sorting) {
106
+ if (sorting == undefined || sorting.length == 0) {
107
+ return undefined;
108
+ }
109
+ return (recordA, recordB) => {
110
+ for (const sort of sorting) {
111
+ const result = core.FieldComparator.compare(dataUnit.getField(sort.field), recordA, recordB, sort.mode === core.SortMode.ASC);
112
+ if (result != 0) {
113
+ return result;
114
+ }
115
+ }
116
+ };
117
+ }
118
+ static async getDistinct(dataUnit, fieldName) {
119
+ if (!PreloadManager.isCacheEnabled(dataUnit)) {
120
+ return Promise.resolve(utils.ColumnFilterManager.compileDistinct(fieldName, dataUnit));
121
+ }
122
+ let filterFunction;
123
+ const request = dataUnit.getLastLoadRequest();
124
+ if (request != undefined) {
125
+ const columnFilters = utils.ColumnFilterManager.getColumnFilters(request.filters);
126
+ filterFunction = utils.ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
127
+ }
128
+ return new Promise((accept, reject) => {
129
+ PreloadManager.getRepository(dataUnit).distict(record => {
130
+ if (filterFunction != undefined && !filterFunction(record)) {
131
+ return undefined;
132
+ }
133
+ const fieldValue = record[fieldName];
134
+ if (fieldValue == undefined) {
135
+ return { key: null, value: null };
136
+ }
137
+ const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
138
+ return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
139
+ })
140
+ .then(result => {
141
+ if (result == undefined) {
142
+ accept(undefined);
143
+ return;
144
+ }
145
+ accept(Array.from(result.entries()).map(([label, value]) => ({ label, value, check: true })));
146
+ })
147
+ .catch(reason => reject(reason));
148
+ });
149
+ }
150
+ static async loadData(dataUnit, request, loadFromServer) {
151
+ try {
152
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
153
+ let useCache = request.source === "EZ_GRID_LOADING_SOURCE" || request.source === core.DataUnit.CHANGING_PAGE_LOADING_SOURCE;
154
+ if (useCache) {
155
+ const isCacheEmpty = await PreloadManager.getRepository(dataUnit).isEmpty();
156
+ if (!isCacheEmpty) {
157
+ return PreloadManager.loadFromCache(dataUnit, request);
158
+ }
159
+ }
160
+ //Como não vamos aproveitar o cache, ele precisa ser limpo.
161
+ PreloadManager.getRepository(dataUnit).clear().catch(() => { });
162
+ }
163
+ return loadFromServer(dataUnit, request);
164
+ }
165
+ catch (error) {
166
+ console.error(error);
167
+ return Promise.reject(error);
168
+ }
169
+ }
170
+ static insertRecords(dataUnit, reference, records) {
171
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
172
+ PreloadManager.getRepository(dataUnit).insert(reference, records);
173
+ }
174
+ }
175
+ static updateRecords(dataUnit, records) {
176
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
177
+ PreloadManager.getRepository(dataUnit).update(records);
178
+ }
179
+ }
180
+ static removeRecords(dataUnit, records) {
181
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
182
+ PreloadManager.getRepository(dataUnit).delete(records);
183
+ }
184
+ }
185
+ static async countRecords(dataUnit) {
186
+ if (PreloadManager.isCacheEnabled(dataUnit)) {
187
+ return PreloadManager.getRepository(dataUnit).count();
188
+ }
189
+ return Promise.resolve(0);
190
+ }
191
+ static getRepository(dataUnit) {
192
+ const name = dataUnit.name;
193
+ if (!PreloadManager._repositories.has(name)) {
194
+ PreloadManager._repositories.set(name, new ArrayRepository((recordA, recordB) => recordA.__record__id__ === recordB.__record__id__));
195
+ }
196
+ return PreloadManager._repositories.get(name);
197
+ }
198
+ static async loadFromCache(dataUnit, request) {
199
+ return new Promise((accept, reject) => {
200
+ const columnFilters = utils.ColumnFilterManager.getColumnFilters(request.filters);
201
+ const { limit, offset, sort } = request;
202
+ PreloadManager.getRepository(dataUnit)
203
+ .load(utils.ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values())), PreloadManager.getSortingFunction(dataUnit, sort), offset, limit)
204
+ .then(loadResult => {
205
+ const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
206
+ const { count, result: records } = loadResult;
207
+ const firstRecord = count == 0 ? 0 : offset + 1;
208
+ const lastRecord = offset + Math.min(records.length, limit);
209
+ const currentPage = offset / limit;
210
+ const paginationInfo = {
211
+ count, currentPage, firstRecord, lastRecord,
212
+ hasMore: stillLoading || (lastRecord < count),
213
+ total: stillLoading ? undefined : count
214
+ };
215
+ accept({ records, paginationInfo });
216
+ })
217
+ .catch(reason => reject(reason));
218
+ });
219
+ }
220
+ }
221
+ PreloadManager._repositories = new Map();
222
+ PreloadManager._loadingStatus = new Map();
223
+
224
+ exports.PreloadManager = PreloadManager;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const ConfigStorage = require('./ConfigStorage-908ce5bc.js');
3
+ const ConfigStorage = require('./ConfigStorage-c15716fd.js');
4
4
  const core = require('@sankhyalabs/core');
5
5
  const formConfigFetcher = require('./form-config-fetcher-17775a75.js');
6
6
 
@@ -1,7 +1,12 @@
1
1
  'use strict';
2
2
 
3
3
  const core = require('@sankhyalabs/core');
4
- const dataunitFetcher = require('./dataunit-fetcher-e86cba8a.js');
4
+ const InMemoryFilterColumnDataSource = require('@sankhyalabs/ezui/dist/collection/components/ez-grid/utils/InMemoryFilterColumnDataSource');
5
+ const PreloadManager = require('./PreloadManager-e26d237f.js');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ const InMemoryFilterColumnDataSource__default = /*#__PURE__*/_interopDefaultLegacy(InMemoryFilterColumnDataSource);
5
10
 
6
11
  class SnkMultiSelectionListDataSource {
7
12
  setDataUnit(dataUnit) {
@@ -21,11 +26,7 @@ class SnkMultiSelectionListDataSource {
21
26
  if (fieldName == undefined) {
22
27
  return Promise.resolve(undefined);
23
28
  }
24
- const result = await dataunitFetcher.PreloadManager.getDistinct(this._dataUnit, fieldName);
25
- if (result == undefined) {
26
- return Promise.resolve(undefined);
27
- }
28
- return Promise.resolve(Array.from(result.entries()).map(([label, value]) => ({ label: String(label), value, check: true })));
29
+ return Promise.resolve(await PreloadManager.PreloadManager.getDistinct(this._dataUnit, fieldName));
29
30
  }
30
31
  fetchData(filterTerm, fieldName) {
31
32
  return new Promise(resolve => {
@@ -40,6 +41,9 @@ class SnkMultiSelectionListDataSource {
40
41
  });
41
42
  });
42
43
  }
44
+ sortItems(fieldName, items) {
45
+ return InMemoryFilterColumnDataSource__default['default'].defaultSorterMultSelectionOption(this._dataUnit, fieldName, items);
46
+ }
43
47
  }
44
48
 
45
49
  exports.SnkMultiSelectionListDataSource = SnkMultiSelectionListDataSource;
@@ -4,265 +4,9 @@ const core = require('@sankhyalabs/core');
4
4
  const DataFetcher = require('./DataFetcher-713f0749.js');
5
5
  const constants = require('@sankhyalabs/ezui/dist/collection/utils/constants');
6
6
  const UnitMetadata = require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
7
+ const PreloadManager = require('./PreloadManager-e26d237f.js');
7
8
  const ResourceIDUtils = require('./ResourceIDUtils-5ff86aa7.js');
8
9
 
9
- class ArrayRepository {
10
- constructor(equalsFunction) {
11
- this._list = [];
12
- this._equalsFunction = equalsFunction;
13
- }
14
- async load(filterFunction, sortingFunction, offset, limit) {
15
- let result = [].concat(this._list);
16
- if (filterFunction != undefined) {
17
- result = this._list.filter(item => filterFunction(item));
18
- }
19
- if (sortingFunction != undefined) {
20
- result = result.sort(sortingFunction);
21
- }
22
- const count = result.length;
23
- if (limit != undefined) {
24
- const start = offset || 0;
25
- const end = limit ? start + limit : result.length;
26
- result = result.slice(start, end);
27
- }
28
- return Promise.resolve({ result, count });
29
- }
30
- async distict(itemProcessor) {
31
- const processedItems = [];
32
- let hasEmpty = false;
33
- for (const item of this._list) {
34
- const processedItem = itemProcessor(item);
35
- if (processedItem == undefined) {
36
- continue;
37
- }
38
- if (processedItem.value == undefined) {
39
- hasEmpty = true;
40
- continue;
41
- }
42
- processedItems.push(processedItem);
43
- }
44
- if (hasEmpty) {
45
- processedItems.push({ key: "", value: null });
46
- }
47
- return Promise.resolve(new Map(processedItems.map(item => [item.key, item.value])));
48
- }
49
- async push(items) {
50
- this._list.push(...items);
51
- }
52
- async clear() {
53
- this._list = [];
54
- }
55
- async delete(items) {
56
- this._list = this._list.filter(item => {
57
- for (const removed of items) {
58
- if (this._equalsFunction(item, removed)) {
59
- return false;
60
- }
61
- }
62
- return true;
63
- });
64
- }
65
- async update(items) {
66
- this._list = this._list.map(existingItem => {
67
- const newItem = items.find(newItem => this._equalsFunction(existingItem, newItem));
68
- return newItem == undefined ? existingItem : newItem;
69
- });
70
- }
71
- async insert(itemReference, items) {
72
- const itemPosition = this._list.indexOf(itemReference);
73
- if (itemPosition == -1) {
74
- this._list.push(...items);
75
- return;
76
- }
77
- this._list = this._list.slice(0, itemPosition).concat(items).concat(this._list.slice(itemPosition));
78
- }
79
- isOperating() {
80
- return true;
81
- }
82
- async isEmpty() {
83
- return Promise.resolve(this._list.length === 0);
84
- }
85
- async count() {
86
- return Promise.resolve(this._list.length);
87
- }
88
- }
89
-
90
- const COLUMN_FILTER_PATTERN = /FILTRO_COLUNA_(.+)/;
91
- class PreloadManager {
92
- static setLoadingStatus(dataUnit, loadingInProgress) {
93
- this._loadingStatus.set(dataUnit.name, loadingInProgress);
94
- }
95
- static isCacheEnabled(dataUnit) {
96
- const dataUnitResourceId = PreloadManager.getResourceId(dataUnit.name);
97
- if (dataUnitResourceId !== this.applicationResourceID) {
98
- return false;
99
- }
100
- return this.getRepository(dataUnit).isOperating();
101
- }
102
- static getResourceId(dataUnitName) {
103
- const dataUnitNameInfo = DataUnitFetcher.parseDataUnitName(dataUnitName);
104
- return dataUnitNameInfo == undefined ? undefined : dataUnitNameInfo.resourceID;
105
- }
106
- static cacheRecords(dataUnit, records, resetDatabase, loadingInProgress) {
107
- PreloadManager.setLoadingStatus(dataUnit, loadingInProgress);
108
- if (PreloadManager.isCacheEnabled(dataUnit)) {
109
- this.getRepository(dataUnit).push(records);
110
- }
111
- else {
112
- if (resetDatabase) {
113
- this._repositories.delete(dataUnit.name);
114
- }
115
- }
116
- }
117
- static getSortingFunction(dataUnit, sorting) {
118
- if (sorting == undefined || sorting.length == 0) {
119
- return undefined;
120
- }
121
- return (recordA, recordB) => {
122
- for (const sort of sorting) {
123
- const result = core.FieldComparator.compare(dataUnit.getField(sort.field), recordA, recordB, sort.mode === core.SortMode.ASC);
124
- if (result != 0) {
125
- return result;
126
- }
127
- }
128
- };
129
- }
130
- static async getDistinct(dataUnit, fieldName) {
131
- if (!PreloadManager.isCacheEnabled(dataUnit)) {
132
- return Promise.resolve(undefined);
133
- }
134
- let filterFunction;
135
- const request = dataUnit.getLastLoadRequest();
136
- if (request != undefined) {
137
- const columnFilters = PreloadManager.getColumnFilters(request.filters);
138
- filterFunction = PreloadManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
139
- }
140
- return new Promise((accept, reject) => {
141
- PreloadManager.getRepository(dataUnit).distict(record => {
142
- if (filterFunction != undefined && !filterFunction(record)) {
143
- return undefined;
144
- }
145
- const fieldValue = record[fieldName];
146
- if (fieldValue == undefined) {
147
- return { key: null, value: null };
148
- }
149
- const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
150
- return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
151
- })
152
- .then(result => accept(result))
153
- .catch(reason => reject(reason));
154
- });
155
- }
156
- static async loadData(dataUnit, request, loadFromServer) {
157
- try {
158
- if (PreloadManager.isCacheEnabled(dataUnit)) {
159
- let useCache = request.source === "EZ_GRID_LOADING_SOURCE" || request.source === core.DataUnit.CHANGING_PAGE_LOADING_SOURCE;
160
- if (useCache) {
161
- const isCacheEmpty = await PreloadManager.getRepository(dataUnit).isEmpty();
162
- if (!isCacheEmpty) {
163
- return PreloadManager.loadFromCache(dataUnit, request);
164
- }
165
- }
166
- //Como não vamos aproveitar o cache, ele precisa ser limpo.
167
- PreloadManager.getRepository(dataUnit).clear().catch(() => { });
168
- }
169
- return loadFromServer(dataUnit, request);
170
- }
171
- catch (error) {
172
- console.error(error);
173
- return Promise.reject(error);
174
- }
175
- }
176
- static insertRecords(dataUnit, reference, records) {
177
- if (PreloadManager.isCacheEnabled(dataUnit)) {
178
- PreloadManager.getRepository(dataUnit).insert(reference, records);
179
- }
180
- }
181
- static updateRecords(dataUnit, records) {
182
- if (PreloadManager.isCacheEnabled(dataUnit)) {
183
- PreloadManager.getRepository(dataUnit).update(records);
184
- }
185
- }
186
- static removeRecords(dataUnit, records) {
187
- if (PreloadManager.isCacheEnabled(dataUnit)) {
188
- PreloadManager.getRepository(dataUnit).delete(records);
189
- }
190
- }
191
- static async countRecords(dataUnit) {
192
- if (PreloadManager.isCacheEnabled(dataUnit)) {
193
- return PreloadManager.getRepository(dataUnit).count();
194
- }
195
- return Promise.resolve(0);
196
- }
197
- static getRepository(dataUnit) {
198
- const name = dataUnit.name;
199
- if (!PreloadManager._repositories.has(name)) {
200
- PreloadManager._repositories.set(name, new ArrayRepository((recordA, recordB) => recordA.__record__id__ === recordB.__record__id__));
201
- }
202
- return PreloadManager._repositories.get(name);
203
- }
204
- static getFilterFunction(dataUnit, filters) {
205
- if (filters != undefined && filters.length > 0) {
206
- return record => {
207
- for (const filter of filters) {
208
- if (!PreloadManager.recordMatchesFilter(dataUnit, record, filter)) {
209
- return false;
210
- }
211
- }
212
- return true;
213
- };
214
- }
215
- return undefined;
216
- }
217
- static recordMatchesFilter(dataUnit, record, columnFilter) {
218
- const fieldValue = record[columnFilter.columnName];
219
- for (let param of columnFilter.params) {
220
- const paramValue = dataUnit.valueFromString(columnFilter.columnName, param.value);
221
- if (core.FieldComparator.compareValues(dataUnit.getField(columnFilter.columnName), fieldValue, paramValue) === 0) {
222
- return true;
223
- }
224
- }
225
- return false;
226
- }
227
- static async loadFromCache(dataUnit, request) {
228
- return new Promise((accept, reject) => {
229
- const columnFilters = PreloadManager.getColumnFilters(request.filters);
230
- const { limit, offset, sort } = request;
231
- PreloadManager.getRepository(dataUnit)
232
- .load(PreloadManager.getFilterFunction(dataUnit, Array.from(columnFilters.values())), PreloadManager.getSortingFunction(dataUnit, sort), offset, limit)
233
- .then(loadResult => {
234
- const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
235
- const { count, result: records } = loadResult;
236
- const firstRecord = count == 0 ? 0 : offset + 1;
237
- const lastRecord = offset + Math.min(records.length, limit);
238
- const currentPage = offset / limit;
239
- const paginationInfo = {
240
- count, currentPage, firstRecord, lastRecord,
241
- hasMore: stillLoading || (lastRecord < count),
242
- total: stillLoading ? undefined : count
243
- };
244
- accept({ records, paginationInfo });
245
- })
246
- .catch(reason => reject(reason));
247
- });
248
- }
249
- static getColumnFilters(filters) {
250
- const columnFilters = new Map();
251
- if (filters == undefined || filters.length == 0) {
252
- return columnFilters;
253
- }
254
- filters.forEach(filter => {
255
- const match = COLUMN_FILTER_PATTERN.exec(filter.name);
256
- if (match) {
257
- columnFilters.set(filter.name, Object.assign({ columnName: match[1] }, filter));
258
- }
259
- });
260
- return columnFilters;
261
- }
262
- }
263
- PreloadManager._repositories = new Map();
264
- PreloadManager._loadingStatus = new Map();
265
-
266
10
  class InMemoryLoader {
267
11
  constructor(metadata, records) {
268
12
  this.metadata = metadata;
@@ -534,7 +278,7 @@ class DataUnitDataLoader {
534
278
  static async loadData(dataUnit, request) {
535
279
  return new Promise((resolve, reject) => {
536
280
  DataUnitDataLoader.debounce(dataUnit, () => {
537
- PreloadManager.loadData(dataUnit, request, this.loadFromServer)
281
+ PreloadManager.PreloadManager.loadData(dataUnit, request, this.loadFromServer)
538
282
  .then(resp => resolve(resp))
539
283
  .catch(reason => reject(reason));
540
284
  });
@@ -571,8 +315,8 @@ class DataUnitDataLoader {
571
315
  return Promise.resolve(undefined);
572
316
  }
573
317
  const recreateCache = !dataLoader.canSlice() || responseLoadingInfo.count === 0;
574
- PreloadManager.cacheRecords(dataUnit, records, recreateCache, responseLoadingInfo.loadingInProgress);
575
- if (PreloadManager.isCacheEnabled(dataUnit) && responseLoadingInfo.loadingInProgress) {
318
+ PreloadManager.PreloadManager.cacheRecords(dataUnit, records, recreateCache, responseLoadingInfo.loadingInProgress);
319
+ if (PreloadManager.PreloadManager.isCacheEnabled(dataUnit) && responseLoadingInfo.loadingInProgress) {
576
320
  const newRequest = Object.assign(Object.assign({}, request), { offset: responseLoadingInfo.count });
577
321
  const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1, quiet: true });
578
322
  this.callLoader(dataUnit, newRequest, newLoadingInfo, dataLoader)
@@ -582,7 +326,7 @@ class DataUnitDataLoader {
582
326
  return Promise.resolve(result);
583
327
  }
584
328
  static afterLoadingPage(dataUnit, loadingInfo) {
585
- PreloadManager.setLoadingStatus(dataUnit, loadingInfo.loadingInProgress);
329
+ PreloadManager.PreloadManager.setLoadingStatus(dataUnit, loadingInfo.loadingInProgress);
586
330
  const dataUnitPagination = dataUnit.getPaginationInfo();
587
331
  if (dataUnitPagination == undefined) {
588
332
  return;
@@ -729,9 +473,9 @@ class DataUnitFetcher {
729
473
  return { entityName: parts[1], resourceID: parts[2] };
730
474
  }
731
475
  getDataUnit(entityName, resourceID, parentDataUnit, configName) {
732
- if (PreloadManager.applicationResourceID == undefined) {
476
+ if (PreloadManager.PreloadManager.applicationResourceID == undefined) {
733
477
  //Por falta de um lugar melhor pra iniciar essa variável, fazemos isso aqui.
734
- ResourceIDUtils.ResourceIDUtils.getResourceID().then(resourceID => PreloadManager.applicationResourceID = resourceID);
478
+ ResourceIDUtils.ResourceIDUtils.getResourceID().then(resourceID => PreloadManager.PreloadManager.applicationResourceID = resourceID);
735
479
  }
736
480
  const duName = `dd://${entityName}/${resourceID}${configName ? "/" + configName : ""}`;
737
481
  const dataUnit = parentDataUnit != undefined ? parentDataUnit.getChildDataunit(duName) : new core.DataUnit(duName);
@@ -876,10 +620,10 @@ class DataUnitFetcher {
876
620
  });
877
621
  if (addedRecords.length > 0) {
878
622
  const firstRecord = dataUnit.records[0];
879
- PreloadManager.insertRecords(dataUnit, firstRecord, addedRecords);
623
+ PreloadManager.PreloadManager.insertRecords(dataUnit, firstRecord, addedRecords);
880
624
  }
881
625
  const updatedRecords = toUpdate.map(recordId => (Object.assign({}, recordsById.get(recordId))));
882
- PreloadManager.updateRecords(dataUnit, updatedRecords);
626
+ PreloadManager.PreloadManager.updateRecords(dataUnit, updatedRecords);
883
627
  }
884
628
  getTransientInfo(dataUnit, recordID) {
885
629
  const { records } = dataUnit.getSelectionInfo();
@@ -896,7 +640,7 @@ class DataUnitFetcher {
896
640
  query: this.templateByQuery.get("saveData"),
897
641
  })
898
642
  .then((_resp) => {
899
- PreloadManager.removeRecords(dataUnit, dataUnit.records.filter(record => recordIds.includes(record.__record__id__)));
643
+ PreloadManager.PreloadManager.removeRecords(dataUnit, dataUnit.records.filter(record => recordIds.includes(record.__record__id__)));
900
644
  resolve(recordIds);
901
645
  })
902
646
  .catch((error) => {
@@ -932,4 +676,3 @@ class DataUnitFetcher {
932
676
 
933
677
  exports.DataUnitFetcher = DataUnitFetcher;
934
678
  exports.InMemoryLoader = InMemoryLoader;
935
- exports.PreloadManager = PreloadManager;