@sankhyalabs/sankhyablocks 8.8.0-rc.5 → 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.
Files changed (45) hide show
  1. package/dist/cjs/{SnkMultiSelectionListDataSource-45893a0c.js → SnkMultiSelectionListDataSource-4f7a031a.js} +1 -1
  2. package/dist/cjs/{dataunit-fetcher-2454608a.js → dataunit-fetcher-a8bac9cc.js} +50 -24
  3. package/dist/cjs/snk-actions-button.cjs.entry.js +1 -1
  4. package/dist/cjs/snk-application.cjs.entry.js +1 -1
  5. package/dist/cjs/snk-attach.cjs.entry.js +1 -1
  6. package/dist/cjs/snk-crud.cjs.entry.js +1 -1
  7. package/dist/cjs/snk-detail-view.cjs.entry.js +2 -2
  8. package/dist/cjs/snk-grid.cjs.entry.js +3 -2
  9. package/dist/cjs/{snk-guides-viewer-018c1c8e.js → snk-guides-viewer-00e028f1.js} +1 -1
  10. package/dist/cjs/snk-guides-viewer.cjs.entry.js +2 -2
  11. package/dist/cjs/snk-simple-crud.cjs.entry.js +2 -2
  12. package/dist/collection/components/snk-grid/snk-grid.js +1 -0
  13. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/DataUnitDataLoader.js +6 -1
  14. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/ArrayRepository.js +3 -0
  15. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.js +13 -14
  16. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js +28 -9
  17. package/dist/components/dataunit-fetcher.js +50 -24
  18. package/dist/components/snk-grid2.js +1 -0
  19. package/dist/esm/{SnkMultiSelectionListDataSource-a0b69ac4.js → SnkMultiSelectionListDataSource-2a4ec61c.js} +1 -1
  20. package/dist/esm/{dataunit-fetcher-493182bc.js → dataunit-fetcher-5e9245d7.js} +50 -24
  21. package/dist/esm/snk-actions-button.entry.js +1 -1
  22. package/dist/esm/snk-application.entry.js +1 -1
  23. package/dist/esm/snk-attach.entry.js +1 -1
  24. package/dist/esm/snk-crud.entry.js +1 -1
  25. package/dist/esm/snk-detail-view.entry.js +2 -2
  26. package/dist/esm/snk-grid.entry.js +3 -2
  27. package/dist/esm/{snk-guides-viewer-7c120bc6.js → snk-guides-viewer-9efd5ce9.js} +1 -1
  28. package/dist/esm/snk-guides-viewer.entry.js +2 -2
  29. package/dist/esm/snk-simple-crud.entry.js +2 -2
  30. package/dist/sankhyablocks/p-171b12d5.js +59 -0
  31. package/dist/sankhyablocks/{p-e33b308f.entry.js → p-3ad594b3.entry.js} +1 -1
  32. package/dist/sankhyablocks/{p-f34b9087.entry.js → p-3b28c4b3.entry.js} +1 -1
  33. package/dist/sankhyablocks/{p-9256574e.entry.js → p-3d0a0a36.entry.js} +1 -1
  34. package/dist/sankhyablocks/p-61513624.entry.js +1 -0
  35. package/dist/sankhyablocks/{p-53091bcd.js → p-7469e2ef.js} +1 -1
  36. package/dist/sankhyablocks/{p-21d01a8c.entry.js → p-880d08b8.entry.js} +1 -1
  37. package/dist/sankhyablocks/{p-b9b7bfce.entry.js → p-ae6a90a1.entry.js} +1 -1
  38. package/dist/sankhyablocks/{p-e13c3fbc.entry.js → p-b4edd50c.entry.js} +1 -1
  39. package/dist/sankhyablocks/{p-8f7e0bbd.entry.js → p-bb1bdb17.entry.js} +1 -1
  40. package/dist/sankhyablocks/{p-7650d823.js → p-c34cea23.js} +1 -1
  41. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  42. package/dist/types/lib/http/data-fetcher/fetchers/data-unit/interfaces/ILoadingInfo.d.ts +2 -0
  43. package/package.json +1 -1
  44. package/dist/sankhyablocks/p-bdfcc2e2.js +0 -59
  45. package/dist/sankhyablocks/p-db45a464.entry.js +0 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const core = require('@sankhyalabs/core');
4
- const dataunitFetcher = require('./dataunit-fetcher-2454608a.js');
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 undefined;
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 limpado.
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 ? 1 : offset + 1;
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 { result: responseRecords, pagerID: pagerId } = await DataFetcher.DataFetcher.get().callServiceBroker(serviceName, requestBody);
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,9 +418,10 @@ class DatasetStrategy {
397
418
  }
398
419
  getFieldsList(dataUnit) {
399
420
  let fields = ["__record__id__", "__record__label__"];
400
- dataUnit.metadata.fields.forEach(descriptor => {
401
- if (descriptor.standAlone)
421
+ dataUnit.metadata.fields.forEach((descriptor) => {
422
+ if (descriptor.standAlone) {
402
423
  return;
424
+ }
403
425
  fields = fields.concat(this.getFieldNames(descriptor));
404
426
  });
405
427
  return fields;
@@ -411,7 +433,7 @@ class DatasetStrategy {
411
433
  }
412
434
  return [descriptor.name, descriptionField];
413
435
  }
414
- buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo) {
436
+ buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, sorting) {
415
437
  const dataSetID = dataUnit.dataUnitId;
416
438
  const dataUnitName = dataUnit.name;
417
439
  const entityName = DataUnitFetcher.parseDataUnitName(dataUnitName).entityName;
@@ -432,13 +454,13 @@ class DatasetStrategy {
432
454
  tryJoinedFields: true,
433
455
  parallelLoader: true,
434
456
  crudListener: "br.com.sankhya.modelcore.dataset.DataUnitDatasetAdapter",
435
- txProperties: this.getTxProperties(dataUnitName, request),
457
+ txProperties: this.getTxProperties(dataUnitName, request, sorting),
436
458
  useDefaultRowsLimit: false
437
459
  }
438
460
  };
439
461
  return JSON.stringify(requestBody);
440
462
  }
441
- getTxProperties(dataUnitName, request) {
463
+ getTxProperties(dataUnitName, request, sorting) {
442
464
  const txProperties = {
443
465
  "__DATA_UNIT_ADAPTER__[dataUnitName]": dataUnitName
444
466
  };
@@ -446,7 +468,6 @@ class DatasetStrategy {
446
468
  if (serverSideFilters.length !== 0) {
447
469
  txProperties["__DATA_UNIT_ADAPTER__[criteria]"] = JSON.stringify(serverSideFilters);
448
470
  }
449
- const sorting = request.sort;
450
471
  if (sorting != undefined && sorting.length !== 0) {
451
472
  txProperties["__DATA_UNIT_ADAPTER__[sorting]"] = JSON.stringify(sorting);
452
473
  }
@@ -553,7 +574,7 @@ class DataUnitDataLoader {
553
574
  PreloadManager.cacheRecords(dataUnit, records, recreateCache, responseLoadingInfo.loadingInProgress);
554
575
  if (PreloadManager.isCacheEnabled(dataUnit) && responseLoadingInfo.loadingInProgress) {
555
576
  const newRequest = Object.assign(Object.assign({}, request), { offset: responseLoadingInfo.count });
556
- 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 });
557
578
  this.callLoader(dataUnit, newRequest, newLoadingInfo, dataLoader)
558
579
  .then(result => DataUnitDataLoader.afterLoadingPage(dataUnit, result.loadingInfo))
559
580
  .catch(reason => console.error(reason));
@@ -571,6 +592,11 @@ class DataUnitDataLoader {
571
592
  dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { count }));
572
593
  return;
573
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
+ }
574
600
  dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { total: count, count }));
575
601
  }
576
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-2454608a.js');
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-2454608a.js');
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-2454608a.js');
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-2454608a.js');
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-2454608a.js');
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-018c1c8e.js');
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-45893a0c.js');
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-2454608a.js');
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-2454608a.js');
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-018c1c8e.js');
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-2454608a.js');
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-2454608a.js');
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-45893a0c.js');
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) {
@@ -25,6 +25,9 @@ export class ArrayRepository {
25
25
  for (const item of this._list) {
26
26
  const processedItem = itemProcessor(item);
27
27
  if (processedItem == undefined) {
28
+ continue;
29
+ }
30
+ if (processedItem.value == undefined) {
28
31
  hasEmpty = true;
29
32
  continue;
30
33
  }
@@ -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 undefined;
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 limpado.
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 ? 1 : offset + 1;
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 = {
@@ -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 { result: responseRecords, pagerID: pagerId } = await DataFetcher.get().callServiceBroker(serviceName, requestBody);
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,9 +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 => {
35
- if (descriptor.standAlone)
53
+ dataUnit.metadata.fields.forEach((descriptor) => {
54
+ if (descriptor.standAlone) {
36
55
  return;
56
+ }
37
57
  fields = fields.concat(this.getFieldNames(descriptor));
38
58
  });
39
59
  return fields;
@@ -45,7 +65,7 @@ export class DatasetStrategy {
45
65
  }
46
66
  return [descriptor.name, descriptionField];
47
67
  }
48
- buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo) {
68
+ buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, sorting) {
49
69
  const dataSetID = dataUnit.dataUnitId;
50
70
  const dataUnitName = dataUnit.name;
51
71
  const entityName = DataUnitFetcher.parseDataUnitName(dataUnitName).entityName;
@@ -66,13 +86,13 @@ export class DatasetStrategy {
66
86
  tryJoinedFields: true,
67
87
  parallelLoader: true,
68
88
  crudListener: "br.com.sankhya.modelcore.dataset.DataUnitDatasetAdapter",
69
- txProperties: this.getTxProperties(dataUnitName, request),
89
+ txProperties: this.getTxProperties(dataUnitName, request, sorting),
70
90
  useDefaultRowsLimit: false
71
91
  }
72
92
  };
73
93
  return JSON.stringify(requestBody);
74
94
  }
75
- getTxProperties(dataUnitName, request) {
95
+ getTxProperties(dataUnitName, request, sorting) {
76
96
  const txProperties = {
77
97
  "__DATA_UNIT_ADAPTER__[dataUnitName]": dataUnitName
78
98
  };
@@ -80,7 +100,6 @@ export class DatasetStrategy {
80
100
  if (serverSideFilters.length !== 0) {
81
101
  txProperties["__DATA_UNIT_ADAPTER__[criteria]"] = JSON.stringify(serverSideFilters);
82
102
  }
83
- const sorting = request.sort;
84
103
  if (sorting != undefined && sorting.length !== 0) {
85
104
  txProperties["__DATA_UNIT_ADAPTER__[sorting]"] = JSON.stringify(sorting);
86
105
  }