@sankhyalabs/sankhyablocks 5.8.1 → 5.9.0

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 (52) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  3. package/dist/cjs/snk-attach.cjs.entry.js +1 -2
  4. package/dist/cjs/snk-crud.cjs.entry.js +23 -12
  5. package/dist/cjs/snk-detail-view.cjs.entry.js +29 -6
  6. package/dist/cjs/snk-grid.cjs.entry.js +3 -10
  7. package/dist/cjs/{snk-guides-viewer-9784c527.js → snk-guides-viewer-5f2eb52b.js} +2 -2
  8. package/dist/cjs/snk-guides-viewer.cjs.entry.js +2 -2
  9. package/dist/cjs/snk-simple-bar_2.cjs.entry.js +1 -1
  10. package/dist/cjs/{taskbar-processor-bce3f499.js → taskbar-processor-e1e3bbf7.js} +16 -0
  11. package/dist/collection/collection-manifest.json +2 -2
  12. package/dist/collection/components/snk-attach/structure/data-unit-builder.js +1 -2
  13. package/dist/collection/components/snk-crud/snk-crud.js +27 -13
  14. package/dist/collection/components/snk-crud/subcomponents/{snk-detail-view.js → snk-detail-view/snk-detail-view.js} +41 -17
  15. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +4 -4
  16. package/dist/collection/components/snk-grid/snk-grid.js +3 -10
  17. package/dist/collection/components/snk-taskbar/processor/taskbar-processor.js +15 -0
  18. package/dist/components/index.d.ts +1 -1
  19. package/dist/components/snk-attach2.js +1 -2
  20. package/dist/components/snk-crud.js +24 -13
  21. package/dist/components/snk-detail-view2.js +103 -46
  22. package/dist/components/snk-grid2.js +4 -11
  23. package/dist/components/taskbar-processor.js +16 -0
  24. package/dist/esm/loader.js +1 -1
  25. package/dist/esm/sankhyablocks.js +1 -1
  26. package/dist/esm/snk-attach.entry.js +1 -2
  27. package/dist/esm/snk-crud.entry.js +24 -13
  28. package/dist/esm/snk-detail-view.entry.js +29 -6
  29. package/dist/esm/snk-grid.entry.js +4 -11
  30. package/dist/esm/{snk-guides-viewer-4d12f268.js → snk-guides-viewer-11ca46dc.js} +2 -2
  31. package/dist/esm/snk-guides-viewer.entry.js +2 -2
  32. package/dist/esm/snk-simple-bar_2.entry.js +1 -1
  33. package/dist/esm/{taskbar-processor-94402e6e.js → taskbar-processor-a40798b8.js} +16 -0
  34. package/dist/sankhyablocks/{p-fd4ed40a.entry.js → p-0bb49e4a.entry.js} +1 -1
  35. package/dist/sankhyablocks/p-39082fc3.js +1 -0
  36. package/dist/sankhyablocks/p-7f2e267a.js +1 -0
  37. package/dist/sankhyablocks/{p-27e264d9.entry.js → p-83765829.entry.js} +1 -1
  38. package/dist/sankhyablocks/p-8819be14.entry.js +1 -0
  39. package/dist/sankhyablocks/p-9043c45f.entry.js +1 -0
  40. package/dist/sankhyablocks/p-b1dc7e17.entry.js +1 -0
  41. package/dist/sankhyablocks/p-c7ee03cd.entry.js +1 -0
  42. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  43. package/dist/types/components/snk-crud/subcomponents/{snk-detail-view.d.ts → snk-detail-view/snk-detail-view.d.ts} +12 -6
  44. package/dist/types/components.d.ts +1 -1
  45. package/package.json +1 -1
  46. package/dist/sankhyablocks/p-21c2b733.entry.js +0 -1
  47. package/dist/sankhyablocks/p-433dfa63.entry.js +0 -1
  48. package/dist/sankhyablocks/p-4eefe631.entry.js +0 -1
  49. package/dist/sankhyablocks/p-9c3f0caf.entry.js +0 -1
  50. package/dist/sankhyablocks/p-c2beb95c.js +0 -1
  51. package/dist/sankhyablocks/p-ccd26e3a.js +0 -1
  52. /package/dist/collection/components/snk-crud/subcomponents/{snk-detail-view.css → snk-detail-view/snk-detail-view.css} +0 -0
@@ -1,15 +1,16 @@
1
1
  import { Host, forceUpdate, h } from '@stencil/core';
2
- import { SnkFormConfigManager } from '../../snk-form/SnkFormConfigManager';
2
+ import { SnkFormConfigManager } from '../../../snk-form/SnkFormConfigManager';
3
3
  import { buildFormMetadata } from "@sankhyalabs/ezui/dist/collection/utils/form";
4
- import { PresentationMode } from '../../../lib';
5
- import { TaskbarElement } from '../../snk-taskbar/elements/taskbar-elements';
6
- import { VIEW_MODE } from '../../../lib/utils/constants';
7
- import { SnkGuidesViewer } from './snk-guides-viewer';
8
- import { SnkMessageBuilder } from '../../../lib/message/SnkMessageBuilder';
9
- import { GuideBuilder } from './GuideBuilder';
4
+ import { PresentationMode } from '../../../../lib';
5
+ import { TaskbarElement } from '../../../snk-taskbar/elements/taskbar-elements';
6
+ import { VIEW_MODE } from '../../../../lib/utils/constants';
7
+ import { SnkGuidesViewer } from '../snk-guides-viewer';
8
+ import { SnkMessageBuilder } from '../../../../lib/message/SnkMessageBuilder';
9
+ import { GuideBuilder } from '../GuideBuilder';
10
10
  export class SnkDetailView {
11
11
  constructor() {
12
12
  this._disabledButtons = undefined;
13
+ this.attachmentRegisterKey = undefined;
13
14
  this.formConfigManager = undefined;
14
15
  this.dataUnitName = undefined;
15
16
  this.guideItemPath = undefined;
@@ -39,8 +40,8 @@ export class SnkDetailView {
39
40
  setTimeout(() => {
40
41
  //FIXME: A necessidade de usar esse timeout é por causa da renderização
41
42
  //do guide navigator... se esse evento subir antes do guidenavigator ter
42
- //um item com esse id, ele fica sem seleção. Acredito que poderíamos
43
- //ajustar o componente para manter o item selecionado e então remover
43
+ //um item com esse id, ele fica sem seleção. Acredito que poderíamos
44
+ //ajustar o componente para manter o item selecionado e então remover
44
45
  //esse timeout.
45
46
  this.changeViewMode(VIEW_MODE.FORM);
46
47
  }, 0);
@@ -131,7 +132,9 @@ export class SnkDetailView {
131
132
  this.loadMetadata();
132
133
  }
133
134
  updateViewStack(viewStack) {
134
- viewStack.show(this.selectedForm ? 1 : 0);
135
+ var _a, _b;
136
+ this._viewStack = viewStack;
137
+ (_b = (_a = this._viewStack) === null || _a === void 0 ? void 0 : _a.show) === null || _b === void 0 ? void 0 : _b.call(_a, this.selectedForm ? 1 : 0);
135
138
  }
136
139
  getFormFields() {
137
140
  if (this.selectedForm && this._formMetadata) {
@@ -145,6 +148,9 @@ export class SnkDetailView {
145
148
  this.snkSwitchGuide.emit(guideId);
146
149
  }
147
150
  }
151
+ handleAttachBack() {
152
+ this._viewStack.show(VIEW_MODE.GRID);
153
+ }
148
154
  executeActionHandler(evt) {
149
155
  if (evt.detail === TaskbarElement.GRID_MODE) {
150
156
  this.emitSwitchEvent(VIEW_MODE.GRID);
@@ -154,6 +160,23 @@ export class SnkDetailView {
154
160
  this.emitSwitchEvent(VIEW_MODE.FORM);
155
161
  evt.stopPropagation();
156
162
  }
163
+ if (evt.detail === TaskbarElement.ATTACH) {
164
+ this._viewStack.show(VIEW_MODE.ATTACHMENT);
165
+ evt.stopPropagation();
166
+ }
167
+ }
168
+ async getAttachmentRegisterKey() {
169
+ if (!this._snkDataUnit)
170
+ return;
171
+ const recordCriteria = await this._snkDataUnit.getSelectedRecordsIDsInfo();
172
+ const joinedPrimaryKeys = recordCriteria.map(({ value }) => value).join('_');
173
+ return joinedPrimaryKeys;
174
+ }
175
+ async handleDataStateChange({ detail: dataState }) {
176
+ this.dataState = dataState;
177
+ if (dataState.selectedRecord !== undefined && this._snkDataUnit) {
178
+ this.attachmentRegisterKey = await this.getAttachmentRegisterKey();
179
+ }
157
180
  }
158
181
  componentWillLoad() {
159
182
  this._configName = `dynaform.${this.entityName}`;
@@ -166,7 +189,7 @@ export class SnkDetailView {
166
189
  render() {
167
190
  this.updateLabel();
168
191
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
169
- return (h(Host, null, h("snk-data-unit", { dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: evt => this.dataState = evt.detail, messagesBuilder: this.messagesBuilder }, h("ez-view-stack", { ref: ref => this.updateViewStack(ref) }, h("stack-item", null, h("div", { class: "ez-box ez-box--shadow grid-container" }, h("div", { class: "ez-flex ez-size-width--full ez-padding--large detail-header" }, h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), h("snk-grid", { class: "ez-size-width--full ez-size-height--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: evt => this.executeActionHandler(evt), presentationMode: PresentationMode.SECONDARY, isDetail: 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(), label: this.label, levelPath: this._levelPath }, 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,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: PresentationMode.SECONDARY, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit })))))));
192
+ 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), messagesBuilder: this.messagesBuilder }, h("ez-view-stack", { ref: (ref) => this.updateViewStack(ref) }, h("stack-item", null, h("div", { class: "ez-box ez-box--shadow grid-container" }, h("div", { class: "ez-flex ez-size-width--full ez-padding--large detail-header" }, h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), h("snk-grid", { class: "ez-size-width--full ez-size-height--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: evt => this.executeActionHandler(evt), presentationMode: PresentationMode.SECONDARY, isDetail: 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(), label: this.label, levelPath: this._levelPath }, 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,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: PresentationMode.SECONDARY, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit }))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this.entityName, onBack: this.handleAttachBack.bind(this) }))))));
170
193
  }
171
194
  static get is() { return "snk-detail-view"; }
172
195
  static get encapsulation() { return "scoped"; }
@@ -191,7 +214,7 @@ export class SnkDetailView {
191
214
  "references": {
192
215
  "SnkFormConfigManager": {
193
216
  "location": "import",
194
- "path": "../../snk-form/SnkFormConfigManager"
217
+ "path": "../../../snk-form/SnkFormConfigManager"
195
218
  }
196
219
  }
197
220
  },
@@ -322,7 +345,7 @@ export class SnkDetailView {
322
345
  "references": {
323
346
  "DataState": {
324
347
  "location": "import",
325
- "path": "../../snk-data-unit/snk-data-unit"
348
+ "path": "../../../snk-data-unit/snk-data-unit"
326
349
  }
327
350
  }
328
351
  },
@@ -342,7 +365,7 @@ export class SnkDetailView {
342
365
  "references": {
343
366
  "SnkMessageBuilder": {
344
367
  "location": "import",
345
- "path": "../../../lib/message/SnkMessageBuilder"
368
+ "path": "../../../../lib/message/SnkMessageBuilder"
346
369
  }
347
370
  }
348
371
  },
@@ -377,7 +400,8 @@ export class SnkDetailView {
377
400
  }
378
401
  static get states() {
379
402
  return {
380
- "_disabledButtons": {}
403
+ "_disabledButtons": {},
404
+ "attachmentRegisterKey": {}
381
405
  };
382
406
  }
383
407
  static get events() {
@@ -397,7 +421,7 @@ export class SnkDetailView {
397
421
  "references": {
398
422
  "GuideBuilder": {
399
423
  "location": "import",
400
- "path": "./GuideBuilder"
424
+ "path": "../GuideBuilder"
401
425
  }
402
426
  }
403
427
  }
@@ -436,7 +460,7 @@ export class SnkDetailView {
436
460
  },
437
461
  "VIEW_MODE": {
438
462
  "location": "import",
439
- "path": "../../../lib/utils/constants"
463
+ "path": "../../../../lib/utils/constants"
440
464
  }
441
465
  },
442
466
  "return": "Promise<void>"
@@ -139,7 +139,7 @@ export class SnkGuidesViewer {
139
139
  disabledButtons.push("REMOVE");
140
140
  }
141
141
  }
142
- const btnsRegularMode = ["PREVIOUS", "NEXT", "DIVIDER", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "GRID_MODE", "CONFIGURATOR"];
142
+ const btnsRegularMode = ["PREVIOUS", "NEXT", "DIVIDER", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "GRID_MODE", "CONFIGURATOR"];
143
143
  if (this.presentationMode == PresentationMode.SECONDARY) {
144
144
  btnsRegularMode.unshift("INSERT");
145
145
  }
@@ -612,9 +612,9 @@ export class SnkGuidesViewer {
612
612
  "parameters": [{
613
613
  "tags": [{
614
614
  "name": "param",
615
- "text": "detail - Define se a configura\u00E7\u00E3o que est\u00E1 sendo carregada \u00E9 \nreferente a um form detail."
615
+ "text": "detail - Define se a configura\u00E7\u00E3o que est\u00E1 sendo carregada \u00E9\nreferente a um form detail."
616
616
  }],
617
- "text": "- Define se a configura\u00E7\u00E3o que est\u00E1 sendo carregada \u00E9 \nreferente a um form detail."
617
+ "text": "- Define se a configura\u00E7\u00E3o que est\u00E1 sendo carregada \u00E9\nreferente a um form detail."
618
618
  }],
619
619
  "references": {
620
620
  "Promise": {
@@ -627,7 +627,7 @@ export class SnkGuidesViewer {
627
627
  "text": "Abre o configurador do formul\u00E1rio",
628
628
  "tags": [{
629
629
  "name": "param",
630
- "text": "detail - Define se a configura\u00E7\u00E3o que est\u00E1 sendo carregada \u00E9 \nreferente a um form detail."
630
+ "text": "detail - Define se a configura\u00E7\u00E3o que est\u00E1 sendo carregada \u00E9\nreferente a um form detail."
631
631
  }]
632
632
  }
633
633
  }
@@ -1,5 +1,5 @@
1
1
  import { h } from '@stencil/core';
2
- import { ApplicationContext, DataType, ElementIDUtils, VersionUtils } from '@sankhyalabs/core';
2
+ import { ApplicationContext, DataType, ElementIDUtils } from '@sankhyalabs/core';
3
3
  import { UserInterface } from '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
4
4
  import { TaskbarElement } from '../snk-taskbar/elements/taskbar-elements';
5
5
  import { ConfigStorage } from '../../lib/configs/ConfigStorage';
@@ -16,9 +16,9 @@ export class SnkGrid {
16
16
  });
17
17
  this._headerTaskbarProcessor = new TaskbarProcessor({
18
18
  "snkGridHeaderTaskbar.unselected": ["REFRESH", "DATA_EXPORTER"],
19
- "snkGridHeaderTaskbar.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", this.getAttachAvailable(), "REFRESH", "DATA_EXPORTER"],
19
+ "snkGridHeaderTaskbar.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "ATTACH", "REFRESH", "DATA_EXPORTER"],
20
20
  "snkGridHeaderTaskbar.detail.unselected": ["REFRESH"],
21
- "snkGridHeaderTaskbar.detail.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "REFRESH"]
21
+ "snkGridHeaderTaskbar.detail.selected": ["UPDATE", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "REFRESH"]
22
22
  });
23
23
  this._dataUnit = undefined;
24
24
  this._dataState = undefined;
@@ -57,13 +57,6 @@ export class SnkGrid {
57
57
  async setConfig(config) {
58
58
  this.setGridConfig(config);
59
59
  }
60
- getAttachAvailable() {
61
- var _a;
62
- const isValidVersion = VersionUtils.isRequiredVersion((_a = window.envContext) === null || _a === void 0 ? void 0 : _a.sysVersion, '4.22');
63
- if (isValidVersion)
64
- return TaskbarElement.ATTACH;
65
- return "";
66
- }
67
60
  openGridConfig() {
68
61
  this._grid.getColumnsState()
69
62
  .then((gridColumns) => {
@@ -1,3 +1,12 @@
1
+ import { TaskbarElement } from "../elements/taskbar-elements";
2
+ import { VersionUtils } from "@sankhyalabs/core";
3
+ const MINIMUM_SK_VERSION_TO_ATTACHMENT = "4.22";
4
+ const buttonsWithPermissions = {
5
+ [TaskbarElement.ATTACH]: () => {
6
+ var _a;
7
+ return VersionUtils.isRequiredVersion((_a = window.envContext) === null || _a === void 0 ? void 0 : _a.sysVersion, MINIMUM_SK_VERSION_TO_ATTACHMENT);
8
+ }
9
+ };
1
10
  export default class TaskbarProcessor {
2
11
  constructor(defaultButtons) {
3
12
  this._defaultButtons = defaultButtons;
@@ -8,8 +17,14 @@ export default class TaskbarProcessor {
8
17
  this.buttons = "";
9
18
  this.disabledButtons = [].concat(disabledButtons);
10
19
  (_a = this.getButtonsArray(taskbarId, taskbarManager, dataState)) === null || _a === void 0 ? void 0 : _a.forEach(btnDef => {
20
+ var _a;
11
21
  let buttonName;
12
22
  if (typeof btnDef === "string") {
23
+ if (buttonsWithPermissions[btnDef]) {
24
+ const hasPermissions = (_a = buttonsWithPermissions[btnDef]) === null || _a === void 0 ? void 0 : _a.call(buttonsWithPermissions);
25
+ if (!hasPermissions)
26
+ return;
27
+ }
13
28
  buttonName = btnDef;
14
29
  }
15
30
  else {
@@ -6,7 +6,7 @@ export { SnkConfigurator as SnkConfigurator } from '../types/components/snk-conf
6
6
  export { SnkCrud as SnkCrud } from '../types/components/snk-crud/snk-crud';
7
7
  export { SnkDataExporter as SnkDataExporter } from '../types/components/snk-data-exporter/snk-data-exporter';
8
8
  export { SnkDataUnit as SnkDataUnit } from '../types/components/snk-data-unit/snk-data-unit';
9
- export { SnkDetailView as SnkDetailView } from '../types/components/snk-crud/subcomponents/snk-detail-view';
9
+ export { SnkDetailView as SnkDetailView } from '../types/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view';
10
10
  export { SnkExporterEmailSender as SnkExporterEmailSender } from '../types/components/snk-data-exporter/exporter-email-sender/snk-exporter-email-sender';
11
11
  export { SnkExpressionItem as SnkExpressionItem } from '../types/components/snk-personalized-filter/subcomponents/snk-expression-item/snk-expression-item';
12
12
  export { SnkFieldConfig as SnkFieldConfig } from '../types/components/snk-form/subcomponents/snk-field-config/snk-field-config';
@@ -216,9 +216,8 @@ class AttachmentDataUnitBuilder {
216
216
  return new Promise((resolve) => {
217
217
  const { records } = dataUnit.getSelectionInfo();
218
218
  attachFetcher.delete(records[0]).then(() => {
219
- resolve(ids);
219
+ return resolve(ids);
220
220
  });
221
- resolve([]);
222
221
  });
223
222
  }
224
223
  getFilters(registerKey) {
@@ -1,5 +1,5 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
- import { ElementIDUtils, ApplicationContext, VersionUtils } from '@sankhyalabs/core';
2
+ import { ElementIDUtils, ApplicationContext } from '@sankhyalabs/core';
3
3
  import { T as TaskbarElement, d as defineCustomElement$2 } from './snk-taskbar2.js';
4
4
  import './DataFetcher.js';
5
5
  import './pesquisa-fetcher.js';
@@ -33,6 +33,7 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
33
33
  super();
34
34
  this.__registerHost();
35
35
  this.actionClick = createEvent(this, "actionClick", 7);
36
+ this._viewHistory = [];
36
37
  this._dataUnit = undefined;
37
38
  this._dataState = undefined;
38
39
  this.attachmentRegisterKey = undefined;
@@ -52,6 +53,9 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
52
53
  async goToView(mode) {
53
54
  this.executeAction(mode);
54
55
  }
56
+ currentViewModeWatcher(currentView) {
57
+ this._viewHistory = [...this._viewHistory.slice(-1), currentView];
58
+ }
55
59
  async gridToForm(keepFormMode = false) {
56
60
  this._backToGrid = !keepFormMode && await this._viewStack.getSelectedIndex() === VIEW_MODE.GRID;
57
61
  this.setViewMode(VIEW_MODE.FORM);
@@ -66,8 +70,9 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
66
70
  if (act === "ATTACH")
67
71
  return this.setViewMode(VIEW_MODE.ATTACHMENT);
68
72
  }
69
- handleAttachBack() {
70
- this.setViewMode(VIEW_MODE.GRID);
73
+ backView() {
74
+ const lastView = this._viewHistory.at(-2) || VIEW_MODE.GRID;
75
+ this.setViewMode(lastView);
71
76
  }
72
77
  setViewMode(viewMode) {
73
78
  this._viewStack.show(viewMode);
@@ -94,6 +99,13 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
94
99
  this.setViewMode(VIEW_MODE.GRID);
95
100
  }
96
101
  }
102
+ async getAttachmentRegisterKey() {
103
+ if (!this._snkDataUnit)
104
+ return;
105
+ const recordCriteria = await this._snkDataUnit.getSelectedRecordsIDsInfo();
106
+ const joinedPrimaryKeys = recordCriteria.map(({ value }) => value).join('_');
107
+ return joinedPrimaryKeys;
108
+ }
97
109
  componentWillLoad() {
98
110
  let parent = this._element.parentElement;
99
111
  while (parent) {
@@ -112,8 +124,11 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
112
124
  else {
113
125
  this.initDataUnit();
114
126
  }
115
- this._snkDataUnit.addEventListener("dataStateChange", (evt) => {
116
- this._dataState = evt.detail;
127
+ this._snkDataUnit.addEventListener("dataStateChange", async ({ detail: dataState }) => {
128
+ this._dataState = dataState;
129
+ if (dataState.selectedRecord !== undefined) {
130
+ this.attachmentRegisterKey = await this.getAttachmentRegisterKey();
131
+ }
117
132
  });
118
133
  break;
119
134
  }
@@ -130,17 +145,13 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
130
145
  this.messagesBuilder = this._snkDataUnit.messagesBuilder;
131
146
  }
132
147
  }
133
- async canRenderAttachment() {
134
- var _a, _b, _c, _d, _e;
135
- const isValidVersion = VersionUtils.isRequiredVersion((_a = window.envContext) === null || _a === void 0 ? void 0 : _a.sysVersion, '4.22');
136
- const recordCriteria = await ((_c = (_b = this._snkDataUnit) === null || _b === void 0 ? void 0 : _b.getSelectedRecordsIDsInfo) === null || _c === void 0 ? void 0 : _c.call(_b));
137
- this.attachmentRegisterKey = (_d = recordCriteria.find(criteria => !!criteria.value)) === null || _d === void 0 ? void 0 : _d.value;
138
- return isValidVersion && ((_e = this._dataState) === null || _e === void 0 ? void 0 : _e.selectedRecord) !== undefined;
139
- }
140
148
  render() {
141
- return (h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "crud" }, h("stack-item", null, h("snk-grid", { ref: (ref) => this._snkGrid = ref, "data-element-id": "crud_grid", configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), taskbarManager: this.taskbarManager, onActionClick: evt => this.executeAction(evt.detail), messagesBuilder: this.messagesBuilder, actionsList: this.actionsList, statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, presentationMode: this.presentationMode }, h("slot", { name: "SnkGridHeader" }), h("slot", { name: "SnkGridFooter" }), h("slot", { name: "SnkGridTaskBar" }))), h("stack-item", null, h("snk-guides-viewer", { ref: ref => this._guidesViewer = ref, entityPath: this._snkDataUnit.entityName, messagesBuilder: this.messagesBuilder, onExit: () => this.setViewMode(VIEW_MODE.GRID), dataState: this._dataState, dataUnit: this._dataUnit, actionsList: this.actionsList, taskbarManager: this.taskbarManager, configName: this.configName, onActionClick: evt => this.executeAction(evt.detail), presentationMode: this.presentationMode, "data-element-id": "crud_form" }, h("slot", { name: "SnkFormTaskBar" }))), h("stack-item", null, this.canRenderAttachment() && (h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this._snkDataUnit.entityName, onBack: this.handleAttachBack.bind(this) }))), h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.setViewMode(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail) })));
149
+ return (h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "crud" }, h("stack-item", null, h("snk-grid", { ref: (ref) => this._snkGrid = ref, "data-element-id": "crud_grid", configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), taskbarManager: this.taskbarManager, onActionClick: evt => this.executeAction(evt.detail), messagesBuilder: this.messagesBuilder, actionsList: this.actionsList, statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, presentationMode: this.presentationMode }, h("slot", { name: "SnkGridHeader" }), h("slot", { name: "SnkGridFooter" }), h("slot", { name: "SnkGridTaskBar" }))), h("stack-item", null, h("snk-guides-viewer", { ref: ref => this._guidesViewer = ref, entityPath: this._snkDataUnit.entityName, messagesBuilder: this.messagesBuilder, onExit: () => this.setViewMode(VIEW_MODE.GRID), dataState: this._dataState, dataUnit: this._dataUnit, actionsList: this.actionsList, taskbarManager: this.taskbarManager, configName: this.configName, onActionClick: evt => this.executeAction(evt.detail), presentationMode: this.presentationMode, "data-element-id": "crud_form" }, h("slot", { name: "SnkFormTaskBar" }))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this._snkDataUnit.entityName, onBack: this.backView.bind(this) })), h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.setViewMode(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail) })));
142
150
  }
143
151
  get _element() { return this; }
152
+ static get watchers() { return {
153
+ "_currentViewMode": ["currentViewModeWatcher"]
154
+ }; }
144
155
  static get style() { return snkCrudCss; }
145
156
  }, [6, "snk-crud", {
146
157
  "configName": [1025, "config-name"],