@sankhyalabs/sankhyablocks 8.8.0-rc.4 → 8.8.0-rc.6
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/{SnkMultiSelectionListDataSource-9fd9c742.js → SnkMultiSelectionListDataSource-4f7a031a.js} +1 -1
- package/dist/cjs/{dataunit-fetcher-1433ce24.js → dataunit-fetcher-a8bac9cc.js} +51 -23
- package/dist/cjs/snk-actions-button.cjs.entry.js +1 -1
- package/dist/cjs/snk-application.cjs.entry.js +1 -1
- package/dist/cjs/snk-attach.cjs.entry.js +1 -1
- package/dist/cjs/snk-crud.cjs.entry.js +1 -1
- package/dist/cjs/snk-detail-view.cjs.entry.js +2 -2
- package/dist/cjs/snk-grid.cjs.entry.js +3 -2
- package/dist/cjs/{snk-guides-viewer-0f03d633.js → snk-guides-viewer-00e028f1.js} +1 -1
- package/dist/cjs/snk-guides-viewer.cjs.entry.js +2 -2
- package/dist/cjs/snk-simple-crud.cjs.entry.js +2 -2
- package/dist/collection/components/snk-grid/snk-grid.js +1 -0
- 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 +13 -14
- package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js +29 -8
- package/dist/components/dataunit-fetcher.js +51 -23
- package/dist/components/snk-grid2.js +1 -0
- package/dist/esm/{SnkMultiSelectionListDataSource-447cd9e8.js → SnkMultiSelectionListDataSource-2a4ec61c.js} +1 -1
- package/dist/esm/{dataunit-fetcher-0162ce17.js → dataunit-fetcher-5e9245d7.js} +51 -23
- package/dist/esm/snk-actions-button.entry.js +1 -1
- package/dist/esm/snk-application.entry.js +1 -1
- package/dist/esm/snk-attach.entry.js +1 -1
- package/dist/esm/snk-crud.entry.js +1 -1
- package/dist/esm/snk-detail-view.entry.js +2 -2
- package/dist/esm/snk-grid.entry.js +3 -2
- package/dist/esm/{snk-guides-viewer-64c24a05.js → snk-guides-viewer-9efd5ce9.js} +1 -1
- package/dist/esm/snk-guides-viewer.entry.js +2 -2
- package/dist/esm/snk-simple-crud.entry.js +2 -2
- package/dist/sankhyablocks/p-171b12d5.js +59 -0
- package/dist/sankhyablocks/{p-503c9774.entry.js → p-3ad594b3.entry.js} +1 -1
- package/dist/sankhyablocks/{p-e350860d.entry.js → p-3b28c4b3.entry.js} +1 -1
- package/dist/sankhyablocks/{p-f5dbb069.entry.js → p-3d0a0a36.entry.js} +1 -1
- package/dist/sankhyablocks/p-61513624.entry.js +1 -0
- package/dist/sankhyablocks/{p-a84035fa.js → p-7469e2ef.js} +1 -1
- package/dist/sankhyablocks/{p-cc232268.entry.js → p-880d08b8.entry.js} +1 -1
- package/dist/sankhyablocks/{p-e5e06439.entry.js → p-ae6a90a1.entry.js} +1 -1
- package/dist/sankhyablocks/{p-7cbbb6e3.entry.js → p-b4edd50c.entry.js} +1 -1
- package/dist/sankhyablocks/{p-441cce40.entry.js → p-bb1bdb17.entry.js} +1 -1
- package/dist/sankhyablocks/{p-1161cb2d.js → p-c34cea23.js} +1 -1
- package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
- package/dist/types/lib/http/data-fetcher/fetchers/data-unit/interfaces/ILoadingInfo.d.ts +2 -0
- package/package.json +1 -1
- package/dist/sankhyablocks/p-5bd7932e.entry.js +0 -1
- package/dist/sankhyablocks/p-85635c64.js +0 -59
@@ -1,7 +1,7 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
3
|
const core = require('@sankhyalabs/core');
|
4
|
-
const dataunitFetcher = require('./dataunit-fetcher-
|
4
|
+
const dataunitFetcher = require('./dataunit-fetcher-a8bac9cc.js');
|
5
5
|
|
6
6
|
class SnkMultiSelectionListDataSource {
|
7
7
|
setDataUnit(dataUnit) {
|
@@ -33,6 +33,9 @@ class ArrayRepository {
|
|
33
33
|
for (const item of this._list) {
|
34
34
|
const processedItem = itemProcessor(item);
|
35
35
|
if (processedItem == undefined) {
|
36
|
+
continue;
|
37
|
+
}
|
38
|
+
if (processedItem.value == undefined) {
|
36
39
|
hasEmpty = true;
|
37
40
|
continue;
|
38
41
|
}
|
@@ -128,26 +131,25 @@ class PreloadManager {
|
|
128
131
|
if (!PreloadManager.isCacheEnabled(dataUnit)) {
|
129
132
|
return Promise.resolve(undefined);
|
130
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
|
+
}
|
131
140
|
return new Promise((accept, reject) => {
|
132
141
|
PreloadManager.getRepository(dataUnit).distict(record => {
|
142
|
+
if (filterFunction != undefined && !filterFunction(record)) {
|
143
|
+
return undefined;
|
144
|
+
}
|
133
145
|
const fieldValue = record[fieldName];
|
134
146
|
if (fieldValue == undefined) {
|
135
|
-
return
|
147
|
+
return { key: null, value: null };
|
136
148
|
}
|
137
149
|
const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
|
138
150
|
return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
|
139
151
|
})
|
140
|
-
.then(result =>
|
141
|
-
if (result != undefined && result.size > 0) {
|
142
|
-
const field = dataUnit.getField(fieldName);
|
143
|
-
const sortedMap = new Map(Array.from(result.entries())
|
144
|
-
.sort((itemA, itemB) => core.FieldComparator.compareValues(field, itemA[1], itemB[1]))
|
145
|
-
.map(([key, value]) => key === "" ? ["(Vazio)", value] : [key, value]));
|
146
|
-
accept(sortedMap);
|
147
|
-
return;
|
148
|
-
}
|
149
|
-
accept(result);
|
150
|
-
})
|
152
|
+
.then(result => accept(result))
|
151
153
|
.catch(reason => reject(reason));
|
152
154
|
});
|
153
155
|
}
|
@@ -161,7 +163,7 @@ class PreloadManager {
|
|
161
163
|
return PreloadManager.loadFromCache(dataUnit, request);
|
162
164
|
}
|
163
165
|
}
|
164
|
-
//Como não vamos aproveitar o cache, ele precisa ser
|
166
|
+
//Como não vamos aproveitar o cache, ele precisa ser limpo.
|
165
167
|
PreloadManager.getRepository(dataUnit).clear().catch(() => { });
|
166
168
|
}
|
167
169
|
return loadFromServer(dataUnit, request);
|
@@ -231,7 +233,7 @@ class PreloadManager {
|
|
231
233
|
.then(loadResult => {
|
232
234
|
const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
|
233
235
|
const { count, result: records } = loadResult;
|
234
|
-
const firstRecord = count == 0 ?
|
236
|
+
const firstRecord = count == 0 ? 0 : offset + 1;
|
235
237
|
const lastRecord = offset + Math.min(records.length, limit);
|
236
238
|
const currentPage = offset / limit;
|
237
239
|
const paginationInfo = {
|
@@ -377,17 +379,36 @@ class DatasetStrategy {
|
|
377
379
|
return Promise.resolve({ records: [], loadingInfo });
|
378
380
|
}
|
379
381
|
try {
|
382
|
+
const localSorting = [];
|
383
|
+
const serverSorting = [];
|
384
|
+
if (request.sort != undefined) {
|
385
|
+
for (const sort of request.sort) {
|
386
|
+
const descriptor = dataUnit.getField(sort.field);
|
387
|
+
const local = descriptor != undefined
|
388
|
+
&& descriptor.properties != undefined
|
389
|
+
&& descriptor.properties.calculated === "true";
|
390
|
+
if (local) {
|
391
|
+
localSorting.push(sort);
|
392
|
+
}
|
393
|
+
else {
|
394
|
+
serverSorting.push(sort);
|
395
|
+
}
|
396
|
+
}
|
397
|
+
}
|
380
398
|
const fields = this.getFieldsList(dataUnit);
|
381
399
|
const serviceName = "DatasetSP.loadRecords";
|
382
|
-
const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo);
|
383
|
-
const {
|
400
|
+
const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, serverSorting);
|
401
|
+
const params = loadingInfo.quiet ? { urlParams: { quietMode: "true" } } : undefined;
|
402
|
+
const { result: responseRecords, pagerID: pagerId } = await DataFetcher.DataFetcher.get().callServiceBroker(serviceName, requestBody, params);
|
384
403
|
const records = this.processRecords(dataUnit, fields, responseRecords);
|
385
404
|
const loadingInProgress = pagerId != undefined;
|
386
405
|
const count = loadingInfo.count + records.length;
|
406
|
+
const needReload = !loadingInProgress && localSorting.length > 0;
|
387
407
|
return Promise.resolve({
|
388
408
|
records,
|
389
409
|
loadingInfo: Object.assign(Object.assign({}, loadingInfo), { pagerId,
|
390
|
-
loadingInProgress, total: loadingInProgress ? undefined : count, count
|
410
|
+
loadingInProgress, total: loadingInProgress ? undefined : count, count,
|
411
|
+
needReload })
|
391
412
|
});
|
392
413
|
}
|
393
414
|
catch (error) {
|
@@ -397,7 +418,10 @@ class DatasetStrategy {
|
|
397
418
|
}
|
398
419
|
getFieldsList(dataUnit) {
|
399
420
|
let fields = ["__record__id__", "__record__label__"];
|
400
|
-
dataUnit.metadata.fields.forEach(descriptor => {
|
421
|
+
dataUnit.metadata.fields.forEach((descriptor) => {
|
422
|
+
if (descriptor.standAlone) {
|
423
|
+
return;
|
424
|
+
}
|
401
425
|
fields = fields.concat(this.getFieldNames(descriptor));
|
402
426
|
});
|
403
427
|
return fields;
|
@@ -409,7 +433,7 @@ class DatasetStrategy {
|
|
409
433
|
}
|
410
434
|
return [descriptor.name, descriptionField];
|
411
435
|
}
|
412
|
-
buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo) {
|
436
|
+
buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, sorting) {
|
413
437
|
const dataSetID = dataUnit.dataUnitId;
|
414
438
|
const dataUnitName = dataUnit.name;
|
415
439
|
const entityName = DataUnitFetcher.parseDataUnitName(dataUnitName).entityName;
|
@@ -430,13 +454,13 @@ class DatasetStrategy {
|
|
430
454
|
tryJoinedFields: true,
|
431
455
|
parallelLoader: true,
|
432
456
|
crudListener: "br.com.sankhya.modelcore.dataset.DataUnitDatasetAdapter",
|
433
|
-
txProperties: this.getTxProperties(dataUnitName, request),
|
457
|
+
txProperties: this.getTxProperties(dataUnitName, request, sorting),
|
434
458
|
useDefaultRowsLimit: false
|
435
459
|
}
|
436
460
|
};
|
437
461
|
return JSON.stringify(requestBody);
|
438
462
|
}
|
439
|
-
getTxProperties(dataUnitName, request) {
|
463
|
+
getTxProperties(dataUnitName, request, sorting) {
|
440
464
|
const txProperties = {
|
441
465
|
"__DATA_UNIT_ADAPTER__[dataUnitName]": dataUnitName
|
442
466
|
};
|
@@ -444,7 +468,6 @@ class DatasetStrategy {
|
|
444
468
|
if (serverSideFilters.length !== 0) {
|
445
469
|
txProperties["__DATA_UNIT_ADAPTER__[criteria]"] = JSON.stringify(serverSideFilters);
|
446
470
|
}
|
447
|
-
const sorting = request.sort;
|
448
471
|
if (sorting != undefined && sorting.length !== 0) {
|
449
472
|
txProperties["__DATA_UNIT_ADAPTER__[sorting]"] = JSON.stringify(sorting);
|
450
473
|
}
|
@@ -551,7 +574,7 @@ class DataUnitDataLoader {
|
|
551
574
|
PreloadManager.cacheRecords(dataUnit, records, recreateCache, responseLoadingInfo.loadingInProgress);
|
552
575
|
if (PreloadManager.isCacheEnabled(dataUnit) && responseLoadingInfo.loadingInProgress) {
|
553
576
|
const newRequest = Object.assign(Object.assign({}, request), { offset: responseLoadingInfo.count });
|
554
|
-
const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1 });
|
577
|
+
const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1, quiet: true });
|
555
578
|
this.callLoader(dataUnit, newRequest, newLoadingInfo, dataLoader)
|
556
579
|
.then(result => DataUnitDataLoader.afterLoadingPage(dataUnit, result.loadingInfo))
|
557
580
|
.catch(reason => console.error(reason));
|
@@ -569,6 +592,11 @@ class DataUnitDataLoader {
|
|
569
592
|
dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { count }));
|
570
593
|
return;
|
571
594
|
}
|
595
|
+
if (loadingInfo.needReload) {
|
596
|
+
//Ir para a primeira página, faz com que o loadData seja chamado novamente
|
597
|
+
dataUnit.gotoPage(0);
|
598
|
+
return;
|
599
|
+
}
|
572
600
|
dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { total: count, count }));
|
573
601
|
}
|
574
602
|
static registryLoading(dataUnit, loadingInfo) {
|
@@ -11,7 +11,7 @@ require('./index-0e663819.js');
|
|
11
11
|
require('./ISave-d68ce3cd.js');
|
12
12
|
require('@sankhyalabs/ezui/dist/collection/utils/constants');
|
13
13
|
require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
|
14
|
-
require('./dataunit-fetcher-
|
14
|
+
require('./dataunit-fetcher-a8bac9cc.js');
|
15
15
|
require('./filter-item-type.enum-aa823a00.js');
|
16
16
|
require('./form-config-fetcher-5e5ec5be.js');
|
17
17
|
const ResourceIDUtils = require('./ResourceIDUtils-5ff86aa7.js');
|
@@ -8,7 +8,7 @@ const utils = require('@sankhyalabs/ezui/dist/collection/utils');
|
|
8
8
|
const ConfigStorage = require('./ConfigStorage-bdb539ce.js');
|
9
9
|
const DataFetcher = require('./DataFetcher-016f1661.js');
|
10
10
|
const authFetcher = require('./auth-fetcher-73ee0989.js');
|
11
|
-
const dataunitFetcher = require('./dataunit-fetcher-
|
11
|
+
const dataunitFetcher = require('./dataunit-fetcher-a8bac9cc.js');
|
12
12
|
const pesquisaFetcher = require('./pesquisa-fetcher-63a8c652.js');
|
13
13
|
const SnkMessageBuilder = require('./SnkMessageBuilder-dbc8d14e.js');
|
14
14
|
require('./form-config-fetcher-5e5ec5be.js');
|
@@ -7,7 +7,7 @@ const core = require('@sankhyalabs/core');
|
|
7
7
|
const DataFetcher = require('./DataFetcher-016f1661.js');
|
8
8
|
const ISave = require('./ISave-d68ce3cd.js');
|
9
9
|
const constants = require('./constants-d187e03e.js');
|
10
|
-
const dataunitFetcher = require('./dataunit-fetcher-
|
10
|
+
const dataunitFetcher = require('./dataunit-fetcher-a8bac9cc.js');
|
11
11
|
const taskbarElements = require('./taskbar-elements-39949c7a.js');
|
12
12
|
require('./_commonjsHelpers-537d719a.js');
|
13
13
|
require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
|
@@ -11,7 +11,7 @@ const index$1 = require('./index-0e663819.js');
|
|
11
11
|
require('./ISave-d68ce3cd.js');
|
12
12
|
require('@sankhyalabs/ezui/dist/collection/utils/constants');
|
13
13
|
require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
|
14
|
-
require('./dataunit-fetcher-
|
14
|
+
require('./dataunit-fetcher-a8bac9cc.js');
|
15
15
|
require('./filter-item-type.enum-aa823a00.js');
|
16
16
|
require('./form-config-fetcher-5e5ec5be.js');
|
17
17
|
const constants = require('./constants-d187e03e.js');
|
@@ -12,12 +12,12 @@ const index$1 = require('./index-0e663819.js');
|
|
12
12
|
require('./ISave-d68ce3cd.js');
|
13
13
|
require('@sankhyalabs/ezui/dist/collection/utils/constants');
|
14
14
|
require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
|
15
|
-
require('./dataunit-fetcher-
|
15
|
+
require('./dataunit-fetcher-a8bac9cc.js');
|
16
16
|
require('./filter-item-type.enum-aa823a00.js');
|
17
17
|
require('./form-config-fetcher-5e5ec5be.js');
|
18
18
|
const taskbarElements = require('./taskbar-elements-39949c7a.js');
|
19
19
|
const constants = require('./constants-d187e03e.js');
|
20
|
-
const snkGuidesViewer = require('./snk-guides-viewer-
|
20
|
+
const snkGuidesViewer = require('./snk-guides-viewer-00e028f1.js');
|
21
21
|
const SnkMessageBuilder = require('./SnkMessageBuilder-dbc8d14e.js');
|
22
22
|
require('./ConfigStorage-bdb539ce.js');
|
23
23
|
require('./_commonjsHelpers-537d719a.js');
|
@@ -10,14 +10,14 @@ const ConfigStorage = require('./ConfigStorage-bdb539ce.js');
|
|
10
10
|
const index$1 = require('./index-0e663819.js');
|
11
11
|
const taskbarProcessor = require('./taskbar-processor-bce3f499.js');
|
12
12
|
const index$2 = require('./index-102ba62d.js');
|
13
|
-
const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-
|
13
|
+
const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-4f7a031a.js');
|
14
14
|
const DataUnit = require('@sankhyalabs/core/dist/dataunit/DataUnit');
|
15
15
|
require('./form-config-fetcher-5e5ec5be.js');
|
16
16
|
require('./DataFetcher-016f1661.js');
|
17
17
|
require('./_commonjsHelpers-537d719a.js');
|
18
18
|
require('./PrintUtils-bcaeb82f.js');
|
19
19
|
require('./filter-item-type.enum-aa823a00.js');
|
20
|
-
require('./dataunit-fetcher-
|
20
|
+
require('./dataunit-fetcher-a8bac9cc.js');
|
21
21
|
require('@sankhyalabs/ezui/dist/collection/utils/constants');
|
22
22
|
require('./ResourceIDUtils-5ff86aa7.js');
|
23
23
|
|
@@ -112,6 +112,7 @@ const SnkGrid = class {
|
|
112
112
|
if (this._gridConfig && this._dataUnit) {
|
113
113
|
this._dataUnit.defaultSorting = this._gridConfig
|
114
114
|
.columns
|
115
|
+
.filter(col => col.ascending != undefined)
|
115
116
|
.sort((colA, colB) => colA.orderIndex - colB.orderIndex)
|
116
117
|
.map(({ name: field, ascending }) => {
|
117
118
|
const { dataType } = this._dataUnit.getField(field);
|
@@ -13,7 +13,7 @@ const index$1 = require('./index-0e663819.js');
|
|
13
13
|
require('./ISave-d68ce3cd.js');
|
14
14
|
require('@sankhyalabs/ezui/dist/collection/utils/constants');
|
15
15
|
require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
|
16
|
-
require('./dataunit-fetcher-
|
16
|
+
require('./dataunit-fetcher-a8bac9cc.js');
|
17
17
|
require('./filter-item-type.enum-aa823a00.js');
|
18
18
|
require('./form-config-fetcher-5e5ec5be.js');
|
19
19
|
const DataUnit = require('@sankhyalabs/core/dist/dataunit/DataUnit');
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
4
4
|
|
5
|
-
const snkGuidesViewer = require('./snk-guides-viewer-
|
5
|
+
const snkGuidesViewer = require('./snk-guides-viewer-00e028f1.js');
|
6
6
|
require('./index-f9e81701.js');
|
7
7
|
require('@sankhyalabs/core');
|
8
8
|
require('./SnkFormConfigManager-c9d38de1.js');
|
@@ -22,7 +22,7 @@ require('./constants-d187e03e.js');
|
|
22
22
|
require('./pesquisa-fetcher-63a8c652.js');
|
23
23
|
require('./ISave-d68ce3cd.js');
|
24
24
|
require('@sankhyalabs/ezui/dist/collection/utils/constants');
|
25
|
-
require('./dataunit-fetcher-
|
25
|
+
require('./dataunit-fetcher-a8bac9cc.js');
|
26
26
|
require('./ResourceIDUtils-5ff86aa7.js');
|
27
27
|
require('@sankhyalabs/core/dist/dataunit/DataUnit');
|
28
28
|
|
@@ -12,11 +12,11 @@ const index$1 = require('./index-0e663819.js');
|
|
12
12
|
require('./ISave-d68ce3cd.js');
|
13
13
|
require('@sankhyalabs/ezui/dist/collection/utils/constants');
|
14
14
|
require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
|
15
|
-
const dataunitFetcher = require('./dataunit-fetcher-
|
15
|
+
const dataunitFetcher = require('./dataunit-fetcher-a8bac9cc.js');
|
16
16
|
require('./filter-item-type.enum-aa823a00.js');
|
17
17
|
require('./form-config-fetcher-5e5ec5be.js');
|
18
18
|
const taskbarProcessor = require('./taskbar-processor-bce3f499.js');
|
19
|
-
const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-
|
19
|
+
const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-4f7a031a.js');
|
20
20
|
require('./index-102ba62d.js');
|
21
21
|
require('./_commonjsHelpers-537d719a.js');
|
22
22
|
require('./PrintUtils-bcaeb82f.js');
|
@@ -95,6 +95,7 @@ export class SnkGrid {
|
|
95
95
|
if (this._gridConfig && this._dataUnit) {
|
96
96
|
this._dataUnit.defaultSorting = this._gridConfig
|
97
97
|
.columns
|
98
|
+
.filter(col => col.ascending != undefined)
|
98
99
|
.sort((colA, colB) => colA.orderIndex - colB.orderIndex)
|
99
100
|
.map(({ name: field, ascending }) => {
|
100
101
|
const { dataType } = this._dataUnit.getField(field);
|
@@ -55,7 +55,7 @@ export default class DataUnitDataLoader {
|
|
55
55
|
PreloadManager.cacheRecords(dataUnit, records, recreateCache, responseLoadingInfo.loadingInProgress);
|
56
56
|
if (PreloadManager.isCacheEnabled(dataUnit) && responseLoadingInfo.loadingInProgress) {
|
57
57
|
const newRequest = Object.assign(Object.assign({}, request), { offset: responseLoadingInfo.count });
|
58
|
-
const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1 });
|
58
|
+
const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1, quiet: true });
|
59
59
|
this.callLoader(dataUnit, newRequest, newLoadingInfo, dataLoader)
|
60
60
|
.then(result => DataUnitDataLoader.afterLoadingPage(dataUnit, result.loadingInfo))
|
61
61
|
.catch(reason => console.error(reason));
|
@@ -73,6 +73,11 @@ export default class DataUnitDataLoader {
|
|
73
73
|
dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { count }));
|
74
74
|
return;
|
75
75
|
}
|
76
|
+
if (loadingInfo.needReload) {
|
77
|
+
//Ir para a primeira página, faz com que o loadData seja chamado novamente
|
78
|
+
dataUnit.gotoPage(0);
|
79
|
+
return;
|
80
|
+
}
|
76
81
|
dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { total: count, count }));
|
77
82
|
}
|
78
83
|
static registryLoading(dataUnit, loadingInfo) {
|
@@ -45,26 +45,25 @@ export default class PreloadManager {
|
|
45
45
|
if (!PreloadManager.isCacheEnabled(dataUnit)) {
|
46
46
|
return Promise.resolve(undefined);
|
47
47
|
}
|
48
|
+
let filterFunction;
|
49
|
+
const request = dataUnit.getLastLoadRequest();
|
50
|
+
if (request != undefined) {
|
51
|
+
const columnFilters = PreloadManager.getColumnFilters(request.filters);
|
52
|
+
filterFunction = PreloadManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
|
53
|
+
}
|
48
54
|
return new Promise((accept, reject) => {
|
49
55
|
PreloadManager.getRepository(dataUnit).distict(record => {
|
56
|
+
if (filterFunction != undefined && !filterFunction(record)) {
|
57
|
+
return undefined;
|
58
|
+
}
|
50
59
|
const fieldValue = record[fieldName];
|
51
60
|
if (fieldValue == undefined) {
|
52
|
-
return
|
61
|
+
return { key: null, value: null };
|
53
62
|
}
|
54
63
|
const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
|
55
64
|
return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
|
56
65
|
})
|
57
|
-
.then(result =>
|
58
|
-
if (result != undefined && result.size > 0) {
|
59
|
-
const field = dataUnit.getField(fieldName);
|
60
|
-
const sortedMap = new Map(Array.from(result.entries())
|
61
|
-
.sort((itemA, itemB) => FieldComparator.compareValues(field, itemA[1], itemB[1]))
|
62
|
-
.map(([key, value]) => key === "" ? ["(Vazio)", value] : [key, value]));
|
63
|
-
accept(sortedMap);
|
64
|
-
return;
|
65
|
-
}
|
66
|
-
accept(result);
|
67
|
-
})
|
66
|
+
.then(result => accept(result))
|
68
67
|
.catch(reason => reject(reason));
|
69
68
|
});
|
70
69
|
}
|
@@ -78,7 +77,7 @@ export default class PreloadManager {
|
|
78
77
|
return PreloadManager.loadFromCache(dataUnit, request);
|
79
78
|
}
|
80
79
|
}
|
81
|
-
//Como não vamos aproveitar o cache, ele precisa ser
|
80
|
+
//Como não vamos aproveitar o cache, ele precisa ser limpo.
|
82
81
|
PreloadManager.getRepository(dataUnit).clear().catch(() => { });
|
83
82
|
}
|
84
83
|
return loadFromServer(dataUnit, request);
|
@@ -148,7 +147,7 @@ export default class PreloadManager {
|
|
148
147
|
.then(loadResult => {
|
149
148
|
const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
|
150
149
|
const { count, result: records } = loadResult;
|
151
|
-
const firstRecord = count == 0 ?
|
150
|
+
const firstRecord = count == 0 ? 0 : offset + 1;
|
152
151
|
const lastRecord = offset + Math.min(records.length, limit);
|
153
152
|
const currentPage = offset / limit;
|
154
153
|
const paginationInfo = {
|
package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js
CHANGED
@@ -11,17 +11,36 @@ export class DatasetStrategy {
|
|
11
11
|
return Promise.resolve({ records: [], loadingInfo });
|
12
12
|
}
|
13
13
|
try {
|
14
|
+
const localSorting = [];
|
15
|
+
const serverSorting = [];
|
16
|
+
if (request.sort != undefined) {
|
17
|
+
for (const sort of request.sort) {
|
18
|
+
const descriptor = dataUnit.getField(sort.field);
|
19
|
+
const local = descriptor != undefined
|
20
|
+
&& descriptor.properties != undefined
|
21
|
+
&& descriptor.properties.calculated === "true";
|
22
|
+
if (local) {
|
23
|
+
localSorting.push(sort);
|
24
|
+
}
|
25
|
+
else {
|
26
|
+
serverSorting.push(sort);
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
14
30
|
const fields = this.getFieldsList(dataUnit);
|
15
31
|
const serviceName = "DatasetSP.loadRecords";
|
16
|
-
const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo);
|
17
|
-
const {
|
32
|
+
const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, serverSorting);
|
33
|
+
const params = loadingInfo.quiet ? { urlParams: { quietMode: "true" } } : undefined;
|
34
|
+
const { result: responseRecords, pagerID: pagerId } = await DataFetcher.get().callServiceBroker(serviceName, requestBody, params);
|
18
35
|
const records = this.processRecords(dataUnit, fields, responseRecords);
|
19
36
|
const loadingInProgress = pagerId != undefined;
|
20
37
|
const count = loadingInfo.count + records.length;
|
38
|
+
const needReload = !loadingInProgress && localSorting.length > 0;
|
21
39
|
return Promise.resolve({
|
22
40
|
records,
|
23
41
|
loadingInfo: Object.assign(Object.assign({}, loadingInfo), { pagerId,
|
24
|
-
loadingInProgress, total: loadingInProgress ? undefined : count, count
|
42
|
+
loadingInProgress, total: loadingInProgress ? undefined : count, count,
|
43
|
+
needReload })
|
25
44
|
});
|
26
45
|
}
|
27
46
|
catch (error) {
|
@@ -31,7 +50,10 @@ export class DatasetStrategy {
|
|
31
50
|
}
|
32
51
|
getFieldsList(dataUnit) {
|
33
52
|
let fields = ["__record__id__", "__record__label__"];
|
34
|
-
dataUnit.metadata.fields.forEach(descriptor => {
|
53
|
+
dataUnit.metadata.fields.forEach((descriptor) => {
|
54
|
+
if (descriptor.standAlone) {
|
55
|
+
return;
|
56
|
+
}
|
35
57
|
fields = fields.concat(this.getFieldNames(descriptor));
|
36
58
|
});
|
37
59
|
return fields;
|
@@ -43,7 +65,7 @@ export class DatasetStrategy {
|
|
43
65
|
}
|
44
66
|
return [descriptor.name, descriptionField];
|
45
67
|
}
|
46
|
-
buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo) {
|
68
|
+
buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, sorting) {
|
47
69
|
const dataSetID = dataUnit.dataUnitId;
|
48
70
|
const dataUnitName = dataUnit.name;
|
49
71
|
const entityName = DataUnitFetcher.parseDataUnitName(dataUnitName).entityName;
|
@@ -64,13 +86,13 @@ export class DatasetStrategy {
|
|
64
86
|
tryJoinedFields: true,
|
65
87
|
parallelLoader: true,
|
66
88
|
crudListener: "br.com.sankhya.modelcore.dataset.DataUnitDatasetAdapter",
|
67
|
-
txProperties: this.getTxProperties(dataUnitName, request),
|
89
|
+
txProperties: this.getTxProperties(dataUnitName, request, sorting),
|
68
90
|
useDefaultRowsLimit: false
|
69
91
|
}
|
70
92
|
};
|
71
93
|
return JSON.stringify(requestBody);
|
72
94
|
}
|
73
|
-
getTxProperties(dataUnitName, request) {
|
95
|
+
getTxProperties(dataUnitName, request, sorting) {
|
74
96
|
const txProperties = {
|
75
97
|
"__DATA_UNIT_ADAPTER__[dataUnitName]": dataUnitName
|
76
98
|
};
|
@@ -78,7 +100,6 @@ export class DatasetStrategy {
|
|
78
100
|
if (serverSideFilters.length !== 0) {
|
79
101
|
txProperties["__DATA_UNIT_ADAPTER__[criteria]"] = JSON.stringify(serverSideFilters);
|
80
102
|
}
|
81
|
-
const sorting = request.sort;
|
82
103
|
if (sorting != undefined && sorting.length !== 0) {
|
83
104
|
txProperties["__DATA_UNIT_ADAPTER__[sorting]"] = JSON.stringify(sorting);
|
84
105
|
}
|
@@ -192,6 +192,9 @@ class ArrayRepository {
|
|
192
192
|
for (const item of this._list) {
|
193
193
|
const processedItem = itemProcessor(item);
|
194
194
|
if (processedItem == undefined) {
|
195
|
+
continue;
|
196
|
+
}
|
197
|
+
if (processedItem.value == undefined) {
|
195
198
|
hasEmpty = true;
|
196
199
|
continue;
|
197
200
|
}
|
@@ -287,26 +290,25 @@ class PreloadManager {
|
|
287
290
|
if (!PreloadManager.isCacheEnabled(dataUnit)) {
|
288
291
|
return Promise.resolve(undefined);
|
289
292
|
}
|
293
|
+
let filterFunction;
|
294
|
+
const request = dataUnit.getLastLoadRequest();
|
295
|
+
if (request != undefined) {
|
296
|
+
const columnFilters = PreloadManager.getColumnFilters(request.filters);
|
297
|
+
filterFunction = PreloadManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
|
298
|
+
}
|
290
299
|
return new Promise((accept, reject) => {
|
291
300
|
PreloadManager.getRepository(dataUnit).distict(record => {
|
301
|
+
if (filterFunction != undefined && !filterFunction(record)) {
|
302
|
+
return undefined;
|
303
|
+
}
|
292
304
|
const fieldValue = record[fieldName];
|
293
305
|
if (fieldValue == undefined) {
|
294
|
-
return
|
306
|
+
return { key: null, value: null };
|
295
307
|
}
|
296
308
|
const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
|
297
309
|
return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
|
298
310
|
})
|
299
|
-
.then(result =>
|
300
|
-
if (result != undefined && result.size > 0) {
|
301
|
-
const field = dataUnit.getField(fieldName);
|
302
|
-
const sortedMap = new Map(Array.from(result.entries())
|
303
|
-
.sort((itemA, itemB) => FieldComparator.compareValues(field, itemA[1], itemB[1]))
|
304
|
-
.map(([key, value]) => key === "" ? ["(Vazio)", value] : [key, value]));
|
305
|
-
accept(sortedMap);
|
306
|
-
return;
|
307
|
-
}
|
308
|
-
accept(result);
|
309
|
-
})
|
311
|
+
.then(result => accept(result))
|
310
312
|
.catch(reason => reject(reason));
|
311
313
|
});
|
312
314
|
}
|
@@ -320,7 +322,7 @@ class PreloadManager {
|
|
320
322
|
return PreloadManager.loadFromCache(dataUnit, request);
|
321
323
|
}
|
322
324
|
}
|
323
|
-
//Como não vamos aproveitar o cache, ele precisa ser
|
325
|
+
//Como não vamos aproveitar o cache, ele precisa ser limpo.
|
324
326
|
PreloadManager.getRepository(dataUnit).clear().catch(() => { });
|
325
327
|
}
|
326
328
|
return loadFromServer(dataUnit, request);
|
@@ -390,7 +392,7 @@ class PreloadManager {
|
|
390
392
|
.then(loadResult => {
|
391
393
|
const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
|
392
394
|
const { count, result: records } = loadResult;
|
393
|
-
const firstRecord = count == 0 ?
|
395
|
+
const firstRecord = count == 0 ? 0 : offset + 1;
|
394
396
|
const lastRecord = offset + Math.min(records.length, limit);
|
395
397
|
const currentPage = offset / limit;
|
396
398
|
const paginationInfo = {
|
@@ -536,17 +538,36 @@ class DatasetStrategy {
|
|
536
538
|
return Promise.resolve({ records: [], loadingInfo });
|
537
539
|
}
|
538
540
|
try {
|
541
|
+
const localSorting = [];
|
542
|
+
const serverSorting = [];
|
543
|
+
if (request.sort != undefined) {
|
544
|
+
for (const sort of request.sort) {
|
545
|
+
const descriptor = dataUnit.getField(sort.field);
|
546
|
+
const local = descriptor != undefined
|
547
|
+
&& descriptor.properties != undefined
|
548
|
+
&& descriptor.properties.calculated === "true";
|
549
|
+
if (local) {
|
550
|
+
localSorting.push(sort);
|
551
|
+
}
|
552
|
+
else {
|
553
|
+
serverSorting.push(sort);
|
554
|
+
}
|
555
|
+
}
|
556
|
+
}
|
539
557
|
const fields = this.getFieldsList(dataUnit);
|
540
558
|
const serviceName = "DatasetSP.loadRecords";
|
541
|
-
const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo);
|
542
|
-
const {
|
559
|
+
const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, serverSorting);
|
560
|
+
const params = loadingInfo.quiet ? { urlParams: { quietMode: "true" } } : undefined;
|
561
|
+
const { result: responseRecords, pagerID: pagerId } = await DataFetcher.get().callServiceBroker(serviceName, requestBody, params);
|
543
562
|
const records = this.processRecords(dataUnit, fields, responseRecords);
|
544
563
|
const loadingInProgress = pagerId != undefined;
|
545
564
|
const count = loadingInfo.count + records.length;
|
565
|
+
const needReload = !loadingInProgress && localSorting.length > 0;
|
546
566
|
return Promise.resolve({
|
547
567
|
records,
|
548
568
|
loadingInfo: Object.assign(Object.assign({}, loadingInfo), { pagerId,
|
549
|
-
loadingInProgress, total: loadingInProgress ? undefined : count, count
|
569
|
+
loadingInProgress, total: loadingInProgress ? undefined : count, count,
|
570
|
+
needReload })
|
550
571
|
});
|
551
572
|
}
|
552
573
|
catch (error) {
|
@@ -556,7 +577,10 @@ class DatasetStrategy {
|
|
556
577
|
}
|
557
578
|
getFieldsList(dataUnit) {
|
558
579
|
let fields = ["__record__id__", "__record__label__"];
|
559
|
-
dataUnit.metadata.fields.forEach(descriptor => {
|
580
|
+
dataUnit.metadata.fields.forEach((descriptor) => {
|
581
|
+
if (descriptor.standAlone) {
|
582
|
+
return;
|
583
|
+
}
|
560
584
|
fields = fields.concat(this.getFieldNames(descriptor));
|
561
585
|
});
|
562
586
|
return fields;
|
@@ -568,7 +592,7 @@ class DatasetStrategy {
|
|
568
592
|
}
|
569
593
|
return [descriptor.name, descriptionField];
|
570
594
|
}
|
571
|
-
buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo) {
|
595
|
+
buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, sorting) {
|
572
596
|
const dataSetID = dataUnit.dataUnitId;
|
573
597
|
const dataUnitName = dataUnit.name;
|
574
598
|
const entityName = DataUnitFetcher.parseDataUnitName(dataUnitName).entityName;
|
@@ -589,13 +613,13 @@ class DatasetStrategy {
|
|
589
613
|
tryJoinedFields: true,
|
590
614
|
parallelLoader: true,
|
591
615
|
crudListener: "br.com.sankhya.modelcore.dataset.DataUnitDatasetAdapter",
|
592
|
-
txProperties: this.getTxProperties(dataUnitName, request),
|
616
|
+
txProperties: this.getTxProperties(dataUnitName, request, sorting),
|
593
617
|
useDefaultRowsLimit: false
|
594
618
|
}
|
595
619
|
};
|
596
620
|
return JSON.stringify(requestBody);
|
597
621
|
}
|
598
|
-
getTxProperties(dataUnitName, request) {
|
622
|
+
getTxProperties(dataUnitName, request, sorting) {
|
599
623
|
const txProperties = {
|
600
624
|
"__DATA_UNIT_ADAPTER__[dataUnitName]": dataUnitName
|
601
625
|
};
|
@@ -603,7 +627,6 @@ class DatasetStrategy {
|
|
603
627
|
if (serverSideFilters.length !== 0) {
|
604
628
|
txProperties["__DATA_UNIT_ADAPTER__[criteria]"] = JSON.stringify(serverSideFilters);
|
605
629
|
}
|
606
|
-
const sorting = request.sort;
|
607
630
|
if (sorting != undefined && sorting.length !== 0) {
|
608
631
|
txProperties["__DATA_UNIT_ADAPTER__[sorting]"] = JSON.stringify(sorting);
|
609
632
|
}
|
@@ -710,7 +733,7 @@ class DataUnitDataLoader {
|
|
710
733
|
PreloadManager.cacheRecords(dataUnit, records, recreateCache, responseLoadingInfo.loadingInProgress);
|
711
734
|
if (PreloadManager.isCacheEnabled(dataUnit) && responseLoadingInfo.loadingInProgress) {
|
712
735
|
const newRequest = Object.assign(Object.assign({}, request), { offset: responseLoadingInfo.count });
|
713
|
-
const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1 });
|
736
|
+
const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1, quiet: true });
|
714
737
|
this.callLoader(dataUnit, newRequest, newLoadingInfo, dataLoader)
|
715
738
|
.then(result => DataUnitDataLoader.afterLoadingPage(dataUnit, result.loadingInfo))
|
716
739
|
.catch(reason => console.error(reason));
|
@@ -728,6 +751,11 @@ class DataUnitDataLoader {
|
|
728
751
|
dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { count }));
|
729
752
|
return;
|
730
753
|
}
|
754
|
+
if (loadingInfo.needReload) {
|
755
|
+
//Ir para a primeira página, faz com que o loadData seja chamado novamente
|
756
|
+
dataUnit.gotoPage(0);
|
757
|
+
return;
|
758
|
+
}
|
731
759
|
dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { total: count, count }));
|
732
760
|
}
|
733
761
|
static registryLoading(dataUnit, loadingInfo) {
|