@sankhyalabs/sankhyablocks 8.16.0-dev.104 → 8.16.0-dev.106

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 (107) hide show
  1. package/dist/cjs/{ClientSideExporterProvider-8c219037.js → ClientSideExporterProvider-a2753c93.js} +3 -3
  2. package/dist/cjs/{SnkMessageBuilder-bae64d0d.js → SnkMessageBuilder-aecd7c18.js} +31 -24
  3. package/dist/cjs/{dataunit-fetcher-4a5d491a.js → dataunit-fetcher-a723f0dc.js} +5 -2
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/pesquisa-grid_2.cjs.entry.js +1 -1
  6. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  7. package/dist/cjs/snk-actions-button_7.cjs.entry.js +1 -1
  8. package/dist/cjs/snk-application.cjs.entry.js +2 -2
  9. package/dist/cjs/snk-attach.cjs.entry.js +2 -2
  10. package/dist/cjs/snk-crud.cjs.entry.js +19 -11
  11. package/dist/cjs/snk-data-exporter.cjs.entry.js +3 -3
  12. package/dist/cjs/{snk-data-unit-4b510d6e.js → snk-data-unit-ebfdb9ba.js} +226 -12
  13. package/dist/cjs/snk-data-unit.cjs.entry.js +3 -3
  14. package/dist/cjs/snk-detail-view.cjs.entry.js +4 -4
  15. package/dist/cjs/snk-grid.cjs.entry.js +23 -9
  16. package/dist/cjs/{snk-guides-viewer-e8e5f7b4.js → snk-guides-viewer-fd39f437.js} +99 -44
  17. package/dist/cjs/snk-guides-viewer.cjs.entry.js +3 -3
  18. package/dist/cjs/snk-pesquisa.cjs.entry.js +1 -1
  19. package/dist/cjs/snk-simple-crud.cjs.entry.js +67 -24
  20. package/dist/cjs/snk-taskbar.cjs.entry.js +2 -1
  21. package/dist/cjs/{taskbar-elements-7e19882d.js → taskbar-elements-02379452.js} +3 -0
  22. package/dist/collection/components/snk-crud/snk-crud.js +35 -9
  23. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +117 -43
  24. package/dist/collection/components/snk-data-unit/MultipleUpdateHelper.js +128 -0
  25. package/dist/collection/components/snk-data-unit/snk-data-unit.js +107 -12
  26. package/dist/collection/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.js +2 -2
  27. package/dist/collection/components/snk-grid/snk-grid.js +38 -6
  28. package/dist/collection/components/snk-simple-crud/snk-simple-crud.js +83 -22
  29. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +3 -0
  30. package/dist/collection/components/snk-taskbar/snk-taskbar.js +2 -2
  31. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.js +5 -2
  32. package/dist/collection/lib/message/SnkMessageBuilder.js +1 -0
  33. package/dist/collection/lib/message/resources/snk-data-unit.msg.js +28 -23
  34. package/dist/collection/lib/message/resources/snk-taskbar.msg.js +1 -0
  35. package/dist/components/ContinuousInsertUtils.js +2 -2
  36. package/dist/components/SnkMessageBuilder.js +31 -24
  37. package/dist/components/dataunit-fetcher.js +5 -2
  38. package/dist/components/snk-crud.js +18 -9
  39. package/dist/components/snk-data-unit2.js +225 -11
  40. package/dist/components/snk-detail-view2.js +98 -43
  41. package/dist/components/snk-grid2.js +21 -6
  42. package/dist/components/snk-simple-crud2.js +66 -22
  43. package/dist/components/snk-taskbar2.js +4 -0
  44. package/dist/esm/{ClientSideExporterProvider-a37f890b.js → ClientSideExporterProvider-b3871edb.js} +3 -3
  45. package/dist/esm/{SnkMessageBuilder-6fff4a4c.js → SnkMessageBuilder-12f5fe1a.js} +31 -24
  46. package/dist/esm/{dataunit-fetcher-1d02ecfc.js → dataunit-fetcher-0e025732.js} +5 -2
  47. package/dist/esm/loader.js +1 -1
  48. package/dist/esm/pesquisa-grid_2.entry.js +1 -1
  49. package/dist/esm/sankhyablocks.js +1 -1
  50. package/dist/esm/snk-actions-button_7.entry.js +1 -1
  51. package/dist/esm/snk-application.entry.js +2 -2
  52. package/dist/esm/snk-attach.entry.js +2 -2
  53. package/dist/esm/snk-crud.entry.js +19 -11
  54. package/dist/esm/snk-data-exporter.entry.js +3 -3
  55. package/dist/esm/{snk-data-unit-7d0ce406.js → snk-data-unit-03654813.js} +226 -12
  56. package/dist/esm/snk-data-unit.entry.js +3 -3
  57. package/dist/esm/snk-detail-view.entry.js +4 -4
  58. package/dist/esm/snk-grid.entry.js +23 -9
  59. package/dist/esm/{snk-guides-viewer-c44b3839.js → snk-guides-viewer-75e06feb.js} +100 -45
  60. package/dist/esm/snk-guides-viewer.entry.js +3 -3
  61. package/dist/esm/snk-pesquisa.entry.js +1 -1
  62. package/dist/esm/snk-simple-crud.entry.js +68 -25
  63. package/dist/esm/snk-taskbar.entry.js +2 -1
  64. package/dist/esm/{taskbar-elements-d2353c64.js → taskbar-elements-c62b6c66.js} +3 -0
  65. package/dist/sankhyablocks/{p-35f85998.entry.js → p-1a51dfde.entry.js} +1 -1
  66. package/dist/sankhyablocks/{p-ef6f0a1b.entry.js → p-1c29409b.entry.js} +1 -1
  67. package/dist/sankhyablocks/{p-5503e89f.entry.js → p-271c86d3.entry.js} +1 -1
  68. package/dist/sankhyablocks/p-2d6df7e7.entry.js +1 -0
  69. package/dist/sankhyablocks/p-41da5310.js +1 -0
  70. package/dist/sankhyablocks/{p-b2a2a83e.entry.js → p-4a93daef.entry.js} +1 -1
  71. package/dist/sankhyablocks/p-65be98c5.entry.js +1 -0
  72. package/dist/sankhyablocks/{p-6541bb6d.entry.js → p-6a0c8ce0.entry.js} +1 -1
  73. package/dist/sankhyablocks/p-7993b2e3.js +60 -0
  74. package/dist/sankhyablocks/{p-754559b9.entry.js → p-7cd5c315.entry.js} +1 -1
  75. package/dist/sankhyablocks/p-80f8c22c.js +1 -0
  76. package/dist/sankhyablocks/p-885802c3.js +1 -0
  77. package/dist/sankhyablocks/p-ab0caed6.entry.js +1 -0
  78. package/dist/sankhyablocks/{p-38e3ffda.entry.js → p-ad07f0c5.entry.js} +1 -1
  79. package/dist/sankhyablocks/p-cc8c3bca.entry.js +1 -0
  80. package/dist/sankhyablocks/{p-3b190fb1.entry.js → p-d31a701e.entry.js} +1 -1
  81. package/dist/sankhyablocks/{p-00796b12.entry.js → p-dc6ad9a6.entry.js} +1 -1
  82. package/dist/sankhyablocks/p-f4d5bb7f.js +1 -0
  83. package/dist/sankhyablocks/p-fb0f0087.js +1 -0
  84. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  85. package/dist/types/components/snk-crud/snk-crud.d.ts +4 -0
  86. package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +10 -1
  87. package/dist/types/components/snk-data-unit/MultipleUpdateHelper.d.ts +9 -0
  88. package/dist/types/components/snk-data-unit/snk-data-unit.d.ts +17 -0
  89. package/dist/types/components/snk-grid/filtercolumn/SnkMultiSelectionListDataSource.d.ts +2 -1
  90. package/dist/types/components/snk-grid/snk-grid.d.ts +5 -0
  91. package/dist/types/components/snk-simple-crud/snk-simple-crud.d.ts +9 -2
  92. package/dist/types/components/snk-taskbar/elements/taskbar-elements.d.ts +2 -1
  93. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +1 -0
  94. package/dist/types/components.d.ts +28 -0
  95. package/dist/types/lib/http/data-fetcher/fetchers/data-unit/cache/PreloadManager.d.ts +1 -1
  96. package/dist/types/lib/message/SnkMessageBuilder.d.ts +2 -1
  97. package/package.json +1 -1
  98. package/dist/sankhyablocks/p-17425c72.js +0 -1
  99. package/dist/sankhyablocks/p-3fc82614.js +0 -1
  100. package/dist/sankhyablocks/p-460f1827.entry.js +0 -1
  101. package/dist/sankhyablocks/p-6e0a5314.js +0 -1
  102. package/dist/sankhyablocks/p-835128f5.entry.js +0 -1
  103. package/dist/sankhyablocks/p-8fa828b5.js +0 -1
  104. package/dist/sankhyablocks/p-92778d5a.js +0 -1
  105. package/dist/sankhyablocks/p-a8be1d67.js +0 -60
  106. package/dist/sankhyablocks/p-a962a3e4.entry.js +0 -1
  107. package/dist/sankhyablocks/p-e35fe2bd.entry.js +0 -1
@@ -5,14 +5,14 @@ const core = require('@sankhyalabs/core');
5
5
  const SnkFormConfigManager = require('./SnkFormConfigManager-45a8d7b7.js');
6
6
  const form = require('@sankhyalabs/ezui/dist/collection/utils/form');
7
7
  const fieldSearch = require('./field-search-68e34bf4.js');
8
- const taskbarElements = require('./taskbar-elements-7e19882d.js');
8
+ const taskbarElements = require('./taskbar-elements-02379452.js');
9
9
  const constants = require('./constants-77c1b8bd.js');
10
10
  require('./DataFetcher-1afdb18e.js');
11
11
  require('./ISave-c76e2c51.js');
12
12
  const index$1 = require('./index-e3e39724.js');
13
13
  require('@sankhyalabs/ezui/dist/collection/utils/constants');
14
14
  require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
15
- require('./dataunit-fetcher-4a5d491a.js');
15
+ require('./dataunit-fetcher-a723f0dc.js');
16
16
  require('./filter-item-type.enum-a7ffdaa6.js');
17
17
  require('./form-config-fetcher-40d3f752.js');
18
18
  const DataUnit = require('@sankhyalabs/core/dist/dataunit/DataUnit');
@@ -23,6 +23,7 @@ const FORM_NAME_PREFIX = "__FORM:";
23
23
  const SnkGuidesViewer = class {
24
24
  constructor(hostRef) {
25
25
  index.registerInstance(this, hostRef);
26
+ this.snkMasterFormConfigChange = index.createEvent(this, "snkMasterFormConfigChange", 7);
26
27
  this.exit = index.createEvent(this, "exit", 7);
27
28
  this.actionClick = index.createEvent(this, "actionClick", 7);
28
29
  this.formItemsReady = index.createEvent(this, "formItemsReady", 7);
@@ -59,14 +60,16 @@ const SnkGuidesViewer = class {
59
60
  this.loadGuides(true);
60
61
  }
61
62
  observeDataState(newValue, oldValue) {
62
- const newRecord = newValue === null || newValue === void 0 ? void 0 : newValue.selectedRecord;
63
- const oldRecord = oldValue === null || oldValue === void 0 ? void 0 : oldValue.selectedRecord;
64
- if ((newRecord === null || newRecord === void 0 ? void 0 : newRecord.__record__id__) !== (oldRecord === null || oldRecord === void 0 ? void 0 : oldRecord.__record__id__)) {
63
+ var _a, _b, _c, _d, _e, _f;
64
+ const newRecordsIds = (_b = (_a = newValue === null || newValue === void 0 ? void 0 : newValue.selectionInfo) === null || _a === void 0 ? void 0 : _a.recordIds) !== null && _b !== void 0 ? _b : (_c = newValue === null || newValue === void 0 ? void 0 : newValue.selectedRecord) === null || _c === void 0 ? void 0 : _c['__record__id__'];
65
+ const oldRecordsIds = (_e = (_d = oldValue === null || oldValue === void 0 ? void 0 : oldValue.selectionInfo) === null || _d === void 0 ? void 0 : _d.recordIds) !== null && _e !== void 0 ? _e : (_f = oldValue === null || oldValue === void 0 ? void 0 : oldValue.selectedRecord) === null || _f === void 0 ? void 0 : _f['__record__id__'];
66
+ if (!core.ObjectUtils.equals(newRecordsIds, oldRecordsIds)) {
65
67
  this.loadGuides((oldValue === null || oldValue === void 0 ? void 0 : oldValue.insertionMode) != (newValue === null || newValue === void 0 ? void 0 : newValue.insertionMode));
66
68
  }
67
69
  }
68
70
  observeMasterFormConfig() {
69
71
  this.loadGuides(this.noGuideSelected());
72
+ this.snkMasterFormConfigChange.emit(this.masterFormConfig);
70
73
  }
71
74
  /**
72
75
  * Abre o configurador do formulário
@@ -140,6 +143,11 @@ const SnkGuidesViewer = class {
140
143
  * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-crud.msg.ts"
141
144
  */
142
145
  getMessage(key) {
146
+ var _a, _b;
147
+ if (this.dataUnit.isMultipleEdition) {
148
+ const selectedRecords = (_b = (_a = this.dataUnit.getSelectionInfo()) === null || _a === void 0 ? void 0 : _a.records) !== null && _b !== void 0 ? _b : [];
149
+ return `Editando ${selectedRecords.length} registros`;
150
+ }
143
151
  return this.messagesBuilder.getMessage(key, this.dataUnit.getSelectedRecord());
144
152
  }
145
153
  loadGuides(changeSelection) {
@@ -152,12 +160,12 @@ const SnkGuidesViewer = class {
152
160
  this._masterFormMetadata = form.buildFormMetadata(this.masterFormConfig, this.dataUnit, true);
153
161
  const allSheets = this._masterFormMetadata.getAllSheets();
154
162
  const currentRecord = this.dataUnit.getSelectedRecord();
155
- const disableDetails = !currentRecord || this.dataUnit.isNewRecord(currentRecord.__record__id__);
163
+ const disableDetails = this.hasToDisableDetails(currentRecord);
156
164
  const guides = [];
157
165
  Array.from(allSheets.values()).forEach((sheet) => {
158
166
  const item = { id: sheet.name, label: sheet.label };
159
167
  if (this.isDetail(sheet.name) && disableDetails) {
160
- item.tooltip = "Para alterar detalhes é necessário estar com um registro selecionado.";
168
+ item.tooltip = "Para alterar detalhes é necessário estar com um (e apenas um) registro selecionado.";
161
169
  item.disabled = true;
162
170
  }
163
171
  guides.push(item);
@@ -170,6 +178,11 @@ const SnkGuidesViewer = class {
170
178
  this.selectedGuide = this._guides.length > 0 ? this._guides[0] : undefined;
171
179
  }
172
180
  }
181
+ hasToDisableDetails(currentRecord) {
182
+ return !currentRecord
183
+ || this.dataUnit.isNewRecord(currentRecord.__record__id__)
184
+ || this.dataUnit.isMultipleEdition;
185
+ }
173
186
  isDetail(formId) {
174
187
  return form.FormMetadata.getDetailName(formId) != undefined;
175
188
  }
@@ -192,47 +205,59 @@ const SnkGuidesViewer = class {
192
205
  }
193
206
  getTaskBarId() {
194
207
  var _a;
195
- return ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "snkGuideViewer.finish_edition" : "snkGuideViewer.regular";
196
- }
197
- loadTaskbarProcessor() {
198
- var _a;
199
- const taskbarId = this.getTaskBarId();
200
- const disabledButtons = [];
201
- if (!this.dataState || !this.dataState.hasPrevious) {
202
- disabledButtons.push("PREVIOUS");
208
+ if ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) {
209
+ return TASKBAR_ID.FINISH_EDITION;
203
210
  }
204
- if (!this.dataState || !this.dataState.hasNext) {
205
- disabledButtons.push("NEXT");
211
+ if (this.dataUnit.isMultipleEdition) {
212
+ return TASKBAR_ID.MUTIPLE_EDITION;
206
213
  }
207
- if ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.selectionInfo) {
208
- if (this.dataState.selectionInfo.length > 1) {
209
- disabledButtons.push("CLONE");
210
- }
211
- if (this.dataState.selectionInfo.isAllRecords()) {
212
- disabledButtons.push("REMOVE");
213
- }
214
+ return TASKBAR_ID.REGULAR;
215
+ }
216
+ loadTaskbarProcessor() {
217
+ const taskbarIDs = {};
218
+ taskbarIDs[TASKBAR_ID.REGULAR] = this.buildBtnsRegularMode();
219
+ taskbarIDs[TASKBAR_ID.FINISH_EDITION] = [taskbarElements.TaskbarElement.CANCEL, taskbarElements.TaskbarElement.SAVE, this.handleAddGridMode()];
220
+ taskbarIDs[TASKBAR_ID.MUTIPLE_EDITION] = [taskbarElements.TaskbarElement.CANCEL];
221
+ this._taskbarProcessor = new fieldSearch.TaskbarProcessor(taskbarIDs);
222
+ this._taskbarProcessor.process(this.getTaskBarId(), this.taskbarManager, this.dataState, this.buildDisabledButtons(), this.buildInvisibleButtons());
223
+ }
224
+ buildBtnsRegularMode() {
225
+ var _a, _b;
226
+ const btnsRegularMode = [
227
+ taskbarElements.TaskbarElement.ATTACH, taskbarElements.TaskbarElement.CLONE, taskbarElements.TaskbarElement.REMOVE, taskbarElements.TaskbarElement.MORE_OPTIONS,
228
+ taskbarElements.TaskbarElement.ACTIONS_BUTTON, taskbarElements.TaskbarElement.DIVIDER, taskbarElements.TaskbarElement.GRID_MODE, taskbarElements.TaskbarElement.CONFIGURATOR,
229
+ ];
230
+ if (((_b = (_a = this.dataState) === null || _a === void 0 ? void 0 : _a.selectionInfo) === null || _b === void 0 ? void 0 : _b.length) <= 1) {
231
+ btnsRegularMode.unshift(taskbarElements.TaskbarElement.PREVIOUS, taskbarElements.TaskbarElement.NEXT, taskbarElements.TaskbarElement.DIVIDER);
214
232
  }
215
- const btnsRegularMode = ["PREVIOUS", "NEXT", "DIVIDER", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "ACTIONS_BUTTON", "DIVIDER", "GRID_MODE", "CONFIGURATOR"];
216
233
  if (this.presentationMode == index$1.PresentationMode.SECONDARY) {
217
- btnsRegularMode.unshift("INSERT");
234
+ btnsRegularMode.unshift(taskbarElements.TaskbarElement.INSERT);
218
235
  }
219
236
  else {
220
- btnsRegularMode.push("INSERT");
237
+ btnsRegularMode.push(taskbarElements.TaskbarElement.INSERT);
221
238
  }
222
- const invisibleButtons = this.getInvisibleButtons();
223
- this._taskbarProcessor = new fieldSearch.TaskbarProcessor({
224
- "snkGuideViewer.regular": btnsRegularMode,
225
- "snkGuideViewer.finish_edition": ["CANCEL", "SAVE", this.handleAddGridMode()],
226
- });
227
- this._taskbarProcessor.process(taskbarId, this.taskbarManager, this.dataState, disabledButtons, invisibleButtons);
239
+ return btnsRegularMode;
240
+ }
241
+ buildDisabledButtons() {
242
+ var _a, _b, _c, _d, _e, _f;
243
+ const disabledButtons = [];
244
+ if (!((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.hasPrevious))
245
+ disabledButtons.push(taskbarElements.TaskbarElement.PREVIOUS);
246
+ if (!((_b = this.dataState) === null || _b === void 0 ? void 0 : _b.hasNext))
247
+ disabledButtons.push(taskbarElements.TaskbarElement.NEXT);
248
+ if (((_d = (_c = this.dataState) === null || _c === void 0 ? void 0 : _c.selectionInfo) === null || _d === void 0 ? void 0 : _d.length) > 1)
249
+ disabledButtons.push(taskbarElements.TaskbarElement.CLONE);
250
+ if ((_f = (_e = this.dataState) === null || _e === void 0 ? void 0 : _e.selectionInfo) === null || _f === void 0 ? void 0 : _f.isAllRecords())
251
+ disabledButtons.push(taskbarElements.TaskbarElement.REMOVE);
252
+ return disabledButtons;
228
253
  }
229
254
  handleAddGridMode() {
230
255
  return this.enableGridInsert ? taskbarElements.TaskbarElement.GRID_MODE : "";
231
256
  }
232
- getInvisibleButtons() {
257
+ buildInvisibleButtons() {
233
258
  const invisibleButtons = [];
234
259
  if (this.dataState && this.dataState.selectionInfo.mode === DataUnit.SelectionMode.ALL_RECORDS)
235
- invisibleButtons.push("ACTIONS_BUTTON");
260
+ invisibleButtons.push(taskbarElements.TaskbarElement.ACTIONS_BUTTON);
236
261
  return invisibleButtons;
237
262
  }
238
263
  static updateContentCard(formName, cardConfig, propertyChanged, configManager) {
@@ -445,17 +470,27 @@ const SnkGuidesViewer = class {
445
470
  }
446
471
  buildTaskBar() {
447
472
  var _a;
448
- return index.h("div", { class: `snk-guides-viewer__header-taskbar ${this.presentationMode != index$1.PresentationMode.SECONDARY ? 'ez-align--right' : 'ez-padding-bottom--medium'}` }, index.h("snk-taskbar", { key: "guideViewerTaskbar", "data-element-id": "guideViewer", configName: this.configName, buttons: this._taskbarProcessor.buttons, disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, actionsList: this.getActionsList(), messagesBuilder: this.messagesBuilder, presentationMode: this.presentationMode, primaryButton: ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "SAVE" : "INSERT", "data-taskbar-owner": "master", dataUnit: this.dataUnit, resourceID: this.resourceID, customSlotId: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS", alignRigth: true }, index.h("slot", { name: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS" })));
473
+ return index.h("div", { class: `snk-guides-viewer__header-taskbar ${this.presentationMode != index$1.PresentationMode.SECONDARY ? 'ez-align--right' : 'ez-padding-bottom--medium'}` }, index.h("snk-taskbar", { key: "guideViewerTaskbar", "data-element-id": "guideViewer", configName: this.configName, buttons: this._taskbarProcessor.buttons, disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, actionsList: this.getActionsList(), messagesBuilder: this.messagesBuilder, presentationMode: this.presentationMode, primaryButton: ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? taskbarElements.TaskbarElement.SAVE : taskbarElements.TaskbarElement.INSERT, "data-taskbar-owner": "master", dataUnit: this.dataUnit, resourceID: this.resourceID, customSlotId: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS", alignRigth: true }, index.h("slot", { name: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS" })));
449
474
  }
450
475
  async dataUnitActionHandler(action) {
451
476
  var _a;
452
- if (action.type === core.Action.FIELD_INVALIDATED) {
453
- const guideName = this.getGuideName((_a = action.payload) === null || _a === void 0 ? void 0 : _a.fieldName);
454
- await this.addErrorBadgeToGuide(guideName);
455
- await this.openGuideNavigator(guideName);
456
- }
457
- if (action.type === core.Action.METADATA_LOADED) {
458
- this.loadGuides(this.noGuideSelected());
477
+ switch (action.type) {
478
+ case core.Action.EDITION_CANCELED:
479
+ case core.Action.DATA_SAVED:
480
+ if (this.dataUnit.isMultipleEdition) {
481
+ this.exitViewer();
482
+ this.dataUnit.isMultipleEdition = false;
483
+ }
484
+ break;
485
+ case core.Action.FIELD_INVALIDATED:
486
+ const guideName = this.getGuideName((_a = action.payload) === null || _a === void 0 ? void 0 : _a.fieldName);
487
+ await this.addErrorBadgeToGuide(guideName);
488
+ await this.openGuideNavigator(guideName);
489
+ break;
490
+ case core.Action.METADATA_LOADED:
491
+ case core.Action.MULTIPLE_EDITION_CHANGED:
492
+ this.loadGuides(this.noGuideSelected());
493
+ break;
459
494
  }
460
495
  }
461
496
  async addErrorBadgeToGuide(guideName) {
@@ -495,6 +530,20 @@ const SnkGuidesViewer = class {
495
530
  var _a, _b;
496
531
  return (_b = (_a = this.getCustomTitle) === null || _a === void 0 ? void 0 : _a.call(this)) !== null && _b !== void 0 ? _b : this.getMessage("snkCrud.title");
497
532
  }
533
+ getTitleTooltip() {
534
+ if (!this.dataUnit.isMultipleEdition)
535
+ return;
536
+ return this.buildRecordIdsArray();
537
+ }
538
+ buildRecordIdsArray() {
539
+ var _a, _b;
540
+ const selectedRecords = (_b = (_a = this.dataUnit.getSelectionInfo()) === null || _a === void 0 ? void 0 : _a.records) !== null && _b !== void 0 ? _b : [];
541
+ if (selectedRecords.length === 0) {
542
+ return "[]";
543
+ }
544
+ const labels = selectedRecords.map(record => this.messagesBuilder.getMessage("snkCrud.title", record));
545
+ return `[${labels.join(", ")}]`;
546
+ }
498
547
  componentDidLoad() {
499
548
  this.dataUnit.subscribe(this.dataUnitActionHandler.bind(this));
500
549
  }
@@ -508,7 +557,7 @@ const SnkGuidesViewer = class {
508
557
  }
509
558
  this.loadTaskbarProcessor();
510
559
  const showGuides = this._guides && (this._guides.length > 1);
511
- return (index.h("section", { class: "snk-guides-viewer", ref: ref => this._container = ref, tabindex: -1 }, index.h("div", { class: "ez-row snk-guides-viewer__header" }, index.h("div", { class: "snk-guides-viewer__header-breadcrumb ez-flex--align-items-center ez-flex-item--align-center ez-padding-left--large", key: "header" }, index.h("ez-button", { onClick: () => this.exitViewer(), title: this.getMessage("snkCrud.goBackTitle"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small" }), index.h("div", { class: "ez-flex ez-flex--column ez-flex-item--auto" }, index.h("h1", { class: "ez-title ez-title--primary ez-title--xlarge" }, this.getTitle()), ((_a = this._breadcrumbItems) === null || _a === void 0 ? void 0 : _a.length) > 1 &&
560
+ return (index.h("section", { class: "snk-guides-viewer", ref: ref => this._container = ref, tabindex: -1 }, index.h("div", { class: "ez-row snk-guides-viewer__header" }, index.h("div", { class: "snk-guides-viewer__header-breadcrumb ez-flex--align-items-center ez-flex-item--align-center ez-padding-left--large", key: "header" }, index.h("ez-button", { onClick: () => this.exitViewer(), title: this.getMessage("snkCrud.goBackTitle"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small" }), index.h("div", { class: "ez-flex ez-flex--column ez-flex-item--auto" }, index.h("h1", { class: "ez-title ez-title--primary ez-title--xlarge", title: this.getTitleTooltip() }, this.getTitle()), ((_a = this._breadcrumbItems) === null || _a === void 0 ? void 0 : _a.length) > 1 &&
512
561
  index.h("div", { class: "ez-margin-top--extra-small" }, index.h("ez-breadcrumb", Object.assign({ items: this._breadcrumbItems, onSelectedItem: (evt) => this.onBreadcrumbClickHandler(evt === null || evt === void 0 ? void 0 : evt.detail) }, { [core.ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME]: `${core.ElementIDUtils.getInternalIDInfo("breadcrumb")}` }))))), this.presentationMode != index$1.PresentationMode.SECONDARY && this.buildTaskBar()), index.h("div", { class: "snk-guides-viewer__container" }, showGuides ?
513
562
  index.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, onEzSelectionChange: evt => this.updateSelectedGuideHandler(evt.detail) })
514
563
  :
@@ -530,6 +579,12 @@ const SnkGuidesViewer = class {
530
579
  "masterFormConfig": ["observeMasterFormConfig"]
531
580
  }; }
532
581
  };
582
+ var TASKBAR_ID;
583
+ (function (TASKBAR_ID) {
584
+ TASKBAR_ID["FINISH_EDITION"] = "snkGuideViewer.finish_edition";
585
+ TASKBAR_ID["MUTIPLE_EDITION"] = "snkGuideViewer.multiple_edition";
586
+ TASKBAR_ID["REGULAR"] = "snkGuideViewer.regular";
587
+ })(TASKBAR_ID || (TASKBAR_ID = {}));
533
588
  SnkGuidesViewer.style = snkGuidesViewerCss;
534
589
 
535
590
  exports.SnkGuidesViewer = SnkGuidesViewer;
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const snkGuidesViewer = require('./snk-guides-viewer-e8e5f7b4.js');
5
+ const snkGuidesViewer = require('./snk-guides-viewer-fd39f437.js');
6
6
  require('./index-f9e81701.js');
7
7
  require('@sankhyalabs/core');
8
8
  require('./SnkFormConfigManager-45a8d7b7.js');
@@ -15,12 +15,12 @@ require('./filter-item-type.enum-a7ffdaa6.js');
15
15
  require('./constants-77c1b8bd.js');
16
16
  require('@sankhyalabs/ezui/dist/collection/utils/form');
17
17
  require('./field-search-68e34bf4.js');
18
- require('./taskbar-elements-7e19882d.js');
18
+ require('./taskbar-elements-02379452.js');
19
19
  require('./index-e3e39724.js');
20
20
  require('./index-102ba62d.js');
21
21
  require('./ISave-c76e2c51.js');
22
22
  require('@sankhyalabs/ezui/dist/collection/utils/constants');
23
- require('./dataunit-fetcher-4a5d491a.js');
23
+ require('./dataunit-fetcher-a723f0dc.js');
24
24
  require('@sankhyalabs/ezui/dist/collection/components/ez-grid/utils');
25
25
  require('@sankhyalabs/core/dist/utils/SortingUtils');
26
26
  require('./ResourceIDUtils-5ff86aa7.js');
@@ -9,7 +9,7 @@ require('./DataFetcher-1afdb18e.js');
9
9
  require('./index-e3e39724.js');
10
10
  require('@sankhyalabs/ezui/dist/collection/utils/constants');
11
11
  require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
12
- require('./dataunit-fetcher-4a5d491a.js');
12
+ require('./dataunit-fetcher-a723f0dc.js');
13
13
  require('./filter-item-type.enum-a7ffdaa6.js');
14
14
  require('./form-config-fetcher-40d3f752.js');
15
15
  require('./constants-77c1b8bd.js');
@@ -6,14 +6,14 @@ const index = require('./index-f9e81701.js');
6
6
  const core = require('@sankhyalabs/core');
7
7
  const utils = require('@sankhyalabs/ezui/dist/collection/utils');
8
8
  const constants = require('./constants-77c1b8bd.js');
9
- const taskbarElements = require('./taskbar-elements-7e19882d.js');
9
+ const taskbarElements = require('./taskbar-elements-02379452.js');
10
10
  require('./DataFetcher-1afdb18e.js');
11
11
  require('./ISave-c76e2c51.js');
12
- const ClientSideExporterProvider = require('./ClientSideExporterProvider-8c219037.js');
12
+ const ClientSideExporterProvider = require('./ClientSideExporterProvider-a2753c93.js');
13
13
  const index$1 = require('./index-e3e39724.js');
14
14
  require('@sankhyalabs/ezui/dist/collection/utils/constants');
15
15
  require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
16
- const dataunitFetcher = require('./dataunit-fetcher-4a5d491a.js');
16
+ const dataunitFetcher = require('./dataunit-fetcher-a723f0dc.js');
17
17
  require('./filter-item-type.enum-a7ffdaa6.js');
18
18
  const formConfigFetcher = require('./form-config-fetcher-40d3f752.js');
19
19
  const fieldSearch = require('./field-search-68e34bf4.js');
@@ -47,13 +47,6 @@ const SnkSimpleCrud = class {
47
47
  this._formConfigFetcher = new formConfigFetcher.FormConfigFetcher();
48
48
  this._customEditors = new Map();
49
49
  this._customRenders = new Map();
50
- this._taskbarProcessor = new fieldSearch.TaskbarProcessor({
51
- "snkSimpleCrudTaskbar.form_regular": this.getButtons(false, [taskbarElements.TaskbarElement.GRID_MODE], true),
52
- "snkSimpleCrudTaskbar.grid_regular": this.getButtons(false, [taskbarElements.TaskbarElement.DATA_EXPORTER, taskbarElements.TaskbarElement.FORM_MODE]),
53
- "snkSimpleCrudTaskbar.form_selected": this.getButtons(true, [taskbarElements.TaskbarElement.GRID_MODE], true),
54
- "snkSimpleCrudTaskbar.grid_selected": this.getButtons(true, [taskbarElements.TaskbarElement.DATA_EXPORTER, taskbarElements.TaskbarElement.FORM_MODE]),
55
- "snkSimpleCrudTaskbar.finish_edition": this.getFinishEditionButtonsCallback.bind(this)
56
- });
57
50
  this._showPopUpGridConfig = false;
58
51
  this._currentViewMode = constants.VIEW_MODE.GRID;
59
52
  this._config = undefined;
@@ -86,6 +79,7 @@ const SnkSimpleCrud = class {
86
79
  this.ignoreReadOnlyFormFields = false;
87
80
  this.autoFocus = true;
88
81
  this.domainMessagesBuilder = undefined;
82
+ this.multipleEditionEnabled = true;
89
83
  this.layoutFormConfig = false;
90
84
  this.autoLoad = undefined;
91
85
  this.outlineMode = false;
@@ -146,8 +140,25 @@ const SnkSimpleCrud = class {
146
140
  newCustomFieldProps.set(fieldName, Object.assign(Object.assign({}, currentProps), { [propName]: value }));
147
141
  this._fieldsProps = newCustomFieldProps;
148
142
  }
143
+ loadTaskbarProcessor() {
144
+ const taskbarIDs = {};
145
+ taskbarIDs[TASKBAR_ID.FORM_REGULAR] = this.getButtons(false, [taskbarElements.TaskbarElement.GRID_MODE], true);
146
+ taskbarIDs[TASKBAR_ID.GRID_REGULAR] = this.getButtons(false, [taskbarElements.TaskbarElement.DATA_EXPORTER, taskbarElements.TaskbarElement.FORM_MODE]);
147
+ taskbarIDs[TASKBAR_ID.FORM_SELECTED] = this.getButtons(true, [taskbarElements.TaskbarElement.GRID_MODE], true);
148
+ taskbarIDs[TASKBAR_ID.GRID_SELECTED] = this.getGridSelectedButtonsCallBack.bind(this);
149
+ taskbarIDs[TASKBAR_ID.FINISH_EDITION] = this.getFinishEditionButtonsCallback.bind(this);
150
+ taskbarIDs[TASKBAR_ID.MULTIPLE_EDITION] = [taskbarElements.TaskbarElement.CANCEL];
151
+ this._taskbarProcessor = new fieldSearch.TaskbarProcessor(taskbarIDs);
152
+ }
153
+ getGridSelectedButtonsCallBack() {
154
+ var _a, _b, _c;
155
+ if (!this.multipleEditionEnabled || ((_c = (_b = (_a = this.dataState) === null || _a === void 0 ? void 0 : _a.selectionInfo) === null || _b === void 0 ? void 0 : _b.records) === null || _c === void 0 ? void 0 : _c.length) === 1) {
156
+ return this.getButtons(true, [taskbarElements.TaskbarElement.DATA_EXPORTER, taskbarElements.TaskbarElement.FORM_MODE]);
157
+ }
158
+ return this.getButtons(true, [taskbarElements.TaskbarElement.UPDATE_MULTIPLE, taskbarElements.TaskbarElement.DATA_EXPORTER, taskbarElements.TaskbarElement.FORM_MODE]);
159
+ }
149
160
  getFinishEditionButtonsCallback() {
150
- const btns = ["CANCEL", "SAVE"];
161
+ const btns = [taskbarElements.TaskbarElement.CANCEL, taskbarElements.TaskbarElement.SAVE];
151
162
  if (this.enableGridInsert && this._currentViewMode !== constants.VIEW_MODE.ATTACHMENT) {
152
163
  btns.push(this._currentViewMode === constants.VIEW_MODE.GRID ? taskbarElements.TaskbarElement.FORM_MODE : taskbarElements.TaskbarElement.GRID_MODE);
153
164
  }
@@ -183,22 +194,32 @@ const SnkSimpleCrud = class {
183
194
  async goToView(view) {
184
195
  this._currentViewMode = view;
185
196
  if (this._viewStack) {
197
+ if (view === constants.VIEW_MODE.GRID)
198
+ this.dataUnit.isMultipleEdition = false;
186
199
  this._viewStack.show(view);
187
200
  }
188
201
  }
189
202
  actionClickListener(evt) {
190
- const act = evt.detail;
191
- if (act === taskbarElements.TaskbarElement.CONFIGURATOR) {
192
- this._snkConfigurator.open();
193
- }
194
- else if (act === taskbarElements.TaskbarElement.GRID_MODE) {
195
- this.goToView(constants.VIEW_MODE.GRID);
196
- }
197
- else if (act === taskbarElements.TaskbarElement.FORM_MODE) {
198
- this.goToView(constants.VIEW_MODE.FORM);
199
- }
203
+ this.handleTaskbarAction(evt.detail);
200
204
  evt.stopPropagation();
201
205
  }
206
+ handleTaskbarAction(action) {
207
+ switch (action) {
208
+ case taskbarElements.TaskbarElement.CONFIGURATOR:
209
+ this._snkConfigurator.open();
210
+ break;
211
+ case taskbarElements.TaskbarElement.GRID_MODE:
212
+ this.goToView(constants.VIEW_MODE.GRID);
213
+ break;
214
+ case taskbarElements.TaskbarElement.FORM_MODE:
215
+ this.goToView(constants.VIEW_MODE.FORM);
216
+ break;
217
+ case taskbarElements.TaskbarElement.UPDATE_MULTIPLE:
218
+ this.dataUnit.isMultipleEdition = true;
219
+ this.goToView(constants.VIEW_MODE.FORM);
220
+ break;
221
+ }
222
+ }
202
223
  async onChangeEntityName(newValue) {
203
224
  if (this.dataUnit)
204
225
  return;
@@ -330,8 +351,10 @@ const SnkSimpleCrud = class {
330
351
  this.setFormConfig(await this._formConfigManager.loadConfig());
331
352
  }
332
353
  async componentWillRender() {
354
+ this.loadTaskbarProcessor();
333
355
  this._resourceID = await this.application.getResourceID();
334
356
  this.dataExporterProviderStore();
357
+ this.dataExporterProviderStore();
335
358
  this._taskbarProcessor.process(this.getTaskBarId(), this.taskbarManager, this.dataState, this.getTaskBarDisabledButtons());
336
359
  if (this.configName === undefined) {
337
360
  return;
@@ -363,6 +386,14 @@ const SnkSimpleCrud = class {
363
386
  componentDidLoad() {
364
387
  utils.CSSVarsUtils.applyVarsGrid(this._element, this._grid);
365
388
  this.initKeyboardManager();
389
+ this.dataUnit.subscribe(this.dataUnitActionHandler.bind(this));
390
+ }
391
+ async dataUnitActionHandler(action) {
392
+ if (action.type === core.Action.EDITION_CANCELED || action.type === core.Action.DATA_SAVED) {
393
+ if (this.dataUnit.isMultipleEdition) {
394
+ this.goToView(constants.VIEW_MODE.GRID);
395
+ }
396
+ }
366
397
  }
367
398
  setCustomRenders() {
368
399
  if (!this._grid) {
@@ -401,14 +432,17 @@ const SnkSimpleCrud = class {
401
432
  getTaskBarId() {
402
433
  var _a, _b;
403
434
  if ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) {
404
- return "snkSimpleCrudTaskbar.finish_edition";
435
+ return TASKBAR_ID.FINISH_EDITION;
436
+ }
437
+ if (this.dataUnit.isMultipleEdition) {
438
+ return TASKBAR_ID.MULTIPLE_EDITION;
405
439
  }
406
440
  if (((_b = this.dataState) === null || _b === void 0 ? void 0 : _b.selectionInfo) &&
407
441
  !this.dataState.selectionInfo.isAllRecords() &&
408
442
  this.dataState.selectionInfo.length > 0) {
409
- return this._currentViewMode === constants.VIEW_MODE.GRID ? "snkSimpleCrudTaskbar.grid_selected" : "snkSimpleCrudTaskbar.form_selected";
443
+ return this._currentViewMode === constants.VIEW_MODE.GRID ? TASKBAR_ID.GRID_SELECTED : TASKBAR_ID.FORM_SELECTED;
410
444
  }
411
- return this._currentViewMode === constants.VIEW_MODE.GRID ? "snkSimpleCrudTaskbar.grid_regular" : "snkSimpleCrudTaskbar.form_regular";
445
+ return this._currentViewMode === constants.VIEW_MODE.GRID ? TASKBAR_ID.GRID_REGULAR : TASKBAR_ID.FORM_REGULAR;
412
446
  }
413
447
  initInMemoryDataUnit() {
414
448
  this._inMemoryLoader = new dataunitFetcher.InMemoryLoader(this._metadata, undefined, { autoLoad: this.autoLoad });
@@ -794,6 +828,15 @@ const SnkSimpleCrud = class {
794
828
  "gridLegacyConfigName": ["observeGridLegacy"]
795
829
  }; }
796
830
  };
831
+ var TASKBAR_ID;
832
+ (function (TASKBAR_ID) {
833
+ TASKBAR_ID["FORM_REGULAR"] = "snkSimpleCrudTaskbar.form_regular";
834
+ TASKBAR_ID["GRID_REGULAR"] = "snkSimpleCrudTaskbar.grid_regular";
835
+ TASKBAR_ID["FORM_SELECTED"] = "snkSimpleCrudTaskbar.form_selected";
836
+ TASKBAR_ID["GRID_SELECTED"] = "snkSimpleCrudTaskbar.grid_selected";
837
+ TASKBAR_ID["FINISH_EDITION"] = "snkSimpleCrudTaskbar.finish_edition";
838
+ TASKBAR_ID["MULTIPLE_EDITION"] = "snkSimpleCrudTaskbar.multiple_edition";
839
+ })(TASKBAR_ID || (TASKBAR_ID = {}));
797
840
  SnkSimpleCrud.style = snkSimpleCrudCss;
798
841
 
799
842
  exports.snk_simple_crud = SnkSimpleCrud;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-f9e81701.js');
6
6
  const core = require('@sankhyalabs/core');
7
7
  const AuthorizationConfig = require('./AuthorizationConfig-79ffae4b.js');
8
- const taskbarElements = require('./taskbar-elements-7e19882d.js');
8
+ const taskbarElements = require('./taskbar-elements-02379452.js');
9
9
  const index$1 = require('./index-e3e39724.js');
10
10
  require('./index-102ba62d.js');
11
11
 
@@ -22,6 +22,7 @@ const SnkTaskbar = class {
22
22
  this.ACTIONS_BUTTON_TAG = 'TASKBAR-ACTIONS-BUTTON';
23
23
  this.NOT_OVERFLOW_ELEMENTS = ["moreOptions", "dataExporter_snkDataExporter", "actionsButton_snkActionsButton"];
24
24
  this._titleKeyByElement = {
25
+ [taskbarElements.TaskbarElement.UPDATE_MULTIPLE]: "snkTaskbar.titleUpdateMultiple",
25
26
  [taskbarElements.TaskbarElement.UPDATE]: "snkTaskbar.titleUpdate",
26
27
  [taskbarElements.TaskbarElement.PREVIOUS]: "snkTaskbar.titlePrevious",
27
28
  [taskbarElements.TaskbarElement.NEXT]: "snkTaskbar.titleNext",
@@ -23,6 +23,7 @@ exports.TaskbarElement = void 0;
23
23
  TaskbarElement["DATA_EXPORTER"] = "DATA_EXPORTER";
24
24
  TaskbarElement["ATTACH"] = "ATTACH";
25
25
  TaskbarElement["ACTIONS_BUTTON"] = "ACTIONS_BUTTON";
26
+ TaskbarElement["UPDATE_MULTIPLE"] = "UPDATE_MULTIPLE";
26
27
  })(exports.TaskbarElement || (exports.TaskbarElement = {}));
27
28
  exports.AuthorizationElements = void 0;
28
29
  (function (AuthorizationElements) {
@@ -62,6 +63,8 @@ const buildElem = (element, className, dataElementId, getTitle, action, isEnable
62
63
  return iconButton("sync", element, className, dataElementId, title, action, isEnabled);
63
64
  case exports.TaskbarElement.UPDATE:
64
65
  return iconButton("edit", element, className, dataElementId, title, action, isEnabled);
66
+ case exports.TaskbarElement.UPDATE_MULTIPLE:
67
+ return iconButton("edit-table", element, className, dataElementId, title, action, isEnabled);
65
68
  case exports.TaskbarElement.CLONE:
66
69
  return iconButton("copy", element, className, dataElementId, title, action, isEnabled);
67
70
  case exports.TaskbarElement.REMOVE:
@@ -48,6 +48,7 @@ export class SnkCrud {
48
48
  this.setCustomFormTitle = undefined;
49
49
  this.strategyExporter = ExporterStrategy.SERVER_SIDE;
50
50
  this.layoutFormConfig = false;
51
+ this.multipleEditionEnabled = true;
51
52
  this.customContainerId = `SNK-CRUD-CUSTOM-CONTAINER-${StringUtils.generateUUID()}`;
52
53
  }
53
54
  /**
@@ -134,14 +135,20 @@ export class SnkCrud {
134
135
  this.setViewMode(VIEW_MODE.FORM);
135
136
  }
136
137
  async executeAction(act) {
137
- if (act === TaskbarElement.GRID_MODE)
138
- return this.setViewMode(VIEW_MODE.GRID);
139
- if (act === TaskbarElement.FORM_MODE || act === TaskbarElement.UPDATE)
140
- return this.gridToForm(act !== TaskbarElement.UPDATE);
141
- if (act === TaskbarElement.CONFIGURATOR)
142
- return this._snkConfigurator.open();
143
- if (act === "ATTACH")
144
- return this.setViewMode(VIEW_MODE.ATTACHMENT);
138
+ switch (act) {
139
+ case TaskbarElement.GRID_MODE:
140
+ return this.setViewMode(VIEW_MODE.GRID);
141
+ case TaskbarElement.FORM_MODE:
142
+ case TaskbarElement.UPDATE:
143
+ return this.gridToForm(act !== TaskbarElement.UPDATE);
144
+ case TaskbarElement.UPDATE_MULTIPLE:
145
+ this._dataUnit.isMultipleEdition = true;
146
+ return this.setViewMode(VIEW_MODE.FORM);
147
+ case TaskbarElement.CONFIGURATOR:
148
+ return this._snkConfigurator.open();
149
+ case TaskbarElement.ATTACH:
150
+ return this.setViewMode(VIEW_MODE.ATTACHMENT);
151
+ }
145
152
  }
146
153
  backView() {
147
154
  const lastView = this._viewHistory.at(-2) || VIEW_MODE.GRID;
@@ -151,6 +158,7 @@ export class SnkCrud {
151
158
  this._viewStack.show(viewMode);
152
159
  this._currentViewMode = viewMode;
153
160
  if (viewMode === VIEW_MODE.GRID) {
161
+ this._dataUnit.isMultipleEdition = false;
154
162
  this._snkGrid.setFocus();
155
163
  }
156
164
  else if (viewMode === VIEW_MODE.FORM) {
@@ -371,7 +379,7 @@ export class SnkCrud {
371
379
  return;
372
380
  }
373
381
  this._snkDataUnit.ignoreSaveMessage = (this._currentViewMode === VIEW_MODE.GRID && !this.enableGridInsert);
374
- return (h(Host, null, h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "crud" }, h("stack-item", { class: 'ez-flex ez-flex--column ez-size-height--full ez-size-width--full ez-padding--medium' }, h("snk-grid", { ref: (ref) => this._snkGrid = ref, class: 'ez-flex ez-flex--column ez-size-height--full ez-size-width--full', filterBarTitle: this.filterBarTitle, "data-element-id": "crud_grid", configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), taskbarManager: this.taskbarManager, onActionClick: evt => this.executeAction(evt.detail), messagesBuilder: this.messagesBuilder, actionsList: this.actionsList, statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, presentationMode: this.presentationMode, recordsValidator: this.recordsValidator, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, canEdit: this._canEdit, resourceID: this._resourceID, disablePersonalizedFilter: this.disablePersonalizedFilter, gridLegacyConfigName: this.gridLegacyConfigName, filterBarLegacyConfigName: this.filterBarLegacyConfigName, autoLoad: this.autoLoad, autoFocus: this.autoFocus, enableGridInsert: this.enableGridInsert, enableLockManagerTaskbarClick: this.enableLockManagerTaskbarClick, enableLockManagerLoadingComp: this.enableLockManagerLoadingComp, strategyExporter: this.strategyExporter }, h("slot", { name: "GRID_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "GRID_HEADER_CUSTOM_ELEMENTS" }), h("slot", { name: "SnkGridHeader" }), h("slot", { name: "SnkGridFooter" }), h("slot", { name: "SnkGridTaskBar" }))), h("stack-item", null, h("snk-guides-viewer", { ref: ref => this._guidesViewer = ref, entityPath: this._snkDataUnit.entityName, messagesBuilder: this.messagesBuilder, onExit: () => this.setViewMode(VIEW_MODE.GRID), dataState: this._dataState, dataUnit: this._dataUnit, actionsList: this.actionsList, taskbarManager: this.taskbarManager, configName: this.configName, onActionClick: evt => this.executeAction(evt.detail), presentationMode: this.presentationMode, "data-element-id": "crud_form", canEdit: this._canEdit, recordsValidator: this.recordsValidator, resourceID: this._resourceID, detailTaskbarCustomContainerId: this.customContainerId, formLegacyConfigName: this.formLegacyConfigName, enableGridInsert: this.enableGridInsert, getCustomTitle: this.setCustomFormTitle, ignoreReadOnlyFormFields: this.ignoreReadOnlyFormFields }, h("slot", { name: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "SnkFormTaskBar" }))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this._snkDataUnit.entityName, onBack: this.backView.bind(this) })), h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.setViewMode(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail), showActionButtons: this.showActionButtons, onSave: evt => this.handleConfiguratorEvent(evt, 'SAVE'), onCancel: evt => this.handleConfiguratorEvent(evt, 'CANCEL'), resourceID: this._resourceID, customContainerId: this.customContainerId, layoutFormConfig: this.layoutFormConfig })), h("div", { id: `${this.customContainerId}` }, h("slot", { name: "SnkConfigContainerSlot" }), h("slot", { name: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS" }), h("slot", { name: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }))));
382
+ return (h(Host, null, h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "crud" }, h("stack-item", { class: 'ez-flex ez-flex--column ez-size-height--full ez-size-width--full ez-padding--medium' }, h("snk-grid", { ref: (ref) => this._snkGrid = ref, class: 'ez-flex ez-flex--column ez-size-height--full ez-size-width--full', filterBarTitle: this.filterBarTitle, "data-element-id": "crud_grid", configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), taskbarManager: this.taskbarManager, onActionClick: evt => this.executeAction(evt.detail), messagesBuilder: this.messagesBuilder, actionsList: this.actionsList, statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, presentationMode: this.presentationMode, recordsValidator: this.recordsValidator, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, canEdit: this._canEdit, resourceID: this._resourceID, disablePersonalizedFilter: this.disablePersonalizedFilter, gridLegacyConfigName: this.gridLegacyConfigName, filterBarLegacyConfigName: this.filterBarLegacyConfigName, autoLoad: this.autoLoad, autoFocus: this.autoFocus, enableGridInsert: this.enableGridInsert, enableLockManagerTaskbarClick: this.enableLockManagerTaskbarClick, enableLockManagerLoadingComp: this.enableLockManagerLoadingComp, strategyExporter: this.strategyExporter, multipleEditionEnabled: this.multipleEditionEnabled }, h("slot", { name: "GRID_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "GRID_HEADER_CUSTOM_ELEMENTS" }), h("slot", { name: "SnkGridHeader" }), h("slot", { name: "SnkGridFooter" }), h("slot", { name: "SnkGridTaskBar" }))), h("stack-item", null, h("snk-guides-viewer", { ref: ref => this._guidesViewer = ref, entityPath: this._snkDataUnit.entityName, messagesBuilder: this.messagesBuilder, onExit: () => this.setViewMode(VIEW_MODE.GRID), dataState: this._dataState, dataUnit: this._dataUnit, actionsList: this.actionsList, taskbarManager: this.taskbarManager, configName: this.configName, onActionClick: evt => this.executeAction(evt.detail), presentationMode: this.presentationMode, "data-element-id": "crud_form", canEdit: this._canEdit, recordsValidator: this.recordsValidator, resourceID: this._resourceID, detailTaskbarCustomContainerId: this.customContainerId, formLegacyConfigName: this.formLegacyConfigName, enableGridInsert: this.enableGridInsert, getCustomTitle: this.setCustomFormTitle, ignoreReadOnlyFormFields: this.ignoreReadOnlyFormFields }, h("slot", { name: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "SnkFormTaskBar" }))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this._snkDataUnit.entityName, onBack: this.backView.bind(this) })), h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.setViewMode(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail), showActionButtons: this.showActionButtons, onSave: evt => this.handleConfiguratorEvent(evt, 'SAVE'), onCancel: evt => this.handleConfiguratorEvent(evt, 'CANCEL'), resourceID: this._resourceID, customContainerId: this.customContainerId, layoutFormConfig: this.layoutFormConfig })), h("div", { id: `${this.customContainerId}` }, h("slot", { name: "SnkConfigContainerSlot" }), h("slot", { name: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS" }), h("slot", { name: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }))));
375
383
  }
376
384
  static get is() { return "snk-crud"; }
377
385
  static get encapsulation() { return "scoped"; }
@@ -871,6 +879,24 @@ export class SnkCrud {
871
879
  "attribute": "layout-form-config",
872
880
  "reflect": false,
873
881
  "defaultValue": "false"
882
+ },
883
+ "multipleEditionEnabled": {
884
+ "type": "boolean",
885
+ "mutable": false,
886
+ "complexType": {
887
+ "original": "boolean",
888
+ "resolved": "boolean",
889
+ "references": {}
890
+ },
891
+ "required": false,
892
+ "optional": false,
893
+ "docs": {
894
+ "tags": [],
895
+ "text": "Habilita a edi\u00E7\u00E3o de m\u00FAltiplos registros simult\u00E2neos."
896
+ },
897
+ "attribute": "multiple-edition-enabled",
898
+ "reflect": false,
899
+ "defaultValue": "true"
874
900
  }
875
901
  };
876
902
  }