@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
@@ -5,13 +5,13 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-f9e81701.js');
6
6
  const core = require('@sankhyalabs/core');
7
7
  const PersonalizedFilterUtils = require('./PersonalizedFilterUtils-1aeb625d.js');
8
- const ConfigStorage = require('./ConfigStorage-bdb539ce.js');
8
+ const ConfigStorage = require('./ConfigStorage-908ce5bc.js');
9
9
  const utils = require('@sankhyalabs/ezui/dist/collection/utils');
10
10
  const index$1 = require('./index-c5771aba.js');
11
11
  const index$2 = require('./index-102ba62d.js');
12
12
  require('./filter-item-type.enum-aa823a00.js');
13
- require('./form-config-fetcher-5e5ec5be.js');
14
- require('./DataFetcher-016f1661.js');
13
+ require('./form-config-fetcher-17775a75.js');
14
+ require('./DataFetcher-713f0749.js');
15
15
  require('./_commonjsHelpers-537d719a.js');
16
16
  require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
17
17
  require('./PrintUtils-bcaeb82f.js');
@@ -6,21 +6,24 @@ const index = require('./index-f9e81701.js');
6
6
  const core = require('@sankhyalabs/core');
7
7
  const constants = require('./constants-d187e03e.js');
8
8
  const taskbarElements = require('./taskbar-elements-39949c7a.js');
9
- require('./DataFetcher-016f1661.js');
10
- require('./pesquisa-fetcher-63a8c652.js');
9
+ require('./DataFetcher-713f0749.js');
10
+ require('./pesquisa-fetcher-34922b83.js');
11
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-66c0b7af.js');
16
+ require('./PreloadManager-e26d237f.js');
16
17
  require('./filter-item-type.enum-aa823a00.js');
17
- require('./form-config-fetcher-5e5ec5be.js');
18
+ require('./form-config-fetcher-17775a75.js');
18
19
  const taskbarProcessor = require('./taskbar-processor-bce3f499.js');
19
- const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-45893a0c.js');
20
+ const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-d74d2336.js');
20
21
  require('./index-102ba62d.js');
21
22
  require('./_commonjsHelpers-537d719a.js');
22
23
  require('./PrintUtils-bcaeb82f.js');
23
24
  require('./ResourceIDUtils-5ff86aa7.js');
25
+ require('@sankhyalabs/ezui/dist/collection/components/ez-grid/utils');
26
+ require('@sankhyalabs/ezui/dist/collection/components/ez-grid/utils/InMemoryFilterColumnDataSource');
24
27
 
25
28
  const snkSimpleCrudCss = ".sc-snk-simple-crud-h{display:flex;height:100%;width:100%}.simple-crud__container.sc-snk-simple-crud{display:grid;grid-template-rows:max-content;row-gap:12px;height:100%;width:100%}.simple-crud__container-section.sc-snk-simple-crud{flex-wrap:unset;flex-direction:column}ez-grid.sc-snk-simple-crud{--ez-grid__container--shadow:none;min-height:300px}ez-form.sc-snk-simple-crud{min-height:300px}";
26
29
 
@@ -830,6 +830,7 @@ export class SnkApplication {
830
830
  }, 100);
831
831
  ErrorTracking.init();
832
832
  ConfigStorage.preload(this.applicationResourceID, this.configName);
833
+ document.addEventListener("click", () => Workspace.applicationClick());
833
834
  }
834
835
  connectedCallback() {
835
836
  ApplicationContext.setContextValue("__SNK__APPLICATION__", this);
@@ -1,3 +1,4 @@
1
+ import { Action } from '@sankhyalabs/core';
1
2
  import { Host, forceUpdate, h } from '@stencil/core';
2
3
  import { SnkFormConfigManager } from '../../../snk-form/SnkFormConfigManager';
3
4
  import { buildFormMetadata } from "@sankhyalabs/ezui/dist/collection/utils/form";
@@ -26,6 +27,10 @@ export class SnkDetailView {
26
27
  this.canEdit = true;
27
28
  this.taskbarCustomContainerId = undefined;
28
29
  }
30
+ observeDataUnit(newDataUnit, oldDataUnit) {
31
+ newDataUnit === null || newDataUnit === void 0 ? void 0 : newDataUnit.subscribe(this.dataUnitActionHandler.bind(this));
32
+ oldDataUnit === null || oldDataUnit === void 0 ? void 0 : oldDataUnit.unsubscribe(this.dataUnitActionHandler);
33
+ }
29
34
  observerDataState(newValue, oldValue) {
30
35
  const openInsertion = !(oldValue === null || oldValue === void 0 ? void 0 : oldValue.insertionMode) && (newValue === null || newValue === void 0 ? void 0 : newValue.insertionMode);
31
36
  const closeInsertion = (oldValue === null || oldValue === void 0 ? void 0 : oldValue.insertionMode) && !(newValue === null || newValue === void 0 ? void 0 : newValue.insertionMode);
@@ -191,6 +196,15 @@ export class SnkDetailView {
191
196
  this.messagesBuilder = new SnkMessageBuilder(this.entityName);
192
197
  }
193
198
  }
199
+ async dataUnitActionHandler(action) {
200
+ if (action.type === Action.FIELD_INVALIDATED) {
201
+ this.addErrorBadgeToBranchGuide();
202
+ }
203
+ }
204
+ addErrorBadgeToBranchGuide() {
205
+ this.branchGuide = Object.assign(Object.assign({}, this.branchGuide), { badge: 'error' });
206
+ this.snkDetailGuidesChange.emit(new GuideBuilder(this.branchGuide, this._formMetadata, this.dataUnit));
207
+ }
194
208
  render() {
195
209
  this.updateLabel();
196
210
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
@@ -400,7 +414,7 @@ export class SnkDetailView {
400
414
  },
401
415
  "branchGuide": {
402
416
  "type": "unknown",
403
- "mutable": false,
417
+ "mutable": true,
404
418
  "complexType": {
405
419
  "original": "IGuideItem",
406
420
  "resolved": "IGuideItem",
@@ -589,6 +603,9 @@ export class SnkDetailView {
589
603
  }
590
604
  static get watchers() {
591
605
  return [{
606
+ "propName": "dataUnit",
607
+ "methodName": "observeDataUnit"
608
+ }, {
592
609
  "propName": "dataState",
593
610
  "methodName": "observerDataState"
594
611
  }];
@@ -1,11 +1,11 @@
1
- import { ElementIDUtils } from "@sankhyalabs/core";
2
- import { Fragment, h } from "@stencil/core";
3
- import { SnkFormConfigManager } from "../../snk-form/SnkFormConfigManager";
4
- import { FormMetadata, buildFormMetadata } from "@sankhyalabs/ezui/dist/collection/utils/form";
5
- import TaskbarProcessor from "../../snk-taskbar/processor/taskbar-processor";
6
- import { TaskbarElement } from "../../snk-taskbar/elements/taskbar-elements";
7
- import { VIEW_MODE } from "../../../lib/utils/constants";
8
- import { PresentationMode } from "../../../lib";
1
+ import { Action as DUAction, ElementIDUtils } from '@sankhyalabs/core';
2
+ import { Fragment, h } from '@stencil/core';
3
+ import { SnkFormConfigManager } from '../../snk-form/SnkFormConfigManager';
4
+ import { buildFormMetadata, FormMetadata } from '@sankhyalabs/ezui/dist/collection/utils/form';
5
+ import TaskbarProcessor from '../../snk-taskbar/processor/taskbar-processor';
6
+ import { TaskbarElement } from '../../snk-taskbar/elements/taskbar-elements';
7
+ import { VIEW_MODE } from '../../../lib/utils/constants';
8
+ import { PresentationMode } from '../../../lib';
9
9
  import { SelectionMode } from '@sankhyalabs/core/dist/dataunit/DataUnit';
10
10
  const FORM_NAME_PREFIX = "__FORM:";
11
11
  export class SnkGuidesViewer {
@@ -123,6 +123,12 @@ export class SnkGuidesViewer {
123
123
  this._breadcrumbItems = breadcrumbs;
124
124
  });
125
125
  });
126
+ this._guides = this._guides.map(guide => {
127
+ if (guide.id === guideItem.id) {
128
+ return Object.assign(Object.assign({}, guide), guideItem);
129
+ }
130
+ return guide;
131
+ });
126
132
  }
127
133
  }
128
134
  loadTaskbarProcessor() {
@@ -250,6 +256,28 @@ export class SnkGuidesViewer {
250
256
  this._guideNavigator.getCurrentPath().then(breadcrumbs => {
251
257
  this._breadcrumbItems = breadcrumbs;
252
258
  });
259
+ this.resetGuideBadge(currentItem);
260
+ }
261
+ resetGuideBadge(selectedGuide) {
262
+ var _a;
263
+ this._guides = [...(_a = this._guides) === null || _a === void 0 ? void 0 : _a.map(guide => {
264
+ if (this.canClearGuideBadge(guide, selectedGuide.id)) {
265
+ return Object.assign(Object.assign({}, guide), { badge: null });
266
+ }
267
+ return guide;
268
+ })];
269
+ }
270
+ canClearGuideBadge(guide, idToCheck) {
271
+ return (guide.id === idToCheck) || this.isIncludedInChildrenList(guide, idToCheck);
272
+ }
273
+ isIncludedInChildrenList(guide, guideId) {
274
+ return this.hasChildren(guide) && this.getChildrenIdList(guide).includes(guideId);
275
+ }
276
+ hasChildren(guide) {
277
+ return guide.children && Array.isArray(guide.children);
278
+ }
279
+ getChildrenIdList(guide) {
280
+ return (guide.children).map(guideChild => guideChild.id);
253
281
  }
254
282
  getConfigViewMode() {
255
283
  return VIEW_MODE.GRID;
@@ -299,6 +327,50 @@ export class SnkGuidesViewer {
299
327
  var _a;
300
328
  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" })));
301
329
  }
330
+ async dataUnitActionHandler(action) {
331
+ var _a;
332
+ if (action.type === DUAction.FIELD_INVALIDATED) {
333
+ const guideName = this.getGuideName((_a = action.payload) === null || _a === void 0 ? void 0 : _a.fieldName);
334
+ await this.addErrorBadgeToGuide(guideName);
335
+ await this.openGuideNavigator(guideName);
336
+ }
337
+ }
338
+ async addErrorBadgeToGuide(guideName) {
339
+ var _a;
340
+ this._guides = [...(_a = this._guides) === null || _a === void 0 ? void 0 : _a.map(guide => {
341
+ return Object.assign(Object.assign({}, guide), { badge: this.getBadge(guide, guideName) });
342
+ })];
343
+ }
344
+ async openGuideNavigator(guideName) {
345
+ if (this.selectedGuide.id !== guideName) {
346
+ await this._guideNavigator.openGuideNavidator();
347
+ }
348
+ }
349
+ getBadge(guide, tabName) {
350
+ var _a;
351
+ if (this.selectedGuide.id === tabName) {
352
+ return null;
353
+ }
354
+ if (tabName === guide.id) {
355
+ return "error";
356
+ }
357
+ return (_a = guide.badge) !== null && _a !== void 0 ? _a : null;
358
+ }
359
+ getGuideName(fieldName) {
360
+ var _a;
361
+ for (const sheet of this._masterFormMetadata.getAllSheets()) {
362
+ const formFields = (_a = sheet[1]) === null || _a === void 0 ? void 0 : _a.fields;
363
+ for (const field of formFields) {
364
+ if (field.name === fieldName) {
365
+ return sheet[0];
366
+ }
367
+ }
368
+ }
369
+ return "";
370
+ }
371
+ componentDidLoad() {
372
+ this.dataUnit.subscribe(this.dataUnitActionHandler.bind(this));
373
+ }
302
374
  render() {
303
375
  var _a, _b;
304
376
  if (this._formEditorConfigManager != undefined) {
@@ -1,4 +1,4 @@
1
- import { DataType } from "@sankhyalabs/core";
1
+ import { DataType, StringUtils } from "@sankhyalabs/core";
2
2
  import { toString } from "@sankhyalabs/core/dist/dataunit/metadata/DataType";
3
3
  import FilterItemType from "../filter-item-type.enum";
4
4
  import { FilterOperand } from "../../../snk-personalized-filter/interfaces/index";
@@ -93,8 +93,11 @@ function buildSearch(item) {
93
93
  return { name: id, expression, params: [{ name: id, dataType: DataType.TEXT, value: toString(DataType.TEXT, value.value) }] };
94
94
  }
95
95
  function buildText(item) {
96
- const { id, value, props } = item;
96
+ let { id, value, props } = item;
97
97
  const expression = props.expression;
98
+ if (!StringUtils.isEmpty(props.likeAs)) {
99
+ value = buildLikeValue(value, props.likeAs);
100
+ }
98
101
  return { name: id, expression, params: [{ name: id, dataType: DataType.TEXT, value: toString(DataType.TEXT, value) }] };
99
102
  }
100
103
  function buildNumber(item) {
@@ -102,6 +105,18 @@ function buildNumber(item) {
102
105
  const expression = props.expression;
103
106
  return { name: id, expression, params: [{ name: id, dataType: DataType.NUMBER, value: toString(DataType.NUMBER, value) }] };
104
107
  }
108
+ function buildLikeValue(valueAsString, likeAs) {
109
+ if (likeAs === "CONTANIS") {
110
+ return `%${valueAsString}%`;
111
+ }
112
+ else if (likeAs === "STARTS_WITH") {
113
+ return `${valueAsString}%`;
114
+ }
115
+ else if (likeAs === "ENDS_WITH") {
116
+ return `%${valueAsString}`;
117
+ }
118
+ return valueAsString;
119
+ }
105
120
  function buildPersonalized(item) {
106
121
  const { id, groupedItems = [] } = item;
107
122
  const activeFilters = groupedItems.filter(groupItem => !!groupItem.visible);
@@ -1,4 +1,5 @@
1
1
  import { DateUtils, UserInterface } from '@sankhyalabs/core';
2
+ import { default as InMemoryFilterColumnDataSource } from '@sankhyalabs/ezui/dist/collection/components/ez-grid/utils/InMemoryFilterColumnDataSource';
2
3
  import PreloadManager from '../../../lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager';
3
4
  export default class SnkMultiSelectionListDataSource {
4
5
  setDataUnit(dataUnit) {
@@ -18,11 +19,7 @@ export default class SnkMultiSelectionListDataSource {
18
19
  if (fieldName == undefined) {
19
20
  return Promise.resolve(undefined);
20
21
  }
21
- const result = await PreloadManager.getDistinct(this._dataUnit, fieldName);
22
- if (result == undefined) {
23
- return Promise.resolve(undefined);
24
- }
25
- return Promise.resolve(Array.from(result.entries()).map(([label, value]) => ({ label: String(label), value, check: true })));
22
+ return Promise.resolve(await PreloadManager.getDistinct(this._dataUnit, fieldName));
26
23
  }
27
24
  fetchData(filterTerm, fieldName) {
28
25
  return new Promise(resolve => {
@@ -37,4 +34,7 @@ export default class SnkMultiSelectionListDataSource {
37
34
  });
38
35
  });
39
36
  }
37
+ sortItems(fieldName, items) {
38
+ return InMemoryFilterColumnDataSource.defaultSorterMultSelectionOption(this._dataUnit, fieldName, items);
39
+ }
40
40
  }
@@ -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);
@@ -233,9 +233,9 @@ export class DataFetcher {
233
233
  const urlParams = UrlUtils.getQueryParams(location.search);
234
234
  return {
235
235
  baseUrl: `${this.resolveURL()}/${module}/service.sbr`,
236
- appName: "SankhyaBlocks",
236
+ appName: window['APPLICATION_NAME'] || "SankhyaBlocks",
237
237
  mgeSession: `${window['mgeSession'] || urlParams.get("mgeSession")}`,
238
- globalID: "85C0093DFA240EAB699B4E47A10215BD",
238
+ globalID: window['GLOBALID'] || StringUtils.generateUUID(),
239
239
  resourceID: (window["resourceID"] || ((_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.resourceID))
240
240
  };
241
241
  }
@@ -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
  }
@@ -1,21 +1,12 @@
1
1
  import { DataUnit, FieldComparator, SortMode } from "@sankhyalabs/core";
2
- import DataUnitFetcher from "../dataunit-fetcher";
3
2
  import { ArrayRepository } from "./ArrayRepository";
4
- const COLUMN_FILTER_PATTERN = /FILTRO_COLUNA_(.+)/;
3
+ import { ColumnFilterManager } from "@sankhyalabs/ezui/dist/collection/components/ez-grid/utils";
5
4
  export default class PreloadManager {
6
5
  static setLoadingStatus(dataUnit, loadingInProgress) {
7
6
  this._loadingStatus.set(dataUnit.name, loadingInProgress);
8
7
  }
9
- static isCacheEnabled(dataUnit) {
10
- const dataUnitResourceId = PreloadManager.getResourceId(dataUnit.name);
11
- if (dataUnitResourceId !== this.applicationResourceID) {
12
- return false;
13
- }
14
- return this.getRepository(dataUnit).isOperating();
15
- }
16
- static getResourceId(dataUnitName) {
17
- const dataUnitNameInfo = DataUnitFetcher.parseDataUnitName(dataUnitName);
18
- return dataUnitNameInfo == undefined ? undefined : dataUnitNameInfo.resourceID;
8
+ static isCacheEnabled(_dataUnit) {
9
+ return true;
19
10
  }
20
11
  static cacheRecords(dataUnit, records, resetDatabase, loadingInProgress) {
21
12
  PreloadManager.setLoadingStatus(dataUnit, loadingInProgress);
@@ -43,27 +34,32 @@ export default class PreloadManager {
43
34
  }
44
35
  static async getDistinct(dataUnit, fieldName) {
45
36
  if (!PreloadManager.isCacheEnabled(dataUnit)) {
46
- return Promise.resolve(undefined);
37
+ return Promise.resolve(ColumnFilterManager.compileDistinct(fieldName, dataUnit));
38
+ }
39
+ let filterFunction;
40
+ const request = dataUnit.getLastLoadRequest();
41
+ if (request != undefined) {
42
+ const columnFilters = ColumnFilterManager.getColumnFilters(request.filters);
43
+ filterFunction = ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
47
44
  }
48
45
  return new Promise((accept, reject) => {
49
46
  PreloadManager.getRepository(dataUnit).distict(record => {
47
+ if (filterFunction != undefined && !filterFunction(record)) {
48
+ return undefined;
49
+ }
50
50
  const fieldValue = record[fieldName];
51
51
  if (fieldValue == undefined) {
52
- return undefined;
52
+ return { key: null, value: null };
53
53
  }
54
54
  const value = fieldValue.value != undefined ? fieldValue.value : fieldValue;
55
55
  return { key: dataUnit.getFormattedValue(fieldName, fieldValue), value };
56
56
  })
57
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);
58
+ if (result == undefined) {
59
+ accept(undefined);
64
60
  return;
65
61
  }
66
- accept(result);
62
+ accept(Array.from(result.entries()).map(([label, value]) => ({ label, value, check: true })));
67
63
  })
68
64
  .catch(reason => reject(reason));
69
65
  });
@@ -78,7 +74,7 @@ export default class PreloadManager {
78
74
  return PreloadManager.loadFromCache(dataUnit, request);
79
75
  }
80
76
  }
81
- //Como não vamos aproveitar o cache, ele precisa ser limpado.
77
+ //Como não vamos aproveitar o cache, ele precisa ser limpo.
82
78
  PreloadManager.getRepository(dataUnit).clear().catch(() => { });
83
79
  }
84
80
  return loadFromServer(dataUnit, request);
@@ -116,39 +112,16 @@ export default class PreloadManager {
116
112
  }
117
113
  return PreloadManager._repositories.get(name);
118
114
  }
119
- static getFilterFunction(dataUnit, filters) {
120
- if (filters != undefined && filters.length > 0) {
121
- return record => {
122
- for (const filter of filters) {
123
- if (!PreloadManager.recordMatchesFilter(dataUnit, record, filter)) {
124
- return false;
125
- }
126
- }
127
- return true;
128
- };
129
- }
130
- return undefined;
131
- }
132
- static recordMatchesFilter(dataUnit, record, columnFilter) {
133
- const fieldValue = record[columnFilter.columnName];
134
- for (let param of columnFilter.params) {
135
- const paramValue = dataUnit.valueFromString(columnFilter.columnName, param.value);
136
- if (FieldComparator.compareValues(dataUnit.getField(columnFilter.columnName), fieldValue, paramValue) === 0) {
137
- return true;
138
- }
139
- }
140
- return false;
141
- }
142
115
  static async loadFromCache(dataUnit, request) {
143
116
  return new Promise((accept, reject) => {
144
- const columnFilters = PreloadManager.getColumnFilters(request.filters);
117
+ const columnFilters = ColumnFilterManager.getColumnFilters(request.filters);
145
118
  const { limit, offset, sort } = request;
146
119
  PreloadManager.getRepository(dataUnit)
147
- .load(PreloadManager.getFilterFunction(dataUnit, Array.from(columnFilters.values())), PreloadManager.getSortingFunction(dataUnit, sort), offset, limit)
120
+ .load(ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values())), PreloadManager.getSortingFunction(dataUnit, sort), offset, limit)
148
121
  .then(loadResult => {
149
122
  const stillLoading = PreloadManager._loadingStatus.get(dataUnit.name);
150
123
  const { count, result: records } = loadResult;
151
- const firstRecord = count == 0 ? 1 : offset + 1;
124
+ const firstRecord = count == 0 ? 0 : offset + 1;
152
125
  const lastRecord = offset + Math.min(records.length, limit);
153
126
  const currentPage = offset / limit;
154
127
  const paginationInfo = {
@@ -161,19 +134,6 @@ export default class PreloadManager {
161
134
  .catch(reason => reject(reason));
162
135
  });
163
136
  }
164
- static getColumnFilters(filters) {
165
- const columnFilters = new Map();
166
- if (filters == undefined || filters.length == 0) {
167
- return columnFilters;
168
- }
169
- filters.forEach(filter => {
170
- const match = COLUMN_FILTER_PATTERN.exec(filter.name);
171
- if (match) {
172
- columnFilters.set(filter.name, Object.assign({ columnName: match[1] }, filter));
173
- }
174
- });
175
- return columnFilters;
176
- }
177
137
  }
178
138
  PreloadManager._repositories = new Map();
179
139
  PreloadManager._loadingStatus = new Map();
@@ -33,6 +33,7 @@ export default class DataUnitFetcher {
33
33
  defaultValue
34
34
  label
35
35
  visible
36
+ standAlone
36
37
  readOnly
37
38
  required
38
39
  dataType
@@ -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
  }
@@ -23,5 +23,12 @@ export default class Workspace {
23
23
  var _a;
24
24
  (_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.setScreenToUseOldLayout();
25
25
  }
26
+ static applicationClick() {
27
+ var _a, _b;
28
+ if (!((_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.applicationClick)) {
29
+ return;
30
+ }
31
+ (_b = window["workspace"]) === null || _b === void 0 ? void 0 : _b.applicationClick();
32
+ }
26
33
  }
27
34
  Workspace.resourceID = (_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.resourceID;
@@ -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
  }
@@ -1,4 +1,5 @@
1
1
  import { UserInterface, DateUtils } from '@sankhyalabs/core';
2
+ import InMemoryFilterColumnDataSource from '@sankhyalabs/ezui/dist/collection/components/ez-grid/utils/InMemoryFilterColumnDataSource';
2
3
  import { a as PreloadManager } from './dataunit-fetcher.js';
3
4
 
4
5
  class TaskbarProcessor {
@@ -65,11 +66,7 @@ class SnkMultiSelectionListDataSource {
65
66
  if (fieldName == undefined) {
66
67
  return Promise.resolve(undefined);
67
68
  }
68
- const result = await PreloadManager.getDistinct(this._dataUnit, fieldName);
69
- if (result == undefined) {
70
- return Promise.resolve(undefined);
71
- }
72
- return Promise.resolve(Array.from(result.entries()).map(([label, value]) => ({ label: String(label), value, check: true })));
69
+ return Promise.resolve(await PreloadManager.getDistinct(this._dataUnit, fieldName));
73
70
  }
74
71
  fetchData(filterTerm, fieldName) {
75
72
  return new Promise(resolve => {
@@ -84,6 +81,9 @@ class SnkMultiSelectionListDataSource {
84
81
  });
85
82
  });
86
83
  }
84
+ sortItems(fieldName, items) {
85
+ return InMemoryFilterColumnDataSource.defaultSorterMultSelectionOption(this._dataUnit, fieldName, items);
86
+ }
87
87
  }
88
88
 
89
89
  export { SnkMultiSelectionListDataSource as S, TaskbarProcessor as T };