@sankhyalabs/sankhyablocks 10.1.0-dev.50 → 10.1.0-dev.52

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 (41) hide show
  1. package/dist/cjs/{SnkMultiSelectionListDataSource-293bc3d2.js → SnkMultiSelectionListDataSource-d341dd02.js} +67 -20
  2. package/dist/cjs/snk-crud.cjs.entry.js +14 -0
  3. package/dist/cjs/snk-detail-view.cjs.entry.js +17 -3
  4. package/dist/cjs/snk-grid.cjs.entry.js +12 -3
  5. package/dist/cjs/{snk-guides-viewer-b4ca3437.js → snk-guides-viewer-8e7a503b.js} +1 -1
  6. package/dist/cjs/snk-guides-viewer.cjs.entry.js +1 -1
  7. package/dist/cjs/snk-simple-crud.cjs.entry.js +1 -1
  8. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.css +4 -1
  9. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +17 -3
  10. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.css +1 -1
  11. package/dist/collection/components/snk-crud/utils/taskbarUtils.js +14 -0
  12. package/dist/collection/components/snk-data-exporter/interfaces/IExporterProvider.js +67 -20
  13. package/dist/collection/components/snk-grid/snk-grid.css +10 -5
  14. package/dist/collection/components/snk-grid/snk-grid.js +10 -1
  15. package/dist/components/ContinuousInsertUtils.js +67 -20
  16. package/dist/components/snk-crud.js +14 -0
  17. package/dist/components/snk-detail-view2.js +17 -3
  18. package/dist/components/snk-grid2.js +11 -2
  19. package/dist/esm/{SnkMultiSelectionListDataSource-f6cabd15.js → SnkMultiSelectionListDataSource-18abafb1.js} +67 -20
  20. package/dist/esm/snk-crud.entry.js +14 -0
  21. package/dist/esm/snk-detail-view.entry.js +17 -3
  22. package/dist/esm/snk-grid.entry.js +12 -3
  23. package/dist/esm/{snk-guides-viewer-cc37535b.js → snk-guides-viewer-adf39ea2.js} +1 -1
  24. package/dist/esm/snk-guides-viewer.entry.js +1 -1
  25. package/dist/esm/snk-simple-crud.entry.js +1 -1
  26. package/dist/sankhyablocks/p-0a4cdcde.entry.js +1 -0
  27. package/dist/sankhyablocks/p-3d294185.entry.js +1 -0
  28. package/dist/sankhyablocks/{p-fec88660.entry.js → p-57c184a2.entry.js} +1 -1
  29. package/dist/sankhyablocks/p-5c250661.js +1 -0
  30. package/dist/sankhyablocks/{p-771b137e.js → p-b1bb4cf1.js} +1 -1
  31. package/dist/sankhyablocks/p-bd3c1aaa.entry.js +1 -0
  32. package/dist/sankhyablocks/{p-33492640.entry.js → p-dbdbb77a.entry.js} +1 -1
  33. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  34. package/dist/types/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.d.ts +2 -1
  35. package/dist/types/components/snk-data-exporter/interfaces/IExporterProvider.d.ts +8 -0
  36. package/dist/types/components/snk-grid/snk-grid.d.ts +1 -0
  37. package/package.json +1 -1
  38. package/dist/sankhyablocks/p-134702f6.entry.js +0 -1
  39. package/dist/sankhyablocks/p-7ad91135.entry.js +0 -1
  40. package/dist/sankhyablocks/p-9e77e136.js +0 -1
  41. package/dist/sankhyablocks/p-c0d6a821.entry.js +0 -1
@@ -168,41 +168,35 @@ class CommonsExporter {
168
168
  return this.columnsState;
169
169
  }
170
170
  async buildColumnsMetadata(gridColumns) {
171
- var _a, _b, _c;
171
+ var _a;
172
172
  const columnsMetadata = [];
173
+ const searchPlusDescriptionIds = this.collectSearchPlusDescriptionIds(gridColumns);
173
174
  for (const column of gridColumns) {
175
+ if (this.isHiddenColumn(column)) {
176
+ continue;
177
+ }
174
178
  /**
175
- * TODO: Analisar e criar uma melhor forma de tratar essa validação do "RECDESP".
179
+ * A grid adiciona uma coluna auxiliar para a descrição de campos SEARCHPLUS
180
+ * (ex.: "ENTITYNAME.DESCRIPTIONFIELD"). A descrição já é emitida ao processar
181
+ * o próprio SEARCHPLUS, então pulamos a auxiliar para evitar duplicar a coluna.
176
182
  */
177
- if (column.hidden && column.name !== "RECDESP") {
183
+ if (searchPlusDescriptionIds.has(column.name)) {
178
184
  continue;
179
185
  }
180
186
  const fieldData = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getField(column.name);
181
187
  const customFormatter = await this.grid.getCustomValueFormatter(column.name);
182
- const isUserInterfaceSEARCH = (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UnitMetadata.UserInterface.SEARCH;
183
- const widthColumnDefault = 60;
184
- const labelColumn = isUserInterfaceSEARCH ? "Cód. " : column.label;
185
- let descriptionColumn = undefined;
188
+ const isSearchField = this.isSearchUserInterface(fieldData);
189
+ const labelColumn = isSearchField ? "Cód. " : column.label;
186
190
  let columnData = {
187
191
  id: column.name,
188
192
  label: labelColumn,
189
- width: isUserInterfaceSEARCH ? (labelColumn.length * this.DEFAULT_FONT_SIZE) : column.width,
193
+ width: isSearchField ? (labelColumn.length * this.DEFAULT_FONT_SIZE) : column.width,
190
194
  type: fieldData === null || fieldData === void 0 ? void 0 : fieldData.dataType,
191
195
  userInterface: fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface,
192
196
  customFormatter
193
197
  };
194
- if (isUserInterfaceSEARCH && ((_b = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _b === void 0 ? void 0 : _b.DESCRIPTIONFIELD) != undefined) {
195
- const labelDescription = (_c = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _c === void 0 ? void 0 : _c.DESCRIPTIONENTITY;
196
- const mergedFrom = fieldData.properties.mergedFrom;
197
- const descriptionField = `${fieldData.properties.ENTITYNAME}.${fieldData.properties.DESCRIPTIONFIELD}`;
198
- descriptionColumn = {
199
- id: `${mergedFrom ? (mergedFrom + ".") : ""}${descriptionField}`,
200
- label: labelDescription,
201
- width: isUserInterfaceSEARCH && labelDescription ? (labelDescription.length * this.DEFAULT_FONT_SIZE - widthColumnDefault) : column.width,
202
- type: core.DataType.TEXT,
203
- userInterface: UnitMetadata.UserInterface.LONGTEXT,
204
- descriptionFrom: fieldData.name
205
- };
198
+ let descriptionColumn = isSearchField ? this.buildDescriptionColumn(fieldData, column) : undefined;
199
+ if (descriptionColumn) {
206
200
  const newWidth = this.getWidthByMetaData(column === null || column === void 0 ? void 0 : column.width, columnData === null || columnData === void 0 ? void 0 : columnData.width, descriptionColumn === null || descriptionColumn === void 0 ? void 0 : descriptionColumn.width);
207
201
  columnData = Object.assign(Object.assign({}, columnData), { width: newWidth === null || newWidth === void 0 ? void 0 : newWidth.codWidth });
208
202
  descriptionColumn = Object.assign(Object.assign({}, descriptionColumn), { width: newWidth === null || newWidth === void 0 ? void 0 : newWidth.descWidth, label: (descriptionColumn === null || descriptionColumn === void 0 ? void 0 : descriptionColumn.label) || (column === null || column === void 0 ? void 0 : column.label) });
@@ -213,6 +207,59 @@ class CommonsExporter {
213
207
  }
214
208
  return columnsMetadata || [];
215
209
  }
210
+ collectSearchPlusDescriptionIds(gridColumns) {
211
+ var _a;
212
+ const descriptionIds = new Set();
213
+ for (const column of gridColumns) {
214
+ if (this.isHiddenColumn(column)) {
215
+ continue;
216
+ }
217
+ const fieldData = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getField(column.name);
218
+ if (!this.isSearchUserInterface(fieldData)) {
219
+ continue;
220
+ }
221
+ const descriptionId = this.buildDescriptionColumnId(fieldData);
222
+ if (descriptionId) {
223
+ descriptionIds.add(descriptionId);
224
+ }
225
+ }
226
+ return descriptionIds;
227
+ }
228
+ /**
229
+ * TODO: Analisar e criar uma melhor forma de tratar essa validação do "RECDESP".
230
+ */
231
+ isHiddenColumn(column) {
232
+ return column.hidden && column.name !== "RECDESP";
233
+ }
234
+ isSearchUserInterface(fieldData) {
235
+ return (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UnitMetadata.UserInterface.SEARCH
236
+ || (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UnitMetadata.UserInterface.SEARCHPLUS;
237
+ }
238
+ buildDescriptionColumnId(fieldData) {
239
+ const properties = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties;
240
+ if ((properties === null || properties === void 0 ? void 0 : properties.DESCRIPTIONFIELD) == undefined) {
241
+ return undefined;
242
+ }
243
+ const descriptionField = `${properties.ENTITYNAME}.${properties.DESCRIPTIONFIELD}`;
244
+ return properties.mergedFrom ? `${properties.mergedFrom}.${descriptionField}` : descriptionField;
245
+ }
246
+ buildDescriptionColumn(fieldData, column) {
247
+ var _a;
248
+ const id = this.buildDescriptionColumnId(fieldData);
249
+ if (!id) {
250
+ return undefined;
251
+ }
252
+ const labelDescription = (_a = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _a === void 0 ? void 0 : _a.DESCRIPTIONENTITY;
253
+ const widthColumnDefault = 60;
254
+ return {
255
+ id,
256
+ label: labelDescription,
257
+ width: labelDescription ? (labelDescription.length * this.DEFAULT_FONT_SIZE - widthColumnDefault) : column.width,
258
+ type: core.DataType.TEXT,
259
+ userInterface: UnitMetadata.UserInterface.LONGTEXT,
260
+ descriptionFrom: fieldData.name
261
+ };
262
+ }
216
263
  getWidthByMetaData(maxWidth, widthCod, widthDescription) {
217
264
  const totalCurrentWidth = widthCod + widthDescription;
218
265
  const codPercentage = widthCod / totalCurrentWidth;
@@ -118,6 +118,16 @@ function insertCustomButtonsBeforeSpacer(buttons, customButtons) {
118
118
  }
119
119
  return [...customButtons, ...buttons];
120
120
  }
121
+ function buildNavigationDisabledBtns(dataState) {
122
+ const navigationDisabled = [];
123
+ if (!(dataState === null || dataState === void 0 ? void 0 : dataState.hasPrevious)) {
124
+ navigationDisabled.push(taskbarElements.TaskbarElement.PREVIOUS);
125
+ }
126
+ if (!(dataState === null || dataState === void 0 ? void 0 : dataState.hasNext)) {
127
+ navigationDisabled.push(taskbarElements.TaskbarElement.NEXT);
128
+ }
129
+ return navigationDisabled;
130
+ }
121
131
  function buildNativeTaskbarManager(currentViewMode, mergeTaskbarManager, messagesBuilder) {
122
132
  var _a, _b;
123
133
  const CUSTOM_BUTTONS = [
@@ -188,6 +198,10 @@ function buildNativeTaskbarManager(currentViewMode, mergeTaskbarManager, message
188
198
  if (!hasSelectedRecord && buttonsRequiringSelection.includes(buttonName)) {
189
199
  return false;
190
200
  }
201
+ const navigationDisabled = buildNavigationDisabledBtns(dataState);
202
+ if (navigationDisabled.includes(buttonName)) {
203
+ return false;
204
+ }
191
205
  return (_a = mergeTaskbarManager === null || mergeTaskbarManager === void 0 ? void 0 : mergeTaskbarManager.isEnabled(_, dataState, buttonName, originalValue)) !== null && _a !== void 0 ? _a : originalValue;
192
206
  },
193
207
  getMoreOptions(taskbarId, configName, dataState, currentActions) {
@@ -16,7 +16,7 @@ require('./filter-item-type.enum-a7ffdaa6.js');
16
16
  require('./form-config-fetcher-45d1964c.js');
17
17
  const constants = require('./constants-6d82e405.js');
18
18
  const taskbarElements = require('./taskbar-elements-80eddec8.js');
19
- const snkGuidesViewer = require('./snk-guides-viewer-b4ca3437.js');
19
+ const snkGuidesViewer = require('./snk-guides-viewer-8e7a503b.js');
20
20
  const SnkMessageBuilder = require('./SnkMessageBuilder-a9300ebe.js');
21
21
  const utils = require('@sankhyalabs/ezui/dist/collection/utils');
22
22
  require('./ConfigStorage-a1fab5ca.js');
@@ -76,7 +76,7 @@ class GuideBuilder {
76
76
  }
77
77
  }
78
78
 
79
- const snkDetailViewCss = ".sc-snk-detail-view-h{display:flex;row-gap:24px;flex-direction:column;width:100%;height:100%}.level-path.sc-snk-detail-view{color:var(--color--title-primary, #2B3A54);font-weight:var(--text-weight--medium, 400);padding-right:3px}.form-taskbar.sc-snk-detail-view{padding-bottom:var(--space--medium)}.grid-container.sc-snk-detail-view{background-color:#FFF;min-height:100px;height:100%}.detail-header.sc-snk-detail-view{padding-bottom:0}snk-data-unit.sc-snk-detail-view{flex:1}snk-grid.sc-snk-detail-view{height:calc(100% - 43px)}";
79
+ const snkDetailViewCss = ".sc-snk-detail-view-h{display:flex;row-gap:24px;flex-direction:column;width:100%;height:100%}.level-path.sc-snk-detail-view{color:var(--color--title-primary, #2B3A54);font-weight:var(--text-weight--medium, 400);padding-right:3px}.form-taskbar.sc-snk-detail-view{padding-bottom:var(--space--medium)}.grid-container.sc-snk-detail-view{background-color:#FFF;min-height:100px;height:100%}.detail-header.sc-snk-detail-view{padding-bottom:0}snk-data-unit.sc-snk-detail-view{flex:1}snk-grid.sc-snk-detail-view{height:calc(100% - 56px);--snk-grid__header-padding:var(--space--4, 4px);--snk-grid-padding:var(--space--8, 8px);--snk-grid-box-shadow:unset}";
80
80
 
81
81
  const SnkDetailView = class {
82
82
  constructor(hostRef) {
@@ -262,6 +262,9 @@ const SnkDetailView = class {
262
262
  return [];
263
263
  }
264
264
  emitSwitchEvent(mode) {
265
+ if (mode === constants.VIEW_MODE.GRID) {
266
+ this.dataUnit.isMultipleEdition = false;
267
+ }
265
268
  const guideId = mode === constants.VIEW_MODE.GRID ? this.stripFormPattern(this.branchGuide.id) : this.getFormGuideId();
266
269
  if (guideId) {
267
270
  this.snkSwitchGuide.emit(guideId);
@@ -272,6 +275,11 @@ const SnkDetailView = class {
272
275
  this.emitSwitchEvent(constants.VIEW_MODE.GRID);
273
276
  evt.stopPropagation();
274
277
  }
278
+ if (evt.detail === taskbarElements.TaskbarElement.UPDATE_MULTIPLE) {
279
+ this.dataUnit.isMultipleEdition = true;
280
+ this.emitSwitchEvent(constants.VIEW_MODE.FORM);
281
+ evt.stopPropagation();
282
+ }
275
283
  if (evt.detail === taskbarElements.TaskbarElement.FORM_MODE || evt.detail === taskbarElements.TaskbarElement.UPDATE) {
276
284
  this.emitSwitchEvent(constants.VIEW_MODE.FORM);
277
285
  evt.stopPropagation();
@@ -316,6 +324,12 @@ const SnkDetailView = class {
316
324
  this.addErrorBadgeToBranchGuide();
317
325
  }
318
326
  else if (action.type === core.Action.DATA_LOADED) {
327
+ this.handleDataLoaded();
328
+ }
329
+ }
330
+ handleDataLoaded() {
331
+ var _a;
332
+ if (!((_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getSelectedRecord())) {
319
333
  this.dataUnit.selectFirst();
320
334
  }
321
335
  }
@@ -372,7 +386,7 @@ const SnkDetailView = class {
372
386
  render() {
373
387
  this.updateLabel();
374
388
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
375
- return (index.h(index.Host, null, index.h("snk-data-unit", { ref: (el) => this._snkDataUnit = el, dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: this.handleDataStateChange.bind(this), ignoreSaveMessage: this._currentView === constants.VIEW_MODE.GRID, messagesBuilder: this.messagesBuilder, configName: this._configName }, index.h("ez-view-stack", { ref: (ref) => this.updateViewStack(ref) }, index.h("stack-item", null, index.h("div", { class: "ez-box ez-box--shadow grid-container" }, index.h("div", { class: "ez-title--primary ez-size-width--full ez-padding--large detail-header" }, index.h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? index.h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), index.h("snk-grid", { class: "ez-size-width--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(constants.VIEW_MODE.FORM), onActionClick: (evt) => this.executeActionHandler(evt), presentationMode: this.presentationMode, canEdit: this.canEdit, isDetail: true, taskbarCustomContainerId: this.taskbarCustomContainerId, gridHeaderCustomSlotId: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS", topTaskbarCustomSlotId: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS", outlineMode: false, enableGridInsert: true, autoLoad: true }))), index.h("stack-item", null, index.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(), fieldToFocus: this._fieldToGetFocus, label: this.label, levelPath: this._levelPath, onFormItemsReady: ({ detail: formItems }) => this.formItemsReady.emit(formItems), onSnkRequestClearFieldToFocus: this.clearFieldToFocusHandler.bind(this), fieldSearch: this._fieldSearch, entityPath: this.entityName }, index.h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, messagesBuilder: this.messagesBuilder, disabledButtons: this._disabledButtons, buttons: "INSERT,PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,ACTIONS_BUTTON,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: this.presentationMode, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit, resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: "DETAIL_TASKBAR_CUSTOM_ELEMENTS", actionsSettingsList: this.getSettingsListForm() }, index.h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }))))), index.h("snk-attach", { ref: (ref) => this._snkAttach = ref, registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this.entityName }))));
389
+ return (index.h(index.Host, null, index.h("snk-data-unit", { ref: (el) => this._snkDataUnit = el, dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: this.handleDataStateChange.bind(this), ignoreSaveMessage: this._currentView === constants.VIEW_MODE.GRID, messagesBuilder: this.messagesBuilder, configName: this._configName }, index.h("ez-view-stack", { ref: (ref) => this.updateViewStack(ref) }, index.h("stack-item", null, index.h("div", { class: "ez-box ez-box--shadow grid-container" }, index.h("div", { class: "ez-title--primary ez-size-width--full ez-padding--large detail-header" }, index.h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? index.h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), index.h("snk-grid", { class: "ez-size-width--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(constants.VIEW_MODE.FORM), onActionClick: (evt) => this.executeActionHandler(evt), presentationMode: this.presentationMode, canEdit: this.canEdit, isDetail: true, taskbarCustomContainerId: this.taskbarCustomContainerId, gridHeaderCustomSlotId: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS", topTaskbarCustomSlotId: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS", outlineMode: false, enableGridInsert: true, autoLoad: true, multipleEditionEnabled: true, multipleSelection: true }))), index.h("stack-item", null, index.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(), fieldToFocus: this._fieldToGetFocus, label: this.label, levelPath: this._levelPath, onFormItemsReady: ({ detail: formItems }) => this.formItemsReady.emit(formItems), onSnkRequestClearFieldToFocus: this.clearFieldToFocusHandler.bind(this), fieldSearch: this._fieldSearch, entityPath: this.entityName }, index.h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, messagesBuilder: this.messagesBuilder, disabledButtons: this._disabledButtons, buttons: "INSERT,PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,ACTIONS_BUTTON,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: this.presentationMode, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit, resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: "DETAIL_TASKBAR_CUSTOM_ELEMENTS", actionsSettingsList: this.getSettingsListForm() }, index.h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }))))), index.h("snk-attach", { ref: (ref) => this._snkAttach = ref, registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this.entityName }))));
376
390
  }
377
391
  get _element() { return index.getElement(this); }
378
392
  static get watchers() { return {
@@ -8,7 +8,7 @@ const DataUnit = require('@sankhyalabs/core/dist/dataunit/DataUnit');
8
8
  const utils = require('@sankhyalabs/ezui/dist/collection/utils');
9
9
  require('./DataFetcher-384d2ce8.js');
10
10
  require('./ISave-ecbe9336.js');
11
- const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-293bc3d2.js');
11
+ const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-d341dd02.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');
@@ -84,7 +84,7 @@ class ServerSideExporterProvider extends SnkMultiSelectionListDataSource.Commons
84
84
  }
85
85
  }
86
86
 
87
- const snkGridCss = ".sc-snk-grid-h{--snk-grid-min-height:300px;--snk-grid-padding:var(--space--small)}.snk-grid__container.sc-snk-grid{display:flex;height:100%;width:calc(100% - var(--space--12, 12px));margin:var(--snk-grid-padding);outline:none;border:1px solid var(--color--strokes, #E1E2E5);border-radius:var(--border--radius-12, 12px);box-shadow:var(--shadow--small);--snk-grid-header--min-height:var(--space--52)}.snk-grid__header.sc-snk-grid{width:100%;display:flex;flex-wrap:nowrap;justify-content:flex-end;align-items:flex-start;min-height:var(--snk-grid-header--min-height)}.snk-grid__filter-bar.sc-snk-grid{width:100%}.snk-grid__header-divider.sc-snk-grid{margin-bottom:var(--space--medium);margin-right:var(--space--0);align-self:stretch}.snk-grid__header.sc-snk-grid snk-taskbar.sc-snk-grid{display:flex;align-items:flex-start;min-height:var(--snk-grid-header--min-height)}.snk-grid__header.sc-snk-grid ez-tooltip.sc-snk-grid{width:auto;margin-inline:var(--space--8, 8px)}.snk-grid__table.sc-snk-grid{min-height:var(--snk-grid-min-height)}.snk-grid-container__without-shadow.sc-snk-grid{--ezgrid__container--shadow:unset}.snk-grid-container__footer.sc-snk-grid{background-color:var(--background--xlight, #FFF);border-top:1px solid var(--color--strokes, #E1E2E5);border-radius:0 0 var(--border--radius-medium) var(--border--radius-medium)}";
87
+ const snkGridCss = ".sc-snk-grid-h{--snk-grid-min-height:300px;--snk-grid-padding:unset;--snk-grid-margin:var(--space--small);--snk-grid-box-shadow:var(--shadow--small);--snk-grid__header-padding:unset}.snk-grid__container.sc-snk-grid{display:flex;height:100%;width:calc(100% - var(--space--12, 12px));margin:var(--snk-grid-margin);outline:none;border:1px solid var(--color--strokes, #E1E2E5);border-radius:var(--border--radius-12, 12px);box-shadow:var(--snk-grid-box-shadow);padding:var(--snk-grid-padding);--snk-grid-header--min-height:var(--space--52)}.snk-grid__header.sc-snk-grid{width:100%;display:flex;flex-wrap:nowrap;justify-content:flex-end;align-items:flex-start;min-height:var(--snk-grid-header--min-height);padding-top:var(--snk-grid__header-padding);padding-right:var(--snk-grid__header-padding)}.snk-grid__filter-bar.sc-snk-grid{width:100%}.snk-grid__header-divider.sc-snk-grid{margin-bottom:var(--space--medium);margin-right:var(--space--0);align-self:stretch}.snk-grid__header.sc-snk-grid snk-taskbar.sc-snk-grid{display:flex;align-items:flex-start;min-height:var(--snk-grid-header--min-height)}.snk-grid__header.sc-snk-grid ez-tooltip.sc-snk-grid{width:auto;margin-inline:var(--space--8, 8px)}.snk-grid__table.sc-snk-grid{min-height:var(--snk-grid-min-height)}.snk-grid-container__without-shadow.sc-snk-grid{--ezgrid__container--shadow:unset}.snk-grid-container__footer.sc-snk-grid{background-color:var(--background--xlight, #FFF);border-top:1px solid var(--color--strokes, #E1E2E5);border-radius:0 0 var(--border--radius-medium) var(--border--radius-medium)}";
88
88
 
89
89
  const SnkGrid = class {
90
90
  constructor(hostRef) {
@@ -107,7 +107,7 @@ const SnkGrid = class {
107
107
  'snkGridHeaderTaskbar.unselected': ['REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
108
108
  'snkGridHeaderTaskbar.selected': this.getGridHeaderSelectedBtns(),
109
109
  'snkGridHeaderTaskbar.detail.unselected': ['REFRESH', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
110
- 'snkGridHeaderTaskbar.detail.selected': ['UPDATE', 'ATTACH', 'CLONE', 'REMOVE', 'MORE_OPTIONS', 'DIVIDER', 'REFRESH', 'ACTIONS_BUTTON'],
110
+ 'snkGridHeaderTaskbar.detail.selected': this.getDetailGridSelectedBtns(),
111
111
  'snkGridHeaderTaskbar.singleTaskbar.unselected': ['INSERT', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
112
112
  'snkGridHeaderTaskbar.singleTaskbar.selected': ['UPDATE', 'CLONE', 'REMOVE', 'MORE_OPTIONS', 'DIVIDER', 'ATTACH', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON'],
113
113
  'snkGridHeaderTaskbar.singleTaskbar.detail.unselected': ['INSERT', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
@@ -174,6 +174,15 @@ const SnkGrid = class {
174
174
  this.hideHeader = false;
175
175
  this.hideGridTaskbar = false;
176
176
  }
177
+ getDetailGridSelectedBtns() {
178
+ const btns = [
179
+ taskbarElements.TaskbarElement.UPDATE, taskbarElements.TaskbarElement.ATTACH, taskbarElements.TaskbarElement.CLONE, taskbarElements.TaskbarElement.MORE_OPTIONS,
180
+ taskbarElements.TaskbarElement.DIVIDER, taskbarElements.TaskbarElement.REFRESH, taskbarElements.TaskbarElement.ACTIONS_BUTTON
181
+ ];
182
+ if (this.multipleEditionEnabled)
183
+ btns.unshift(taskbarElements.TaskbarElement.UPDATE_MULTIPLE);
184
+ return btns;
185
+ }
177
186
  getGridHeaderSelectedBtns() {
178
187
  const btns = [
179
188
  taskbarElements.TaskbarElement.UPDATE, taskbarElements.TaskbarElement.CLONE, taskbarElements.TaskbarElement.REMOVE,
@@ -8,7 +8,7 @@ const constants = require('./constants-6d82e405.js');
8
8
  const SnkFormConfigManager = require('./SnkFormConfigManager-44386305.js');
9
9
  const taskbarElements = require('./taskbar-elements-80eddec8.js');
10
10
 
11
- const snkGuidesViewerCss = ".sc-snk-guides-viewer-h{--snk-guides-viewer--space-large:var(--space--large, 24px);--snk-guides-viewer--space-small:var(--space--2xs, 8px);--snk-guides-viewer__header--min-height:132px;--snk-guides-viewer__header--z-index:var(--more-visible, 2);--snk-guides-viewer__header--background-color:var(--background--body, #fafcff);--snk-guides-viewer__guide-navigator--width:340px;--snk-workspace--header-height:40px;display:block;outline:none}ez-guide-navigator.sc-snk-guides-viewer{--ez-guide-navigator--border-radius:var(--space--12, 12px)}snk-form-view.sc-snk-guides-viewer{width:100%}stack-item.snk-guides-viewer.sc-snk-guides-viewer{display:grid}stack-item.sc-snk-guides-viewer.sc-snk-guides-viewer{display:grid;min-height:100%}.snk-guides-viewer.sc-snk-guides-viewer{position:relative;padding:0 var(--snk-guides-viewer--space-small);padding-bottom:var(--snk-guides-viewer--space-small)}.snk-guides-viewer__detail-container.sc-snk-guides-viewer{display:flex;row-gap:24px;flex-direction:column;max-height:calc(100vh - var(--snk-guides-viewer__header--min-height));overflow-y:auto}.snk-guides-viewer__header.sc-snk-guides-viewer{position:sticky;align-items:center;top:0;z-index:var(--snk-guides-viewer__header--z-index);background-color:var(--snk-guides-viewer__header--background-color);min-height:var(--snk-guides-viewer__header--min-height);width:calc(100% + (var(--snk-guides-viewer--space-large) * 2));padding-left:var(--snk-guides-viewer--space-large);padding-right:var(--snk-guides-viewer--space-large);padding-top:var(--snk-guides-viewer--space-large);padding-bottom:var(--snk-guides-viewer--space-small);margin-left:calc(var(--snk-guides-viewer--space-large) * -1);margin-right:calc(var(--snk-guides-viewer--space-large) * -1);margin-bottom:var(--snk-guides-viewer--space-small)}.snk-guides-viewer__header-breadcrumb.sc-snk-guides-viewer{width:25%;display:flex}.snk-guides-viewer__header-taskbar.sc-snk-guides-viewer{width:75%}.snk-guides-viewer__container.sc-snk-guides-viewer{display:grid;grid-template-columns:minmax(0, auto) minmax(0, 100%);height:100%;column-gap:var(--snk-guides-viewer--space-small)}.snk-guides-viewer__guide-navigator.sc-snk-guides-viewer{position:sticky;top:var(--snk-guides-viewer--space-small);height:100%}.snk-guides-viewer__guide-navigator[open].sc-snk-guides-viewer{width:var(--snk-guides-viewer__guide-navigator--width);max-width:var(--snk-guides-viewer__guide-navigator--width);min-width:var(--snk-guides-viewer__guide-navigator--width)}.snk-guides-viewer__detail-content.sc-snk-guides-viewer{min-height:100%;align-items:flex-start;align-content:flex-start}";
11
+ const snkGuidesViewerCss = ".sc-snk-guides-viewer-h{--snk-guides-viewer--space-large:var(--space--large, 24px);--snk-guides-viewer--space-small:var(--space--2xs, 8px);--snk-guides-viewer__header--min-height:132px;--snk-guides-viewer__header--z-index:var(--more-visible, 2);--snk-guides-viewer__header--background-color:var(--background--body, #fafcff);--snk-guides-viewer__guide-navigator--width:340px;--snk-workspace--header-height:40px;display:block;outline:none}ez-guide-navigator.sc-snk-guides-viewer{--ez-guide-navigator--border-radius:var(--space--12, 12px)}snk-form-view.sc-snk-guides-viewer{width:100%}stack-item.snk-guides-viewer.sc-snk-guides-viewer{display:grid}stack-item.sc-snk-guides-viewer.sc-snk-guides-viewer{display:grid;min-height:100%}.snk-guides-viewer.sc-snk-guides-viewer{position:relative;padding:0 var(--snk-guides-viewer--space-small);padding-bottom:var(--snk-guides-viewer--space-small)}.snk-guides-viewer__detail-container.sc-snk-guides-viewer{display:flex;row-gap:24px;flex-direction:column;max-height:calc(100vh - var(--snk-guides-viewer__header--min-height));overflow-y:auto}.snk-guides-viewer__header.sc-snk-guides-viewer{position:sticky;align-items:center;top:0;z-index:var(--snk-guides-viewer__header--z-index);background-color:var(--snk-guides-viewer__header--background-color);min-height:var(--snk-guides-viewer__header--min-height);width:calc(100% + (var(--snk-guides-viewer--space-large) * 2));padding-left:var(--snk-guides-viewer--space-large);padding-right:var(--snk-guides-viewer--space-large);padding-top:var(--snk-guides-viewer--space-large);padding-bottom:var(--snk-guides-viewer--space-small);margin-left:calc(var(--snk-guides-viewer--space-large) * -1);margin-right:calc(var(--snk-guides-viewer--space-large) * -1);margin-bottom:var(--snk-guides-viewer--space-small)}.snk-guides-viewer__header-breadcrumb.sc-snk-guides-viewer{width:25%;display:flex}.snk-guides-viewer__header-taskbar.sc-snk-guides-viewer{width:75%}.snk-guides-viewer__container.sc-snk-guides-viewer{display:grid;grid-template-columns:minmax(0, auto) minmax(0, 100%);height:100%;column-gap:var(--snk-guides-viewer--space-small)}.snk-guides-viewer__guide-navigator.sc-snk-guides-viewer{position:sticky;top:var(--snk-guides-viewer--space-small);height:calc(100vh - var(--snk-guides-viewer__header--min-height))}.snk-guides-viewer__guide-navigator[open].sc-snk-guides-viewer{width:var(--snk-guides-viewer__guide-navigator--width);max-width:var(--snk-guides-viewer__guide-navigator--width);min-width:var(--snk-guides-viewer__guide-navigator--width)}.snk-guides-viewer__detail-content.sc-snk-guides-viewer{min-height:100%;align-items:flex-start;align-content:flex-start}";
12
12
 
13
13
  const FORM_NAME_PREFIX = "__FORM:";
14
14
  const SnkGuidesViewer = class {
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const snkGuidesViewer = require('./snk-guides-viewer-b4ca3437.js');
5
+ const snkGuidesViewer = require('./snk-guides-viewer-8e7a503b.js');
6
6
  require('./index-1894343a.js');
7
7
  require('@sankhyalabs/core');
8
8
  require('@sankhyalabs/ezui/dist/collection/utils');
@@ -9,7 +9,7 @@ const constants = require('./constants-6d82e405.js');
9
9
  const taskbarElements = require('./taskbar-elements-80eddec8.js');
10
10
  require('./DataFetcher-384d2ce8.js');
11
11
  require('./ISave-ecbe9336.js');
12
- const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-293bc3d2.js');
12
+ const SnkMultiSelectionListDataSource = require('./SnkMultiSelectionListDataSource-d341dd02.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');
@@ -31,5 +31,8 @@ snk-data-unit {
31
31
  }
32
32
 
33
33
  snk-grid{
34
- height: calc(100% - 43px);
34
+ height: calc(100% - 56px);
35
+ --snk-grid__header-padding: var(--space--4, 4px);
36
+ --snk-grid-padding: var(--space--8, 8px);
37
+ --snk-grid-box-shadow: unset;
35
38
  }
@@ -1,7 +1,7 @@
1
1
  import { Action as DUAction, KeyboardManager, StringUtils } from '@sankhyalabs/core';
2
- import { Host, forceUpdate, h } from '@stencil/core';
2
+ import { forceUpdate, h, Host, } from '@stencil/core';
3
3
  import { SnkFormConfigManager } from '../../../snk-form-config/SnkFormConfigManager';
4
- import { buildFormMetadata } from "@sankhyalabs/ezui/dist/collection/utils/form";
4
+ import { buildFormMetadata } from '@sankhyalabs/ezui/dist/collection/utils/form';
5
5
  import { PresentationMode } from '../../../../lib';
6
6
  import { TaskbarElement } from '../../../snk-taskbar/elements/taskbar-elements';
7
7
  import { VIEW_MODE } from '../../../../lib/utils/constants';
@@ -189,6 +189,9 @@ export class SnkDetailView {
189
189
  return [];
190
190
  }
191
191
  emitSwitchEvent(mode) {
192
+ if (mode === VIEW_MODE.GRID) {
193
+ this.dataUnit.isMultipleEdition = false;
194
+ }
192
195
  const guideId = mode === VIEW_MODE.GRID ? this.stripFormPattern(this.branchGuide.id) : this.getFormGuideId();
193
196
  if (guideId) {
194
197
  this.snkSwitchGuide.emit(guideId);
@@ -199,6 +202,11 @@ export class SnkDetailView {
199
202
  this.emitSwitchEvent(VIEW_MODE.GRID);
200
203
  evt.stopPropagation();
201
204
  }
205
+ if (evt.detail === TaskbarElement.UPDATE_MULTIPLE) {
206
+ this.dataUnit.isMultipleEdition = true;
207
+ this.emitSwitchEvent(VIEW_MODE.FORM);
208
+ evt.stopPropagation();
209
+ }
202
210
  if (evt.detail === TaskbarElement.FORM_MODE || evt.detail === TaskbarElement.UPDATE) {
203
211
  this.emitSwitchEvent(VIEW_MODE.FORM);
204
212
  evt.stopPropagation();
@@ -243,6 +251,12 @@ export class SnkDetailView {
243
251
  this.addErrorBadgeToBranchGuide();
244
252
  }
245
253
  else if (action.type === DUAction.DATA_LOADED) {
254
+ this.handleDataLoaded();
255
+ }
256
+ }
257
+ handleDataLoaded() {
258
+ var _a;
259
+ if (!((_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getSelectedRecord())) {
246
260
  this.dataUnit.selectFirst();
247
261
  }
248
262
  }
@@ -299,7 +313,7 @@ export class SnkDetailView {
299
313
  render() {
300
314
  this.updateLabel();
301
315
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
302
- return (h(Host, null, h("snk-data-unit", { ref: (el) => this._snkDataUnit = el, dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: this.handleDataStateChange.bind(this), ignoreSaveMessage: this._currentView === VIEW_MODE.GRID, messagesBuilder: this.messagesBuilder, configName: this._configName }, h("ez-view-stack", { ref: (ref) => this.updateViewStack(ref) }, h("stack-item", null, h("div", { class: "ez-box ez-box--shadow grid-container" }, h("div", { class: "ez-title--primary ez-size-width--full ez-padding--large detail-header" }, h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), h("snk-grid", { class: "ez-size-width--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: (evt) => this.executeActionHandler(evt), presentationMode: this.presentationMode, canEdit: this.canEdit, isDetail: true, taskbarCustomContainerId: this.taskbarCustomContainerId, gridHeaderCustomSlotId: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS", topTaskbarCustomSlotId: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS", outlineMode: false, enableGridInsert: true, autoLoad: true }))), 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(), fieldToFocus: this._fieldToGetFocus, label: this.label, levelPath: this._levelPath, onFormItemsReady: ({ detail: formItems }) => this.formItemsReady.emit(formItems), onSnkRequestClearFieldToFocus: this.clearFieldToFocusHandler.bind(this), fieldSearch: this._fieldSearch, entityPath: this.entityName }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, messagesBuilder: this.messagesBuilder, disabledButtons: this._disabledButtons, buttons: "INSERT,PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,ACTIONS_BUTTON,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: this.presentationMode, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit, resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: "DETAIL_TASKBAR_CUSTOM_ELEMENTS", actionsSettingsList: this.getSettingsListForm() }, h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }))))), h("snk-attach", { ref: (ref) => this._snkAttach = ref, registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this.entityName }))));
316
+ return (h(Host, null, h("snk-data-unit", { ref: (el) => this._snkDataUnit = el, dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: this.handleDataStateChange.bind(this), ignoreSaveMessage: this._currentView === VIEW_MODE.GRID, messagesBuilder: this.messagesBuilder, configName: this._configName }, h("ez-view-stack", { ref: (ref) => this.updateViewStack(ref) }, h("stack-item", null, h("div", { class: "ez-box ez-box--shadow grid-container" }, h("div", { class: "ez-title--primary ez-size-width--full ez-padding--large detail-header" }, h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), h("snk-grid", { class: "ez-size-width--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: (evt) => this.executeActionHandler(evt), presentationMode: this.presentationMode, canEdit: this.canEdit, isDetail: true, taskbarCustomContainerId: this.taskbarCustomContainerId, gridHeaderCustomSlotId: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS", topTaskbarCustomSlotId: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS", outlineMode: false, enableGridInsert: true, autoLoad: true, multipleEditionEnabled: true, multipleSelection: true }))), 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(), fieldToFocus: this._fieldToGetFocus, label: this.label, levelPath: this._levelPath, onFormItemsReady: ({ detail: formItems }) => this.formItemsReady.emit(formItems), onSnkRequestClearFieldToFocus: this.clearFieldToFocusHandler.bind(this), fieldSearch: this._fieldSearch, entityPath: this.entityName }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, messagesBuilder: this.messagesBuilder, disabledButtons: this._disabledButtons, buttons: "INSERT,PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,ACTIONS_BUTTON,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: this.presentationMode, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit, resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: "DETAIL_TASKBAR_CUSTOM_ELEMENTS", actionsSettingsList: this.getSettingsListForm() }, h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }))))), h("snk-attach", { ref: (ref) => this._snkAttach = ref, registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this.entityName }))));
303
317
  }
304
318
  static get is() { return "snk-detail-view"; }
305
319
  static get encapsulation() { return "scoped"; }
@@ -96,7 +96,7 @@ stack-item.sc-snk-guides-viewer {
96
96
 
97
97
  /*public*/
98
98
  top: var(--snk-guides-viewer--space-small);
99
- height: 100%;
99
+ height: calc(100vh - var(--snk-guides-viewer__header--min-height));
100
100
  }
101
101
 
102
102
  .snk-guides-viewer__guide-navigator[open] {
@@ -37,6 +37,16 @@ function insertCustomButtonsBeforeSpacer(buttons, customButtons) {
37
37
  }
38
38
  return [...customButtons, ...buttons];
39
39
  }
40
+ function buildNavigationDisabledBtns(dataState) {
41
+ const navigationDisabled = [];
42
+ if (!(dataState === null || dataState === void 0 ? void 0 : dataState.hasPrevious)) {
43
+ navigationDisabled.push(TaskbarElement.PREVIOUS);
44
+ }
45
+ if (!(dataState === null || dataState === void 0 ? void 0 : dataState.hasNext)) {
46
+ navigationDisabled.push(TaskbarElement.NEXT);
47
+ }
48
+ return navigationDisabled;
49
+ }
40
50
  export function buildNativeTaskbarManager(currentViewMode, mergeTaskbarManager, messagesBuilder) {
41
51
  var _a, _b;
42
52
  const CUSTOM_BUTTONS = [
@@ -107,6 +117,10 @@ export function buildNativeTaskbarManager(currentViewMode, mergeTaskbarManager,
107
117
  if (!hasSelectedRecord && buttonsRequiringSelection.includes(buttonName)) {
108
118
  return false;
109
119
  }
120
+ const navigationDisabled = buildNavigationDisabledBtns(dataState);
121
+ if (navigationDisabled.includes(buttonName)) {
122
+ return false;
123
+ }
110
124
  return (_a = mergeTaskbarManager === null || mergeTaskbarManager === void 0 ? void 0 : mergeTaskbarManager.isEnabled(_, dataState, buttonName, originalValue)) !== null && _a !== void 0 ? _a : originalValue;
111
125
  },
112
126
  getMoreOptions(taskbarId, configName, dataState, currentActions) {
@@ -17,41 +17,35 @@ export class CommonsExporter {
17
17
  return this.columnsState;
18
18
  }
19
19
  async buildColumnsMetadata(gridColumns) {
20
- var _a, _b, _c;
20
+ var _a;
21
21
  const columnsMetadata = [];
22
+ const searchPlusDescriptionIds = this.collectSearchPlusDescriptionIds(gridColumns);
22
23
  for (const column of gridColumns) {
24
+ if (this.isHiddenColumn(column)) {
25
+ continue;
26
+ }
23
27
  /**
24
- * TODO: Analisar e criar uma melhor forma de tratar essa validação do "RECDESP".
28
+ * A grid adiciona uma coluna auxiliar para a descrição de campos SEARCHPLUS
29
+ * (ex.: "ENTITYNAME.DESCRIPTIONFIELD"). A descrição já é emitida ao processar
30
+ * o próprio SEARCHPLUS, então pulamos a auxiliar para evitar duplicar a coluna.
25
31
  */
26
- if (column.hidden && column.name !== "RECDESP") {
32
+ if (searchPlusDescriptionIds.has(column.name)) {
27
33
  continue;
28
34
  }
29
35
  const fieldData = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getField(column.name);
30
36
  const customFormatter = await this.grid.getCustomValueFormatter(column.name);
31
- const isUserInterfaceSEARCH = (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface.SEARCH;
32
- const widthColumnDefault = 60;
33
- const labelColumn = isUserInterfaceSEARCH ? "Cód. " : column.label;
34
- let descriptionColumn = undefined;
37
+ const isSearchField = this.isSearchUserInterface(fieldData);
38
+ const labelColumn = isSearchField ? "Cód. " : column.label;
35
39
  let columnData = {
36
40
  id: column.name,
37
41
  label: labelColumn,
38
- width: isUserInterfaceSEARCH ? (labelColumn.length * this.DEFAULT_FONT_SIZE) : column.width,
42
+ width: isSearchField ? (labelColumn.length * this.DEFAULT_FONT_SIZE) : column.width,
39
43
  type: fieldData === null || fieldData === void 0 ? void 0 : fieldData.dataType,
40
44
  userInterface: fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface,
41
45
  customFormatter
42
46
  };
43
- if (isUserInterfaceSEARCH && ((_b = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _b === void 0 ? void 0 : _b.DESCRIPTIONFIELD) != undefined) {
44
- const labelDescription = (_c = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _c === void 0 ? void 0 : _c.DESCRIPTIONENTITY;
45
- const mergedFrom = fieldData.properties.mergedFrom;
46
- const descriptionField = `${fieldData.properties.ENTITYNAME}.${fieldData.properties.DESCRIPTIONFIELD}`;
47
- descriptionColumn = {
48
- id: `${mergedFrom ? (mergedFrom + ".") : ""}${descriptionField}`,
49
- label: labelDescription,
50
- width: isUserInterfaceSEARCH && labelDescription ? (labelDescription.length * this.DEFAULT_FONT_SIZE - widthColumnDefault) : column.width,
51
- type: DataType.TEXT,
52
- userInterface: UserInterface.LONGTEXT,
53
- descriptionFrom: fieldData.name
54
- };
47
+ let descriptionColumn = isSearchField ? this.buildDescriptionColumn(fieldData, column) : undefined;
48
+ if (descriptionColumn) {
55
49
  const newWidth = this.getWidthByMetaData(column === null || column === void 0 ? void 0 : column.width, columnData === null || columnData === void 0 ? void 0 : columnData.width, descriptionColumn === null || descriptionColumn === void 0 ? void 0 : descriptionColumn.width);
56
50
  columnData = Object.assign(Object.assign({}, columnData), { width: newWidth === null || newWidth === void 0 ? void 0 : newWidth.codWidth });
57
51
  descriptionColumn = Object.assign(Object.assign({}, descriptionColumn), { width: newWidth === null || newWidth === void 0 ? void 0 : newWidth.descWidth, label: (descriptionColumn === null || descriptionColumn === void 0 ? void 0 : descriptionColumn.label) || (column === null || column === void 0 ? void 0 : column.label) });
@@ -63,6 +57,59 @@ export class CommonsExporter {
63
57
  ;
64
58
  return columnsMetadata || [];
65
59
  }
60
+ collectSearchPlusDescriptionIds(gridColumns) {
61
+ var _a;
62
+ const descriptionIds = new Set();
63
+ for (const column of gridColumns) {
64
+ if (this.isHiddenColumn(column)) {
65
+ continue;
66
+ }
67
+ const fieldData = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getField(column.name);
68
+ if (!this.isSearchUserInterface(fieldData)) {
69
+ continue;
70
+ }
71
+ const descriptionId = this.buildDescriptionColumnId(fieldData);
72
+ if (descriptionId) {
73
+ descriptionIds.add(descriptionId);
74
+ }
75
+ }
76
+ return descriptionIds;
77
+ }
78
+ /**
79
+ * TODO: Analisar e criar uma melhor forma de tratar essa validação do "RECDESP".
80
+ */
81
+ isHiddenColumn(column) {
82
+ return column.hidden && column.name !== "RECDESP";
83
+ }
84
+ isSearchUserInterface(fieldData) {
85
+ return (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface.SEARCH
86
+ || (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface.SEARCHPLUS;
87
+ }
88
+ buildDescriptionColumnId(fieldData) {
89
+ const properties = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties;
90
+ if ((properties === null || properties === void 0 ? void 0 : properties.DESCRIPTIONFIELD) == undefined) {
91
+ return undefined;
92
+ }
93
+ const descriptionField = `${properties.ENTITYNAME}.${properties.DESCRIPTIONFIELD}`;
94
+ return properties.mergedFrom ? `${properties.mergedFrom}.${descriptionField}` : descriptionField;
95
+ }
96
+ buildDescriptionColumn(fieldData, column) {
97
+ var _a;
98
+ const id = this.buildDescriptionColumnId(fieldData);
99
+ if (!id) {
100
+ return undefined;
101
+ }
102
+ const labelDescription = (_a = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _a === void 0 ? void 0 : _a.DESCRIPTIONENTITY;
103
+ const widthColumnDefault = 60;
104
+ return {
105
+ id,
106
+ label: labelDescription,
107
+ width: labelDescription ? (labelDescription.length * this.DEFAULT_FONT_SIZE - widthColumnDefault) : column.width,
108
+ type: DataType.TEXT,
109
+ userInterface: UserInterface.LONGTEXT,
110
+ descriptionFrom: fieldData.name
111
+ };
112
+ }
66
113
  getWidthByMetaData(maxWidth, widthCod, widthDescription) {
67
114
  const totalCurrentWidth = widthCod + widthDescription;
68
115
  const codPercentage = widthCod / totalCurrentWidth;
@@ -1,18 +1,21 @@
1
1
  :host {
2
2
  --snk-grid-min-height: 300px;
3
- --snk-grid-padding: var(--space--small);
3
+ --snk-grid-padding: unset;
4
+ --snk-grid-margin: var(--space--small);
5
+ --snk-grid-box-shadow: var(--shadow--small);
6
+ --snk-grid__header-padding: unset;
4
7
  }
5
8
 
6
9
  .snk-grid__container {
7
10
  display: flex;
8
11
  height: 100%;
9
12
  width: calc(100% - var(--space--12, 12px));
10
- /* padding: var(--snk-grid-padding); */
11
- margin: var(--snk-grid-padding);
13
+ margin: var(--snk-grid-margin);
12
14
  outline: none;
13
15
  border: 1px solid var(--color--strokes, #E1E2E5);
14
16
  border-radius: var(--border--radius-12, 12px);
15
- box-shadow: var(--shadow--small);
17
+ box-shadow: var(--snk-grid-box-shadow);
18
+ padding: var(--snk-grid-padding);
16
19
 
17
20
  --snk-grid-header--min-height: var(--space--52);
18
21
  }
@@ -24,6 +27,8 @@
24
27
  justify-content: flex-end;
25
28
  align-items: flex-start;
26
29
  min-height: var(--snk-grid-header--min-height);
30
+ padding-top: var(--snk-grid__header-padding);
31
+ padding-right: var(--snk-grid__header-padding);
27
32
  }
28
33
 
29
34
  .snk-grid__filter-bar {
@@ -60,4 +65,4 @@
60
65
  background-color: var(--background--xlight, #FFF);
61
66
  border-top: 1px solid var(--color--strokes, #E1E2E5);
62
67
  border-radius: 0 0 var(--border--radius-medium) var(--border--radius-medium);
63
- }
68
+ }
@@ -31,7 +31,7 @@ export class SnkGrid {
31
31
  'snkGridHeaderTaskbar.unselected': ['REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
32
32
  'snkGridHeaderTaskbar.selected': this.getGridHeaderSelectedBtns(),
33
33
  'snkGridHeaderTaskbar.detail.unselected': ['REFRESH', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
34
- 'snkGridHeaderTaskbar.detail.selected': ['UPDATE', 'ATTACH', 'CLONE', 'REMOVE', 'MORE_OPTIONS', 'DIVIDER', 'REFRESH', 'ACTIONS_BUTTON'],
34
+ 'snkGridHeaderTaskbar.detail.selected': this.getDetailGridSelectedBtns(),
35
35
  'snkGridHeaderTaskbar.singleTaskbar.unselected': ['INSERT', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
36
36
  'snkGridHeaderTaskbar.singleTaskbar.selected': ['UPDATE', 'CLONE', 'REMOVE', 'MORE_OPTIONS', 'DIVIDER', 'ATTACH', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON'],
37
37
  'snkGridHeaderTaskbar.singleTaskbar.detail.unselected': ['INSERT', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
@@ -98,6 +98,15 @@ export class SnkGrid {
98
98
  this.hideHeader = false;
99
99
  this.hideGridTaskbar = false;
100
100
  }
101
+ getDetailGridSelectedBtns() {
102
+ const btns = [
103
+ TaskbarElement.UPDATE, TaskbarElement.ATTACH, TaskbarElement.CLONE, TaskbarElement.MORE_OPTIONS,
104
+ TaskbarElement.DIVIDER, TaskbarElement.REFRESH, TaskbarElement.ACTIONS_BUTTON
105
+ ];
106
+ if (this.multipleEditionEnabled)
107
+ btns.unshift(TaskbarElement.UPDATE_MULTIPLE);
108
+ return btns;
109
+ }
101
110
  getGridHeaderSelectedBtns() {
102
111
  const btns = [
103
112
  TaskbarElement.UPDATE, TaskbarElement.CLONE, TaskbarElement.REMOVE,