@sankhyalabs/sankhyablocks 4.6.1 → 4.6.3

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 (90) hide show
  1. package/dist/cjs/{SnkMessageBuilder-d147f088.js → SnkMessageBuilder-47185d5d.js} +1 -0
  2. package/dist/cjs/{constants-73803daf.js → constants-ae0ed870.js} +0 -2
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  5. package/dist/cjs/snk-application.cjs.entry.js +1 -1
  6. package/dist/cjs/snk-config-options.cjs.entry.js +1 -1
  7. package/dist/cjs/snk-configurator.cjs.entry.js +1 -1
  8. package/dist/cjs/snk-crud.cjs.entry.js +1 -1
  9. package/dist/cjs/snk-data-exporter.cjs.entry.js +1 -1
  10. package/dist/cjs/snk-data-unit.cjs.entry.js +50 -25
  11. package/dist/cjs/snk-detail-view.cjs.entry.js +13 -4
  12. package/dist/cjs/snk-field-config.cjs.entry.js +1 -1
  13. package/dist/cjs/snk-form-config.cjs.entry.js +2 -2
  14. package/dist/cjs/snk-grid-config.cjs.entry.js +1 -1
  15. package/dist/cjs/snk-grid.cjs.entry.js +18 -6
  16. package/dist/cjs/{snk-guides-viewer-5d3dca5d.js → snk-guides-viewer-cb02e675.js} +12 -4
  17. package/dist/cjs/snk-guides-viewer.cjs.entry.js +3 -3
  18. package/dist/cjs/snk-select-box.cjs.entry.js +1 -1
  19. package/dist/cjs/snk-simple-crud.cjs.entry.js +2 -2
  20. package/dist/cjs/snk-tab-config.cjs.entry.js +1 -1
  21. package/dist/cjs/{taskbar-processor-6f3d2a75.js → taskbar-processor-bce3f499.js} +1 -1
  22. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view.js +15 -1
  23. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +10 -2
  24. package/dist/collection/components/snk-data-unit/snk-data-unit.js +49 -24
  25. package/dist/collection/components/snk-form/subcomponents/snk-form-config/snk-form-config.js +1 -1
  26. package/dist/collection/components/snk-grid/snk-grid.js +17 -5
  27. package/dist/collection/components/snk-taskbar/processor/taskbar-processor.js +1 -1
  28. package/dist/collection/lib/message/resources/snk-form.msg.js +1 -0
  29. package/dist/components/SnkMessageBuilder.js +1 -0
  30. package/dist/components/constants.js +1 -2
  31. package/dist/components/snk-data-unit2.js +49 -24
  32. package/dist/components/snk-detail-view2.js +21 -3
  33. package/dist/components/snk-field-config2.js +1 -1
  34. package/dist/components/snk-form-config2.js +2 -2
  35. package/dist/components/snk-grid2.js +17 -5
  36. package/dist/components/snk-tab-config2.js +1 -1
  37. package/dist/components/taskbar-processor.js +1 -1
  38. package/dist/esm/{SnkMessageBuilder-0e1ffd61.js → SnkMessageBuilder-ec0850af.js} +1 -0
  39. package/dist/esm/{constants-9560e54f.js → constants-15617e7d.js} +1 -2
  40. package/dist/esm/loader.js +1 -1
  41. package/dist/esm/sankhyablocks.js +1 -1
  42. package/dist/esm/snk-application.entry.js +1 -1
  43. package/dist/esm/snk-config-options.entry.js +1 -1
  44. package/dist/esm/snk-configurator.entry.js +1 -1
  45. package/dist/esm/snk-crud.entry.js +1 -1
  46. package/dist/esm/snk-data-exporter.entry.js +1 -1
  47. package/dist/esm/snk-data-unit.entry.js +50 -25
  48. package/dist/esm/snk-detail-view.entry.js +13 -4
  49. package/dist/esm/snk-field-config.entry.js +1 -1
  50. package/dist/esm/snk-form-config.entry.js +2 -2
  51. package/dist/esm/snk-grid-config.entry.js +1 -1
  52. package/dist/esm/snk-grid.entry.js +18 -6
  53. package/dist/esm/{snk-guides-viewer-6bb54367.js → snk-guides-viewer-b13cff0a.js} +12 -4
  54. package/dist/esm/snk-guides-viewer.entry.js +3 -3
  55. package/dist/esm/snk-select-box.entry.js +1 -1
  56. package/dist/esm/snk-simple-crud.entry.js +2 -2
  57. package/dist/esm/snk-tab-config.entry.js +1 -1
  58. package/dist/esm/{taskbar-processor-c2a99aba.js → taskbar-processor-94402e6e.js} +1 -1
  59. package/dist/sankhyablocks/p-0c0c086f.entry.js +1 -0
  60. package/dist/sankhyablocks/{p-9f00c061.entry.js → p-0d9f624f.entry.js} +1 -1
  61. package/dist/sankhyablocks/{p-8b0e8deb.entry.js → p-1374b0e2.entry.js} +1 -1
  62. package/dist/sankhyablocks/p-28c800b9.js +1 -0
  63. package/dist/sankhyablocks/{p-dbeac5db.entry.js → p-3169584f.entry.js} +1 -1
  64. package/dist/sankhyablocks/{p-9f2306ba.entry.js → p-31d4e5d4.entry.js} +1 -1
  65. package/dist/sankhyablocks/p-5afa5b01.entry.js +1 -0
  66. package/dist/sankhyablocks/{p-2a3996b0.entry.js → p-5b80ee28.entry.js} +1 -1
  67. package/dist/sankhyablocks/{p-cf9d1b55.entry.js → p-604e6970.entry.js} +1 -1
  68. package/dist/sankhyablocks/p-6181e6cb.entry.js +1 -0
  69. package/dist/sankhyablocks/{p-798cbc14.entry.js → p-64f21075.entry.js} +1 -1
  70. package/dist/sankhyablocks/p-94fef424.entry.js +1 -0
  71. package/dist/sankhyablocks/{p-869d6616.entry.js → p-af8cf505.entry.js} +1 -1
  72. package/dist/sankhyablocks/p-c2beb95c.js +1 -0
  73. package/dist/sankhyablocks/{p-86efa17d.entry.js → p-c88c4f80.entry.js} +1 -1
  74. package/dist/sankhyablocks/p-e1dbaecb.js +1 -0
  75. package/dist/sankhyablocks/p-f587a454.js +1 -0
  76. package/dist/sankhyablocks/{p-f83e3219.entry.js → p-f9ca6d74.entry.js} +1 -1
  77. package/dist/sankhyablocks/{p-b318cec6.entry.js → p-fa8a62f2.entry.js} +1 -1
  78. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  79. package/dist/types/components/snk-crud/subcomponents/snk-detail-view.d.ts +1 -0
  80. package/dist/types/components/snk-data-unit/snk-data-unit.d.ts +8 -2
  81. package/dist/types/components/snk-grid/snk-grid.d.ts +1 -0
  82. package/package.json +1 -1
  83. package/dist/sankhyablocks/p-4bd183ba.entry.js +0 -1
  84. package/dist/sankhyablocks/p-4fb98039.entry.js +0 -1
  85. package/dist/sankhyablocks/p-5518d572.js +0 -1
  86. package/dist/sankhyablocks/p-5a3e0eb6.js +0 -1
  87. package/dist/sankhyablocks/p-7889d481.entry.js +0 -1
  88. package/dist/sankhyablocks/p-9bf0319f.js +0 -1
  89. package/dist/sankhyablocks/p-c0bfafcb.entry.js +0 -1
  90. package/dist/sankhyablocks/p-ecbfbb4a.js +0 -1
@@ -4,11 +4,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-21bd01e1.js');
6
6
  const core = require('@sankhyalabs/core');
7
- const constants = require('./constants-73803daf.js');
7
+ const constants = require('./constants-ae0ed870.js');
8
8
  const taskbarElements = require('./taskbar-elements-5e87cf44.js');
9
9
  require('./DataFetcher-6acfc3a8.js');
10
10
  const index$1 = require('./index-f400b1d6.js');
11
- const taskbarProcessor = require('./taskbar-processor-6f3d2a75.js');
11
+ const taskbarProcessor = require('./taskbar-processor-bce3f499.js');
12
12
  require('./index-fc7ca86c.js');
13
13
  require('./_commonjsHelpers-537d719a.js');
14
14
 
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-21bd01e1.js');
6
6
  const draggable_bundle = require('./draggable.bundle-82a25c06.js');
7
7
  const core = require('@sankhyalabs/core');
8
- const constants = require('./constants-73803daf.js');
8
+ const constants = require('./constants-ae0ed870.js');
9
9
  require('./_commonjsHelpers-537d719a.js');
10
10
 
11
11
  const snkTabConfigCss = "@keyframes activate{0%{clip-path:inset(calc(100% - 3px) 50% 0px 50%)}100%{clip-path:inset(calc(100% - 3px) 0px 0px 0px)}}.sc-snk-tab-config-h{--snk-tab-config--backward-icon:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" height=\"16px\" width=\"10px\"><path d=\"M 9.7808475,13.860393 3.9204526,8.0000004 9.7808475,2.0624965 7.9301965,0.28895552 0.21915255,8.0000004 7.9301965,15.711044 Z\"/></svg>');--snk-tab-config--forward-icon:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" height=\"16px\" width=\"10px\"><path d=\"M 0.21915251,13.860393 6.0795475,8.0000007 0.21915251,2.0624968 2.0698036,0.28895588 9.7808475,8.0000007 2.0698036,15.711044 Z\"/></svg>');--snk-tab-config__lower-bar--background-color:var(--color--disable-primary, #e5eaf0);--snk-tab-config__lower-bar--border:2px solid var(--color--disable-primary, #e5eaf0);--snk-tab-config__tab--color:var(--text--primary, #626e82);--snk-tab-config__tab--font-family:var(--font-pattern, \"Roboto\");--snk-tab-config__tab--font-size:var(--title--small, 14px);--snk-tab-config__tab--padding:var(--space--small, 6px) var(--space--medium, 12px);--snk-tab-config__tab-is-active--color:var(--color--primary, #008561);--snk-tab-config__tab-hover--color:var(--color--secondary, #383c45);--snk-tab-config__tab-is-focused--border:1px dashed var(--color--primary, #008561);--snk-tab-config__tab-label--text-shadow:var(--text-shadow, 0 0 0 #353535, 0 0 1px transparent);--snk-tab-config__tab-label--margin-bottom:var(--space--extra-small, 3px);--snk-tab-config__new-button-icon--color:var(--color--secondary-700, #1C1D22);--snk-tab-config__forward-button--background-color:var(--text--primary, #626e82);--snk-tab-config__forward-button-hover--background-color:var(--color--primary, #008561);--snk-tab-config__left-icon--padding-right:var(--space--small, 6px);--snk-tab-config__left-icon--color:var(--text--disable, #AFB6C0);--snk-tab-config__tab-label-disabled--color:var(--text--disable, #AFB6C0);--snk-tab-config__slot--margin-left:var(--space--small, 6px);display:flex;position:relative;width:100%;overflow:hidden}.tab-config__scroll.sc-snk-tab-config{display:flex;width:100%;scroll-behavior:smooth;overflow-x:auto;scrollbar-width:none}.tab-config__lower-bar.sc-snk-tab-config{position:absolute;left:0%;right:0%;top:91%;bottom:0%;border-radius:2px;background-color:var(--snk-tab-config__lower-bar--background-color);border:var(--snk-tab-config__lower-bar--border)}.tab-config__tab.sc-snk-tab-config{display:flex;border:none;background-color:unset;cursor:pointer;align-items:center;justify-content:center;min-width:fit-content;color:var(--snk-tab-config__tab--color);font-family:var(--snk-tab-config__tab--font-family);font-size:var(--snk-tab-config__tab--font-size);padding:var(--snk-tab-config__tab--padding)}.tab-config__tab.sc-snk-tab-config:focus,.tab-config__forward-button.sc-snk-tab-config,.tab-config__backward-button.sc-snk-tab-config{outline:none}.tab-config__tab--is-active.sc-snk-tab-config{position:relative;color:var(--snk-tab-config__tab-is-active--color)}.tab-config__tab.sc-snk-tab-config:hover{color:var(--snk-tab-config__tab-hover--color)}.tab-config__tab--is-active.sc-snk-tab-config:hover{color:var(--snk-tab-config__tab-is-active--color)}.tab-config__tab--is-active.sc-snk-tab-config::after{content:\"\";position:absolute;width:100%;height:100%;clip-path:inset(calc(100% - 3px) 0px 0px 0px);animation:activate 0.25s ease-in-out;background-color:var(--snk-tab-config__tab-is-active--color)}.tab-config__tab--is-focused.sc-snk-tab-config{border:var(--snk-tab-config__tab-is-focused--border)}.tab-config__tab-label.sc-snk-tab-config{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-shadow:var(--snk-tab-config__tab-label--text-shadow);margin-bottom:var(--snk-tab-config__tab-label--margin-bottom)}.tab-config__forward-button.sc-snk-tab-config,.tab-config__backward-button.sc-snk-tab-config{position:absolute;z-index:1;display:flex;box-sizing:border-box;padding:0px;top:0px;right:0px;width:16px;height:100%;border:none;background-color:unset;cursor:pointer;justify-content:center;align-items:center}.tab-config__new-button.sc-snk-tab-config{position:absolute;z-index:1;display:flex;box-sizing:border-box;padding:0px;top:0px;right:0px;height:100%;border:none;background-color:unset;cursor:pointer;justify-content:center;align-items:center}.tab-config__new-button.sc-snk-tab-config ez-icon.sc-snk-tab-config{--ez-icon--color:var(--snk-tab-config__new-button-icon--color)}.tab-config__backward-button.sc-snk-tab-config{left:0px;box-shadow:10px 10px 5px 5px white;background:white}.tab-config__forward-button.sc-snk-tab-config{box-shadow:10px 10px 5px 20px white;background:white}.tab-config__forward-button.sc-snk-tab-config::after,.tab-config__backward-button.sc-snk-tab-config::after{content:'';display:flex;width:10px;height:16px;background-color:var(--snk-tab-config__forward-button--background-color)}.tab-config__forward-button.sc-snk-tab-config::after{-webkit-mask-image:var(--snk-tab-config--forward-icon);mask-image:var(--snk-tab-config--forward-icon)}.tab-config__backward-button.sc-snk-tab-config::after{-webkit-mask-image:var(--snk-tab-config--backward-icon);mask-image:var(--snk-tab-config--backward-icon)}.tab-config__forward-button.sc-snk-tab-config:hover::after,.tab-config__backward-button.sc-snk-tab-config:hover::after{background-color:var(--snk-tab-config__forward-button-hover--background-color)}.tab-config__new-button.sc-snk-tab-config:hover ez-icon.sc-snk-tab-config{--ez-icon--color:var(--snk-tab-config__forward-button-hover--background-color)}.tab-config__hidden.sc-snk-tab-config{display:none}.tab-config__scroll.sc-snk-tab-config::-webkit-scrollbar{display:none}.tab-config__left-icon.sc-snk-tab-config{padding-right:var(--snk-tab-config__left-icon--padding-right);--ez-icon--color:var(--snk-tab-config__left-icon--color)}.tab-config__left-icon--eye-off.sc-snk-tab-config{--ez-icon--color:var(--snk-tab-config__left-icon--color)}.tab-config__right-icon.sc-snk-tab-config{visibility:hidden;padding-left:var(--snk-tab-config__left-icon--padding-right)}.tab-config__tab.sc-snk-tab-config:hover .tab-config__right-icon.sc-snk-tab-config{visibility:visible}.tab-config__tab--is-active.sc-snk-tab-config .tab-config__right-icon.sc-snk-tab-config{visibility:visible;--ez-icon--color:var(--snk-tab-config__tab-is-active--color)}.tab-config__tab.sc-snk-tab-config:hover .tab-config__right-icon.sc-snk-tab-config{--ez-icon--color:var(--snk-tab-config__tab-hover--color)}.tab-config__tab--is-active.sc-snk-tab-config:hover .tab-config__right-icon.sc-snk-tab-config{--ez-icon--color:var(--snk-tab-config__tab-is-active--color)}.tab-config__actions-button.sc-snk-tab-config{--ez-actions-button__btn-action--min-width:100px;visibility:hidden;opacity:0;transition:visibility 1s linear, opacity 0.3s linear}.tab-config__tab.sc-snk-tab-config:hover .tab-config__actions-button.sc-snk-tab-config{visibility:visible;opacity:1;transition:visibility 0.2s linear, opacity 0.10s linear}[data-draggable-element].sc-snk-tab-config{cursor:grab}.tab-config__tab-label-disabled.sc-snk-tab-config{color:var(--snk-tab-config__tab-label-disabled--color)}.tab-config__slot.sc-snk-tab-config{margin-left:var(--snk-tab-config__slot--margin-left)}";
@@ -8,7 +8,7 @@ class TaskbarProcessor {
8
8
  var _a;
9
9
  this.customButtons = new Map();
10
10
  this.buttons = "";
11
- this.disabledButtons = [];
11
+ this.disabledButtons = [].concat(disabledButtons);
12
12
  (_a = this.getButtonsArray(taskbarId, taskbarManager, dataState)) === null || _a === void 0 ? void 0 : _a.forEach(btnDef => {
13
13
  let buttonName;
14
14
  if (typeof btnDef === "string") {
@@ -7,6 +7,7 @@ import { VIEW_MODE } from '../../../lib/utils/constants';
7
7
  import { SnkGuidesViewer } from './snk-guides-viewer';
8
8
  export class SnkDetailView {
9
9
  constructor() {
10
+ this._disabledButtons = undefined;
10
11
  this.formConfigManager = undefined;
11
12
  this.dataUnitName = undefined;
12
13
  this.guideItemPath = undefined;
@@ -42,6 +43,14 @@ export class SnkDetailView {
42
43
  if (closeInsertion) {
43
44
  this.changeViewMode(VIEW_MODE.GRID);
44
45
  }
46
+ const disabledButtons = [];
47
+ if (!this.dataState.hasPrevious) {
48
+ disabledButtons.push(TaskbarElement.PREVIOUS);
49
+ }
50
+ if (!this.dataState.hasNext) {
51
+ disabledButtons.push(TaskbarElement.NEXT);
52
+ }
53
+ this._disabledButtons = disabledButtons;
45
54
  }
46
55
  /**
47
56
  * Muda o modo de visualização do componente entre VIEW_MODE.GRID e VIEW_MODE.FORM
@@ -177,7 +186,7 @@ export class SnkDetailView {
177
186
  render() {
178
187
  this.updateLabel();
179
188
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
180
- return (h(Host, null, h("snk-data-unit", { dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: evt => this.dataState = evt.detail }, 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-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, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: evt => this.executeActionHandler(evt), presentationMode: PresentationMode.SECONDARY }))), 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 }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, 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 })))))));
189
+ return (h(Host, null, h("snk-data-unit", { dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: evt => this.dataState = evt.detail }, 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-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, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: evt => this.executeActionHandler(evt), presentationMode: PresentationMode.SECONDARY }))), 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 }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, 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 })))))));
181
190
  }
182
191
  static get is() { return "snk-detail-view"; }
183
192
  static get encapsulation() { return "scoped"; }
@@ -346,6 +355,11 @@ export class SnkDetailView {
346
355
  }
347
356
  };
348
357
  }
358
+ static get states() {
359
+ return {
360
+ "_disabledButtons": {}
361
+ };
362
+ }
349
363
  static get events() {
350
364
  return [{
351
365
  "method": "snkDetailGuidesChange",
@@ -142,7 +142,7 @@ export class SnkGuidesViewer {
142
142
  }
143
143
  }
144
144
  loadTaskbarProcessor() {
145
- var _a;
145
+ var _a, _b;
146
146
  const taskbarId = ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "snkGuideViewer.finish_edition" : "snkGuideViewer.regular";
147
147
  const disabledButtons = [];
148
148
  if (!this.dataState || !this.dataState.hasPrevious) {
@@ -151,6 +151,14 @@ export class SnkGuidesViewer {
151
151
  if (!this.dataState || !this.dataState.hasNext) {
152
152
  disabledButtons.push("NEXT");
153
153
  }
154
+ if ((_b = this.dataState) === null || _b === void 0 ? void 0 : _b.selectionInfo) {
155
+ if (this.dataState.selectionInfo.length > 1) {
156
+ disabledButtons.push("CLONE");
157
+ }
158
+ if (this.dataState.selectionInfo.isAllRecords()) {
159
+ disabledButtons.push("REMOVE");
160
+ }
161
+ }
154
162
  const btnsRegularMode = ["PREVIOUS", "NEXT", "DIVIDER", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "GRID_MODE", "CONFIGURATOR"];
155
163
  if (this.presentationMode == PresentationMode.SECONDARY) {
156
164
  btnsRegularMode.unshift("INSERT");
@@ -301,7 +309,7 @@ export class SnkGuidesViewer {
301
309
  }
302
310
  this.loadTaskbarProcessor();
303
311
  const showGuides = this._guides && (this._guides.length > 1);
304
- return (h("section", { class: "snk-guides-viewer" }, h("div", { class: "ez-row snk-guides-viewer__header" }, h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-flex--align-items-center ez-flex-item--align-center ez-padding-left--large", key: "header" }, h("ez-button", { onClick: () => this.exitViewer(), title: "tooltip", mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small" }), h("div", { class: "ez-flex ez-flex--column ez-flex-item--auto" }, h("h1", { class: "ez-title ez-title--primary ez-title--xlarge" }, this.getMessage("snkCrud.title")), ((_a = this._breadcrumbItems) === null || _a === void 0 ? void 0 : _a.length) > 1 &&
312
+ return (h("section", { class: "snk-guides-viewer" }, h("div", { class: "ez-row snk-guides-viewer__header" }, h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-flex--align-items-center ez-flex-item--align-center ez-padding-left--large", key: "header" }, h("ez-button", { onClick: () => this.exitViewer(), title: this.getMessage("snkCrud.goBackTitle"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small" }), h("div", { class: "ez-flex ez-flex--column ez-flex-item--auto" }, h("h1", { class: "ez-title ez-title--primary ez-title--xlarge" }, this.getMessage("snkCrud.title")), ((_a = this._breadcrumbItems) === null || _a === void 0 ? void 0 : _a.length) > 1 &&
305
313
  h("div", { class: "ez-margin-top--extra-small" }, h("ez-breadcrumb", Object.assign({ items: this._breadcrumbItems, onSelectedItem: (evt) => this.onBreadcrumbClickHandler(evt === null || evt === void 0 ? void 0 : evt.detail) }, { [ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME]: `${ElementIDUtils.getInternalIDInfo("breadcrumb")}` }))))), this.presentationMode != PresentationMode.SECONDARY && this.buildTaskBar()), h("div", { class: showGuides ? "snk-guides-viewer__container" : undefined }, showGuides && h("ez-guide-navigator", { ref: (ref) => this._guideNavigator = ref, class: "snk-guides-viewer__guide-navigator", items: this._guides, selectedId: this.selectedGuide ? this.selectedGuide.id : undefined, onEzChange: evt => this.updateSelectedGuideHandler(evt.detail) }), h("div", { class: "snk-guides-viewer__detail-container" }, SnkGuidesViewer.buildFixedForms(this.masterFormConfig, this._masterFormMetadata, (_b = this.selectedGuide) === null || _b === void 0 ? void 0 : _b.id, this.dataUnit, this.recordsValidator), this.getContent())), h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this.getConfigViewMode(), onConfigSelected: (evt) => this.changeConfigViewMode(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail) })));
306
314
  }
307
315
  static get is() { return "snk-guides-viewer"; }
@@ -2,7 +2,6 @@ import { Host, h } from '@stencil/core';
2
2
  import { Action, ApplicationContext, ObjectUtils, DataType, JSUtils } from '@sankhyalabs/core';
3
3
  import { ApplicationUtils, DialogType } from '@sankhyalabs/ezui/dist/collection/utils';
4
4
  import { OperationMap } from '../../lib/message/SnkMessageBuilder';
5
- import { ALL_RECORD } from '../../lib/utils/constants';
6
5
  export class SnkDataUnit {
7
6
  constructor() {
8
7
  this._onDataUnitResolve = [];
@@ -23,21 +22,27 @@ export class SnkDataUnit {
23
22
  this.cancelEdition.emit();
24
23
  }
25
24
  if (action.type === Action.RECORDS_REMOVED) {
26
- let removeFinishMsg;
27
25
  const cachedRecords = action.payload.cachedRecords;
26
+ let removeFinishMsg;
28
27
  if ((cachedRecords === null || cachedRecords === void 0 ? void 0 : cachedRecords.length) > 1) {
29
28
  removeFinishMsg = this.getMessage("snkDataUnit.removeAllInfo", { size: cachedRecords.length });
30
29
  }
31
- else if (cachedRecords === null || cachedRecords === void 0 ? void 0 : cachedRecords.some((record) => record.__record__id__ === ALL_RECORD)) {
32
- const size = (_b = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getPaginationInfo()) === null || _b === void 0 ? void 0 : _b.total;
33
- removeFinishMsg = this.getMessage("snkDataUnit.removeAllInfo", { size });
34
- }
35
30
  else {
36
- removeFinishMsg = this.getMessage("snkDataUnit.removeInfo", cachedRecords === null || cachedRecords === void 0 ? void 0 : cachedRecords[0]);
31
+ removeFinishMsg = this.getMessage("snkDataUnit.removeInfo", action.payload.cachedRecords[0]);
37
32
  }
38
33
  if (removeFinishMsg != undefined) {
39
34
  this.showSuccessMessage(removeFinishMsg);
40
35
  }
36
+ const recordsCount = (_b = (_a = this.dataUnit.records) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
37
+ const paginationInfo = this.dataUnit.getPaginationInfo();
38
+ if (paginationInfo) {
39
+ if (recordsCount > 0 || paginationInfo.hasMore) {
40
+ this.dataUnit.gotoPage(paginationInfo.currentPage);
41
+ }
42
+ else {
43
+ this.dataUnit.gotoPage(0);
44
+ }
45
+ }
41
46
  }
42
47
  this._application.messagesBuilder.currentOperation = this.getMessageOperation();
43
48
  };
@@ -99,8 +104,12 @@ export class SnkDataUnit {
99
104
  */
100
105
  async getSelectedRecordsIDsInfo() {
101
106
  var _a;
107
+ const selectionInfo = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getSelectionInfo();
108
+ if (selectionInfo === null || selectionInfo === void 0 ? void 0 : selectionInfo.isAllRecords()) {
109
+ return [];
110
+ }
102
111
  const selectedRecordsIDsInfo = [];
103
- const selectedRecords = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getSelection();
112
+ const selectedRecords = selectionInfo === null || selectionInfo === void 0 ? void 0 : selectionInfo.records;
104
113
  if ((selectedRecords === null || selectedRecords === void 0 ? void 0 : selectedRecords.length) > 0) {
105
114
  selectedRecords.forEach(({ __record__id__ }) => {
106
115
  if (!this.dataUnit.isNewRecord(__record__id__)) {
@@ -134,7 +143,7 @@ export class SnkDataUnit {
134
143
  }
135
144
  async interceptAction(action) {
136
145
  return new Promise(resolve => {
137
- var _a, _b, _c, _d;
146
+ var _a, _b;
138
147
  switch (action.type) {
139
148
  case Action.RECORDS_ADDED:
140
149
  if (this.isAllowed("INSERT")) {
@@ -212,14 +221,9 @@ export class SnkDataUnit {
212
221
  if (this.isAllowed("REMOVE")) {
213
222
  let multipleSelection = false;
214
223
  let removeConfirmation = this.getMessage("snkDataUnit.removeConfirmation");
215
- const selectedRecords = (_b = this.dataUnit) === null || _b === void 0 ? void 0 : _b.getSelection();
216
- if ((selectedRecords === null || selectedRecords === void 0 ? void 0 : selectedRecords.length) > 1) {
217
- removeConfirmation = this.getMessage("snkDataUnit.removeAllConfirmation", { size: selectedRecords.length });
218
- multipleSelection = true;
219
- }
220
- else if (selectedRecords === null || selectedRecords === void 0 ? void 0 : selectedRecords.some((record) => record.__record__id__ === ALL_RECORD)) {
221
- const size = (_d = (_c = this.dataUnit) === null || _c === void 0 ? void 0 : _c.getPaginationInfo()) === null || _d === void 0 ? void 0 : _d.total;
222
- removeConfirmation = this.getMessage("snkDataUnit.removeAllConfirmation", { size });
224
+ const selection = (_b = this.dataUnit) === null || _b === void 0 ? void 0 : _b.getSelectionInfo();
225
+ if ((selection === null || selection === void 0 ? void 0 : selection.length) > 1) {
226
+ removeConfirmation = this.getMessage("snkDataUnit.removeAllConfirmation", { size: selection.length });
223
227
  multipleSelection = true;
224
228
  }
225
229
  if (removeConfirmation == undefined) {
@@ -253,16 +257,18 @@ export class SnkDataUnit {
253
257
  return this._permissions ? this._permissions.isSup || this._permissions[flag] : false;
254
258
  }
255
259
  buildDataState() {
256
- return {
260
+ const selectionInfo = this.dataUnit.getSelectionInfo();
261
+ return new DataStateImpl({
257
262
  insertionMode: this.dataUnit.hasNewRecord(),
258
263
  hasNext: this.dataUnit.hasNext(),
259
264
  hasPrevious: this.dataUnit.hasPrevious(),
260
265
  copyMode: this.dataUnit.hasCopiedRecord(),
261
266
  isDirty: this.dataUnit.isDirty(),
262
267
  hasDirtyRecords: this.dataUnit.hasDirtyRecords(),
263
- selectedRecords: this.dataUnit.getSelection(),
268
+ selectedRecords: undefined,
269
+ selectionInfo,
264
270
  selectedRecord: this.dataUnit.getSelectedRecord()
265
- };
271
+ });
266
272
  }
267
273
  /**
268
274
  * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
@@ -277,10 +283,9 @@ export class SnkDataUnit {
277
283
  return this._application.messagesBuilder.getMessage(key, params);
278
284
  }
279
285
  getMessageParams() {
280
- //TODO: Atualmente ainda não usamos o recurso de multiseleção do dataunit, mas no futuro
281
- //precisaremos criar um mecanismo para oferecer todos os registros selecionados para a
282
- //mensagem
283
- return this.dataState.selectedRecords ? this.dataState.selectedRecords[0] : undefined;
286
+ //FIXME: Devido ao recurso de multiseleção do dataunit, precisaremos criar um mecanismo para
287
+ //oferecer todos os registros selecionados para a mensagem, pois mensagens podem ficar incorretas.
288
+ return this.dataState.selectedRecord;
284
289
  }
285
290
  getMessageOperation() {
286
291
  if (this.dataState.copyMode) {
@@ -663,3 +668,23 @@ export class SnkDataUnit {
663
668
  }];
664
669
  }
665
670
  }
671
+ class DataStateImpl {
672
+ constructor(datastate) {
673
+ this.copyMode = datastate.copyMode;
674
+ this.insertionMode = datastate.insertionMode;
675
+ this.isDirty = datastate.isDirty;
676
+ this.hasDirtyRecords = datastate.hasDirtyRecords;
677
+ this.hasNext = datastate.hasNext;
678
+ this.hasPrevious = datastate.hasPrevious;
679
+ this.selectionInfo = datastate.selectionInfo;
680
+ this.selectedRecord = datastate.selectedRecord;
681
+ }
682
+ get selectedRecords() {
683
+ var _a;
684
+ console.warn("SnkDataUnit: O método `selectedRecords` foi descontinuado. Use o método `selectionInfo`.");
685
+ if ((_a = this.selectionInfo) === null || _a === void 0 ? void 0 : _a.isAllRecords()) {
686
+ throw new Error("Erro interno: Impossível obter os registros selecionados. A seleção atual é virtual. Use o atributo `selectionInfo`.");
687
+ }
688
+ return this.selectionInfo.records;
689
+ }
690
+ }
@@ -971,7 +971,7 @@ export class SnkFormConfig {
971
971
  }
972
972
  render() {
973
973
  var _a, _b, _c, _d;
974
- return (h(Host, null, h("div", { class: "ez-row ez-padding--medium" }, h("div", { class: "ez-col ez-col--sd-7 ez-col--tb-9 ez-align--middle" }, h("ez-button", { mode: "icon", iconName: "arrow_back", class: "ez-padding--small", size: "small", onClick: () => this.closeFormConfig(), id: "formConfigToBack" }), h("h1", { class: "ez-title ez-title--extra-large ez-padding--small" }, this.getMessage("snkFormConfig.title")), this._formConfigOptions &&
974
+ return (h(Host, null, h("div", { class: "ez-row ez-padding--medium" }, h("div", { class: "ez-col ez-col--sd-7 ez-col--tb-9 ez-align--middle" }, h("ez-button", { mode: "icon", title: this.getMessage("snkFormConfig.goBackTitle"), iconName: "arrow_back", class: "ez-padding--small", size: "small", onClick: () => this.closeFormConfig(), id: "formConfigToBack" }), h("h1", { class: "ez-title ez-title--extra-large ez-padding--small" }, this.getMessage("snkFormConfig.title")), this._formConfigOptions &&
975
975
  h("ez-actions-button", { class: "form-config__actions-button ez-margin-left--medium", value: (_a = this._optionFormConfigSelected) === null || _a === void 0 ? void 0 : _a.origin, showLabel: true, displayIcon: "chevron-down", checkOption: true, size: "small", actions: this._formConfigOptions.map((option) => {
976
976
  return { value: option.origin, label: option.name };
977
977
  }), onEzAction: (evt) => this.controlSelectFormConfig(evt), id: "selectConfig" })), h("div", { class: "ez-col ez-col--sd-5 ez-col--tb-3 ez-align--middle ez-align--right" }, this._formConfigChanged === true && this._optionFormConfigChanged === false &&
@@ -142,7 +142,6 @@ export class SnkGrid {
142
142
  }
143
143
  async dataExporterProviderStore() {
144
144
  var _a, _b;
145
- const paginationInfo = this.getPaginationInfo();
146
145
  const columnsMetadata = [];
147
146
  const selectedIDs = await ((_a = this._snkDataUnit) === null || _a === void 0 ? void 0 : _a.getSelectedRecordsIDsInfo());
148
147
  await ((_b = this._grid) === null || _b === void 0 ? void 0 : _b.getColumnsState().then(this.buildColumnsMetadata.bind(this, columnsMetadata)));
@@ -164,7 +163,7 @@ export class SnkGrid {
164
163
  },
165
164
  getSelectedNumber: () => {
166
165
  var _a, _b;
167
- return (_b = (_a = this._dataState) === null || _a === void 0 ? void 0 : _a.selectedRecords) === null || _b === void 0 ? void 0 : _b.length;
166
+ return (_b = (_a = this._dataState) === null || _a === void 0 ? void 0 : _a.selectionInfo) === null || _b === void 0 ? void 0 : _b.length;
168
167
  },
169
168
  getTotalRecords: () => {
170
169
  var _a, _b, _c;
@@ -175,7 +174,7 @@ export class SnkGrid {
175
174
  return selectedIDs || [];
176
175
  },
177
176
  getOffset: () => {
178
- return this.getExporterOffset(paginationInfo);
177
+ return this.getExporterOffset(this.getPaginationInfo());
179
178
  },
180
179
  getLimit: () => {
181
180
  var _a;
@@ -217,10 +216,23 @@ export class SnkGrid {
217
216
  }
218
217
  this.loadConfig();
219
218
  }
219
+ getHeaderDisabledButtons() {
220
+ var _a;
221
+ const disabledButtons = [];
222
+ if ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.selectionInfo) {
223
+ if (this._dataState.selectionInfo.length > 1) {
224
+ disabledButtons.push("CLONE");
225
+ }
226
+ if (this._dataState.selectionInfo.isAllRecords()) {
227
+ disabledButtons.push("REMOVE");
228
+ }
229
+ }
230
+ return disabledButtons;
231
+ }
220
232
  componentWillRender() {
221
233
  const invisibleButtons = this._dataUnit && this._dataUnit.records.length > 0 ? [] : ["DATA_EXPORTER"];
222
- const headerTaskbarId = this._dataState && this._dataState.selectedRecords.length > 0 ? "snkGridHeaderTaskbar.selected" : "snkGridHeaderTaskbar.unselected";
223
- this._headerTaskbarProcessor.process(headerTaskbarId, this.taskbarManager, this._dataState, undefined, invisibleButtons);
234
+ const headerTaskbarId = this._dataState && this._dataState.selectionInfo.isEmpty() ? "snkGridHeaderTaskbar.unselected" : "snkGridHeaderTaskbar.selected";
235
+ this._headerTaskbarProcessor.process(headerTaskbarId, this.taskbarManager, this._dataState, this.getHeaderDisabledButtons(), invisibleButtons);
224
236
  this._topTaskbarProcessor.process(this.getTopTaskBarId(this.presentationMode === PresentationMode.SECONDARY ? ".secondary" : ""), this.taskbarManager, this._dataState, undefined, invisibleButtons);
225
237
  this.dataExporterProviderStore();
226
238
  }
@@ -6,7 +6,7 @@ export default class TaskbarProcessor {
6
6
  var _a;
7
7
  this.customButtons = new Map();
8
8
  this.buttons = "";
9
- this.disabledButtons = [];
9
+ this.disabledButtons = [].concat(disabledButtons);
10
10
  (_a = this.getButtonsArray(taskbarId, taskbarManager, dataState)) === null || _a === void 0 ? void 0 : _a.forEach(btnDef => {
11
11
  let buttonName;
12
12
  if (typeof btnDef === "string") {
@@ -14,6 +14,7 @@ export const snkConfigOptionsMessages = {
14
14
  };
15
15
  export const snkFormConfigMessages = {
16
16
  title: "Configuração do formulário",
17
+ goBackTitle: "Voltar",
17
18
  applyConfig: "Aplicar configuração",
18
19
  availableFields: {
19
20
  title: "Campos disponíveis",
@@ -137,6 +137,7 @@ const snkConfigOptionsMessages = {
137
137
  };
138
138
  const snkFormConfigMessages = {
139
139
  title: "Configuração do formulário",
140
+ goBackTitle: "Voltar",
140
141
  applyConfig: "Aplicar configuração",
141
142
  availableFields: {
142
143
  title: "Campos disponíveis",
@@ -1,6 +1,5 @@
1
1
  const REPORT_LAUNCHER_RESOURCE_ID = "br.com.sankhya.controls.ReportLauncher";
2
2
  const KEY_PORT_EXPORT = "global.porta.app.impressao";
3
- const ALL_RECORD = "ALL_RECORD";
4
3
  var VIEW_MODE;
5
4
  (function (VIEW_MODE) {
6
5
  VIEW_MODE[VIEW_MODE["GRID"] = 0] = "GRID";
@@ -99,4 +98,4 @@ var SIMPLE_CRUD_MODE;
99
98
  SIMPLE_CRUD_MODE[SIMPLE_CRUD_MODE["IN_MEMORY"] = 1] = "IN_MEMORY";
100
99
  })(SIMPLE_CRUD_MODE || (SIMPLE_CRUD_MODE = {}));
101
100
 
102
- export { ALL_RECORD as A, CONFIG_EVENTS as C, DEFAULT_TYPE as D, KEY_PORT_EXPORT as K, ORDER_VALUES as O, REPORT_LAUNCHER_RESOURCE_ID as R, SIMPLE_CRUD_MODE as S, TAGS_BY_TYPE as T, VIEW_MODE as V, WEB_CONNECTION as W, VARS_BY_TYPE as a, ACTION_CONFIG as b, TAB_NAMES as c, KEY_EVENTS as d, TYPE_ACTIONS as e };
101
+ export { ACTION_CONFIG as A, CONFIG_EVENTS as C, DEFAULT_TYPE as D, KEY_PORT_EXPORT as K, ORDER_VALUES as O, REPORT_LAUNCHER_RESOURCE_ID as R, SIMPLE_CRUD_MODE as S, TAGS_BY_TYPE as T, VIEW_MODE as V, WEB_CONNECTION as W, VARS_BY_TYPE as a, TAB_NAMES as b, KEY_EVENTS as c, TYPE_ACTIONS as d };
@@ -2,7 +2,6 @@ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/
2
2
  import { Action, ObjectUtils, JSUtils, ApplicationContext, DataType } from '@sankhyalabs/core';
3
3
  import { ApplicationUtils, DialogType } from '@sankhyalabs/ezui/dist/collection/utils';
4
4
  import { O as OperationMap } from './SnkMessageBuilder.js';
5
- import { A as ALL_RECORD } from './constants.js';
6
5
 
7
6
  const snkDataUnitCss = ".sc-snk-data-unit-h{display:flex;flex-direction:column;height:100%;width:100%}";
8
7
 
@@ -32,21 +31,27 @@ const SnkDataUnit = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
32
31
  this.cancelEdition.emit();
33
32
  }
34
33
  if (action.type === Action.RECORDS_REMOVED) {
35
- let removeFinishMsg;
36
34
  const cachedRecords = action.payload.cachedRecords;
35
+ let removeFinishMsg;
37
36
  if ((cachedRecords === null || cachedRecords === void 0 ? void 0 : cachedRecords.length) > 1) {
38
37
  removeFinishMsg = this.getMessage("snkDataUnit.removeAllInfo", { size: cachedRecords.length });
39
38
  }
40
- else if (cachedRecords === null || cachedRecords === void 0 ? void 0 : cachedRecords.some((record) => record.__record__id__ === ALL_RECORD)) {
41
- const size = (_b = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getPaginationInfo()) === null || _b === void 0 ? void 0 : _b.total;
42
- removeFinishMsg = this.getMessage("snkDataUnit.removeAllInfo", { size });
43
- }
44
39
  else {
45
- removeFinishMsg = this.getMessage("snkDataUnit.removeInfo", cachedRecords === null || cachedRecords === void 0 ? void 0 : cachedRecords[0]);
40
+ removeFinishMsg = this.getMessage("snkDataUnit.removeInfo", action.payload.cachedRecords[0]);
46
41
  }
47
42
  if (removeFinishMsg != undefined) {
48
43
  this.showSuccessMessage(removeFinishMsg);
49
44
  }
45
+ const recordsCount = (_b = (_a = this.dataUnit.records) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
46
+ const paginationInfo = this.dataUnit.getPaginationInfo();
47
+ if (paginationInfo) {
48
+ if (recordsCount > 0 || paginationInfo.hasMore) {
49
+ this.dataUnit.gotoPage(paginationInfo.currentPage);
50
+ }
51
+ else {
52
+ this.dataUnit.gotoPage(0);
53
+ }
54
+ }
50
55
  }
51
56
  this._application.messagesBuilder.currentOperation = this.getMessageOperation();
52
57
  };
@@ -108,8 +113,12 @@ const SnkDataUnit = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
108
113
  */
109
114
  async getSelectedRecordsIDsInfo() {
110
115
  var _a;
116
+ const selectionInfo = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getSelectionInfo();
117
+ if (selectionInfo === null || selectionInfo === void 0 ? void 0 : selectionInfo.isAllRecords()) {
118
+ return [];
119
+ }
111
120
  const selectedRecordsIDsInfo = [];
112
- const selectedRecords = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getSelection();
121
+ const selectedRecords = selectionInfo === null || selectionInfo === void 0 ? void 0 : selectionInfo.records;
113
122
  if ((selectedRecords === null || selectedRecords === void 0 ? void 0 : selectedRecords.length) > 0) {
114
123
  selectedRecords.forEach(({ __record__id__ }) => {
115
124
  if (!this.dataUnit.isNewRecord(__record__id__)) {
@@ -143,7 +152,7 @@ const SnkDataUnit = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
143
152
  }
144
153
  async interceptAction(action) {
145
154
  return new Promise(resolve => {
146
- var _a, _b, _c, _d;
155
+ var _a, _b;
147
156
  switch (action.type) {
148
157
  case Action.RECORDS_ADDED:
149
158
  if (this.isAllowed("INSERT")) {
@@ -221,14 +230,9 @@ const SnkDataUnit = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
221
230
  if (this.isAllowed("REMOVE")) {
222
231
  let multipleSelection = false;
223
232
  let removeConfirmation = this.getMessage("snkDataUnit.removeConfirmation");
224
- const selectedRecords = (_b = this.dataUnit) === null || _b === void 0 ? void 0 : _b.getSelection();
225
- if ((selectedRecords === null || selectedRecords === void 0 ? void 0 : selectedRecords.length) > 1) {
226
- removeConfirmation = this.getMessage("snkDataUnit.removeAllConfirmation", { size: selectedRecords.length });
227
- multipleSelection = true;
228
- }
229
- else if (selectedRecords === null || selectedRecords === void 0 ? void 0 : selectedRecords.some((record) => record.__record__id__ === ALL_RECORD)) {
230
- const size = (_d = (_c = this.dataUnit) === null || _c === void 0 ? void 0 : _c.getPaginationInfo()) === null || _d === void 0 ? void 0 : _d.total;
231
- removeConfirmation = this.getMessage("snkDataUnit.removeAllConfirmation", { size });
233
+ const selection = (_b = this.dataUnit) === null || _b === void 0 ? void 0 : _b.getSelectionInfo();
234
+ if ((selection === null || selection === void 0 ? void 0 : selection.length) > 1) {
235
+ removeConfirmation = this.getMessage("snkDataUnit.removeAllConfirmation", { size: selection.length });
232
236
  multipleSelection = true;
233
237
  }
234
238
  if (removeConfirmation == undefined) {
@@ -262,16 +266,18 @@ const SnkDataUnit = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
262
266
  return this._permissions ? this._permissions.isSup || this._permissions[flag] : false;
263
267
  }
264
268
  buildDataState() {
265
- return {
269
+ const selectionInfo = this.dataUnit.getSelectionInfo();
270
+ return new DataStateImpl({
266
271
  insertionMode: this.dataUnit.hasNewRecord(),
267
272
  hasNext: this.dataUnit.hasNext(),
268
273
  hasPrevious: this.dataUnit.hasPrevious(),
269
274
  copyMode: this.dataUnit.hasCopiedRecord(),
270
275
  isDirty: this.dataUnit.isDirty(),
271
276
  hasDirtyRecords: this.dataUnit.hasDirtyRecords(),
272
- selectedRecords: this.dataUnit.getSelection(),
277
+ selectedRecords: undefined,
278
+ selectionInfo,
273
279
  selectedRecord: this.dataUnit.getSelectedRecord()
274
- };
280
+ });
275
281
  }
276
282
  /**
277
283
  * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
@@ -286,10 +292,9 @@ const SnkDataUnit = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
286
292
  return this._application.messagesBuilder.getMessage(key, params);
287
293
  }
288
294
  getMessageParams() {
289
- //TODO: Atualmente ainda não usamos o recurso de multiseleção do dataunit, mas no futuro
290
- //precisaremos criar um mecanismo para oferecer todos os registros selecionados para a
291
- //mensagem
292
- return this.dataState.selectedRecords ? this.dataState.selectedRecords[0] : undefined;
295
+ //FIXME: Devido ao recurso de multiseleção do dataunit, precisaremos criar um mecanismo para
296
+ //oferecer todos os registros selecionados para a mensagem, pois mensagens podem ficar incorretas.
297
+ return this.dataState.selectedRecord;
293
298
  }
294
299
  getMessageOperation() {
295
300
  if (this.dataState.copyMode) {
@@ -396,6 +401,26 @@ const SnkDataUnit = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
396
401
  "getDataUnit": [64],
397
402
  "getSelectedRecordsIDsInfo": [64]
398
403
  }]);
404
+ class DataStateImpl {
405
+ constructor(datastate) {
406
+ this.copyMode = datastate.copyMode;
407
+ this.insertionMode = datastate.insertionMode;
408
+ this.isDirty = datastate.isDirty;
409
+ this.hasDirtyRecords = datastate.hasDirtyRecords;
410
+ this.hasNext = datastate.hasNext;
411
+ this.hasPrevious = datastate.hasPrevious;
412
+ this.selectionInfo = datastate.selectionInfo;
413
+ this.selectedRecord = datastate.selectedRecord;
414
+ }
415
+ get selectedRecords() {
416
+ var _a;
417
+ console.warn("SnkDataUnit: O método `selectedRecords` foi descontinuado. Use o método `selectionInfo`.");
418
+ if ((_a = this.selectionInfo) === null || _a === void 0 ? void 0 : _a.isAllRecords()) {
419
+ throw new Error("Erro interno: Impossível obter os registros selecionados. A seleção atual é virtual. Use o atributo `selectionInfo`.");
420
+ }
421
+ return this.selectionInfo.records;
422
+ }
423
+ }
399
424
  function defineCustomElement() {
400
425
  if (typeof customElements === "undefined") {
401
426
  return;
@@ -168,7 +168,7 @@ const SnkGuidesViewer = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
168
168
  }
169
169
  }
170
170
  loadTaskbarProcessor() {
171
- var _a;
171
+ var _a, _b;
172
172
  const taskbarId = ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "snkGuideViewer.finish_edition" : "snkGuideViewer.regular";
173
173
  const disabledButtons = [];
174
174
  if (!this.dataState || !this.dataState.hasPrevious) {
@@ -177,6 +177,14 @@ const SnkGuidesViewer = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
177
177
  if (!this.dataState || !this.dataState.hasNext) {
178
178
  disabledButtons.push("NEXT");
179
179
  }
180
+ if ((_b = this.dataState) === null || _b === void 0 ? void 0 : _b.selectionInfo) {
181
+ if (this.dataState.selectionInfo.length > 1) {
182
+ disabledButtons.push("CLONE");
183
+ }
184
+ if (this.dataState.selectionInfo.isAllRecords()) {
185
+ disabledButtons.push("REMOVE");
186
+ }
187
+ }
180
188
  const btnsRegularMode = ["PREVIOUS", "NEXT", "DIVIDER", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "GRID_MODE", "CONFIGURATOR"];
181
189
  if (this.presentationMode == PresentationMode.SECONDARY) {
182
190
  btnsRegularMode.unshift("INSERT");
@@ -327,7 +335,7 @@ const SnkGuidesViewer = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
327
335
  }
328
336
  this.loadTaskbarProcessor();
329
337
  const showGuides = this._guides && (this._guides.length > 1);
330
- return (h("section", { class: "snk-guides-viewer" }, h("div", { class: "ez-row snk-guides-viewer__header" }, h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-flex--align-items-center ez-flex-item--align-center ez-padding-left--large", key: "header" }, h("ez-button", { onClick: () => this.exitViewer(), title: "tooltip", mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small" }), h("div", { class: "ez-flex ez-flex--column ez-flex-item--auto" }, h("h1", { class: "ez-title ez-title--primary ez-title--xlarge" }, this.getMessage("snkCrud.title")), ((_a = this._breadcrumbItems) === null || _a === void 0 ? void 0 : _a.length) > 1 &&
338
+ return (h("section", { class: "snk-guides-viewer" }, h("div", { class: "ez-row snk-guides-viewer__header" }, h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-flex--align-items-center ez-flex-item--align-center ez-padding-left--large", key: "header" }, h("ez-button", { onClick: () => this.exitViewer(), title: this.getMessage("snkCrud.goBackTitle"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small" }), h("div", { class: "ez-flex ez-flex--column ez-flex-item--auto" }, h("h1", { class: "ez-title ez-title--primary ez-title--xlarge" }, this.getMessage("snkCrud.title")), ((_a = this._breadcrumbItems) === null || _a === void 0 ? void 0 : _a.length) > 1 &&
331
339
  h("div", { class: "ez-margin-top--extra-small" }, h("ez-breadcrumb", Object.assign({ items: this._breadcrumbItems, onSelectedItem: (evt) => this.onBreadcrumbClickHandler(evt === null || evt === void 0 ? void 0 : evt.detail) }, { [ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME]: `${ElementIDUtils.getInternalIDInfo("breadcrumb")}` }))))), this.presentationMode != PresentationMode.SECONDARY && this.buildTaskBar()), h("div", { class: showGuides ? "snk-guides-viewer__container" : undefined }, showGuides && h("ez-guide-navigator", { ref: (ref) => this._guideNavigator = ref, class: "snk-guides-viewer__guide-navigator", items: this._guides, selectedId: this.selectedGuide ? this.selectedGuide.id : undefined, onEzChange: evt => this.updateSelectedGuideHandler(evt.detail) }), h("div", { class: "snk-guides-viewer__detail-container" }, SnkGuidesViewer.buildFixedForms(this.masterFormConfig, this._masterFormMetadata, (_b = this.selectedGuide) === null || _b === void 0 ? void 0 : _b.id, this.dataUnit, this.recordsValidator), this.getContent())), h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this.getConfigViewMode(), onConfigSelected: (evt) => this.changeConfigViewMode(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail) })));
332
340
  }
333
341
  static get watchers() { return {
@@ -475,6 +483,7 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
475
483
  this.__registerHost();
476
484
  this.snkDetailGuidesChange = createEvent(this, "snkDetailGuidesChange", 7);
477
485
  this.snkSwitchGuide = createEvent(this, "snkSwitchGuide", 7);
486
+ this._disabledButtons = undefined;
478
487
  this.formConfigManager = undefined;
479
488
  this.dataUnitName = undefined;
480
489
  this.guideItemPath = undefined;
@@ -510,6 +519,14 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
510
519
  if (closeInsertion) {
511
520
  this.changeViewMode(VIEW_MODE.GRID);
512
521
  }
522
+ const disabledButtons = [];
523
+ if (!this.dataState.hasPrevious) {
524
+ disabledButtons.push(TaskbarElement.PREVIOUS);
525
+ }
526
+ if (!this.dataState.hasNext) {
527
+ disabledButtons.push(TaskbarElement.NEXT);
528
+ }
529
+ this._disabledButtons = disabledButtons;
513
530
  }
514
531
  /**
515
532
  * Muda o modo de visualização do componente entre VIEW_MODE.GRID e VIEW_MODE.FORM
@@ -645,7 +662,7 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
645
662
  render() {
646
663
  this.updateLabel();
647
664
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
648
- return (h(Host, null, h("snk-data-unit", { dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: evt => this.dataState = evt.detail }, 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-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, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: evt => this.executeActionHandler(evt), presentationMode: PresentationMode.SECONDARY }))), 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 }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, 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 })))))));
665
+ return (h(Host, null, h("snk-data-unit", { dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: evt => this.dataState = evt.detail }, 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-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, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: evt => this.executeActionHandler(evt), presentationMode: PresentationMode.SECONDARY }))), 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 }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, 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 })))))));
649
666
  }
650
667
  static get watchers() { return {
651
668
  "dataState": ["observerDataState"]
@@ -660,6 +677,7 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
660
677
  "dataUnit": [1040],
661
678
  "selectedForm": [1025, "selected-form"],
662
679
  "dataState": [1040],
680
+ "_disabledButtons": [32],
663
681
  "changeViewMode": [64],
664
682
  "configGrid": [64],
665
683
  "showUp": [64]
@@ -1,6 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
2
  import { ApplicationContext, ElementIDUtils } from '@sankhyalabs/core';
3
- import { b as ACTION_CONFIG } from './constants.js';
3
+ import { A as ACTION_CONFIG } from './constants.js';
4
4
 
5
5
  const snkFieldConfigCss = ".sc-snk-field-config-h{--snk-field-config--height:42px;--snk-field-config--width:100%;--snk-field-config__icon--width:48px;--snk-field-config-slim--height:32px;--snk-field-config--border-radius:var(--border--radius-medium, 12px);--snk-field-config--font-size:var(--text--medium, 14px);--snk-field-config--font-family:var(--font-pattern, Arial);--snk-field-config--font-weight:var(--text-weight--medium, 400);--snk-field-config--color:var(--title--primary, #000);--snk-field-config--padding-left:var(--space--medium, 6px);--snk-field-config__input--background-color:var(--background--medium, #e0e0e0);--snk-field-config__input--border:var(--border--medium, 2px solid);--snk-field-config__input--border-color:var(--background--xlight, #fff);--snk-field-config__required--color:var(--color--error, #FF0000);--snk-field-config__label--gap:var(--space--extra-small, 3px);--snk-field-config__transition--visibility:var(--transition, 0.2s linear);--snk-field-config__transition--opacity:var(--transition, 0.15s linear);--snk-field-config__config-popover--z-index:var(--more-visible, 2);--snk-field-config__config-outer-arrow--background-color:var(--color--secondary-200, #D2D3DA);--snk-field-config__draggable--padding-right:var(--space--small, 6px);display:flex;flex-wrap:wrap;position:relative;width:var(--snk-field-config--width)}.field-config.sc-snk-field-config{width:100%;box-sizing:border-box;display:flex;align-items:center;padding-left:var(--snk-field-config--padding-left);font-weight:var(--snk-field-config--font-weight);height:var(--snk-field-config--height);border-radius:var(--snk-field-config--border-radius);font-family:var(--snk-field-config--font-family);font-size:var(--snk-field-config--font-size);border:var(--snk-field-config__input--border);border-color:var(--snk-field-config__input--border-color);background-color:var(--snk-field-config__input--background-color);color:var(--snk-field-config--color)}.field-config__config-popover.sc-snk-field-config{width:40px;margin-left:auto;z-index:var(--snk-field-config__config-popover--z-index)}.field-config__label.sc-snk-field-config{display:flex;flex-direction:row-reverse;line-height:calc(var(--snk-field-config--font-size) + 2px);gap:var(--snk-field-config__label--gap)}.field-config__label-text.sc-snk-field-config{overflow:hidden;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;height:auto;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;display:-webkit-box;-o-text-overflow:ellipsis;text-overflow:ellipsis;word-break:break-word}.field-config__label-required.sc-snk-field-config{color:var(--snk-field-config__required--color)}.field-config__add.sc-snk-field-config{display:flex;margin-left:auto;visibility:hidden;opacity:0;transition:visibility var(--snk-field-config__transition--visibility), opacity var(--snk-field-config__transition--opacity)}.field-config__options.sc-snk-field-config{display:flex;margin-left:auto;visibility:hidden;opacity:0;transition:visibility var(--snk-field-config__transition--visibility), opacity var(--snk-field-config__transition--opacity)}.field-config__options--is-active.sc-snk-field-config{display:flex;visibility:visible;opacity:1}.field-config__remove-icon.sc-snk-field-config{margin-right:-15px}.field-config.sc-snk-field-config:hover .field-config__options.sc-snk-field-config{display:flex;visibility:visible;opacity:1}.field-config.sc-snk-field-config:hover .field-config__add.sc-snk-field-config{visibility:visible;opacity:1}.field-config__draggable.sc-snk-field-config{padding-right:var(--snk-field-config__draggable--padding-right)}.field-config__config-outer-arrow.sc-snk-field-config{clip-path:polygon(50% 0, 90% 100%, 10% 100%);border-radius:0.25em 0 0 0;width:30px;height:15px;padding-top:3px;border-bottom:1px solid #FFFFFF;background-color:var(--snk-field-config__config-outer-arrow--background-color)}.field-config__config-inner-arrow.sc-snk-field-config{background-color:#FFFFFF;clip-path:polygon(50% 0, 90% 100%, 10% 100%);border-radius:0.25em 0 0 0;width:30px;height:15px}.ez-box__container.sc-snk-field-config ez-collapsible-box.sc-snk-field-config{--snk-collapsible-box__header--padding-left:6px}ez-icon.sc-snk-field-config{--snk-icon--color:var(--snk-field-config--color)}ez-popover.sc-snk-field-config{--snk-popover__box--background-color:transparent;--snk-popover__box--box-shadow:none}.field-config__options.sc-snk-field-config ez-button.sc-snk-field-config{--snk-button--background-color:transparent;--snk-button--focus--border:none;--snk-button--focus--box-shadow:none}@media screen and (min-width: 1200px){.field-config__label.sc-snk-field-config{flex-direction:row}}";
6
6