@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.
- package/dist/cjs/{ConfigStorage-bdb539ce.js → ConfigStorage-908ce5bc.js} +2 -2
- package/dist/cjs/{DataFetcher-016f1661.js → DataFetcher-713f0749.js} +2 -2
- package/dist/cjs/PreloadManager-e26d237f.js +224 -0
- package/dist/cjs/{SnkFormConfigManager-c9d38de1.js → SnkFormConfigManager-793ade39.js} +2 -2
- package/dist/cjs/{SnkMultiSelectionListDataSource-45893a0c.js → SnkMultiSelectionListDataSource-d74d2336.js} +10 -6
- package/dist/cjs/{auth-fetcher-73ee0989.js → auth-fetcher-555ff856.js} +1 -1
- package/dist/cjs/{dataunit-fetcher-2454608a.js → dataunit-fetcher-66c0b7af.js} +46 -276
- package/dist/cjs/{form-config-fetcher-5e5ec5be.js → form-config-fetcher-17775a75.js} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{pesquisa-fetcher-63a8c652.js → pesquisa-fetcher-34922b83.js} +1 -1
- package/dist/cjs/sankhyablocks.cjs.js +1 -1
- package/dist/cjs/snk-actions-button.cjs.entry.js +6 -4
- package/dist/cjs/snk-application.cjs.entry.js +16 -6
- package/dist/cjs/snk-attach.cjs.entry.js +4 -2
- package/dist/cjs/snk-crud.cjs.entry.js +7 -5
- package/dist/cjs/snk-data-exporter.cjs.entry.js +1 -1
- package/dist/cjs/snk-detail-view.cjs.entry.js +24 -8
- package/dist/cjs/snk-filter-bar.cjs.entry.js +19 -4
- package/dist/cjs/snk-filter-modal-item.cjs.entry.js +3 -3
- package/dist/cjs/snk-form-config.cjs.entry.js +2 -2
- package/dist/cjs/snk-form.cjs.entry.js +4 -4
- package/dist/cjs/snk-grid-config.cjs.entry.js +3 -3
- package/dist/cjs/snk-grid.cjs.entry.js +8 -7
- package/dist/cjs/{snk-guides-viewer-018c1c8e.js → snk-guides-viewer-2317c71e.js} +78 -5
- package/dist/cjs/snk-guides-viewer.cjs.entry.js +9 -7
- package/dist/cjs/snk-personalized-filter.cjs.entry.js +3 -3
- package/dist/cjs/snk-simple-crud.cjs.entry.js +8 -5
- package/dist/collection/components/snk-application/snk-application.js +1 -0
- package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +18 -1
- package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +80 -8
- package/dist/collection/components/snk-filter-bar/filter-item/dataunitfilter/data-unit-filter-builder.js +17 -2
- package/dist/collection/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.js +5 -5
- package/dist/collection/components/snk-grid/snk-grid.js +1 -0
- package/dist/collection/lib/http/data-fetcher/DataFetcher.js +2 -2
- package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/DataUnitDataLoader.js +6 -1
- package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/ArrayRepository.js +3 -0
- package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.js +21 -61
- package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/dataunit-fetcher.js +1 -0
- package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js +28 -9
- package/dist/collection/lib/workspace/workspace.js +7 -0
- package/dist/components/DataFetcher.js +2 -2
- package/dist/components/SnkMultiSelectionListDataSource.js +5 -5
- package/dist/components/dataunit-fetcher.js +59 -70
- package/dist/components/snk-application2.js +8 -0
- package/dist/components/snk-detail-view2.js +88 -2
- package/dist/components/snk-filter-bar2.js +17 -2
- package/dist/components/snk-grid2.js +1 -0
- package/dist/esm/{ConfigStorage-9840d004.js → ConfigStorage-48648d45.js} +2 -2
- package/dist/esm/{DataFetcher-07935045.js → DataFetcher-79f78222.js} +2 -2
- package/dist/esm/PreloadManager-8826b96a.js +222 -0
- package/dist/esm/{SnkFormConfigManager-a7c4ac16.js → SnkFormConfigManager-3c15f319.js} +2 -2
- package/dist/esm/{SnkMultiSelectionListDataSource-a0b69ac4.js → SnkMultiSelectionListDataSource-27572f47.js} +6 -6
- package/dist/esm/{auth-fetcher-1afab780.js → auth-fetcher-e260d0cd.js} +1 -1
- package/dist/esm/{dataunit-fetcher-493182bc.js → dataunit-fetcher-831feb12.js} +39 -268
- package/dist/esm/{form-config-fetcher-5b886892.js → form-config-fetcher-e1603e66.js} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{pesquisa-fetcher-7c46996d.js → pesquisa-fetcher-8e922c9d.js} +1 -1
- package/dist/esm/sankhyablocks.js +1 -1
- package/dist/esm/snk-actions-button.entry.js +6 -4
- package/dist/esm/snk-application.entry.js +16 -6
- package/dist/esm/snk-attach.entry.js +4 -2
- package/dist/esm/snk-crud.entry.js +7 -5
- package/dist/esm/snk-data-exporter.entry.js +1 -1
- package/dist/esm/snk-detail-view.entry.js +24 -8
- package/dist/esm/snk-filter-bar.entry.js +20 -5
- package/dist/esm/snk-filter-modal-item.entry.js +3 -3
- package/dist/esm/snk-form-config.entry.js +2 -2
- package/dist/esm/snk-form.entry.js +4 -4
- package/dist/esm/snk-grid-config.entry.js +3 -3
- package/dist/esm/snk-grid.entry.js +8 -7
- package/dist/esm/{snk-guides-viewer-7c120bc6.js → snk-guides-viewer-3ba271c1.js} +79 -6
- package/dist/esm/snk-guides-viewer.entry.js +9 -7
- package/dist/esm/snk-personalized-filter.entry.js +3 -3
- package/dist/esm/snk-simple-crud.entry.js +8 -5
- package/dist/sankhyablocks/p-25882572.entry.js +1 -0
- package/dist/sankhyablocks/{p-b19c272c.js → p-2b39abbc.js} +1 -1
- package/dist/sankhyablocks/{p-1b985000.entry.js → p-2ecd9a19.entry.js} +1 -1
- package/dist/sankhyablocks/p-3926383d.entry.js +1 -0
- package/dist/sankhyablocks/{p-de9eb242.entry.js → p-395567f3.entry.js} +1 -1
- package/dist/sankhyablocks/p-3c4f0354.js +1 -0
- package/dist/sankhyablocks/p-3ccb321d.entry.js +1 -0
- package/dist/sankhyablocks/{p-efb2e247.js → p-41d156dd.js} +1 -1
- package/dist/sankhyablocks/{p-0f2b03e5.js → p-4651b43f.js} +1 -1
- package/dist/sankhyablocks/p-57543969.js +1 -0
- package/dist/sankhyablocks/p-5f6113c8.js +60 -0
- package/dist/sankhyablocks/{p-54efcc8d.entry.js → p-747043a5.entry.js} +1 -1
- package/dist/sankhyablocks/p-77756526.js +1 -0
- package/dist/sankhyablocks/{p-96dd0c41.js → p-8015cbfb.js} +1 -1
- package/dist/sankhyablocks/{p-562896d0.entry.js → p-80692cbd.entry.js} +1 -1
- package/dist/sankhyablocks/p-a1cce4f5.entry.js +1 -0
- package/dist/sankhyablocks/{p-afdb6ddc.entry.js → p-abff11ef.entry.js} +1 -1
- package/dist/sankhyablocks/{p-9246d7df.entry.js → p-afacdce6.entry.js} +1 -1
- package/dist/sankhyablocks/p-b86bee20.entry.js +11 -0
- package/dist/sankhyablocks/{p-4f7b9c50.js → p-c9399ce6.js} +1 -1
- package/dist/sankhyablocks/p-d0b36421.js +1 -0
- package/dist/sankhyablocks/p-eb25c85f.entry.js +1 -0
- package/dist/sankhyablocks/p-f07a5363.entry.js +1 -0
- package/dist/sankhyablocks/p-f1743d68.entry.js +1 -0
- package/dist/sankhyablocks/p-f2e798f1.entry.js +1 -0
- package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
- package/dist/types/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.d.ts +3 -0
- package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +22 -11
- package/dist/types/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.d.ts +1 -0
- package/dist/types/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.d.ts +3 -6
- package/dist/types/lib/http/data-fetcher/fetchers/data-unit/interfaces/ILoadingInfo.d.ts +2 -0
- package/dist/types/lib/workspace/workspace.d.ts +1 -0
- package/package.json +1 -1
- package/dist/sankhyablocks/p-21d01a8c.entry.js +0 -1
- package/dist/sankhyablocks/p-43f36d85.entry.js +0 -1
- package/dist/sankhyablocks/p-53091bcd.js +0 -1
- package/dist/sankhyablocks/p-7650d823.js +0 -1
- package/dist/sankhyablocks/p-8f7e0bbd.entry.js +0 -1
- package/dist/sankhyablocks/p-9256574e.entry.js +0 -11
- package/dist/sankhyablocks/p-b9b7bfce.entry.js +0 -1
- package/dist/sankhyablocks/p-bdfcc2e2.js +0 -59
- package/dist/sankhyablocks/p-db45a464.entry.js +0 -1
- package/dist/sankhyablocks/p-de1196c8.js +0 -1
- package/dist/sankhyablocks/p-e13c3fbc.entry.js +0 -1
- package/dist/sankhyablocks/p-e33b308f.entry.js +0 -1
- 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-
|
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-
|
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
|
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
|
-
|
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-
|
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 {
|
2
|
-
import { D as DataFetcher, d as dist } from './DataFetcher-
|
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 {
|
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
|
675
|
+
export { DataUnitFetcher as D, InMemoryLoader as I };
|