@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
@@ -250,41 +250,35 @@ class CommonsExporter {
250
250
  return this.columnsState;
251
251
  }
252
252
  async buildColumnsMetadata(gridColumns) {
253
- var _a, _b, _c;
253
+ var _a;
254
254
  const columnsMetadata = [];
255
+ const searchPlusDescriptionIds = this.collectSearchPlusDescriptionIds(gridColumns);
255
256
  for (const column of gridColumns) {
257
+ if (this.isHiddenColumn(column)) {
258
+ continue;
259
+ }
256
260
  /**
257
- * TODO: Analisar e criar uma melhor forma de tratar essa validação do "RECDESP".
261
+ * A grid adiciona uma coluna auxiliar para a descrição de campos SEARCHPLUS
262
+ * (ex.: "ENTITYNAME.DESCRIPTIONFIELD"). A descrição já é emitida ao processar
263
+ * o próprio SEARCHPLUS, então pulamos a auxiliar para evitar duplicar a coluna.
258
264
  */
259
- if (column.hidden && column.name !== "RECDESP") {
265
+ if (searchPlusDescriptionIds.has(column.name)) {
260
266
  continue;
261
267
  }
262
268
  const fieldData = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getField(column.name);
263
269
  const customFormatter = await this.grid.getCustomValueFormatter(column.name);
264
- const isUserInterfaceSEARCH = (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface$1.SEARCH;
265
- const widthColumnDefault = 60;
266
- const labelColumn = isUserInterfaceSEARCH ? "Cód. " : column.label;
267
- let descriptionColumn = undefined;
270
+ const isSearchField = this.isSearchUserInterface(fieldData);
271
+ const labelColumn = isSearchField ? "Cód. " : column.label;
268
272
  let columnData = {
269
273
  id: column.name,
270
274
  label: labelColumn,
271
- width: isUserInterfaceSEARCH ? (labelColumn.length * this.DEFAULT_FONT_SIZE) : column.width,
275
+ width: isSearchField ? (labelColumn.length * this.DEFAULT_FONT_SIZE) : column.width,
272
276
  type: fieldData === null || fieldData === void 0 ? void 0 : fieldData.dataType,
273
277
  userInterface: fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface,
274
278
  customFormatter
275
279
  };
276
- if (isUserInterfaceSEARCH && ((_b = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _b === void 0 ? void 0 : _b.DESCRIPTIONFIELD) != undefined) {
277
- const labelDescription = (_c = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _c === void 0 ? void 0 : _c.DESCRIPTIONENTITY;
278
- const mergedFrom = fieldData.properties.mergedFrom;
279
- const descriptionField = `${fieldData.properties.ENTITYNAME}.${fieldData.properties.DESCRIPTIONFIELD}`;
280
- descriptionColumn = {
281
- id: `${mergedFrom ? (mergedFrom + ".") : ""}${descriptionField}`,
282
- label: labelDescription,
283
- width: isUserInterfaceSEARCH && labelDescription ? (labelDescription.length * this.DEFAULT_FONT_SIZE - widthColumnDefault) : column.width,
284
- type: DataType.TEXT,
285
- userInterface: UserInterface$1.LONGTEXT,
286
- descriptionFrom: fieldData.name
287
- };
280
+ let descriptionColumn = isSearchField ? this.buildDescriptionColumn(fieldData, column) : undefined;
281
+ if (descriptionColumn) {
288
282
  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);
289
283
  columnData = Object.assign(Object.assign({}, columnData), { width: newWidth === null || newWidth === void 0 ? void 0 : newWidth.codWidth });
290
284
  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) });
@@ -295,6 +289,59 @@ class CommonsExporter {
295
289
  }
296
290
  return columnsMetadata || [];
297
291
  }
292
+ collectSearchPlusDescriptionIds(gridColumns) {
293
+ var _a;
294
+ const descriptionIds = new Set();
295
+ for (const column of gridColumns) {
296
+ if (this.isHiddenColumn(column)) {
297
+ continue;
298
+ }
299
+ const fieldData = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getField(column.name);
300
+ if (!this.isSearchUserInterface(fieldData)) {
301
+ continue;
302
+ }
303
+ const descriptionId = this.buildDescriptionColumnId(fieldData);
304
+ if (descriptionId) {
305
+ descriptionIds.add(descriptionId);
306
+ }
307
+ }
308
+ return descriptionIds;
309
+ }
310
+ /**
311
+ * TODO: Analisar e criar uma melhor forma de tratar essa validação do "RECDESP".
312
+ */
313
+ isHiddenColumn(column) {
314
+ return column.hidden && column.name !== "RECDESP";
315
+ }
316
+ isSearchUserInterface(fieldData) {
317
+ return (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface$1.SEARCH
318
+ || (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface$1.SEARCHPLUS;
319
+ }
320
+ buildDescriptionColumnId(fieldData) {
321
+ const properties = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties;
322
+ if ((properties === null || properties === void 0 ? void 0 : properties.DESCRIPTIONFIELD) == undefined) {
323
+ return undefined;
324
+ }
325
+ const descriptionField = `${properties.ENTITYNAME}.${properties.DESCRIPTIONFIELD}`;
326
+ return properties.mergedFrom ? `${properties.mergedFrom}.${descriptionField}` : descriptionField;
327
+ }
328
+ buildDescriptionColumn(fieldData, column) {
329
+ var _a;
330
+ const id = this.buildDescriptionColumnId(fieldData);
331
+ if (!id) {
332
+ return undefined;
333
+ }
334
+ const labelDescription = (_a = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _a === void 0 ? void 0 : _a.DESCRIPTIONENTITY;
335
+ const widthColumnDefault = 60;
336
+ return {
337
+ id,
338
+ label: labelDescription,
339
+ width: labelDescription ? (labelDescription.length * this.DEFAULT_FONT_SIZE - widthColumnDefault) : column.width,
340
+ type: DataType.TEXT,
341
+ userInterface: UserInterface$1.LONGTEXT,
342
+ descriptionFrom: fieldData.name
343
+ };
344
+ }
298
345
  getWidthByMetaData(maxWidth, widthCod, widthDescription) {
299
346
  const totalCurrentWidth = widthCod + widthDescription;
300
347
  const codPercentage = widthCod / totalCurrentWidth;
@@ -149,6 +149,16 @@ function insertCustomButtonsBeforeSpacer(buttons, customButtons) {
149
149
  }
150
150
  return [...customButtons, ...buttons];
151
151
  }
152
+ function buildNavigationDisabledBtns(dataState) {
153
+ const navigationDisabled = [];
154
+ if (!(dataState === null || dataState === void 0 ? void 0 : dataState.hasPrevious)) {
155
+ navigationDisabled.push(TaskbarElement.PREVIOUS);
156
+ }
157
+ if (!(dataState === null || dataState === void 0 ? void 0 : dataState.hasNext)) {
158
+ navigationDisabled.push(TaskbarElement.NEXT);
159
+ }
160
+ return navigationDisabled;
161
+ }
152
162
  function buildNativeTaskbarManager(currentViewMode, mergeTaskbarManager, messagesBuilder) {
153
163
  var _a, _b;
154
164
  const CUSTOM_BUTTONS = [
@@ -219,6 +229,10 @@ function buildNativeTaskbarManager(currentViewMode, mergeTaskbarManager, message
219
229
  if (!hasSelectedRecord && buttonsRequiringSelection.includes(buttonName)) {
220
230
  return false;
221
231
  }
232
+ const navigationDisabled = buildNavigationDisabledBtns(dataState);
233
+ if (navigationDisabled.includes(buttonName)) {
234
+ return false;
235
+ }
222
236
  return (_a = mergeTaskbarManager === null || mergeTaskbarManager === void 0 ? void 0 : mergeTaskbarManager.isEnabled(_, dataState, buttonName, originalValue)) !== null && _a !== void 0 ? _a : originalValue;
223
237
  },
224
238
  getMoreOptions(taskbarId, configName, dataState, currentActions) {
@@ -56,7 +56,7 @@ import { d as defineCustomElement$3 } from './taskbar-actions-button2.js';
56
56
  import { d as defineCustomElement$2 } from './taskbar-split-button2.js';
57
57
  import { d as defineCustomElement$j } from './snk-form-config2.js';
58
58
 
59
- 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}";
59
+ 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}";
60
60
 
61
61
  const FORM_NAME_PREFIX = "__FORM:";
62
62
  const SnkGuidesViewer = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
@@ -899,7 +899,7 @@ class GuideBuilder {
899
899
  }
900
900
  }
901
901
 
902
- 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)}";
902
+ 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}";
903
903
 
904
904
  const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
905
905
  constructor() {
@@ -1086,6 +1086,9 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
1086
1086
  return [];
1087
1087
  }
1088
1088
  emitSwitchEvent(mode) {
1089
+ if (mode === VIEW_MODE.GRID) {
1090
+ this.dataUnit.isMultipleEdition = false;
1091
+ }
1089
1092
  const guideId = mode === VIEW_MODE.GRID ? this.stripFormPattern(this.branchGuide.id) : this.getFormGuideId();
1090
1093
  if (guideId) {
1091
1094
  this.snkSwitchGuide.emit(guideId);
@@ -1096,6 +1099,11 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
1096
1099
  this.emitSwitchEvent(VIEW_MODE.GRID);
1097
1100
  evt.stopPropagation();
1098
1101
  }
1102
+ if (evt.detail === TaskbarElement.UPDATE_MULTIPLE) {
1103
+ this.dataUnit.isMultipleEdition = true;
1104
+ this.emitSwitchEvent(VIEW_MODE.FORM);
1105
+ evt.stopPropagation();
1106
+ }
1099
1107
  if (evt.detail === TaskbarElement.FORM_MODE || evt.detail === TaskbarElement.UPDATE) {
1100
1108
  this.emitSwitchEvent(VIEW_MODE.FORM);
1101
1109
  evt.stopPropagation();
@@ -1140,6 +1148,12 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
1140
1148
  this.addErrorBadgeToBranchGuide();
1141
1149
  }
1142
1150
  else if (action.type === Action.DATA_LOADED) {
1151
+ this.handleDataLoaded();
1152
+ }
1153
+ }
1154
+ handleDataLoaded() {
1155
+ var _a;
1156
+ if (!((_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getSelectedRecord())) {
1143
1157
  this.dataUnit.selectFirst();
1144
1158
  }
1145
1159
  }
@@ -1196,7 +1210,7 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
1196
1210
  render() {
1197
1211
  this.updateLabel();
1198
1212
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
1199
- 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 }))));
1213
+ 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 }))));
1200
1214
  }
1201
1215
  get _element() { return this; }
1202
1216
  static get watchers() { return {
@@ -92,7 +92,7 @@ class ServerSideExporterProvider extends CommonsExporter {
92
92
  }
93
93
  }
94
94
 
95
- 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)}";
95
+ 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)}";
96
96
 
97
97
  const SnkGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
98
98
  constructor() {
@@ -116,7 +116,7 @@ const SnkGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
116
116
  'snkGridHeaderTaskbar.unselected': ['REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
117
117
  'snkGridHeaderTaskbar.selected': this.getGridHeaderSelectedBtns(),
118
118
  'snkGridHeaderTaskbar.detail.unselected': ['REFRESH', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
119
- 'snkGridHeaderTaskbar.detail.selected': ['UPDATE', 'ATTACH', 'CLONE', 'REMOVE', 'MORE_OPTIONS', 'DIVIDER', 'REFRESH', 'ACTIONS_BUTTON'],
119
+ 'snkGridHeaderTaskbar.detail.selected': this.getDetailGridSelectedBtns(),
120
120
  'snkGridHeaderTaskbar.singleTaskbar.unselected': ['INSERT', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
121
121
  'snkGridHeaderTaskbar.singleTaskbar.selected': ['UPDATE', 'CLONE', 'REMOVE', 'MORE_OPTIONS', 'DIVIDER', 'ATTACH', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON'],
122
122
  'snkGridHeaderTaskbar.singleTaskbar.detail.unselected': ['INSERT', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
@@ -183,6 +183,15 @@ const SnkGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
183
183
  this.hideHeader = false;
184
184
  this.hideGridTaskbar = false;
185
185
  }
186
+ getDetailGridSelectedBtns() {
187
+ const btns = [
188
+ TaskbarElement.UPDATE, TaskbarElement.ATTACH, TaskbarElement.CLONE, TaskbarElement.MORE_OPTIONS,
189
+ TaskbarElement.DIVIDER, TaskbarElement.REFRESH, TaskbarElement.ACTIONS_BUTTON
190
+ ];
191
+ if (this.multipleEditionEnabled)
192
+ btns.unshift(TaskbarElement.UPDATE_MULTIPLE);
193
+ return btns;
194
+ }
186
195
  getGridHeaderSelectedBtns() {
187
196
  const btns = [
188
197
  TaskbarElement.UPDATE, TaskbarElement.CLONE, TaskbarElement.REMOVE,
@@ -162,41 +162,35 @@ class CommonsExporter {
162
162
  return this.columnsState;
163
163
  }
164
164
  async buildColumnsMetadata(gridColumns) {
165
- var _a, _b, _c;
165
+ var _a;
166
166
  const columnsMetadata = [];
167
+ const searchPlusDescriptionIds = this.collectSearchPlusDescriptionIds(gridColumns);
167
168
  for (const column of gridColumns) {
169
+ if (this.isHiddenColumn(column)) {
170
+ continue;
171
+ }
168
172
  /**
169
- * TODO: Analisar e criar uma melhor forma de tratar essa validação do "RECDESP".
173
+ * A grid adiciona uma coluna auxiliar para a descrição de campos SEARCHPLUS
174
+ * (ex.: "ENTITYNAME.DESCRIPTIONFIELD"). A descrição já é emitida ao processar
175
+ * o próprio SEARCHPLUS, então pulamos a auxiliar para evitar duplicar a coluna.
170
176
  */
171
- if (column.hidden && column.name !== "RECDESP") {
177
+ if (searchPlusDescriptionIds.has(column.name)) {
172
178
  continue;
173
179
  }
174
180
  const fieldData = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getField(column.name);
175
181
  const customFormatter = await this.grid.getCustomValueFormatter(column.name);
176
- const isUserInterfaceSEARCH = (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface.SEARCH;
177
- const widthColumnDefault = 60;
178
- const labelColumn = isUserInterfaceSEARCH ? "Cód. " : column.label;
179
- let descriptionColumn = undefined;
182
+ const isSearchField = this.isSearchUserInterface(fieldData);
183
+ const labelColumn = isSearchField ? "Cód. " : column.label;
180
184
  let columnData = {
181
185
  id: column.name,
182
186
  label: labelColumn,
183
- width: isUserInterfaceSEARCH ? (labelColumn.length * this.DEFAULT_FONT_SIZE) : column.width,
187
+ width: isSearchField ? (labelColumn.length * this.DEFAULT_FONT_SIZE) : column.width,
184
188
  type: fieldData === null || fieldData === void 0 ? void 0 : fieldData.dataType,
185
189
  userInterface: fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface,
186
190
  customFormatter
187
191
  };
188
- if (isUserInterfaceSEARCH && ((_b = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _b === void 0 ? void 0 : _b.DESCRIPTIONFIELD) != undefined) {
189
- const labelDescription = (_c = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _c === void 0 ? void 0 : _c.DESCRIPTIONENTITY;
190
- const mergedFrom = fieldData.properties.mergedFrom;
191
- const descriptionField = `${fieldData.properties.ENTITYNAME}.${fieldData.properties.DESCRIPTIONFIELD}`;
192
- descriptionColumn = {
193
- id: `${mergedFrom ? (mergedFrom + ".") : ""}${descriptionField}`,
194
- label: labelDescription,
195
- width: isUserInterfaceSEARCH && labelDescription ? (labelDescription.length * this.DEFAULT_FONT_SIZE - widthColumnDefault) : column.width,
196
- type: DataType.TEXT,
197
- userInterface: UserInterface.LONGTEXT,
198
- descriptionFrom: fieldData.name
199
- };
192
+ let descriptionColumn = isSearchField ? this.buildDescriptionColumn(fieldData, column) : undefined;
193
+ if (descriptionColumn) {
200
194
  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);
201
195
  columnData = Object.assign(Object.assign({}, columnData), { width: newWidth === null || newWidth === void 0 ? void 0 : newWidth.codWidth });
202
196
  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) });
@@ -207,6 +201,59 @@ class CommonsExporter {
207
201
  }
208
202
  return columnsMetadata || [];
209
203
  }
204
+ collectSearchPlusDescriptionIds(gridColumns) {
205
+ var _a;
206
+ const descriptionIds = new Set();
207
+ for (const column of gridColumns) {
208
+ if (this.isHiddenColumn(column)) {
209
+ continue;
210
+ }
211
+ const fieldData = (_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getField(column.name);
212
+ if (!this.isSearchUserInterface(fieldData)) {
213
+ continue;
214
+ }
215
+ const descriptionId = this.buildDescriptionColumnId(fieldData);
216
+ if (descriptionId) {
217
+ descriptionIds.add(descriptionId);
218
+ }
219
+ }
220
+ return descriptionIds;
221
+ }
222
+ /**
223
+ * TODO: Analisar e criar uma melhor forma de tratar essa validação do "RECDESP".
224
+ */
225
+ isHiddenColumn(column) {
226
+ return column.hidden && column.name !== "RECDESP";
227
+ }
228
+ isSearchUserInterface(fieldData) {
229
+ return (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface.SEARCH
230
+ || (fieldData === null || fieldData === void 0 ? void 0 : fieldData.userInterface) === UserInterface.SEARCHPLUS;
231
+ }
232
+ buildDescriptionColumnId(fieldData) {
233
+ const properties = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties;
234
+ if ((properties === null || properties === void 0 ? void 0 : properties.DESCRIPTIONFIELD) == undefined) {
235
+ return undefined;
236
+ }
237
+ const descriptionField = `${properties.ENTITYNAME}.${properties.DESCRIPTIONFIELD}`;
238
+ return properties.mergedFrom ? `${properties.mergedFrom}.${descriptionField}` : descriptionField;
239
+ }
240
+ buildDescriptionColumn(fieldData, column) {
241
+ var _a;
242
+ const id = this.buildDescriptionColumnId(fieldData);
243
+ if (!id) {
244
+ return undefined;
245
+ }
246
+ const labelDescription = (_a = fieldData === null || fieldData === void 0 ? void 0 : fieldData.properties) === null || _a === void 0 ? void 0 : _a.DESCRIPTIONENTITY;
247
+ const widthColumnDefault = 60;
248
+ return {
249
+ id,
250
+ label: labelDescription,
251
+ width: labelDescription ? (labelDescription.length * this.DEFAULT_FONT_SIZE - widthColumnDefault) : column.width,
252
+ type: DataType.TEXT,
253
+ userInterface: UserInterface.LONGTEXT,
254
+ descriptionFrom: fieldData.name
255
+ };
256
+ }
210
257
  getWidthByMetaData(maxWidth, widthCod, widthDescription) {
211
258
  const totalCurrentWidth = widthCod + widthDescription;
212
259
  const codPercentage = widthCod / totalCurrentWidth;
@@ -114,6 +114,16 @@ function insertCustomButtonsBeforeSpacer(buttons, customButtons) {
114
114
  }
115
115
  return [...customButtons, ...buttons];
116
116
  }
117
+ function buildNavigationDisabledBtns(dataState) {
118
+ const navigationDisabled = [];
119
+ if (!(dataState === null || dataState === void 0 ? void 0 : dataState.hasPrevious)) {
120
+ navigationDisabled.push(TaskbarElement.PREVIOUS);
121
+ }
122
+ if (!(dataState === null || dataState === void 0 ? void 0 : dataState.hasNext)) {
123
+ navigationDisabled.push(TaskbarElement.NEXT);
124
+ }
125
+ return navigationDisabled;
126
+ }
117
127
  function buildNativeTaskbarManager(currentViewMode, mergeTaskbarManager, messagesBuilder) {
118
128
  var _a, _b;
119
129
  const CUSTOM_BUTTONS = [
@@ -184,6 +194,10 @@ function buildNativeTaskbarManager(currentViewMode, mergeTaskbarManager, message
184
194
  if (!hasSelectedRecord && buttonsRequiringSelection.includes(buttonName)) {
185
195
  return false;
186
196
  }
197
+ const navigationDisabled = buildNavigationDisabledBtns(dataState);
198
+ if (navigationDisabled.includes(buttonName)) {
199
+ return false;
200
+ }
187
201
  return (_a = mergeTaskbarManager === null || mergeTaskbarManager === void 0 ? void 0 : mergeTaskbarManager.isEnabled(_, dataState, buttonName, originalValue)) !== null && _a !== void 0 ? _a : originalValue;
188
202
  },
189
203
  getMoreOptions(taskbarId, configName, dataState, currentActions) {
@@ -12,7 +12,7 @@ import './filter-item-type.enum-d45e026f.js';
12
12
  import './form-config-fetcher-b44b2727.js';
13
13
  import { V as VIEW_MODE } from './constants-7b422de0.js';
14
14
  import { T as TaskbarElement } from './taskbar-elements-63651ca7.js';
15
- import { S as SnkGuidesViewer } from './snk-guides-viewer-cc37535b.js';
15
+ import { S as SnkGuidesViewer } from './snk-guides-viewer-adf39ea2.js';
16
16
  import { S as SnkMessageBuilder } from './SnkMessageBuilder-1eb7a1af.js';
17
17
  import { buildFieldSearch, SHORTCUT_SEARCH_FIELD } from '@sankhyalabs/ezui/dist/collection/utils';
18
18
  import './ConfigStorage-76872695.js';
@@ -72,7 +72,7 @@ class GuideBuilder {
72
72
  }
73
73
  }
74
74
 
75
- 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)}";
75
+ 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}";
76
76
 
77
77
  const SnkDetailView = class {
78
78
  constructor(hostRef) {
@@ -258,6 +258,9 @@ const SnkDetailView = class {
258
258
  return [];
259
259
  }
260
260
  emitSwitchEvent(mode) {
261
+ if (mode === VIEW_MODE.GRID) {
262
+ this.dataUnit.isMultipleEdition = false;
263
+ }
261
264
  const guideId = mode === VIEW_MODE.GRID ? this.stripFormPattern(this.branchGuide.id) : this.getFormGuideId();
262
265
  if (guideId) {
263
266
  this.snkSwitchGuide.emit(guideId);
@@ -268,6 +271,11 @@ const SnkDetailView = class {
268
271
  this.emitSwitchEvent(VIEW_MODE.GRID);
269
272
  evt.stopPropagation();
270
273
  }
274
+ if (evt.detail === TaskbarElement.UPDATE_MULTIPLE) {
275
+ this.dataUnit.isMultipleEdition = true;
276
+ this.emitSwitchEvent(VIEW_MODE.FORM);
277
+ evt.stopPropagation();
278
+ }
271
279
  if (evt.detail === TaskbarElement.FORM_MODE || evt.detail === TaskbarElement.UPDATE) {
272
280
  this.emitSwitchEvent(VIEW_MODE.FORM);
273
281
  evt.stopPropagation();
@@ -312,6 +320,12 @@ const SnkDetailView = class {
312
320
  this.addErrorBadgeToBranchGuide();
313
321
  }
314
322
  else if (action.type === Action.DATA_LOADED) {
323
+ this.handleDataLoaded();
324
+ }
325
+ }
326
+ handleDataLoaded() {
327
+ var _a;
328
+ if (!((_a = this.dataUnit) === null || _a === void 0 ? void 0 : _a.getSelectedRecord())) {
315
329
  this.dataUnit.selectFirst();
316
330
  }
317
331
  }
@@ -368,7 +382,7 @@ const SnkDetailView = class {
368
382
  render() {
369
383
  this.updateLabel();
370
384
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
371
- 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 }))));
385
+ 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 }))));
372
386
  }
373
387
  get _element() { return getElement(this); }
374
388
  static get watchers() { return {
@@ -4,7 +4,7 @@ import { SelectionMode } from '@sankhyalabs/core/dist/dataunit/DataUnit';
4
4
  import { buildFieldSearch } from '@sankhyalabs/ezui/dist/collection/utils';
5
5
  import './DataFetcher-e60f8d53.js';
6
6
  import './ISave-4929c071.js';
7
- import { C as CommonsExporter, T as TaskbarProcessor, a as CrudUtils, S as SnkMultiSelectionListDataSource, R as RmPrecisionCustomValueFormatter, b as ClientSideExporterProvider } from './SnkMultiSelectionListDataSource-f6cabd15.js';
7
+ import { C as CommonsExporter, T as TaskbarProcessor, a as CrudUtils, S as SnkMultiSelectionListDataSource, R as RmPrecisionCustomValueFormatter, b as ClientSideExporterProvider } from './SnkMultiSelectionListDataSource-18abafb1.js';
8
8
  import { P as PresentationMode, E as ExporterStrategy } from './index-b40568ff.js';
9
9
  import '@sankhyalabs/ezui/dist/collection/utils/constants';
10
10
  import '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
@@ -80,7 +80,7 @@ class ServerSideExporterProvider extends CommonsExporter {
80
80
  }
81
81
  }
82
82
 
83
- 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)}";
83
+ 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)}";
84
84
 
85
85
  const SnkGrid = class {
86
86
  constructor(hostRef) {
@@ -103,7 +103,7 @@ const SnkGrid = class {
103
103
  'snkGridHeaderTaskbar.unselected': ['REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
104
104
  'snkGridHeaderTaskbar.selected': this.getGridHeaderSelectedBtns(),
105
105
  'snkGridHeaderTaskbar.detail.unselected': ['REFRESH', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
106
- 'snkGridHeaderTaskbar.detail.selected': ['UPDATE', 'ATTACH', 'CLONE', 'REMOVE', 'MORE_OPTIONS', 'DIVIDER', 'REFRESH', 'ACTIONS_BUTTON'],
106
+ 'snkGridHeaderTaskbar.detail.selected': this.getDetailGridSelectedBtns(),
107
107
  'snkGridHeaderTaskbar.singleTaskbar.unselected': ['INSERT', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
108
108
  'snkGridHeaderTaskbar.singleTaskbar.selected': ['UPDATE', 'CLONE', 'REMOVE', 'MORE_OPTIONS', 'DIVIDER', 'ATTACH', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'DATA_EXPORTER', 'ACTIONS_BUTTON'],
109
109
  'snkGridHeaderTaskbar.singleTaskbar.detail.unselected': ['INSERT', 'FORM_MODE', 'CONFIGURATOR', 'REFRESH', 'ACTIONS_BUTTON', 'MORE_OPTIONS'],
@@ -170,6 +170,15 @@ const SnkGrid = class {
170
170
  this.hideHeader = false;
171
171
  this.hideGridTaskbar = false;
172
172
  }
173
+ getDetailGridSelectedBtns() {
174
+ const btns = [
175
+ TaskbarElement.UPDATE, TaskbarElement.ATTACH, TaskbarElement.CLONE, TaskbarElement.MORE_OPTIONS,
176
+ TaskbarElement.DIVIDER, TaskbarElement.REFRESH, TaskbarElement.ACTIONS_BUTTON
177
+ ];
178
+ if (this.multipleEditionEnabled)
179
+ btns.unshift(TaskbarElement.UPDATE_MULTIPLE);
180
+ return btns;
181
+ }
173
182
  getGridHeaderSelectedBtns() {
174
183
  const btns = [
175
184
  TaskbarElement.UPDATE, TaskbarElement.CLONE, TaskbarElement.REMOVE,
@@ -6,7 +6,7 @@ import { V as VIEW_MODE } from './constants-7b422de0.js';
6
6
  import { S as SnkFormConfigManager } from './SnkFormConfigManager-83f6b22f.js';
7
7
  import { T as TaskbarElement } from './taskbar-elements-63651ca7.js';
8
8
 
9
- 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}";
9
+ 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}";
10
10
 
11
11
  const FORM_NAME_PREFIX = "__FORM:";
12
12
  const SnkGuidesViewer = class {
@@ -1,4 +1,4 @@
1
- export { S as snk_guides_viewer } from './snk-guides-viewer-cc37535b.js';
1
+ export { S as snk_guides_viewer } from './snk-guides-viewer-adf39ea2.js';
2
2
  import './index-04f73a26.js';
3
3
  import '@sankhyalabs/core';
4
4
  import '@sankhyalabs/ezui/dist/collection/utils';
@@ -5,7 +5,7 @@ import { V as VIEW_MODE, S as SIMPLE_CRUD_MODE } from './constants-7b422de0.js';
5
5
  import { T as TaskbarElement } from './taskbar-elements-63651ca7.js';
6
6
  import './DataFetcher-e60f8d53.js';
7
7
  import './ISave-4929c071.js';
8
- import { S as SnkMultiSelectionListDataSource, T as TaskbarProcessor, R as RmPrecisionCustomValueFormatter, a as CrudUtils, b as ClientSideExporterProvider } from './SnkMultiSelectionListDataSource-f6cabd15.js';
8
+ import { S as SnkMultiSelectionListDataSource, T as TaskbarProcessor, R as RmPrecisionCustomValueFormatter, a as CrudUtils, b as ClientSideExporterProvider } from './SnkMultiSelectionListDataSource-18abafb1.js';
9
9
  import { P as PresentationMode } from './index-b40568ff.js';
10
10
  import '@sankhyalabs/ezui/dist/collection/utils/constants';
11
11
  import '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
@@ -0,0 +1 @@
1
+ import{r as t,e as i,i as s,h as e,f as a,g as o}from"./p-2c9d0870.js";import{Action as h,StringUtils as n,KeyboardManager as r}from"@sankhyalabs/core";import{S as d}from"./p-ab5e12fa.js";import{FormMetadata as l,buildFormMetadata as c}from"@sankhyalabs/ezui/dist/collection/utils/form";import"./p-2af8aca3.js";import"./p-4f7adf97.js";import{P as u}from"./p-0f3698af.js";import"@sankhyalabs/ezui/dist/collection/utils/constants";import"@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata";import"./p-6e278003.js";import"./p-ff1990ad.js";import"./p-3870748a.js";import{V as m}from"./p-9019a32f.js";import{T as v}from"./p-3072136e.js";import{S as p}from"./p-b1bb4cf1.js";import{S as g}from"./p-554c0e54.js";import{buildFieldSearch as f,SHORTCUT_SEARCH_FIELD as b}from"@sankhyalabs/ezui/dist/collection/utils";import"./p-3c990841.js";import"./p-8d884fab.js";import"@sankhyalabs/ezui/dist/collection/components/ez-grid/utils";import"@sankhyalabs/core/dist/utils/SortingUtils";import"./p-688dcb4c.js";import"./p-a73b6b00.js";class k{constructor(t,i,s,e){this._parentGuide=t,this._formMetadata=i,this._dataUnit=s,this._messageBuilder=e,this._messageBuilder||(this._messageBuilder=new g)}get id(){return this._parentGuide.id}getMessage(t,i){return this._messageBuilder.getMessage(t,i)}buildGuideItem(t){const i=Object.assign({},this._parentGuide);delete i.expanded,delete i.children;const s=this._dataUnit.getSelectedRecord();if(!s)return i;const e=this._dataUnit.isNewRecord(s.__record__id__),a=Array.from(this._formMetadata.getAllSheets().values()).map((i=>{const{name:s,label:a}=i,o=null!=l.getDetailName(s.split("::").pop()),h=o&&e,n=this._parentGuide.id,r=o?`${n}::${s}`:`${n}__FORM:${s}`;return o&&t.has(r)&&!h?t.get(r).buildGuideItem(t):{id:r,label:a,disabled:h,tooltip:h?this.getMessage("snkCrud.guide.tooltip.disabledDetail"):void 0}})),o=a.shift();return o.label=e?this.getMessage("snkCrud.newRecord"):s.__record__label__,o.children=a,i.children=[o],i}}const w=class{constructor(s){t(this,s),this.snkDetailGuidesChange=i(this,"snkDetailGuidesChange",7),this.snkSwitchGuide=i(this,"snkSwitchGuide",7),this.formItemsReady=i(this,"formItemsReady",7),this._disabledButtons=void 0,this._currentView=void 0,this.attachmentRegisterKey=void 0,this._fieldToGetFocus=void 0,this._hasToCreateFieldSearch=!0,this.formConfigManager=void 0,this.dataUnitName=void 0,this.resourceID=void 0,this.guideItemPath=void 0,this.entityName=void 0,this.label=void 0,this.dataUnit=void 0,this.selectedForm=void 0,this.dataState=void 0,this.messagesBuilder=void 0,this.branchGuide=void 0,this.canEdit=!0,this.taskbarCustomContainerId=void 0,this.customEditors=void 0,this.customRenders=void 0,this.presentationMode=u.SECONDARY}observeDataUnit(t,i){null==t||t.subscribe(this.dataUnitActionHandler.bind(this)),null==i||i.unsubscribe(this.dataUnitActionHandler)}observerDataState(t,i){const s=!(null==i?void 0:i.insertionMode)&&(null==t?void 0:t.insertionMode),e=(null==i?void 0:i.insertionMode)&&!(null==t?void 0:t.insertionMode);if((s||e)&&this.loadMetadata(),null==this._formMetadata)return;const a=null==t?void 0:t.selectedRecord,o=null==i?void 0:i.selectedRecord;(null==a?void 0:a.__record__id__)!==(null==o?void 0:o.__record__id__)&&this.snkDetailGuidesChange.emit(new k(this.branchGuide,this._formMetadata,this.dataUnit,this.messagesBuilder)),s&&setTimeout((()=>{this.changeViewMode(m.FORM)}),0),e&&this.changeViewMode(m.GRID);const h=[];this.dataState.hasPrevious||h.push(v.PREVIOUS),this.dataState.hasNext||h.push(v.NEXT),this.dataState.insertionMode&&h.push(v.INSERT),this._disabledButtons=h}async changeViewMode(t){this.emitSwitchEvent(t)}async configGrid(){this._snkGrid&&this._snkGrid.showConfig()}async showUp(){this._snkFormView&&this._snkFormView.showUp(),this._snkGrid&&this._snkGrid.scrollIntoView({behavior:"smooth",block:"start"})}async addCustomEditor(t,i){var s;const e=this.normalizeBranchGuideId(null===(s=this.branchGuide)||void 0===s?void 0:s.id);this._snkGrid.addCustomEditor(t,i,e),this._snkFormView.addCustomEditor(t,i,e)}async observerPropsCustomEditor(t){for(const i in t)await this.addCustomEditor(i,t[i])}async addGridCustomRender(t,i){var s;const e=this.normalizeBranchGuideId(null===(s=this.branchGuide)||void 0===s?void 0:s.id);await this._snkGrid.addGridCustomRender(t,i,e)}onContentCardChanged(t){p.updateContentCard(t.detail.formName,t.detail.cardConfig,t.detail.propertyChanged,this.formConfigManager).then((()=>s(this))),t.stopPropagation()}async observeCustomRenders(t){for(const i in t){const s=t[i];await this.addGridCustomRender(i,s)}}updateLabel(){const t=this.guideItemPath?this.guideItemPath.length:0;if(t>0){const i=t>0?this.guideItemPath.map((t=>t.label)):void 0;this.label=i.pop(),this._levelPath=i.length>0?i.join(" / "):void 0}else this.label="",this._levelPath=void 0}getFormGuideId(t){var i;if(!t){if(null==(null===(i=this.dataState)||void 0===i?void 0:i.selectedRecord))return;const s=Array.from(this._formMetadata.getAllSheets().keys());if(!s||0==s.length)return;t=s[0]}return`${this.stripFormPattern(this.branchGuide.id)}__FORM:${t}`}stripFormPattern(t){return t.replace(w.REGEX_FORM_ID,"")}loadMetadata(){if(!this.dataUnit)return;if(!this.formConfigManager.isLoaded)return;const t=this.formConfigManager.getConfig(this.dataUnit);this._formMetadata=c(null==t||0===t.fields.length?void 0:t,this.dataUnit,!0)}dataUnitReadyHandler(t){this.dataUnit=t.detail,this.loadMetadata()}updateViewStack(t){var i,s;this._viewStack=t,this._currentView=this.selectedForm?1:0,null===(s=null===(i=this._viewStack)||void 0===i?void 0:i.show)||void 0===s||s.call(i,this._currentView)}getFormFields(){return this.selectedForm&&this._formMetadata?this._formMetadata.getSheet(this.selectedForm).fields:[]}emitSwitchEvent(t){t===m.GRID&&(this.dataUnit.isMultipleEdition=!1);const i=t===m.GRID?this.stripFormPattern(this.branchGuide.id):this.getFormGuideId();i&&this.snkSwitchGuide.emit(i)}executeActionHandler(t){t.detail===v.GRID_MODE&&(this.emitSwitchEvent(m.GRID),t.stopPropagation()),t.detail===v.UPDATE_MULTIPLE&&(this.dataUnit.isMultipleEdition=!0,this.emitSwitchEvent(m.FORM),t.stopPropagation()),t.detail!==v.FORM_MODE&&t.detail!==v.UPDATE||(this.emitSwitchEvent(m.FORM),t.stopPropagation()),t.detail===v.ATTACH&&(this._snkAttach.open(),t.stopPropagation())}async getAttachmentRegisterKey(){if(this._snkDataUnit)return(await this._snkDataUnit.getSelectedRecordsIDsInfo()).map((({value:t})=>t)).join("_")}async handleDataStateChange({detail:t}){this.dataState=t,void 0!==t.selectedRecord&&this._snkDataUnit&&(this.attachmentRegisterKey=await this.getAttachmentRegisterKey())}componentWillLoad(){this._configName=`dynaform.${this.entityName}`,this.formConfigManager=new d(this._configName,this.resourceID,(()=>this.loadMetadata()),this.dataUnit),this.formConfigManager.loadConfig(),null==this.messagesBuilder&&(this.messagesBuilder=new g(this.entityName))}async componentDidLoad(){await this.observerPropsCustomEditor(this.customEditors),await this.observeCustomRenders(this.customRenders),this.initKeyboardManager()}disconnectedCallback(){var t;null===(t=this._keyboardManager)||void 0===t||t.unbindAllShortcutKeys()}async dataUnitActionHandler(t){t.type===h.FIELD_INVALIDATED?this.addErrorBadgeToBranchGuide():t.type===h.DATA_LOADED&&this.handleDataLoaded()}handleDataLoaded(){var t;(null===(t=this.dataUnit)||void 0===t?void 0:t.getSelectedRecord())||this.dataUnit.selectFirst()}addErrorBadgeToBranchGuide(){this.branchGuide=Object.assign(Object.assign({},this.branchGuide),{badge:"error"}),this.snkDetailGuidesChange.emit(new k(this.branchGuide,this._formMetadata,this.dataUnit,this.messagesBuilder))}normalizeBranchGuideId(t){return null==t?void 0:t.replace(/child\[(.*?)\]/g,"$1").replace(/::/g,">")}getSettingsListForm(){return[{value:n.generateUUID(),label:this.messagesBuilder.getMessage("snkCrud.findColumn",void 0),disableCloseOnSelect:!0,eagerInitialize:!0,itemBuilder:(t,i)=>this.getFieldsSearch(i)}]}getFieldsSearch(t){return(null==this._fieldSearch||this._hasToCreateFieldSearch)&&(this._hasToCreateFieldSearch=!1,this._fieldSearch=f(t,(({argument:t})=>this.fieldsOptionLoader(t)),(t=>this.onSelectField(t)))),this._fieldSearch}fieldsOptionLoader(t){const i=null==t?void 0:t.toLowerCase(),s=this.getFormFields().map((t=>{var i;return null===(i=this.dataUnit)||void 0===i?void 0:i.getField(t.name)})).filter((t=>{var s,e;return(null===(s=t.name)||void 0===s?void 0:s.toLowerCase().includes(i))||(null===(e=t.label)||void 0===e?void 0:e.toLowerCase().includes(i))})).map((t=>({value:t.name,label:t.label})));return Promise.resolve(s)}onSelectField(t){null!=t&&(this._fieldToGetFocus=t.value)}clearFieldToFocusHandler(){this._fieldToGetFocus=void 0}async initKeyboardManager(){this._keyboardManager=new r({propagate:!1,element:this._element}),this._keyboardManager.bind(b,(async()=>{await this._snkFormView.showSearchField()}),{description:this.messagesBuilder.getMessage("snkSimpleCrud.findFields"),element:this._element})}render(){return this.updateLabel(),e(a,null,e("snk-data-unit",{ref:t=>this._snkDataUnit=t,dataUnitName:`${this.dataUnitName}`,onDataUnitReady:t=>this.dataUnitReadyHandler(t),entityName:this.entityName,onDataStateChange:this.handleDataStateChange.bind(this),ignoreSaveMessage:this._currentView===m.GRID,messagesBuilder:this.messagesBuilder,configName:this._configName},e("ez-view-stack",{ref:t=>this.updateViewStack(t)},e("stack-item",null,e("div",{class:"ez-box ez-box--shadow grid-container"},e("div",{class:"ez-title--primary ez-size-width--full ez-padding--large detail-header"},e("div",{class:"ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center"},this._levelPath?e("span",{class:"level-path"},this._levelPath+" /"):void 0,this.label)),e("snk-grid",{class:"ez-size-width--full",ref:t=>this._snkGrid=t,configName:this._configName,messagesBuilder:this.messagesBuilder,onGridDoubleClick:()=>this.emitSwitchEvent(m.FORM),onActionClick:t=>this.executeActionHandler(t),presentationMode:this.presentationMode,canEdit:this.canEdit,isDetail:!0,taskbarCustomContainerId:this.taskbarCustomContainerId,gridHeaderCustomSlotId:"DETAIL_GRID_HEADER_CUSTOM_ELEMENTS",topTaskbarCustomSlotId:"DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS",outlineMode:!1,enableGridInsert:!0,autoLoad:!0,multipleEditionEnabled:!0,multipleSelection:!0}))),e("stack-item",null,e("snk-form-view",{ref:t=>this._snkFormView=t,canExpand:!1,canFix:!1,name:this.selectedForm,formMetadata:this._formMetadata,dataUnit:this.dataUnit,fields:this.getFormFields(),fieldToFocus:this._fieldToGetFocus,label:this.label,levelPath:this._levelPath,onFormItemsReady:({detail:t})=>this.formItemsReady.emit(t),onSnkRequestClearFieldToFocus:this.clearFieldToFocusHandler.bind(this),fieldSearch:this._fieldSearch,entityPath:this.entityName},e("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:t=>this.executeActionHandler(t),dataUnit:this.dataUnit,resourceID:this.resourceID,customContainerId:this.taskbarCustomContainerId,customSlotId:"DETAIL_TASKBAR_CUSTOM_ELEMENTS",actionsSettingsList:this.getSettingsListForm()},e("slot",{name:"DETAIL_TASKBAR_CUSTOM_ELEMENTS"}))))),e("snk-attach",{ref:t=>this._snkAttach=t,registerKey:this.attachmentRegisterKey,messagesBuilder:this.messagesBuilder,entityName:this.entityName})))}get _element(){return o(this)}static get watchers(){return{dataUnit:["observeDataUnit"],dataState:["observerDataState"],customEditors:["observerPropsCustomEditor"],customRenders:["observeCustomRenders"]}}};w.REGEX_FORM_ID=/__FORM:[^:]+/g,w.style=".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}";export{w as snk_detail_view}