@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.
Files changed (45) hide show
  1. package/dist/cjs/{SnkMultiSelectionListDataSource-9fd9c742.js → SnkMultiSelectionListDataSource-4f7a031a.js} +1 -1
  2. package/dist/cjs/{dataunit-fetcher-1433ce24.js → dataunit-fetcher-a8bac9cc.js} +51 -23
  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-0f03d633.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 +29 -8
  17. package/dist/components/dataunit-fetcher.js +51 -23
  18. package/dist/components/snk-grid2.js +1 -0
  19. package/dist/esm/{SnkMultiSelectionListDataSource-447cd9e8.js → SnkMultiSelectionListDataSource-2a4ec61c.js} +1 -1
  20. package/dist/esm/{dataunit-fetcher-0162ce17.js → dataunit-fetcher-5e9245d7.js} +51 -23
  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-64c24a05.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-503c9774.entry.js → p-3ad594b3.entry.js} +1 -1
  32. package/dist/sankhyablocks/{p-e350860d.entry.js → p-3b28c4b3.entry.js} +1 -1
  33. package/dist/sankhyablocks/{p-f5dbb069.entry.js → p-3d0a0a36.entry.js} +1 -1
  34. package/dist/sankhyablocks/p-61513624.entry.js +1 -0
  35. package/dist/sankhyablocks/{p-a84035fa.js → p-7469e2ef.js} +1 -1
  36. package/dist/sankhyablocks/{p-cc232268.entry.js → p-880d08b8.entry.js} +1 -1
  37. package/dist/sankhyablocks/{p-e5e06439.entry.js → p-ae6a90a1.entry.js} +1 -1
  38. package/dist/sankhyablocks/{p-7cbbb6e3.entry.js → p-b4edd50c.entry.js} +1 -1
  39. package/dist/sankhyablocks/{p-441cce40.entry.js → p-bb1bdb17.entry.js} +1 -1
  40. package/dist/sankhyablocks/{p-1161cb2d.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-5bd7932e.entry.js +0 -1
  45. 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-1433ce24.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,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-1433ce24.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-1433ce24.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-1433ce24.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-1433ce24.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-1433ce24.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-0f03d633.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-9fd9c742.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-1433ce24.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-1433ce24.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-0f03d633.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-1433ce24.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-1433ce24.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-9fd9c742.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,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 undefined;
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 limpado.
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 ? 1 : offset + 1;
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 { result: responseRecords, pagerID: pagerId } = await DataFetcher.get().callServiceBroker(serviceName, requestBody);
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) {