@sankhyalabs/sankhyablocks 8.8.0-dev.3 → 8.8.0-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/cjs/{ConfigStorage-bdb539ce.js → ConfigStorage-908ce5bc.js} +2 -2
  2. package/dist/cjs/{DataFetcher-016f1661.js → DataFetcher-713f0749.js} +2 -2
  3. package/dist/cjs/PreloadManager-e26d237f.js +224 -0
  4. package/dist/cjs/{SnkFormConfigManager-c9d38de1.js → SnkFormConfigManager-793ade39.js} +2 -2
  5. package/dist/cjs/{SnkMultiSelectionListDataSource-45893a0c.js → SnkMultiSelectionListDataSource-d74d2336.js} +10 -6
  6. package/dist/cjs/{auth-fetcher-73ee0989.js → auth-fetcher-555ff856.js} +1 -1
  7. package/dist/cjs/{dataunit-fetcher-2454608a.js → dataunit-fetcher-66c0b7af.js} +46 -276
  8. package/dist/cjs/{form-config-fetcher-5e5ec5be.js → form-config-fetcher-17775a75.js} +1 -1
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/{pesquisa-fetcher-63a8c652.js → pesquisa-fetcher-34922b83.js} +1 -1
  11. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  12. package/dist/cjs/snk-actions-button.cjs.entry.js +6 -4
  13. package/dist/cjs/snk-application.cjs.entry.js +16 -6
  14. package/dist/cjs/snk-attach.cjs.entry.js +4 -2
  15. package/dist/cjs/snk-crud.cjs.entry.js +7 -5
  16. package/dist/cjs/snk-data-exporter.cjs.entry.js +1 -1
  17. package/dist/cjs/snk-detail-view.cjs.entry.js +24 -8
  18. package/dist/cjs/snk-filter-bar.cjs.entry.js +19 -4
  19. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +3 -3
  20. package/dist/cjs/snk-form-config.cjs.entry.js +2 -2
  21. package/dist/cjs/snk-form.cjs.entry.js +4 -4
  22. package/dist/cjs/snk-grid-config.cjs.entry.js +3 -3
  23. package/dist/cjs/snk-grid.cjs.entry.js +8 -7
  24. package/dist/cjs/{snk-guides-viewer-018c1c8e.js → snk-guides-viewer-2317c71e.js} +78 -5
  25. package/dist/cjs/snk-guides-viewer.cjs.entry.js +9 -7
  26. package/dist/cjs/snk-personalized-filter.cjs.entry.js +3 -3
  27. package/dist/cjs/snk-simple-crud.cjs.entry.js +8 -5
  28. package/dist/collection/components/snk-application/snk-application.js +1 -0
  29. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +18 -1
  30. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +80 -8
  31. package/dist/collection/components/snk-filter-bar/filter-item/dataunitfilter/data-unit-filter-builder.js +17 -2
  32. package/dist/collection/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.js +5 -5
  33. package/dist/collection/components/snk-grid/snk-grid.js +1 -0
  34. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +2 -2
  35. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/DataUnitDataLoader.js +6 -1
  36. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/ArrayRepository.js +3 -0
  37. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.js +21 -61
  38. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/dataunit-fetcher.js +1 -0
  39. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js +28 -9
  40. package/dist/collection/lib/workspace/workspace.js +7 -0
  41. package/dist/components/DataFetcher.js +2 -2
  42. package/dist/components/SnkMultiSelectionListDataSource.js +5 -5
  43. package/dist/components/dataunit-fetcher.js +59 -70
  44. package/dist/components/snk-application2.js +8 -0
  45. package/dist/components/snk-detail-view2.js +88 -2
  46. package/dist/components/snk-filter-bar2.js +17 -2
  47. package/dist/components/snk-grid2.js +1 -0
  48. package/dist/esm/{ConfigStorage-9840d004.js → ConfigStorage-48648d45.js} +2 -2
  49. package/dist/esm/{DataFetcher-07935045.js → DataFetcher-79f78222.js} +2 -2
  50. package/dist/esm/PreloadManager-8826b96a.js +222 -0
  51. package/dist/esm/{SnkFormConfigManager-a7c4ac16.js → SnkFormConfigManager-3c15f319.js} +2 -2
  52. package/dist/esm/{SnkMultiSelectionListDataSource-a0b69ac4.js → SnkMultiSelectionListDataSource-27572f47.js} +6 -6
  53. package/dist/esm/{auth-fetcher-1afab780.js → auth-fetcher-e260d0cd.js} +1 -1
  54. package/dist/esm/{dataunit-fetcher-493182bc.js → dataunit-fetcher-831feb12.js} +39 -268
  55. package/dist/esm/{form-config-fetcher-5b886892.js → form-config-fetcher-e1603e66.js} +1 -1
  56. package/dist/esm/loader.js +1 -1
  57. package/dist/esm/{pesquisa-fetcher-7c46996d.js → pesquisa-fetcher-8e922c9d.js} +1 -1
  58. package/dist/esm/sankhyablocks.js +1 -1
  59. package/dist/esm/snk-actions-button.entry.js +6 -4
  60. package/dist/esm/snk-application.entry.js +16 -6
  61. package/dist/esm/snk-attach.entry.js +4 -2
  62. package/dist/esm/snk-crud.entry.js +7 -5
  63. package/dist/esm/snk-data-exporter.entry.js +1 -1
  64. package/dist/esm/snk-detail-view.entry.js +24 -8
  65. package/dist/esm/snk-filter-bar.entry.js +20 -5
  66. package/dist/esm/snk-filter-modal-item.entry.js +3 -3
  67. package/dist/esm/snk-form-config.entry.js +2 -2
  68. package/dist/esm/snk-form.entry.js +4 -4
  69. package/dist/esm/snk-grid-config.entry.js +3 -3
  70. package/dist/esm/snk-grid.entry.js +8 -7
  71. package/dist/esm/{snk-guides-viewer-7c120bc6.js → snk-guides-viewer-3ba271c1.js} +79 -6
  72. package/dist/esm/snk-guides-viewer.entry.js +9 -7
  73. package/dist/esm/snk-personalized-filter.entry.js +3 -3
  74. package/dist/esm/snk-simple-crud.entry.js +8 -5
  75. package/dist/sankhyablocks/p-25882572.entry.js +1 -0
  76. package/dist/sankhyablocks/{p-b19c272c.js → p-2b39abbc.js} +1 -1
  77. package/dist/sankhyablocks/{p-1b985000.entry.js → p-2ecd9a19.entry.js} +1 -1
  78. package/dist/sankhyablocks/p-3926383d.entry.js +1 -0
  79. package/dist/sankhyablocks/{p-de9eb242.entry.js → p-395567f3.entry.js} +1 -1
  80. package/dist/sankhyablocks/p-3c4f0354.js +1 -0
  81. package/dist/sankhyablocks/p-3ccb321d.entry.js +1 -0
  82. package/dist/sankhyablocks/{p-efb2e247.js → p-41d156dd.js} +1 -1
  83. package/dist/sankhyablocks/{p-0f2b03e5.js → p-4651b43f.js} +1 -1
  84. package/dist/sankhyablocks/p-57543969.js +1 -0
  85. package/dist/sankhyablocks/p-5f6113c8.js +60 -0
  86. package/dist/sankhyablocks/{p-54efcc8d.entry.js → p-747043a5.entry.js} +1 -1
  87. package/dist/sankhyablocks/p-77756526.js +1 -0
  88. package/dist/sankhyablocks/{p-96dd0c41.js → p-8015cbfb.js} +1 -1
  89. package/dist/sankhyablocks/{p-562896d0.entry.js → p-80692cbd.entry.js} +1 -1
  90. package/dist/sankhyablocks/p-a1cce4f5.entry.js +1 -0
  91. package/dist/sankhyablocks/{p-afdb6ddc.entry.js → p-abff11ef.entry.js} +1 -1
  92. package/dist/sankhyablocks/{p-9246d7df.entry.js → p-afacdce6.entry.js} +1 -1
  93. package/dist/sankhyablocks/p-b86bee20.entry.js +11 -0
  94. package/dist/sankhyablocks/{p-4f7b9c50.js → p-c9399ce6.js} +1 -1
  95. package/dist/sankhyablocks/p-d0b36421.js +1 -0
  96. package/dist/sankhyablocks/p-eb25c85f.entry.js +1 -0
  97. package/dist/sankhyablocks/p-f07a5363.entry.js +1 -0
  98. package/dist/sankhyablocks/p-f1743d68.entry.js +1 -0
  99. package/dist/sankhyablocks/p-f2e798f1.entry.js +1 -0
  100. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  101. package/dist/types/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.d.ts +3 -0
  102. package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +22 -11
  103. package/dist/types/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.d.ts +1 -0
  104. package/dist/types/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.d.ts +3 -6
  105. package/dist/types/lib/http/data-fetcher/fetchers/data-unit/interfaces/ILoadingInfo.d.ts +2 -0
  106. package/dist/types/lib/workspace/workspace.d.ts +1 -0
  107. package/package.json +1 -1
  108. package/dist/sankhyablocks/p-21d01a8c.entry.js +0 -1
  109. package/dist/sankhyablocks/p-43f36d85.entry.js +0 -1
  110. package/dist/sankhyablocks/p-53091bcd.js +0 -1
  111. package/dist/sankhyablocks/p-7650d823.js +0 -1
  112. package/dist/sankhyablocks/p-8f7e0bbd.entry.js +0 -1
  113. package/dist/sankhyablocks/p-9256574e.entry.js +0 -11
  114. package/dist/sankhyablocks/p-b9b7bfce.entry.js +0 -1
  115. package/dist/sankhyablocks/p-bdfcc2e2.js +0 -59
  116. package/dist/sankhyablocks/p-db45a464.entry.js +0 -1
  117. package/dist/sankhyablocks/p-de1196c8.js +0 -1
  118. package/dist/sankhyablocks/p-e13c3fbc.entry.js +0 -1
  119. package/dist/sankhyablocks/p-e33b308f.entry.js +0 -1
  120. package/dist/sankhyablocks/p-f34b9087.entry.js +0 -1
@@ -2,6 +2,7 @@ import { DataType, FieldComparator, SortMode, DataUnit, defaultDataLoader, DateU
2
2
  import { d as dist, D as DataFetcher } from './DataFetcher.js';
3
3
  import { DISTINCT_FILTER_NAME_PREFIX } from '@sankhyalabs/ezui/dist/collection/utils/constants';
4
4
  import { DataUnitTransient } from '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
5
+ import { ColumnFilterManager } from '@sankhyalabs/ezui/dist/collection/components/ez-grid/utils';
5
6
  import { R as ResourceIDUtils } from './ResourceIDUtils.js';
6
7
 
7
8
  class PesquisaFetcher {
@@ -192,6 +193,9 @@ class ArrayRepository {
192
193
  for (const item of this._list) {
193
194
  const processedItem = itemProcessor(item);
194
195
  if (processedItem == undefined) {
196
+ continue;
197
+ }
198
+ if (processedItem.value == undefined) {
195
199
  hasEmpty = true;
196
200
  continue;
197
201
  }
@@ -243,21 +247,12 @@ class ArrayRepository {
243
247
  }
244
248
  }
245
249
 
246
- const COLUMN_FILTER_PATTERN = /FILTRO_COLUNA_(.+)/;
247
250
  class PreloadManager {
248
251
  static setLoadingStatus(dataUnit, loadingInProgress) {
249
252
  this._loadingStatus.set(dataUnit.name, loadingInProgress);
250
253
  }
251
- static isCacheEnabled(dataUnit) {
252
- const dataUnitResourceId = PreloadManager.getResourceId(dataUnit.name);
253
- if (dataUnitResourceId !== this.applicationResourceID) {
254
- return false;
255
- }
256
- return this.getRepository(dataUnit).isOperating();
257
- }
258
- static getResourceId(dataUnitName) {
259
- const dataUnitNameInfo = DataUnitFetcher.parseDataUnitName(dataUnitName);
260
- return dataUnitNameInfo == undefined ? undefined : dataUnitNameInfo.resourceID;
254
+ static isCacheEnabled(_dataUnit) {
255
+ return true;
261
256
  }
262
257
  static cacheRecords(dataUnit, records, resetDatabase, loadingInProgress) {
263
258
  PreloadManager.setLoadingStatus(dataUnit, loadingInProgress);
@@ -285,27 +280,32 @@ class PreloadManager {
285
280
  }
286
281
  static async getDistinct(dataUnit, fieldName) {
287
282
  if (!PreloadManager.isCacheEnabled(dataUnit)) {
288
- return Promise.resolve(undefined);
283
+ return Promise.resolve(ColumnFilterManager.compileDistinct(fieldName, dataUnit));
284
+ }
285
+ let filterFunction;
286
+ const request = dataUnit.getLastLoadRequest();
287
+ if (request != undefined) {
288
+ const columnFilters = ColumnFilterManager.getColumnFilters(request.filters);
289
+ filterFunction = ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
289
290
  }
290
291
  return new Promise((accept, reject) => {
291
292
  PreloadManager.getRepository(dataUnit).distict(record => {
293
+ if (filterFunction != undefined && !filterFunction(record)) {
294
+ return undefined;
295
+ }
292
296
  const fieldValue = record[fieldName];
293
297
  if (fieldValue == undefined) {
294
- return undefined;
298
+ return { key: null, value: null };
295
299
  }
296
300
  const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
297
301
  return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
298
302
  })
299
303
  .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);
304
+ if (result == undefined) {
305
+ accept(undefined);
306
306
  return;
307
307
  }
308
- accept(result);
308
+ accept(Array.from(result.entries()).map(([label, value]) => ({ label, value, check: true })));
309
309
  })
310
310
  .catch(reason => reject(reason));
311
311
  });
@@ -320,7 +320,7 @@ class PreloadManager {
320
320
  return PreloadManager.loadFromCache(dataUnit, request);
321
321
  }
322
322
  }
323
- //Como não vamos aproveitar o cache, ele precisa ser limpado.
323
+ //Como não vamos aproveitar o cache, ele precisa ser limpo.
324
324
  PreloadManager.getRepository(dataUnit).clear().catch(() => { });
325
325
  }
326
326
  return loadFromServer(dataUnit, request);
@@ -358,39 +358,16 @@ class PreloadManager {
358
358
  }
359
359
  return PreloadManager._repositories.get(name);
360
360
  }
361
- static getFilterFunction(dataUnit, filters) {
362
- if (filters != undefined && filters.length > 0) {
363
- return record => {
364
- for (const filter of filters) {
365
- if (!PreloadManager.recordMatchesFilter(dataUnit, record, filter)) {
366
- return false;
367
- }
368
- }
369
- return true;
370
- };
371
- }
372
- return undefined;
373
- }
374
- static recordMatchesFilter(dataUnit, record, columnFilter) {
375
- const fieldValue = record[columnFilter.columnName];
376
- for (let param of columnFilter.params) {
377
- const paramValue = dataUnit.valueFromString(columnFilter.columnName, param.value);
378
- if (FieldComparator.compareValues(dataUnit.getField(columnFilter.columnName), fieldValue, paramValue) === 0) {
379
- return true;
380
- }
381
- }
382
- return false;
383
- }
384
361
  static async loadFromCache(dataUnit, request) {
385
362
  return new Promise((accept, reject) => {
386
- const columnFilters = PreloadManager.getColumnFilters(request.filters);
363
+ const columnFilters = ColumnFilterManager.getColumnFilters(request.filters);
387
364
  const { limit, offset, sort } = request;
388
365
  PreloadManager.getRepository(dataUnit)
389
- .load(PreloadManager.getFilterFunction(dataUnit, Array.from(columnFilters.values())), PreloadManager.getSortingFunction(dataUnit, sort), offset, limit)
366
+ .load(ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values())), PreloadManager.getSortingFunction(dataUnit, sort), offset, limit)
390
367
  .then(loadResult => {
391
368
  const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
392
369
  const { count, result: records } = loadResult;
393
- const firstRecord = count == 0 ? 1 : offset + 1;
370
+ const firstRecord = count == 0 ? 0 : offset + 1;
394
371
  const lastRecord = offset + Math.min(records.length, limit);
395
372
  const currentPage = offset / limit;
396
373
  const paginationInfo = {
@@ -403,19 +380,6 @@ class PreloadManager {
403
380
  .catch(reason => reject(reason));
404
381
  });
405
382
  }
406
- static getColumnFilters(filters) {
407
- const columnFilters = new Map();
408
- if (filters == undefined || filters.length == 0) {
409
- return columnFilters;
410
- }
411
- filters.forEach(filter => {
412
- const match = COLUMN_FILTER_PATTERN.exec(filter.name);
413
- if (match) {
414
- columnFilters.set(filter.name, Object.assign({ columnName: match[1] }, filter));
415
- }
416
- });
417
- return columnFilters;
418
- }
419
383
  }
420
384
  PreloadManager._repositories = new Map();
421
385
  PreloadManager._loadingStatus = new Map();
@@ -536,17 +500,36 @@ class DatasetStrategy {
536
500
  return Promise.resolve({ records: [], loadingInfo });
537
501
  }
538
502
  try {
503
+ const localSorting = [];
504
+ const serverSorting = [];
505
+ if (request.sort != undefined) {
506
+ for (const sort of request.sort) {
507
+ const descriptor = dataUnit.getField(sort.field);
508
+ const local = descriptor != undefined
509
+ && descriptor.properties != undefined
510
+ && descriptor.properties.calculated === "true";
511
+ if (local) {
512
+ localSorting.push(sort);
513
+ }
514
+ else {
515
+ serverSorting.push(sort);
516
+ }
517
+ }
518
+ }
539
519
  const fields = this.getFieldsList(dataUnit);
540
520
  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);
521
+ const requestBody = this.buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, serverSorting);
522
+ const params = loadingInfo.quiet ? { urlParams: { quietMode: "true" } } : undefined;
523
+ const { result: responseRecords, pagerID: pagerId } = await DataFetcher.get().callServiceBroker(serviceName, requestBody, params);
543
524
  const records = this.processRecords(dataUnit, fields, responseRecords);
544
525
  const loadingInProgress = pagerId != undefined;
545
526
  const count = loadingInfo.count + records.length;
527
+ const needReload = !loadingInProgress && localSorting.length > 0;
546
528
  return Promise.resolve({
547
529
  records,
548
530
  loadingInfo: Object.assign(Object.assign({}, loadingInfo), { pagerId,
549
- loadingInProgress, total: loadingInProgress ? undefined : count, count })
531
+ loadingInProgress, total: loadingInProgress ? undefined : count, count,
532
+ needReload })
550
533
  });
551
534
  }
552
535
  catch (error) {
@@ -556,9 +539,10 @@ class DatasetStrategy {
556
539
  }
557
540
  getFieldsList(dataUnit) {
558
541
  let fields = ["__record__id__", "__record__label__"];
559
- dataUnit.metadata.fields.forEach(descriptor => {
560
- if (descriptor.standAlone)
542
+ dataUnit.metadata.fields.forEach((descriptor) => {
543
+ if (descriptor.standAlone) {
561
544
  return;
545
+ }
562
546
  fields = fields.concat(this.getFieldNames(descriptor));
563
547
  });
564
548
  return fields;
@@ -570,7 +554,7 @@ class DatasetStrategy {
570
554
  }
571
555
  return [descriptor.name, descriptionField];
572
556
  }
573
- buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo) {
557
+ buildRequestBody(serviceName, fields, dataUnit, request, loadingInfo, sorting) {
574
558
  const dataSetID = dataUnit.dataUnitId;
575
559
  const dataUnitName = dataUnit.name;
576
560
  const entityName = DataUnitFetcher.parseDataUnitName(dataUnitName).entityName;
@@ -591,13 +575,13 @@ class DatasetStrategy {
591
575
  tryJoinedFields: true,
592
576
  parallelLoader: true,
593
577
  crudListener: "br.com.sankhya.modelcore.dataset.DataUnitDatasetAdapter",
594
- txProperties: this.getTxProperties(dataUnitName, request),
578
+ txProperties: this.getTxProperties(dataUnitName, request, sorting),
595
579
  useDefaultRowsLimit: false
596
580
  }
597
581
  };
598
582
  return JSON.stringify(requestBody);
599
583
  }
600
- getTxProperties(dataUnitName, request) {
584
+ getTxProperties(dataUnitName, request, sorting) {
601
585
  const txProperties = {
602
586
  "__DATA_UNIT_ADAPTER__[dataUnitName]": dataUnitName
603
587
  };
@@ -605,7 +589,6 @@ class DatasetStrategy {
605
589
  if (serverSideFilters.length !== 0) {
606
590
  txProperties["__DATA_UNIT_ADAPTER__[criteria]"] = JSON.stringify(serverSideFilters);
607
591
  }
608
- const sorting = request.sort;
609
592
  if (sorting != undefined && sorting.length !== 0) {
610
593
  txProperties["__DATA_UNIT_ADAPTER__[sorting]"] = JSON.stringify(sorting);
611
594
  }
@@ -712,7 +695,7 @@ class DataUnitDataLoader {
712
695
  PreloadManager.cacheRecords(dataUnit, records, recreateCache, responseLoadingInfo.loadingInProgress);
713
696
  if (PreloadManager.isCacheEnabled(dataUnit) && responseLoadingInfo.loadingInProgress) {
714
697
  const newRequest = Object.assign(Object.assign({}, request), { offset: responseLoadingInfo.count });
715
- const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1 });
698
+ const newLoadingInfo = Object.assign(Object.assign({}, responseLoadingInfo), { pageNumber: (responseLoadingInfo.pageNumber || 0) + 1, quiet: true });
716
699
  this.callLoader(dataUnit, newRequest, newLoadingInfo, dataLoader)
717
700
  .then(result => DataUnitDataLoader.afterLoadingPage(dataUnit, result.loadingInfo))
718
701
  .catch(reason => console.error(reason));
@@ -730,6 +713,11 @@ class DataUnitDataLoader {
730
713
  dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { count }));
731
714
  return;
732
715
  }
716
+ if (loadingInfo.needReload) {
717
+ //Ir para a primeira página, faz com que o loadData seja chamado novamente
718
+ dataUnit.gotoPage(0);
719
+ return;
720
+ }
733
721
  dataUnit.updatePagination(Object.assign(Object.assign({}, dataUnitPagination), { total: count, count }));
734
722
  }
735
723
  static registryLoading(dataUnit, loadingInfo) {
@@ -795,6 +783,7 @@ class DataUnitFetcher {
795
783
  defaultValue
796
784
  label
797
785
  visible
786
+ standAlone
798
787
  readOnly
799
788
  required
800
789
  dataType
@@ -170,6 +170,13 @@ class Workspace {
170
170
  var _a;
171
171
  (_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.setScreenToUseOldLayout();
172
172
  }
173
+ static applicationClick() {
174
+ var _a, _b;
175
+ if (!((_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.applicationClick)) {
176
+ return;
177
+ }
178
+ (_b = window["workspace"]) === null || _b === void 0 ? void 0 : _b.applicationClick();
179
+ }
173
180
  }
174
181
  Workspace.resourceID = (_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.resourceID;
175
182
 
@@ -1047,6 +1054,7 @@ const SnkApplication = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
1047
1054
  }, 100);
1048
1055
  ErrorTracking.init();
1049
1056
  ConfigStorage.preload(this.applicationResourceID, this.configName);
1057
+ document.addEventListener("click", () => Workspace.applicationClick());
1050
1058
  }
1051
1059
  connectedCallback() {
1052
1060
  ApplicationContext.setContextValue("__SNK__APPLICATION__", this);
@@ -1,9 +1,9 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Fragment, forceUpdate, Host } from '@stencil/core/internal/client';
2
+ import { Action, ElementIDUtils } from '@sankhyalabs/core';
2
3
  import { S as SnkFormConfigManager } from './SnkFormConfigManager.js';
3
4
  import { buildFormMetadata, FormMetadata } from '@sankhyalabs/ezui/dist/collection/utils/form';
4
5
  import './DataFetcher.js';
5
6
  import './dataunit-fetcher.js';
6
- import { ElementIDUtils } from '@sankhyalabs/core';
7
7
  import { P as PresentationMode } from './index2.js';
8
8
  import { d as defineCustomElement$t } from './snk-actions-button2.js';
9
9
  import '@sankhyalabs/ezui/dist/collection/utils/constants';
@@ -165,6 +165,12 @@ const SnkGuidesViewer = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
165
165
  this._breadcrumbItems = breadcrumbs;
166
166
  });
167
167
  });
168
+ this._guides = this._guides.map(guide => {
169
+ if (guide.id === guideItem.id) {
170
+ return Object.assign(Object.assign({}, guide), guideItem);
171
+ }
172
+ return guide;
173
+ });
168
174
  }
169
175
  }
170
176
  loadTaskbarProcessor() {
@@ -292,6 +298,28 @@ const SnkGuidesViewer = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
292
298
  this._guideNavigator.getCurrentPath().then(breadcrumbs => {
293
299
  this._breadcrumbItems = breadcrumbs;
294
300
  });
301
+ this.resetGuideBadge(currentItem);
302
+ }
303
+ resetGuideBadge(selectedGuide) {
304
+ var _a;
305
+ this._guides = [...(_a = this._guides) === null || _a === void 0 ? void 0 : _a.map(guide => {
306
+ if (this.canClearGuideBadge(guide, selectedGuide.id)) {
307
+ return Object.assign(Object.assign({}, guide), { badge: null });
308
+ }
309
+ return guide;
310
+ })];
311
+ }
312
+ canClearGuideBadge(guide, idToCheck) {
313
+ return (guide.id === idToCheck) || this.isIncludedInChildrenList(guide, idToCheck);
314
+ }
315
+ isIncludedInChildrenList(guide, guideId) {
316
+ return this.hasChildren(guide) && this.getChildrenIdList(guide).includes(guideId);
317
+ }
318
+ hasChildren(guide) {
319
+ return guide.children && Array.isArray(guide.children);
320
+ }
321
+ getChildrenIdList(guide) {
322
+ return (guide.children).map(guideChild => guideChild.id);
295
323
  }
296
324
  getConfigViewMode() {
297
325
  return VIEW_MODE.GRID;
@@ -341,6 +369,50 @@ const SnkGuidesViewer = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
341
369
  var _a;
342
370
  return h("div", { class: `ez-col ez-flex-item--align-center ez-col--sd-6 ez-col--tb-6 ${this.presentationMode != PresentationMode.SECONDARY ? 'ez-align--right' : 'ez-padding-bottom--medium'}` }, h("snk-taskbar", { key: "guideViewerTaskbar", "data-element-id": "guideViewer", configName: this.configName, buttons: this._taskbarProcessor.buttons, disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, actionsList: this.actionsList, messagesBuilder: this.messagesBuilder, presentationMode: this.presentationMode, primaryButton: ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "SAVE" : "INSERT", "data-taskbar-owner": "master", dataUnit: this.dataUnit, resourceID: this.resourceID, customSlotId: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS" }, h("slot", { name: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS" })));
343
371
  }
372
+ async dataUnitActionHandler(action) {
373
+ var _a;
374
+ if (action.type === Action.FIELD_INVALIDATED) {
375
+ const guideName = this.getGuideName((_a = action.payload) === null || _a === void 0 ? void 0 : _a.fieldName);
376
+ await this.addErrorBadgeToGuide(guideName);
377
+ await this.openGuideNavigator(guideName);
378
+ }
379
+ }
380
+ async addErrorBadgeToGuide(guideName) {
381
+ var _a;
382
+ this._guides = [...(_a = this._guides) === null || _a === void 0 ? void 0 : _a.map(guide => {
383
+ return Object.assign(Object.assign({}, guide), { badge: this.getBadge(guide, guideName) });
384
+ })];
385
+ }
386
+ async openGuideNavigator(guideName) {
387
+ if (this.selectedGuide.id !== guideName) {
388
+ await this._guideNavigator.openGuideNavidator();
389
+ }
390
+ }
391
+ getBadge(guide, tabName) {
392
+ var _a;
393
+ if (this.selectedGuide.id === tabName) {
394
+ return null;
395
+ }
396
+ if (tabName === guide.id) {
397
+ return "error";
398
+ }
399
+ return (_a = guide.badge) !== null && _a !== void 0 ? _a : null;
400
+ }
401
+ getGuideName(fieldName) {
402
+ var _a;
403
+ for (const sheet of this._masterFormMetadata.getAllSheets()) {
404
+ const formFields = (_a = sheet[1]) === null || _a === void 0 ? void 0 : _a.fields;
405
+ for (const field of formFields) {
406
+ if (field.name === fieldName) {
407
+ return sheet[0];
408
+ }
409
+ }
410
+ }
411
+ return "";
412
+ }
413
+ componentDidLoad() {
414
+ this.dataUnit.subscribe(this.dataUnitActionHandler.bind(this));
415
+ }
344
416
  render() {
345
417
  var _a, _b;
346
418
  if (this._formEditorConfigManager != undefined) {
@@ -615,6 +687,10 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
615
687
  this.canEdit = true;
616
688
  this.taskbarCustomContainerId = undefined;
617
689
  }
690
+ observeDataUnit(newDataUnit, oldDataUnit) {
691
+ newDataUnit === null || newDataUnit === void 0 ? void 0 : newDataUnit.subscribe(this.dataUnitActionHandler.bind(this));
692
+ oldDataUnit === null || oldDataUnit === void 0 ? void 0 : oldDataUnit.unsubscribe(this.dataUnitActionHandler);
693
+ }
618
694
  observerDataState(newValue, oldValue) {
619
695
  const openInsertion = !(oldValue === null || oldValue === void 0 ? void 0 : oldValue.insertionMode) && (newValue === null || newValue === void 0 ? void 0 : newValue.insertionMode);
620
696
  const closeInsertion = (oldValue === null || oldValue === void 0 ? void 0 : oldValue.insertionMode) && !(newValue === null || newValue === void 0 ? void 0 : newValue.insertionMode);
@@ -780,12 +856,22 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
780
856
  this.messagesBuilder = new SnkMessageBuilder(this.entityName);
781
857
  }
782
858
  }
859
+ async dataUnitActionHandler(action) {
860
+ if (action.type === Action.FIELD_INVALIDATED) {
861
+ this.addErrorBadgeToBranchGuide();
862
+ }
863
+ }
864
+ addErrorBadgeToBranchGuide() {
865
+ this.branchGuide = Object.assign(Object.assign({}, this.branchGuide), { badge: 'error' });
866
+ this.snkDetailGuidesChange.emit(new GuideBuilder(this.branchGuide, this._formMetadata, this.dataUnit));
867
+ }
783
868
  render() {
784
869
  this.updateLabel();
785
870
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
786
871
  return (h(Host, null, h("snk-data-unit", { ref: (el) => this._snkDataUnit = el, dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: this.handleDataStateChange.bind(this), ignoreSaveMessage: this._currentView === VIEW_MODE.GRID, messagesBuilder: this.messagesBuilder, configName: this._configName }, h("ez-view-stack", { ref: (ref) => this.updateViewStack(ref) }, h("stack-item", null, h("div", { class: "ez-box ez-box--shadow grid-container" }, h("div", { class: "ez-flex ez-title--primary ez-size-width--full ez-padding--large detail-header" }, h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), h("snk-grid", { class: "ez-size-width--full ez-size-height--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: (evt) => this.executeActionHandler(evt), presentationMode: PresentationMode.SECONDARY, canEdit: this.canEdit, isDetail: true, taskbarCustomContainerId: this.taskbarCustomContainerId, gridHeaderCustomSlotId: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS", topTaskbarCustomSlotId: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS" }))), h("stack-item", null, h("snk-form-view", { ref: (ref) => this._snkFormView = ref, canExpand: false, canFix: false, name: this.selectedForm, formMetadata: this._formMetadata, dataUnit: this.dataUnit, fields: this.getFormFields(), label: this.label, levelPath: this._levelPath, onFormItemsReady: ({ detail: formItems }) => this.formItemsReady.emit(formItems) }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, messagesBuilder: this.messagesBuilder, disabledButtons: this._disabledButtons, buttons: "INSERT,PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: PresentationMode.SECONDARY, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit, resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }, h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" })))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this.entityName, onBack: this.handleAttachBack.bind(this) }))))));
787
872
  }
788
873
  static get watchers() { return {
874
+ "dataUnit": ["observeDataUnit"],
789
875
  "dataState": ["observerDataState"]
790
876
  }; }
791
877
  static get style() { return snkDetailViewCss; }
@@ -800,7 +886,7 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
800
886
  "selectedForm": [1025, "selected-form"],
801
887
  "dataState": [1040],
802
888
  "messagesBuilder": [1040],
803
- "branchGuide": [16],
889
+ "branchGuide": [1040],
804
890
  "canEdit": [4, "can-edit"],
805
891
  "taskbarCustomContainerId": [1, "taskbar-custom-container-id"],
806
892
  "_disabledButtons": [32],
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
2
- import { DataType, ObjectUtils, ElementIDUtils, ErrorException, ApplicationContext } from '@sankhyalabs/core';
2
+ import { DataType, StringUtils, ObjectUtils, ElementIDUtils, ErrorException, ApplicationContext } from '@sankhyalabs/core';
3
3
  import { EzScrollDirection } from '@sankhyalabs/ezui/dist/collection/components/ez-scroller/EzScrollDirection';
4
4
  import { C as ConfigStorage } from './ConfigStorage.js';
5
5
  import { toString } from '@sankhyalabs/core/dist/dataunit/metadata/DataType';
@@ -107,8 +107,11 @@ function buildSearch(item) {
107
107
  return { name: id, expression, params: [{ name: id, dataType: DataType.TEXT, value: toString(DataType.TEXT, value.value) }] };
108
108
  }
109
109
  function buildText(item) {
110
- const { id, value, props } = item;
110
+ let { id, value, props } = item;
111
111
  const expression = props.expression;
112
+ if (!StringUtils.isEmpty(props.likeAs)) {
113
+ value = buildLikeValue(value, props.likeAs);
114
+ }
112
115
  return { name: id, expression, params: [{ name: id, dataType: DataType.TEXT, value: toString(DataType.TEXT, value) }] };
113
116
  }
114
117
  function buildNumber(item) {
@@ -116,6 +119,18 @@ function buildNumber(item) {
116
119
  const expression = props.expression;
117
120
  return { name: id, expression, params: [{ name: id, dataType: DataType.NUMBER, value: toString(DataType.NUMBER, value) }] };
118
121
  }
122
+ function buildLikeValue(valueAsString, likeAs) {
123
+ if (likeAs === "CONTANIS") {
124
+ return `%${valueAsString}%`;
125
+ }
126
+ else if (likeAs === "STARTS_WITH") {
127
+ return `${valueAsString}%`;
128
+ }
129
+ else if (likeAs === "ENDS_WITH") {
130
+ return `%${valueAsString}`;
131
+ }
132
+ return valueAsString;
133
+ }
119
134
  function buildPersonalized(item) {
120
135
  const { id, groupedItems = [] } = item;
121
136
  const activeFilters = groupedItems.filter(groupItem => !!groupItem.visible);
@@ -116,6 +116,7 @@ const SnkGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
116
116
  if (this._gridConfig && this._dataUnit) {
117
117
  this._dataUnit.defaultSorting = this._gridConfig
118
118
  .columns
119
+ .filter(col => col.ascending != undefined)
119
120
  .sort((colA, colB) => colA.orderIndex - colB.orderIndex)
120
121
  .map(({ name: field, ascending }) => {
121
122
  const { dataType } = this._dataUnit.getField(field);
@@ -1,7 +1,7 @@
1
- import { R as ResourceFetcher, F as FormConfigFetcher } from './form-config-fetcher-5b886892.js';
1
+ import { R as ResourceFetcher, F as FormConfigFetcher } from './form-config-fetcher-e1603e66.js';
2
2
  import { F as FilterItemType } from './filter-item-type.enum-5028ed3f.js';
3
3
  import { ObjectUtils } from '@sankhyalabs/core';
4
- import { d as dist, D as DataFetcher } from './DataFetcher-07935045.js';
4
+ import { d as dist, D as DataFetcher } from './DataFetcher-79f78222.js';
5
5
 
6
6
  class GridConfigFetcher extends ResourceFetcher {
7
7
  constructor() {
@@ -6729,9 +6729,9 @@ class DataFetcher {
6729
6729
  const urlParams = UrlUtils.getQueryParams(location.search);
6730
6730
  return {
6731
6731
  baseUrl: `${this.resolveURL()}/${module}/service.sbr`,
6732
- appName: "SankhyaBlocks",
6732
+ appName: window['APPLICATION_NAME'] || "SankhyaBlocks",
6733
6733
  mgeSession: `${window['mgeSession'] || urlParams.get("mgeSession")}`,
6734
- globalID: "85C0093DFA240EAB699B4E47A10215BD",
6734
+ globalID: window['GLOBALID'] || StringUtils.generateUUID(),
6735
6735
  resourceID: (window["resourceID"] || ((_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.resourceID))
6736
6736
  };
6737
6737
  }