@sankhyalabs/sankhyablocks 8.15.0-dev.3 → 8.15.0-dev.4

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 (106) hide show
  1. package/dist/cjs/{ConfigStorage-0d507a8f.js → ConfigStorage-8009ecb2.js} +1 -1
  2. package/dist/cjs/{SnkFormConfigManager-467907f6.js → SnkFormConfigManager-7d850fbc.js} +1 -1
  3. package/dist/cjs/{index-0e663819.js → index-0922807b.js} +1 -0
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  6. package/dist/cjs/snk-actions-button_2.cjs.entry.js +1 -1
  7. package/dist/cjs/snk-application.cjs.entry.js +62 -2
  8. package/dist/cjs/snk-attach.cjs.entry.js +2 -2
  9. package/dist/cjs/snk-crud.cjs.entry.js +2 -2
  10. package/dist/cjs/snk-data-exporter.cjs.entry.js +1 -1
  11. package/dist/cjs/snk-detail-view.cjs.entry.js +5 -5
  12. package/dist/cjs/snk-filter-bar.cjs.entry.js +28 -3
  13. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +1 -2
  14. package/dist/cjs/snk-filter-modal.cjs.entry.js +14 -0
  15. package/dist/cjs/snk-form.cjs.entry.js +2 -2
  16. package/dist/cjs/snk-grid-config.cjs.entry.js +1 -1
  17. package/dist/cjs/snk-grid.cjs.entry.js +41 -18
  18. package/dist/cjs/{snk-guides-viewer-7e87ffce.js → snk-guides-viewer-7f9b6d94.js} +3 -3
  19. package/dist/cjs/snk-guides-viewer.cjs.entry.js +5 -5
  20. package/dist/cjs/snk-personalized-filter.cjs.entry.js +2 -2
  21. package/dist/cjs/snk-simple-crud.cjs.entry.js +2 -2
  22. package/dist/cjs/snk-taskbar.cjs.entry.js +2 -2
  23. package/dist/cjs/{taskbar-elements-b8c428a9.js → taskbar-elements-01b85b99.js} +1 -1
  24. package/dist/collection/components/snk-application/snk-application.js +68 -5
  25. package/dist/collection/components/snk-crud/snk-crud.js +1 -1
  26. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +1 -1
  27. package/dist/collection/components/snk-filter-bar/filter-modal/snk-filter-modal.js +65 -1
  28. package/dist/collection/components/snk-filter-bar/filter-modal/subcomponents/snk-filter-modal-item.js +0 -1
  29. package/dist/collection/components/snk-filter-bar/snk-filter-bar.js +57 -1
  30. package/dist/collection/components/snk-filter-bar/utils/SnkFilterModalFactory.js +3 -1
  31. package/dist/collection/components/snk-grid/snk-grid.js +39 -16
  32. package/dist/collection/components/snk-personalized-filter/snk-personalized-filter.js +1 -1
  33. package/dist/collection/components/snk-taskbar/snk-taskbar.js +1 -1
  34. package/dist/collection/lib/@types/index.js +1 -0
  35. package/dist/collection/lib/http/data-fetcher/fetchers/filter-bar-config-fetcher.js +1 -1
  36. package/dist/components/ConfigStorage.js +1 -1
  37. package/dist/components/index2.js +1 -0
  38. package/dist/components/snk-application2.js +62 -2
  39. package/dist/components/snk-filter-bar2.js +29 -3
  40. package/dist/components/snk-filter-modal-item2.js +0 -1
  41. package/dist/components/snk-filter-modal.js +18 -2
  42. package/dist/components/snk-grid2.js +38 -15
  43. package/dist/components/snk-personalized-filter2.js +1 -1
  44. package/dist/esm/{ConfigStorage-379a9cba.js → ConfigStorage-1244b8b0.js} +1 -1
  45. package/dist/esm/{SnkFormConfigManager-587e9030.js → SnkFormConfigManager-9be0e7d4.js} +1 -1
  46. package/dist/esm/{index-1564817d.js → index-0ece87a6.js} +1 -0
  47. package/dist/esm/loader.js +1 -1
  48. package/dist/esm/sankhyablocks.js +1 -1
  49. package/dist/esm/snk-actions-button_2.entry.js +1 -1
  50. package/dist/esm/snk-application.entry.js +63 -3
  51. package/dist/esm/snk-attach.entry.js +2 -2
  52. package/dist/esm/snk-crud.entry.js +2 -2
  53. package/dist/esm/snk-data-exporter.entry.js +1 -1
  54. package/dist/esm/snk-detail-view.entry.js +5 -5
  55. package/dist/esm/snk-filter-bar.entry.js +28 -3
  56. package/dist/esm/snk-filter-modal-item.entry.js +1 -2
  57. package/dist/esm/snk-filter-modal.entry.js +14 -0
  58. package/dist/esm/snk-form.entry.js +2 -2
  59. package/dist/esm/snk-grid-config.entry.js +1 -1
  60. package/dist/esm/snk-grid.entry.js +41 -18
  61. package/dist/esm/{snk-guides-viewer-2134aba2.js → snk-guides-viewer-9d5e073f.js} +3 -3
  62. package/dist/esm/snk-guides-viewer.entry.js +5 -5
  63. package/dist/esm/snk-personalized-filter.entry.js +2 -2
  64. package/dist/esm/snk-simple-crud.entry.js +2 -2
  65. package/dist/esm/snk-taskbar.entry.js +2 -2
  66. package/dist/esm/{taskbar-elements-26c981af.js → taskbar-elements-d4d0b424.js} +1 -1
  67. package/dist/sankhyablocks/{p-35fe6e61.entry.js → p-0874adb5.entry.js} +1 -1
  68. package/dist/sankhyablocks/{p-a49b1019.entry.js → p-0d084a0f.entry.js} +1 -1
  69. package/dist/sankhyablocks/{p-aaa1438e.entry.js → p-11081798.entry.js} +1 -1
  70. package/dist/sankhyablocks/{p-a7923832.entry.js → p-143425c0.entry.js} +1 -1
  71. package/dist/sankhyablocks/p-3520c088.entry.js +1 -0
  72. package/dist/sankhyablocks/p-374d03f6.js +1 -0
  73. package/dist/sankhyablocks/p-38289a55.js +1 -0
  74. package/dist/sankhyablocks/{p-7915c452.entry.js → p-4b0938f6.entry.js} +1 -1
  75. package/dist/sankhyablocks/{p-4396d1a6.js → p-585294ee.js} +1 -1
  76. package/dist/sankhyablocks/{p-953346b9.entry.js → p-69efa80d.entry.js} +1 -1
  77. package/dist/sankhyablocks/{p-2028633c.js → p-776ee8e3.js} +1 -1
  78. package/dist/sankhyablocks/p-7f9d6b5d.entry.js +11 -0
  79. package/dist/sankhyablocks/p-809f367d.entry.js +1 -0
  80. package/dist/sankhyablocks/{p-b52c2175.js → p-8437508f.js} +1 -1
  81. package/dist/sankhyablocks/{p-ca8e7da0.entry.js → p-a87229cd.entry.js} +1 -1
  82. package/dist/sankhyablocks/p-a9e5b094.entry.js +1 -0
  83. package/dist/sankhyablocks/{p-0cd2e986.entry.js → p-d1007720.entry.js} +1 -1
  84. package/dist/sankhyablocks/{p-58218eb7.entry.js → p-e3132789.entry.js} +1 -1
  85. package/dist/sankhyablocks/p-f2056f66.entry.js +1 -0
  86. package/dist/sankhyablocks/p-f514913b.entry.js +1 -0
  87. package/dist/sankhyablocks/{p-729f5f5b.entry.js → p-fd8814b9.entry.js} +1 -1
  88. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  89. package/dist/types/components/snk-actions-button/subcomponents/snk-actions-form.d.ts +1 -1
  90. package/dist/types/components/snk-application/snk-application.d.ts +5 -2
  91. package/dist/types/components/snk-filter-bar/filter-modal/snk-filter-modal.d.ts +14 -1
  92. package/dist/types/components/snk-filter-bar/snk-filter-bar.d.ts +11 -0
  93. package/dist/types/components/snk-filter-bar/utils/SnkFilterModalFactory.d.ts +5 -1
  94. package/dist/types/components/snk-grid/snk-grid.d.ts +1 -0
  95. package/dist/types/components/snk-taskbar/subcomponents/field-search.d.ts +1 -0
  96. package/dist/types/components.d.ts +34 -11
  97. package/dist/types/lib/@types/index.d.ts +2 -1
  98. package/package.json +3 -3
  99. package/dist/sankhyablocks/p-145c4434.js +0 -1
  100. package/dist/sankhyablocks/p-4b0ea83f.entry.js +0 -1
  101. package/dist/sankhyablocks/p-5534e08c.js +0 -1
  102. package/dist/sankhyablocks/p-78777ae0.entry.js +0 -1
  103. package/dist/sankhyablocks/p-a037f5b4.entry.js +0 -1
  104. package/dist/sankhyablocks/p-bf9b7149.entry.js +0 -11
  105. package/dist/sankhyablocks/p-c259545b.entry.js +0 -1
  106. package/dist/sankhyablocks/p-d1677df0.entry.js +0 -1
@@ -14,14 +14,21 @@ export class SnkGrid {
14
14
  this._topTaskbarProcessor = new TaskbarProcessor({
15
15
  "snkGridTopTaskbar.regular": ["FORM_MODE", "CONFIGURATOR", "INSERT"],
16
16
  "snkGridTopTaskbar.regular.secondary": ["FORM_MODE", "CONFIGURATOR", "INSERT"],
17
+ "snkGridTopTaskbar.regular.singleTaskbar": [],
17
18
  "snkGridTopTaskbar.finish_edition": ["CANCEL", "SAVE"],
18
- "snkGridTopTaskbar.finish_edition.secondary": []
19
+ "snkGridTopTaskbar.finish_edition.secondary": [],
20
+ "snkGridTopTaskbar.finish_edition.singleTaskbar": [],
19
21
  });
20
22
  this._headerTaskbarProcessor = new TaskbarProcessor({
21
23
  "snkGridHeaderTaskbar.unselected": ["REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON", "MORE_OPTIONS"],
22
24
  "snkGridHeaderTaskbar.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "ATTACH", "REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON"],
23
25
  "snkGridHeaderTaskbar.detail.unselected": ["REFRESH", "MORE_OPTIONS"],
24
- "snkGridHeaderTaskbar.detail.selected": ["UPDATE", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "REFRESH"]
26
+ "snkGridHeaderTaskbar.detail.selected": ["UPDATE", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "REFRESH"],
27
+ "snkGridHeaderTaskbar.singleTaskbar.unselected": ["INSERT", "FORM_MODE", "CONFIGURATOR", "REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON", "MORE_OPTIONS"],
28
+ "snkGridHeaderTaskbar.singleTaskbar.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "ATTACH", "FORM_MODE", "CONFIGURATOR", "REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON"],
29
+ "snkGridHeaderTaskbar.singleTaskbar.detail.unselected": ["INSERT", "FORM_MODE", "CONFIGURATOR", "REFRESH", "MORE_OPTIONS"],
30
+ "snkGridHeaderTaskbar.singleTaskbar.detail.selected": ["UPDATE", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "FORM_MODE", "CONFIGURATOR", "REFRESH"],
31
+ "snkGridHeaderTaskbar.singleTaskbar.finish_edition": ["CANCEL", "SAVE"]
25
32
  });
26
33
  this._dataUnit = undefined;
27
34
  this._dataState = undefined;
@@ -302,30 +309,46 @@ export class SnkGrid {
302
309
  return invisibleButtons;
303
310
  }
304
311
  componentWillRender() {
305
- var _a;
306
312
  const invisibleButtons = this.getInvisibleButtons();
307
- const hasSelectedRecord = this._dataState && !!((_a = this._dataState.selectionInfo) === null || _a === void 0 ? void 0 : _a.length);
308
- let headerTaskbarId;
309
- if (hasSelectedRecord) {
310
- headerTaskbarId = this.isDetail ? "snkGridHeaderTaskbar.detail.selected" : "snkGridHeaderTaskbar.selected";
311
- }
312
- else {
313
- headerTaskbarId = this.isDetail ? "snkGridHeaderTaskbar.detail.unselected" : "snkGridHeaderTaskbar.unselected";
314
- }
315
- this._headerTaskbarProcessor.process(headerTaskbarId, this.taskbarManager, this._dataState, this.getHeaderDisabledButtons(), invisibleButtons);
313
+ this._headerTaskbarProcessor.process(this.getHeaderTaskbarId(), this.taskbarManager, this._dataState, this.getHeaderDisabledButtons(), invisibleButtons);
316
314
  this._topTaskbarProcessor.process(this.getTopTaskBarId(), this.taskbarManager, this._dataState, undefined, invisibleButtons);
317
315
  this.dataExporterProviderStore();
318
316
  }
317
+ getHeaderTaskbarId() {
318
+ var _a, _b;
319
+ const hasSelectedRecord = this._dataState && !!((_a = this._dataState.selectionInfo) === null || _a === void 0 ? void 0 : _a.length);
320
+ const taskbarIdPrefixLookup = {
321
+ primary: this.isDetail ? "snkGridHeaderTaskbar.detail" : "snkGridHeaderTaskbar",
322
+ secondary: this.isDetail ? "snkGridHeaderTaskbar.detail" : "snkGridHeaderTaskbar",
323
+ singleTaskbar: this.isDetail ? "snkGridHeaderTaskbar.singleTaskbar.detail" : "snkGridHeaderTaskbar.singleTaskbar"
324
+ };
325
+ const taskbarIdPrefix = taskbarIdPrefixLookup[this.presentationMode];
326
+ let headerTaskbarId = hasSelectedRecord ? `${taskbarIdPrefix}.selected` : `${taskbarIdPrefix}.unselected`;
327
+ if (((_b = this._dataState) === null || _b === void 0 ? void 0 : _b.isDirty) && this.presentationMode === PresentationMode.SINGLE_TASKBAR) {
328
+ headerTaskbarId = "snkGridHeaderTaskbar.singleTaskbar.finish_edition";
329
+ }
330
+ return headerTaskbarId;
331
+ }
319
332
  getTopTaskBarId() {
320
333
  var _a;
321
- const sufix = this.presentationMode === PresentationMode.SECONDARY ? ".secondary" : "";
334
+ const suffixLookup = {
335
+ primary: "",
336
+ secondary: ".secondary",
337
+ singleTaskbar: ".singleTaskbar"
338
+ };
339
+ const sufix = suffixLookup[this.presentationMode];
322
340
  if ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.isDirty) {
323
341
  return `snkGridTopTaskbar.finish_edition${sufix}`;
324
342
  }
325
343
  return `snkGridTopTaskbar.regular${sufix}`;
326
344
  }
327
345
  getPrimaryButton() {
328
- return this.presentationMode === PresentationMode.PRIMARY ? "INSERT" : "";
346
+ const primaryButtonLookup = {
347
+ primary: "INSERT",
348
+ secondary: "",
349
+ singleTaskbar: "INSERT"
350
+ };
351
+ return primaryButtonLookup[this.presentationMode];
329
352
  }
330
353
  getColumnSearch(actionButton, item) {
331
354
  if (this._columnSearch != undefined) {
@@ -376,7 +399,7 @@ export class SnkGrid {
376
399
  return undefined;
377
400
  }
378
401
  return (h("div", { class: "snk-grid__container ez-flex ez-flex--column ez-flex-item--auto ez-padding--large" }, h("div", { class: "snk-grid__header ez-margin-bottom--medium" }, this._showSnkFilterBar &&
379
- h(Fragment, null, h("snk-filter-bar", { ref: (ref) => this._snkFilterBar = ref, dataUnit: this._dataUnit, "data-element-id": "gridFilter", class: "snk-grid__filter-bar ez-align--top", configName: this.configName, messagesBuilder: this.messagesBuilder, resourceID: this.resourceID, onConfigUpdated: evt => this.handleFilterConfigUpdated(evt.detail) }), h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-grid__header-divider" })), h("snk-taskbar", { class: "ez-padding-left--medium", "data-element-id": "grid_top", key: "topTaskbar", configName: this.configName, dataUnit: this._dataUnit, messagesBuilder: this.messagesBuilder, buttons: this._topTaskbarProcessor.buttons, disabledButtons: this._topTaskbarProcessor.disabledButtons, customButtons: this._topTaskbarProcessor.customButtons, primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.topTaskbarCustomSlotId }, h("slot", { name: this.topTaskbarCustomSlotId }))), h("ez-grid", { ref: ref => this._grid = ref, class: (this.presentationMode === PresentationMode.SECONDARY ? "snk-grid-container__without-shadow " : "") + "snk-grid__table", "data-element-id": "embedded", dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: (evt) => { this.gridConfigChangeHandler(evt); }, onEzDoubleClick: (evt) => this.gridDoubleClick.emit(evt.detail), statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, columnfilterDataSource: this.columnFilterDataSource, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, recordsValidator: this.recordsValidator, canEdit: this.canEdit }, h("snk-taskbar", { dataUnit: this._dataUnit, configName: this.configName, messagesBuilder: this.messagesBuilder, "data-element-id": "grid_left", buttons: this._headerTaskbarProcessor.buttons, disabledButtons: this._headerTaskbarProcessor.disabledButtons, customButtons: this._headerTaskbarProcessor.customButtons, slot: "leftButtons", actionsList: this.getActionsList(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.gridHeaderCustomSlotId }, h("slot", { name: this.gridHeaderCustomSlotId }))), h("div", { class: "ez-col ez-col--sd-12" }, h("slot", { name: "SnkGridFooter" })), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._popUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this._gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), application: this._application, selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resourceID }))));
402
+ h(Fragment, null, h("snk-filter-bar", { ref: (ref) => this._snkFilterBar = ref, dataUnit: this._dataUnit, "data-element-id": "gridFilter", class: "snk-grid__filter-bar ez-align--top", configName: this.configName, messagesBuilder: this.messagesBuilder, resourceID: this.resourceID, onConfigUpdated: evt => this.handleFilterConfigUpdated(evt.detail) }), h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-grid__header-divider" })), h("snk-taskbar", { class: "ez-padding-left--medium", "data-element-id": "grid_top", key: "topTaskbar", configName: this.configName, dataUnit: this._dataUnit, messagesBuilder: this.messagesBuilder, buttons: this._topTaskbarProcessor.buttons, disabledButtons: this._topTaskbarProcessor.disabledButtons, customButtons: this._topTaskbarProcessor.customButtons, primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.topTaskbarCustomSlotId }, h("slot", { name: this.topTaskbarCustomSlotId }))), h("ez-grid", { ref: ref => this._grid = ref, class: (this.presentationMode === PresentationMode.SECONDARY ? "snk-grid-container__without-shadow " : "") + "snk-grid__table", "data-element-id": "embedded", dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: (evt) => { this.gridConfigChangeHandler(evt); }, onEzDoubleClick: (evt) => this.gridDoubleClick.emit(evt.detail), statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, columnfilterDataSource: this.columnFilterDataSource, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, recordsValidator: this.recordsValidator, canEdit: this.canEdit }, h("snk-taskbar", { dataUnit: this._dataUnit, configName: this.configName, messagesBuilder: this.messagesBuilder, "data-element-id": "grid_left", buttons: this._headerTaskbarProcessor.buttons, presentationMode: this.presentationMode, disabledButtons: this._headerTaskbarProcessor.disabledButtons, customButtons: this._headerTaskbarProcessor.customButtons, slot: "leftButtons", actionsList: this.getActionsList(), primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.gridHeaderCustomSlotId }, h("slot", { name: this.gridHeaderCustomSlotId }))), h("div", { class: "ez-col ez-col--sd-12" }, h("slot", { name: "SnkGridFooter" })), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._popUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this._gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), application: this._application, selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resourceID }))));
380
403
  }
381
404
  static get is() { return "snk-grid"; }
382
405
  static get encapsulation() { return "scoped"; }
@@ -573,7 +596,7 @@ export class SnkGrid {
573
596
  "mutable": false,
574
597
  "complexType": {
575
598
  "original": "PresentationMode",
576
- "resolved": "PresentationMode.PRIMARY | PresentationMode.SECONDARY",
599
+ "resolved": "PresentationMode.PRIMARY | PresentationMode.SECONDARY | PresentationMode.SINGLE_TASKBAR",
577
600
  "references": {
578
601
  "PresentationMode": {
579
602
  "location": "import",
@@ -190,7 +190,7 @@ export class SnkPersonalizedFilter {
190
190
  return personalizedFilter;
191
191
  }
192
192
  addFilterGroupCondition(personalizedFilter) {
193
- if (!personalizedFilter.assistent.operand) {
193
+ if (personalizedFilter.assistent && !personalizedFilter.assistent.operand) {
194
194
  personalizedFilter.assistent.operand = FilterGroupCondition.AND;
195
195
  }
196
196
  }
@@ -472,7 +472,7 @@ export class SnkTaskbar {
472
472
  "mutable": true,
473
473
  "complexType": {
474
474
  "original": "PresentationMode",
475
- "resolved": "PresentationMode.PRIMARY | PresentationMode.SECONDARY",
475
+ "resolved": "PresentationMode.PRIMARY | PresentationMode.SECONDARY | PresentationMode.SINGLE_TASKBAR",
476
476
  "references": {
477
477
  "PresentationMode": {
478
478
  "location": "import",
@@ -2,6 +2,7 @@ export var PresentationMode;
2
2
  (function (PresentationMode) {
3
3
  PresentationMode["PRIMARY"] = "primary";
4
4
  PresentationMode["SECONDARY"] = "secondary";
5
+ PresentationMode["SINGLE_TASKBAR"] = "singleTaskbar";
5
6
  })(PresentationMode || (PresentationMode = {}));
6
7
  export var DataExporterOption;
7
8
  (function (DataExporterOption) {
@@ -107,7 +107,7 @@ export default class FilterBarConfigFetcher extends ResourceFetcher {
107
107
  multilistValueArray = Array.isArray(multilistValueArray) ? multilistValueArray : [multilistValueArray];
108
108
  // Existem cenários onde o HTML5 não salva o Id do filtro, apenas seu label e value
109
109
  multilistValueArray = multilistValueArray.map(itemRaw => {
110
- return Object.assign(Object.assign({}, itemRaw), { id: itemRaw.id ? itemRaw.id : itemRaw.value });
110
+ return Object.assign(Object.assign({}, itemRaw), { id: (itemRaw.id !== undefined) ? itemRaw.id : itemRaw.value });
111
111
  });
112
112
  item.value = ObjectUtils.copy(multilistValueArray);
113
113
  }
@@ -108,7 +108,7 @@ class FilterBarConfigFetcher extends ResourceFetcher {
108
108
  multilistValueArray = Array.isArray(multilistValueArray) ? multilistValueArray : [multilistValueArray];
109
109
  // Existem cenários onde o HTML5 não salva o Id do filtro, apenas seu label e value
110
110
  multilistValueArray = multilistValueArray.map(itemRaw => {
111
- return Object.assign(Object.assign({}, itemRaw), { id: itemRaw.id ? itemRaw.id : itemRaw.value });
111
+ return Object.assign(Object.assign({}, itemRaw), { id: (itemRaw.id !== undefined) ? itemRaw.id : itemRaw.value });
112
112
  });
113
113
  item.value = ObjectUtils.copy(multilistValueArray);
114
114
  }
@@ -2,6 +2,7 @@ var PresentationMode;
2
2
  (function (PresentationMode) {
3
3
  PresentationMode["PRIMARY"] = "primary";
4
4
  PresentationMode["SECONDARY"] = "secondary";
5
+ PresentationMode["SINGLE_TASKBAR"] = "singleTaskbar";
5
6
  })(PresentationMode || (PresentationMode = {}));
6
7
  var DataExporterOption;
7
8
  (function (DataExporterOption) {
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
- import { DateUtils, StringUtils, ObjectUtils, WaitingChangeException, WarningException, ErrorException, KeyboardManager, OnboardingUtils, DependencyType, ElementIDUtils, ApplicationContext, DataType, ErrorTracking } from '@sankhyalabs/core';
2
+ import { DateUtils, StringUtils, ObjectUtils, WaitingChangeException, WarningException, ErrorException, KeyboardManager, OnboardingUtils, DependencyType, ArrayUtils, SearchUtils, ElementIDUtils, ApplicationContext, DataType, ErrorTracking } from '@sankhyalabs/core';
3
3
  import { ApplicationUtils } from '@sankhyalabs/ezui/dist/collection/utils';
4
4
  import { C as ConfigStorage } from './ConfigStorage.js';
5
5
  import { d as dist, D as DataFetcher, U as UrlUtils } from './DataFetcher.js';
@@ -818,11 +818,53 @@ const SnkApplication = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
818
818
  return this.executePreparedSearch(mode, argument, { entity: ENTITYNAME, entityDescription: DESCRIPTIONENTITY, criteria, searchOptions });
819
819
  }
820
820
  }
821
+ filterInvalidFields(resp, item, mdByName) {
822
+ let fieldsMetadata = resp.fieldsMetadata.filter((field) => {
823
+ let accept = !StringUtils.isEmpty(item[field.fieldName]) &&
824
+ field.visible !== false &&
825
+ field.type !== 'B' &&
826
+ resp.pkField !== field.fieldName &&
827
+ resp.descriptionField !== field.fieldName &&
828
+ (field.isPrimaryKey || !field.isLinkField) &&
829
+ !(field.type === 'S' && field.presentationType === 'H');
830
+ if (accept) {
831
+ mdByName[field.fieldName] = field;
832
+ }
833
+ //Condição que trata o problema de trazer imagem no entityCard na pesquisa de registros
834
+ if (typeof item[field.fieldName] === 'string' && (item[field.fieldName].indexOf('<img') > -1 || item[field.fieldName].indexOf('<svg') > -1)) {
835
+ return false;
836
+ }
837
+ return accept;
838
+ });
839
+ return fieldsMetadata;
840
+ }
841
+ filterMathFields(matchFields, fields, qtyFields, mdByName) {
842
+ if (matchFields && Array.isArray(matchFields)) {
843
+ matchFields.forEach((matchField) => {
844
+ let fieldMD = ArrayUtils.removeReference(fields, mdByName[matchField]);
845
+ if (fieldMD) {
846
+ fields.unshift(fieldMD);
847
+ }
848
+ });
849
+ }
850
+ fields = fields.slice(0, qtyFields);
851
+ return fields;
852
+ }
853
+ builOptionItem(argument, item, fields, descriptionField, pkField) {
854
+ var _a;
855
+ let exibitionItem = {
856
+ value: StringUtils.highlightValue(argument, item['__matchFields'], (_a = item[pkField]) === null || _a === void 0 ? void 0 : _a.toString(), fields, true),
857
+ label: descriptionField ? StringUtils.highlightValue(argument, item['__matchFields'], item[descriptionField], fields, true) : "",
858
+ details: SearchUtils.buildDetails(argument, fields, item)
859
+ };
860
+ return exibitionItem;
861
+ }
821
862
  /**
822
863
  * Obtém as opções em componentes de pesquisa
823
864
  * Ex.: snk-config-options
824
865
  */
825
866
  async executePreparedSearch(mode, argument, options) {
867
+ const mdByName = {};
826
868
  const { entity, entityDescription, criteria, searchOptions } = options;
827
869
  if (mode === "ADVANCED") {
828
870
  return new Promise(accept => {
@@ -840,7 +882,25 @@ const SnkApplication = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
840
882
  });
841
883
  }
842
884
  else {
843
- return this.pesquisaFetcher.loadSearchOptions(entity, argument, criteria, searchOptions);
885
+ return new Promise((resolve, reject) => {
886
+ this.pesquisaFetcher.loadAdvancedSearch(entity, argument, criteria, searchOptions)
887
+ .then(result => {
888
+ result = ObjectUtils.stringToObject(result.json.$);
889
+ let descriptionField = result.descriptionField;
890
+ let pkField = result.pkField;
891
+ const list = [];
892
+ result.data.forEach((item) => {
893
+ let fieldsMetadata = this.filterInvalidFields(result, item, mdByName);
894
+ let qtyFields = 6;
895
+ let fields = this.filterMathFields(item['__matchFields'], fieldsMetadata, qtyFields, mdByName);
896
+ list.push(this.builOptionItem(argument, item, fields, descriptionField, pkField));
897
+ });
898
+ resolve(list);
899
+ })
900
+ .catch(error => {
901
+ reject(error);
902
+ });
903
+ });
844
904
  }
845
905
  }
846
906
  /**
@@ -209,13 +209,14 @@ function buildPersonalized(item) {
209
209
  }
210
210
 
211
211
  class SnkFilterModalFactory {
212
- constructor({ filterConfig, configName, onComplete, getMessage, onAddPersonalizedFilter, onEditPersonalizedFilter }) {
212
+ constructor({ filterConfig, configName, onComplete, getMessage, onAddPersonalizedFilter, onEditPersonalizedFilter, onDeletePersonalizedFilter }) {
213
213
  this._filterConfig = filterConfig;
214
214
  this._configName = configName;
215
215
  this._onComplete = onComplete;
216
216
  this._getMessage = getMessage;
217
217
  this._addPersonalizedFilterFn = onAddPersonalizedFilter;
218
218
  this._editPersonalizedFilterFn = onEditPersonalizedFilter;
219
+ this._onDeletePersonalizedFilter = onDeletePersonalizedFilter;
219
220
  }
220
221
  applyFilters(newFilterConfig) {
221
222
  this._onComplete(newFilterConfig);
@@ -231,6 +232,7 @@ class SnkFilterModalFactory {
231
232
  filterModal.closeModal = () => this._closeModal();
232
233
  filterModal.addPersonalizedFilter = () => this._addPersonalizedFilterFn();
233
234
  filterModal.editPersonalizedFilter = (id) => this._editPersonalizedFilterFn(id);
235
+ filterModal.deletePersonalizedFilter = (filter, configName) => this._onDeletePersonalizedFilter(filter, configName);
234
236
  return filterModal;
235
237
  }
236
238
  async showModal() {
@@ -362,6 +364,23 @@ const SnkFilterBar = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
362
364
  this.updateFilter(filterItem);
363
365
  return Promise.resolve();
364
366
  }
367
+ /**
368
+ * Remove um item de filtro.
369
+ *
370
+ * @param filterID - ID do a ser adicionado
371
+ *
372
+ * @returns {Promise<SnkFilterItemConfig|undefined>} - Retorna o item de filtro removido, ou undefined caso não encontrado.
373
+ */
374
+ async removeFilterItem(filterID) {
375
+ const itemIndex = this.filterConfig.findIndex(item => item.id === filterID);
376
+ if (itemIndex == -1) {
377
+ console.warn("[SnkFilterBar.removeFilterItem] FilterItem não encontrado");
378
+ return Promise.resolve(undefined);
379
+ }
380
+ const itemToRemove = this.filterConfig[itemIndex];
381
+ this.filterConfig = this.filterConfig.filter(item => item.id !== filterID);
382
+ return Promise.resolve(itemToRemove);
383
+ }
365
384
  componentDidLoad() {
366
385
  if (this._element) {
367
386
  const dataInfo = { dataUnit: this.dataUnit };
@@ -569,7 +588,8 @@ const SnkFilterBar = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
569
588
  onComplete: callbackOnApplyFilter,
570
589
  getMessage: (key, props) => this.getMessage(key, props),
571
590
  onAddPersonalizedFilter: () => this.addPersonalizedFilter(),
572
- onEditPersonalizedFilter: (id) => this.editPersonalizedFilter(id)
591
+ onEditPersonalizedFilter: (id) => this.editPersonalizedFilter(id),
592
+ onDeletePersonalizedFilter: (filter, configName) => this.deletePersonalizedFilter(filter, FilterItemType.PERSONALIZED, configName),
573
593
  };
574
594
  this._filterModalFactory = new SnkFilterModalFactory(factoryParams);
575
595
  await this._filterModalFactory.showModal();
@@ -587,6 +607,11 @@ const SnkFilterBar = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
587
607
  this.showPersonalizedFilter = true;
588
608
  this.personalizedFilterId = id;
589
609
  }
610
+ deletePersonalizedFilter(filter, filterItemType, configName) {
611
+ if (filterItemType === FilterItemType.PERSONALIZED) {
612
+ ConfigStorage.removePersonalizedFilter(filter, this.resourceID, configName);
613
+ }
614
+ }
590
615
  handleHidePersonalizedFilter(reloadFilterBar) {
591
616
  if (reloadFilterBar) {
592
617
  this.loadConfigFromStorage().then(() => {
@@ -639,7 +664,8 @@ const SnkFilterBar = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
639
664
  "reload": [64],
640
665
  "getFilterItem": [64],
641
666
  "updateFilterItem": [64],
642
- "addFilterItem": [64]
667
+ "addFilterItem": [64],
668
+ "removeFilterItem": [64]
643
669
  }, [[0, "filterChange", "filterChangeListener"]]]);
644
670
  function defineCustomElement() {
645
671
  if (typeof customElements === "undefined") {
@@ -56,7 +56,6 @@ const SnkFilterModalItem = /*@__PURE__*/ proxyCustomElement(class extends HTMLEl
56
56
  buildSnkFilterPersonalizedProps() {
57
57
  return {
58
58
  tag: "snk-personalized-filter-editor", props: {
59
- onDeleteFilter: (event) => this.handleDeleteFilter(event.detail, FilterItemType.PERSONALIZED),
60
59
  onEditFilter: (event) => this.editPersonalizedFilter.emit(event.detail),
61
60
  onAddFilter: () => this.addPersonalizedFilter.emit(),
62
61
  }
@@ -20,6 +20,14 @@ const SnkFilterModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
20
20
  this.closeModal = undefined;
21
21
  this.addPersonalizedFilter = undefined;
22
22
  this.editPersonalizedFilter = undefined;
23
+ this.deletePersonalizedFilter = undefined;
24
+ this.filtersToDelete = [];
25
+ }
26
+ /**
27
+ * Emitido quando um filtro personalizado é deletado.
28
+ */
29
+ deletePersonalizedFilterListener(event) {
30
+ this.filtersToDelete.push(event.detail);
23
31
  }
24
32
  getCustomMessage(key, params) {
25
33
  var _a;
@@ -87,6 +95,12 @@ const SnkFilterModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
87
95
  if (this.isValidCustomFilter(filterPersonalized)) {
88
96
  this.applyFilters(this.filters);
89
97
  }
98
+ if (this.filtersToDelete.length > 0) {
99
+ this.filtersToDelete.forEach(filter => {
100
+ this.deletePersonalizedFilter(filter, this.configName);
101
+ });
102
+ this.filtersToDelete = [];
103
+ }
90
104
  }
91
105
  isValidCustomFilter(filterPersonalized) {
92
106
  const isValid = PersonalizedFilterUtils.validateVariableValues(filterPersonalized);
@@ -232,8 +246,10 @@ const SnkFilterModal$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
232
246
  "applyFilters": [16],
233
247
  "closeModal": [16],
234
248
  "addPersonalizedFilter": [16],
235
- "editPersonalizedFilter": [16]
236
- }]);
249
+ "editPersonalizedFilter": [16],
250
+ "deletePersonalizedFilter": [16],
251
+ "filtersToDelete": [16]
252
+ }, [[0, "deleteFilter", "deletePersonalizedFilterListener"]]]);
237
253
  function defineCustomElement$1() {
238
254
  if (typeof customElements === "undefined") {
239
255
  return;
@@ -36,14 +36,21 @@ const SnkGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
36
36
  this._topTaskbarProcessor = new TaskbarProcessor({
37
37
  "snkGridTopTaskbar.regular": ["FORM_MODE", "CONFIGURATOR", "INSERT"],
38
38
  "snkGridTopTaskbar.regular.secondary": ["FORM_MODE", "CONFIGURATOR", "INSERT"],
39
+ "snkGridTopTaskbar.regular.singleTaskbar": [],
39
40
  "snkGridTopTaskbar.finish_edition": ["CANCEL", "SAVE"],
40
- "snkGridTopTaskbar.finish_edition.secondary": []
41
+ "snkGridTopTaskbar.finish_edition.secondary": [],
42
+ "snkGridTopTaskbar.finish_edition.singleTaskbar": [],
41
43
  });
42
44
  this._headerTaskbarProcessor = new TaskbarProcessor({
43
45
  "snkGridHeaderTaskbar.unselected": ["REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON", "MORE_OPTIONS"],
44
46
  "snkGridHeaderTaskbar.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "ATTACH", "REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON"],
45
47
  "snkGridHeaderTaskbar.detail.unselected": ["REFRESH", "MORE_OPTIONS"],
46
- "snkGridHeaderTaskbar.detail.selected": ["UPDATE", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "REFRESH"]
48
+ "snkGridHeaderTaskbar.detail.selected": ["UPDATE", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "REFRESH"],
49
+ "snkGridHeaderTaskbar.singleTaskbar.unselected": ["INSERT", "FORM_MODE", "CONFIGURATOR", "REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON", "MORE_OPTIONS"],
50
+ "snkGridHeaderTaskbar.singleTaskbar.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "ATTACH", "FORM_MODE", "CONFIGURATOR", "REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON"],
51
+ "snkGridHeaderTaskbar.singleTaskbar.detail.unselected": ["INSERT", "FORM_MODE", "CONFIGURATOR", "REFRESH", "MORE_OPTIONS"],
52
+ "snkGridHeaderTaskbar.singleTaskbar.detail.selected": ["UPDATE", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "FORM_MODE", "CONFIGURATOR", "REFRESH"],
53
+ "snkGridHeaderTaskbar.singleTaskbar.finish_edition": ["CANCEL", "SAVE"]
47
54
  });
48
55
  this._dataUnit = undefined;
49
56
  this._dataState = undefined;
@@ -324,30 +331,46 @@ const SnkGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
324
331
  return invisibleButtons;
325
332
  }
326
333
  componentWillRender() {
327
- var _a;
328
334
  const invisibleButtons = this.getInvisibleButtons();
329
- const hasSelectedRecord = this._dataState && !!((_a = this._dataState.selectionInfo) === null || _a === void 0 ? void 0 : _a.length);
330
- let headerTaskbarId;
331
- if (hasSelectedRecord) {
332
- headerTaskbarId = this.isDetail ? "snkGridHeaderTaskbar.detail.selected" : "snkGridHeaderTaskbar.selected";
333
- }
334
- else {
335
- headerTaskbarId = this.isDetail ? "snkGridHeaderTaskbar.detail.unselected" : "snkGridHeaderTaskbar.unselected";
336
- }
337
- this._headerTaskbarProcessor.process(headerTaskbarId, this.taskbarManager, this._dataState, this.getHeaderDisabledButtons(), invisibleButtons);
335
+ this._headerTaskbarProcessor.process(this.getHeaderTaskbarId(), this.taskbarManager, this._dataState, this.getHeaderDisabledButtons(), invisibleButtons);
338
336
  this._topTaskbarProcessor.process(this.getTopTaskBarId(), this.taskbarManager, this._dataState, undefined, invisibleButtons);
339
337
  this.dataExporterProviderStore();
340
338
  }
339
+ getHeaderTaskbarId() {
340
+ var _a, _b;
341
+ const hasSelectedRecord = this._dataState && !!((_a = this._dataState.selectionInfo) === null || _a === void 0 ? void 0 : _a.length);
342
+ const taskbarIdPrefixLookup = {
343
+ primary: this.isDetail ? "snkGridHeaderTaskbar.detail" : "snkGridHeaderTaskbar",
344
+ secondary: this.isDetail ? "snkGridHeaderTaskbar.detail" : "snkGridHeaderTaskbar",
345
+ singleTaskbar: this.isDetail ? "snkGridHeaderTaskbar.singleTaskbar.detail" : "snkGridHeaderTaskbar.singleTaskbar"
346
+ };
347
+ const taskbarIdPrefix = taskbarIdPrefixLookup[this.presentationMode];
348
+ let headerTaskbarId = hasSelectedRecord ? `${taskbarIdPrefix}.selected` : `${taskbarIdPrefix}.unselected`;
349
+ if (((_b = this._dataState) === null || _b === void 0 ? void 0 : _b.isDirty) && this.presentationMode === PresentationMode.SINGLE_TASKBAR) {
350
+ headerTaskbarId = "snkGridHeaderTaskbar.singleTaskbar.finish_edition";
351
+ }
352
+ return headerTaskbarId;
353
+ }
341
354
  getTopTaskBarId() {
342
355
  var _a;
343
- const sufix = this.presentationMode === PresentationMode.SECONDARY ? ".secondary" : "";
356
+ const suffixLookup = {
357
+ primary: "",
358
+ secondary: ".secondary",
359
+ singleTaskbar: ".singleTaskbar"
360
+ };
361
+ const sufix = suffixLookup[this.presentationMode];
344
362
  if ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.isDirty) {
345
363
  return `snkGridTopTaskbar.finish_edition${sufix}`;
346
364
  }
347
365
  return `snkGridTopTaskbar.regular${sufix}`;
348
366
  }
349
367
  getPrimaryButton() {
350
- return this.presentationMode === PresentationMode.PRIMARY ? "INSERT" : "";
368
+ const primaryButtonLookup = {
369
+ primary: "INSERT",
370
+ secondary: "",
371
+ singleTaskbar: "INSERT"
372
+ };
373
+ return primaryButtonLookup[this.presentationMode];
351
374
  }
352
375
  getColumnSearch(actionButton, item) {
353
376
  if (this._columnSearch != undefined) {
@@ -398,7 +421,7 @@ const SnkGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
398
421
  return undefined;
399
422
  }
400
423
  return (h("div", { class: "snk-grid__container ez-flex ez-flex--column ez-flex-item--auto ez-padding--large" }, h("div", { class: "snk-grid__header ez-margin-bottom--medium" }, this._showSnkFilterBar &&
401
- h(Fragment, null, h("snk-filter-bar", { ref: (ref) => this._snkFilterBar = ref, dataUnit: this._dataUnit, "data-element-id": "gridFilter", class: "snk-grid__filter-bar ez-align--top", configName: this.configName, messagesBuilder: this.messagesBuilder, resourceID: this.resourceID, onConfigUpdated: evt => this.handleFilterConfigUpdated(evt.detail) }), h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-grid__header-divider" })), h("snk-taskbar", { class: "ez-padding-left--medium", "data-element-id": "grid_top", key: "topTaskbar", configName: this.configName, dataUnit: this._dataUnit, messagesBuilder: this.messagesBuilder, buttons: this._topTaskbarProcessor.buttons, disabledButtons: this._topTaskbarProcessor.disabledButtons, customButtons: this._topTaskbarProcessor.customButtons, primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.topTaskbarCustomSlotId }, h("slot", { name: this.topTaskbarCustomSlotId }))), h("ez-grid", { ref: ref => this._grid = ref, class: (this.presentationMode === PresentationMode.SECONDARY ? "snk-grid-container__without-shadow " : "") + "snk-grid__table", "data-element-id": "embedded", dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: (evt) => { this.gridConfigChangeHandler(evt); }, onEzDoubleClick: (evt) => this.gridDoubleClick.emit(evt.detail), statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, columnfilterDataSource: this.columnFilterDataSource, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, recordsValidator: this.recordsValidator, canEdit: this.canEdit }, h("snk-taskbar", { dataUnit: this._dataUnit, configName: this.configName, messagesBuilder: this.messagesBuilder, "data-element-id": "grid_left", buttons: this._headerTaskbarProcessor.buttons, disabledButtons: this._headerTaskbarProcessor.disabledButtons, customButtons: this._headerTaskbarProcessor.customButtons, slot: "leftButtons", actionsList: this.getActionsList(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.gridHeaderCustomSlotId }, h("slot", { name: this.gridHeaderCustomSlotId }))), h("div", { class: "ez-col ez-col--sd-12" }, h("slot", { name: "SnkGridFooter" })), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._popUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this._gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), application: this._application, selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resourceID }))));
424
+ h(Fragment, null, h("snk-filter-bar", { ref: (ref) => this._snkFilterBar = ref, dataUnit: this._dataUnit, "data-element-id": "gridFilter", class: "snk-grid__filter-bar ez-align--top", configName: this.configName, messagesBuilder: this.messagesBuilder, resourceID: this.resourceID, onConfigUpdated: evt => this.handleFilterConfigUpdated(evt.detail) }), h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-grid__header-divider" })), h("snk-taskbar", { class: "ez-padding-left--medium", "data-element-id": "grid_top", key: "topTaskbar", configName: this.configName, dataUnit: this._dataUnit, messagesBuilder: this.messagesBuilder, buttons: this._topTaskbarProcessor.buttons, disabledButtons: this._topTaskbarProcessor.disabledButtons, customButtons: this._topTaskbarProcessor.customButtons, primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.topTaskbarCustomSlotId }, h("slot", { name: this.topTaskbarCustomSlotId }))), h("ez-grid", { ref: ref => this._grid = ref, class: (this.presentationMode === PresentationMode.SECONDARY ? "snk-grid-container__without-shadow " : "") + "snk-grid__table", "data-element-id": "embedded", dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: (evt) => { this.gridConfigChangeHandler(evt); }, onEzDoubleClick: (evt) => this.gridDoubleClick.emit(evt.detail), statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, columnfilterDataSource: this.columnFilterDataSource, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, recordsValidator: this.recordsValidator, canEdit: this.canEdit }, h("snk-taskbar", { dataUnit: this._dataUnit, configName: this.configName, messagesBuilder: this.messagesBuilder, "data-element-id": "grid_left", buttons: this._headerTaskbarProcessor.buttons, presentationMode: this.presentationMode, disabledButtons: this._headerTaskbarProcessor.disabledButtons, customButtons: this._headerTaskbarProcessor.customButtons, slot: "leftButtons", actionsList: this.getActionsList(), primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.gridHeaderCustomSlotId }, h("slot", { name: this.gridHeaderCustomSlotId }))), h("div", { class: "ez-col ez-col--sd-12" }, h("slot", { name: "SnkGridFooter" })), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._popUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this._gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), application: this._application, selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resourceID }))));
402
425
  }
403
426
  get _element() { return this; }
404
427
  static get style() { return snkGridCss; }
@@ -202,7 +202,7 @@ const SnkPersonalizedFilter = /*@__PURE__*/ proxyCustomElement(class extends HTM
202
202
  return personalizedFilter;
203
203
  }
204
204
  addFilterGroupCondition(personalizedFilter) {
205
- if (!personalizedFilter.assistent.operand) {
205
+ if (personalizedFilter.assistent && !personalizedFilter.assistent.operand) {
206
206
  personalizedFilter.assistent.operand = FilterGroupCondition.AND;
207
207
  }
208
208
  }
@@ -148,7 +148,7 @@ class FilterBarConfigFetcher extends ResourceFetcher {
148
148
  multilistValueArray = Array.isArray(multilistValueArray) ? multilistValueArray : [multilistValueArray];
149
149
  // Existem cenários onde o HTML5 não salva o Id do filtro, apenas seu label e value
150
150
  multilistValueArray = multilistValueArray.map(itemRaw => {
151
- return Object.assign(Object.assign({}, itemRaw), { id: itemRaw.id ? itemRaw.id : itemRaw.value });
151
+ return Object.assign(Object.assign({}, itemRaw), { id: (itemRaw.id !== undefined) ? itemRaw.id : itemRaw.value });
152
152
  });
153
153
  item.value = ObjectUtils.copy(multilistValueArray);
154
154
  }
@@ -1,4 +1,4 @@
1
- import { C as ConfigStorage } from './ConfigStorage-379a9cba.js';
1
+ import { C as ConfigStorage } from './ConfigStorage-1244b8b0.js';
2
2
  import { ObjectUtils, StringUtils } from '@sankhyalabs/core';
3
3
  import { F as FormConfigFetcher } from './form-config-fetcher-36219cd3.js';
4
4
 
@@ -2,6 +2,7 @@ var PresentationMode;
2
2
  (function (PresentationMode) {
3
3
  PresentationMode["PRIMARY"] = "primary";
4
4
  PresentationMode["SECONDARY"] = "secondary";
5
+ PresentationMode["SINGLE_TASKBAR"] = "singleTaskbar";
5
6
  })(PresentationMode || (PresentationMode = {}));
6
7
  var DataExporterOption;
7
8
  (function (DataExporterOption) {