@sankhyalabs/sankhyablocks 1.3.31-beta.10 → 1.3.31-beta.11

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 (56) hide show
  1. package/dist/cjs/SnkMessageBuilder-13239761.js +188 -0
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  4. package/dist/cjs/snk-application.cjs.entry.js +3 -1
  5. package/dist/cjs/snk-crud.cjs.entry.js +1 -1
  6. package/dist/cjs/snk-data-unit.cjs.entry.js +107 -48
  7. package/dist/cjs/snk-form_2.cjs.entry.js +18 -11
  8. package/dist/cjs/snk-taskbar.cjs.entry.js +39 -20
  9. package/dist/cjs/{taskbar-elements-7f99f0c9.js → taskbar-elements-73d524e5.js} +1 -1
  10. package/dist/collection/components/snk-application/snk-application.js +30 -1
  11. package/dist/collection/components/snk-crud/snk-crud.js +6 -18
  12. package/dist/collection/components/snk-data-unit/snk-data-unit.js +107 -71
  13. package/dist/collection/components/snk-form/snk-form.js +18 -28
  14. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +1 -1
  15. package/dist/collection/components/snk-taskbar/snk-taskbar.js +38 -19
  16. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +1 -1
  17. package/dist/collection/lib/message/SnkMessageBuilder.js +119 -0
  18. package/dist/collection/lib/message/resources/snk-data-unit.msg.js +22 -0
  19. package/dist/collection/lib/message/resources/snk-form.msg.js +10 -0
  20. package/dist/collection/lib/message/resources/snk-taskbar.msg.js +16 -0
  21. package/dist/components/SnkMessageBuilder.js +166 -0
  22. package/dist/components/snk-application2.js +4 -1
  23. package/dist/components/snk-crud.js +1 -2
  24. package/dist/components/snk-data-unit.js +107 -49
  25. package/dist/components/snk-form2.js +17 -11
  26. package/dist/components/snk-taskbar2.js +39 -20
  27. package/dist/esm/SnkMessageBuilder-3835f9d8.js +166 -0
  28. package/dist/esm/loader.js +1 -1
  29. package/dist/esm/sankhyablocks.js +1 -1
  30. package/dist/esm/snk-application.entry.js +3 -1
  31. package/dist/esm/snk-crud.entry.js +1 -1
  32. package/dist/esm/snk-data-unit.entry.js +107 -48
  33. package/dist/esm/snk-form_2.entry.js +18 -11
  34. package/dist/esm/snk-taskbar.entry.js +39 -20
  35. package/dist/esm/{taskbar-elements-e0b8a285.js → taskbar-elements-6d01a640.js} +1 -1
  36. package/dist/sankhyablocks/{p-c3d20542.entry.js → p-5e1b7e51.entry.js} +1 -1
  37. package/dist/sankhyablocks/p-72bccbb6.js +1 -0
  38. package/dist/sankhyablocks/p-8c74d163.entry.js +1 -0
  39. package/dist/sankhyablocks/p-bab507ad.entry.js +1 -0
  40. package/dist/sankhyablocks/p-dd10a5e3.js +1 -0
  41. package/dist/sankhyablocks/p-e942c604.entry.js +69 -0
  42. package/dist/sankhyablocks/p-f4d0394b.entry.js +1 -0
  43. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  44. package/dist/types/components/snk-application/snk-application.d.ts +8 -2
  45. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +8 -0
  46. package/dist/types/components.d.ts +9 -18
  47. package/dist/types/lib/message/SnkMessageBuilder.d.ts +42 -0
  48. package/dist/types/lib/message/resources/snk-data-unit.msg.d.ts +2 -0
  49. package/dist/types/lib/message/resources/snk-form.msg.d.ts +2 -0
  50. package/dist/types/lib/message/resources/snk-taskbar.msg.d.ts +2 -0
  51. package/package.json +1 -1
  52. package/dist/sankhyablocks/p-18fe0469.entry.js +0 -69
  53. package/dist/sankhyablocks/p-5b5afdbe.entry.js +0 -1
  54. package/dist/sankhyablocks/p-7fe9e5c2.entry.js +0 -1
  55. package/dist/sankhyablocks/p-8650ae26.entry.js +0 -1
  56. package/dist/sankhyablocks/p-a5439706.js +0 -1
@@ -0,0 +1,188 @@
1
+ 'use strict';
2
+
3
+ function _interopNamespace(e) {
4
+ if (e && e.__esModule) return e;
5
+ var n = Object.create(null);
6
+ if (e) {
7
+ Object.keys(e).forEach(function (k) {
8
+ if (k !== 'default') {
9
+ var d = Object.getOwnPropertyDescriptor(e, k);
10
+ Object.defineProperty(n, k, d.get ? d : {
11
+ enumerable: true,
12
+ get: function () {
13
+ return e[k];
14
+ }
15
+ });
16
+ }
17
+ });
18
+ }
19
+ n['default'] = e;
20
+ return Object.freeze(n);
21
+ }
22
+
23
+ const snkDataUnitMessages = {
24
+ saveInfo: {
25
+ clone: "Duplicação realizada!",
26
+ insert: "Inclusão realizada!",
27
+ update: "Aleração realizada!"
28
+ },
29
+ cancelInfo: {
30
+ clone: "Duplicação descartada!",
31
+ insert: "A inclusão descartada!",
32
+ update: "A edição foi descartada!"
33
+ },
34
+ removeInfo: "Registro removido com sucesso!",
35
+ cancelConfirmationTitle: "Aviso",
36
+ cancelConfirmation: "As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de cancelar?",
37
+ removeConfirmationTitle: "Excluir",
38
+ removeConfirmation: "Deseja realmente excluir o registro atual?",
39
+ forbiddenUpdate: "Não é possível fazer alterações. Verifique as permissões de acesso.",
40
+ forbiddenInsert: "Não é possível incluir. Verifique as permissões de acesso.",
41
+ forbiddenClone: "Não é possível duplicar. Verifique as permissões de acesso.",
42
+ forbiddenRemove: "Não é possível remover. Verifique as permissões de acesso."
43
+ };
44
+
45
+ const snkFormMessages = {
46
+ title: {
47
+ clone: "Duplicar registro",
48
+ insert: "Cadastrar registro",
49
+ update: "Alterar registro",
50
+ clean: "{{ENTITY_NAME}}"
51
+ },
52
+ goBackTitle: "Voltar"
53
+ };
54
+
55
+ const snkTaskbarMessages = {
56
+ titleUpdate: "Editar",
57
+ titlePrevious: "Anterior",
58
+ titleNext: "Próximo",
59
+ titleRefresh: "Atualizar",
60
+ titleClone: "Duplicar",
61
+ titleRemove: "Excluir",
62
+ titleMoreOptions: "Mais Opções",
63
+ titleInsert: "Cadastrar",
64
+ titleCancel: "Cancelar",
65
+ titleSave: "Salvar",
66
+ titleGridMode: "Modo Grade",
67
+ titleConfigGrid: "Configuração da grade",
68
+ titleFormMode: "Modo Formulário"
69
+ };
70
+
71
+ class SnkMessageBuilder {
72
+ constructor() {
73
+ this._defaults = {
74
+ snkDataUnit: snkDataUnitMessages,
75
+ snkForm: snkFormMessages,
76
+ snkTaskbar: snkTaskbarMessages
77
+ };
78
+ this._currentOperation = exports.OperationMap.CLEAN;
79
+ this.loadAppMessages().then((msgs) => {
80
+ this._appMessages = msgs;
81
+ }, error => {
82
+ console.info('O arquivo de mensagens personalizadas não foi encontrado no caminho /messages/appmessages.js', error);
83
+ });
84
+ }
85
+ /**
86
+ * Existem mensagens sensíveis a operação. Por exemplo, a mensagem
87
+ * de inclusão pode ser diferente da mensagem de alteração do mesmo
88
+ * recurso. Para isso "currentOperation" pode variar de acordo com
89
+ * OperationMap.
90
+ */
91
+ set currentOperation(op) {
92
+ this._currentOperation = op;
93
+ }
94
+ /**
95
+ * Método usado para se obter mensagens, respeitando o padrão do sistema
96
+ * ou as mensagens específicas de cada tela
97
+ *
98
+ * @param key Chave usada para obter mensagens. Deve-se usar o separador "."
99
+ * alcançar diversos níveis.
100
+ * @param params Quando a mensagem possui o padrão {{NOME}} as ocorrências
101
+ * serão substituidas pelo respectivo valor do param.
102
+ * @returns A mensagem formatada.
103
+ */
104
+ getMessage(key, params) {
105
+ if (key == undefined) {
106
+ return undefined;
107
+ }
108
+ var parts = key.split(".");
109
+ let msg = this.resolveMessage(parts, this._appMessages);
110
+ if (msg == undefined) {
111
+ msg = this.resolveMessage(parts, this._defaults);
112
+ }
113
+ if (this.customMessageBuilder) {
114
+ const result = this.customMessageBuilder(key, msg, params);
115
+ msg = result.message;
116
+ params = result.params;
117
+ }
118
+ return this.postProcess(msg, params);
119
+ }
120
+ resolveMessage(keys, object) {
121
+ if (object == undefined) {
122
+ return undefined;
123
+ }
124
+ const key = keys[0];
125
+ const result = object[key];
126
+ if (result) {
127
+ if (this.isOperationSensitive(result)) {
128
+ return result[this._currentOperation];
129
+ }
130
+ else {
131
+ const isLeaf = keys.length === 1 ||
132
+ result == undefined ||
133
+ typeof result === "string";
134
+ return isLeaf ? result : this.resolveMessage(keys.slice(1), result);
135
+ }
136
+ }
137
+ }
138
+ isOperationSensitive(value) {
139
+ return value[exports.OperationMap.CLONE] != undefined ||
140
+ value[exports.OperationMap.INSERT] != undefined ||
141
+ value[exports.OperationMap.UPDATE] != undefined ||
142
+ value[exports.OperationMap.CLEAN] != undefined;
143
+ }
144
+ postProcess(message, params) {
145
+ if (message) {
146
+ const propPattern = /(.*?)\{\{(.+?)\}\}/g;
147
+ let processed = "";
148
+ let tail = message;
149
+ let result;
150
+ while ((result = propPattern.exec(message)) !== null) {
151
+ const [match, head, attribute] = result;
152
+ const tailIndex = result.index + match.length;
153
+ tail = tailIndex < message.length ? message.substring(tailIndex) : "";
154
+ let replacement = params ? params[attribute] : undefined;
155
+ if (replacement == undefined) {
156
+ replacement = "";
157
+ }
158
+ processed += head + replacement;
159
+ }
160
+ return processed + tail;
161
+ }
162
+ else {
163
+ return message;
164
+ }
165
+ }
166
+ loadAppMessages() {
167
+ return new Promise((accept, reject) => {
168
+ const messagesUrl = window['applicationenv'] !== "dev" ? `/${window["MGE_MODULE_NAME"]}/labsApps/${window["APPLICATION_NAME"]}/messages/appmessages.js`
169
+ : '/messages/appmessages.js';
170
+ Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackIgnore: true */ messagesUrl)); })
171
+ .then(module => {
172
+ accept(module.default);
173
+ })
174
+ .catch(reason => {
175
+ reject(reason);
176
+ });
177
+ });
178
+ }
179
+ }
180
+ exports.OperationMap = void 0;
181
+ (function (OperationMap) {
182
+ OperationMap["CLONE"] = "clone";
183
+ OperationMap["INSERT"] = "insert";
184
+ OperationMap["UPDATE"] = "update";
185
+ OperationMap["CLEAN"] = "clean";
186
+ })(exports.OperationMap || (exports.OperationMap = {}));
187
+
188
+ exports.SnkMessageBuilder = SnkMessageBuilder;
@@ -14,7 +14,7 @@ const patchEsm = () => {
14
14
  const defineCustomElements = (win, options) => {
15
15
  if (typeof window === 'undefined') return Promise.resolve();
16
16
  return patchEsm().then(() => {
17
- return index.bootstrapLazy([["snk-crud.cjs",[[6,"snk-crud",{"configName":[1,"config-name"],"formTitle":[1,"form-title"],"actionsList":[16],"recordsValidator":[8,"records-validator"],"_dataUnit":[32],"_dataState":[32]}]]],["teste-pesquisa.cjs",[[1,"teste-pesquisa"]]],["snk-data-unit.cjs",[[2,"snk-data-unit",{"dataState":[1040],"dataUnitName":[1,"data-unit-name"],"entityName":[1,"entity-name"],"pageSize":[2,"page-size"],"dataUnit":[1040],"messageBuilder":[16],"beforeSave":[16],"afterSave":[16],"autoLoad":[4,"auto-load"],"getDataUnit":[64]}]]],["snk-application.cjs",[[2,"snk-application",{"isUserSup":[64],"hasAccess":[64],"getAllAccess":[64],"getStringParam":[64],"getIntParam":[64],"getFloatParam":[64],"getBooleanParam":[64],"getDateParam":[64],"showPopUp":[64],"closePopUp":[64],"temOpcional":[64],"getConfig":[64],"saveConfig":[64],"getAttributeFromHTMLWrapper":[64],"openApp":[64],"createDataunit":[64],"getDataUnit":[64],"getResourceID":[64],"alert":[64],"error":[64],"confirm":[64],"info":[64],"loadFormConfig":[64],"loadGridConfig":[64],"saveGridConfig":[64],"executeSearch":[64],"isDebugMode":[64]}]]],["snk-form_2.cjs",[[2,"snk-form",{"formTitle":[1,"form-title"],"configName":[1,"config-name"],"recordsValidator":[8,"records-validator"],"actionsList":[16],"_dataUnit":[32],"_configLoaded":[32],"_dataState":[32],"_editionFormConfig":[32],"_insertionFormConfig":[32]}],[6,"snk-grid",{"configName":[1,"config-name"],"actionsList":[16],"_dataUnit":[32],"_configLoaded":[32],"_dataState":[32],"_gridConfig":[32]}]]],["snk-pesquisa.cjs",[[2,"snk-pesquisa",{"searchLoader":[16],"selectItem":[16],"argument":[1025],"_itemList":[32],"_startLoading":[32]}]]],["snk-taskbar.cjs",[[6,"snk-taskbar",{"buttons":[1],"actionsList":[16],"primaryButton":[1,"primary-button"],"disabledButtons":[16],"dataUnit":[16],"_permissions":[32]}]]]], options);
17
+ return index.bootstrapLazy([["snk-crud.cjs",[[6,"snk-crud",{"configName":[1,"config-name"],"actionsList":[16],"recordsValidator":[8,"records-validator"],"_dataUnit":[32],"_dataState":[32]}]]],["teste-pesquisa.cjs",[[1,"teste-pesquisa"]]],["snk-data-unit.cjs",[[2,"snk-data-unit",{"dataState":[1040],"dataUnitName":[1,"data-unit-name"],"entityName":[1,"entity-name"],"pageSize":[2,"page-size"],"dataUnit":[1040],"beforeSave":[16],"afterSave":[16],"autoLoad":[4,"auto-load"],"getDataUnit":[64]}]]],["snk-application.cjs",[[2,"snk-application",{"messagesBuilder":[1040],"isUserSup":[64],"hasAccess":[64],"getAllAccess":[64],"getStringParam":[64],"getIntParam":[64],"getFloatParam":[64],"getBooleanParam":[64],"getDateParam":[64],"showPopUp":[64],"closePopUp":[64],"temOpcional":[64],"getConfig":[64],"saveConfig":[64],"getAttributeFromHTMLWrapper":[64],"openApp":[64],"createDataunit":[64],"getDataUnit":[64],"getResourceID":[64],"alert":[64],"error":[64],"confirm":[64],"info":[64],"loadFormConfig":[64],"loadGridConfig":[64],"saveGridConfig":[64],"executeSearch":[64],"isDebugMode":[64]}]]],["snk-form_2.cjs",[[2,"snk-form",{"configName":[1,"config-name"],"recordsValidator":[8,"records-validator"],"actionsList":[16],"_dataUnit":[32],"_configLoaded":[32],"_dataState":[32],"_editionFormConfig":[32],"_insertionFormConfig":[32]}],[6,"snk-grid",{"configName":[1,"config-name"],"actionsList":[16],"_dataUnit":[32],"_configLoaded":[32],"_dataState":[32],"_gridConfig":[32]}]]],["snk-pesquisa.cjs",[[2,"snk-pesquisa",{"searchLoader":[16],"selectItem":[16],"argument":[1025],"_itemList":[32],"_startLoading":[32]}]]],["snk-taskbar.cjs",[[6,"snk-taskbar",{"buttons":[1],"actionsList":[16],"primaryButton":[1,"primary-button"],"disabledButtons":[16],"dataUnit":[16],"_permissions":[32]}]]]], options);
18
18
  });
19
19
  };
20
20
 
@@ -15,5 +15,5 @@ const patchBrowser = () => {
15
15
  };
16
16
 
17
17
  patchBrowser().then(options => {
18
- return index.bootstrapLazy([["snk-crud.cjs",[[6,"snk-crud",{"configName":[1,"config-name"],"formTitle":[1,"form-title"],"actionsList":[16],"recordsValidator":[8,"records-validator"],"_dataUnit":[32],"_dataState":[32]}]]],["teste-pesquisa.cjs",[[1,"teste-pesquisa"]]],["snk-data-unit.cjs",[[2,"snk-data-unit",{"dataState":[1040],"dataUnitName":[1,"data-unit-name"],"entityName":[1,"entity-name"],"pageSize":[2,"page-size"],"dataUnit":[1040],"messageBuilder":[16],"beforeSave":[16],"afterSave":[16],"autoLoad":[4,"auto-load"],"getDataUnit":[64]}]]],["snk-application.cjs",[[2,"snk-application",{"isUserSup":[64],"hasAccess":[64],"getAllAccess":[64],"getStringParam":[64],"getIntParam":[64],"getFloatParam":[64],"getBooleanParam":[64],"getDateParam":[64],"showPopUp":[64],"closePopUp":[64],"temOpcional":[64],"getConfig":[64],"saveConfig":[64],"getAttributeFromHTMLWrapper":[64],"openApp":[64],"createDataunit":[64],"getDataUnit":[64],"getResourceID":[64],"alert":[64],"error":[64],"confirm":[64],"info":[64],"loadFormConfig":[64],"loadGridConfig":[64],"saveGridConfig":[64],"executeSearch":[64],"isDebugMode":[64]}]]],["snk-form_2.cjs",[[2,"snk-form",{"formTitle":[1,"form-title"],"configName":[1,"config-name"],"recordsValidator":[8,"records-validator"],"actionsList":[16],"_dataUnit":[32],"_configLoaded":[32],"_dataState":[32],"_editionFormConfig":[32],"_insertionFormConfig":[32]}],[6,"snk-grid",{"configName":[1,"config-name"],"actionsList":[16],"_dataUnit":[32],"_configLoaded":[32],"_dataState":[32],"_gridConfig":[32]}]]],["snk-pesquisa.cjs",[[2,"snk-pesquisa",{"searchLoader":[16],"selectItem":[16],"argument":[1025],"_itemList":[32],"_startLoading":[32]}]]],["snk-taskbar.cjs",[[6,"snk-taskbar",{"buttons":[1],"actionsList":[16],"primaryButton":[1,"primary-button"],"disabledButtons":[16],"dataUnit":[16],"_permissions":[32]}]]]], options);
18
+ return index.bootstrapLazy([["snk-crud.cjs",[[6,"snk-crud",{"configName":[1,"config-name"],"actionsList":[16],"recordsValidator":[8,"records-validator"],"_dataUnit":[32],"_dataState":[32]}]]],["teste-pesquisa.cjs",[[1,"teste-pesquisa"]]],["snk-data-unit.cjs",[[2,"snk-data-unit",{"dataState":[1040],"dataUnitName":[1,"data-unit-name"],"entityName":[1,"entity-name"],"pageSize":[2,"page-size"],"dataUnit":[1040],"beforeSave":[16],"afterSave":[16],"autoLoad":[4,"auto-load"],"getDataUnit":[64]}]]],["snk-application.cjs",[[2,"snk-application",{"messagesBuilder":[1040],"isUserSup":[64],"hasAccess":[64],"getAllAccess":[64],"getStringParam":[64],"getIntParam":[64],"getFloatParam":[64],"getBooleanParam":[64],"getDateParam":[64],"showPopUp":[64],"closePopUp":[64],"temOpcional":[64],"getConfig":[64],"saveConfig":[64],"getAttributeFromHTMLWrapper":[64],"openApp":[64],"createDataunit":[64],"getDataUnit":[64],"getResourceID":[64],"alert":[64],"error":[64],"confirm":[64],"info":[64],"loadFormConfig":[64],"loadGridConfig":[64],"saveGridConfig":[64],"executeSearch":[64],"isDebugMode":[64]}]]],["snk-form_2.cjs",[[2,"snk-form",{"configName":[1,"config-name"],"recordsValidator":[8,"records-validator"],"actionsList":[16],"_dataUnit":[32],"_configLoaded":[32],"_dataState":[32],"_editionFormConfig":[32],"_insertionFormConfig":[32]}],[6,"snk-grid",{"configName":[1,"config-name"],"actionsList":[16],"_dataUnit":[32],"_configLoaded":[32],"_dataState":[32],"_gridConfig":[32]}]]],["snk-pesquisa.cjs",[[2,"snk-pesquisa",{"searchLoader":[16],"selectItem":[16],"argument":[1025],"_itemList":[32],"_startLoading":[32]}]]],["snk-taskbar.cjs",[[6,"snk-taskbar",{"buttons":[1],"actionsList":[16],"primaryButton":[1,"primary-button"],"disabledButtons":[16],"dataUnit":[16],"_permissions":[32]}]]]], options);
19
19
  });
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-c6671817.js');
6
6
  const core = require('@sankhyalabs/core');
7
7
  const utils = require('@sankhyalabs/ezui/dist/collection/utils');
8
+ const SnkMessageBuilder = require('./SnkMessageBuilder-13239761.js');
8
9
 
9
10
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
10
11
 
@@ -6458,7 +6459,7 @@ class UrlUtils {
6458
6459
 
6459
6460
  class DataFetcher {
6460
6461
  constructor() {
6461
- this.GRAPHQL_PATH = window['applicationenv'] === "sankhyaom" ? "/mge/graphql" : "";
6462
+ this.GRAPHQL_PATH = "/mge/graphql";
6462
6463
  this.watingRequestsById = new Map();
6463
6464
  }
6464
6465
  static get() {
@@ -7707,6 +7708,7 @@ const SnkApplication = class {
7707
7708
  }
7708
7709
  componentWillLoad() {
7709
7710
  this._errorHandler = new SnkErrorHandler(this);
7711
+ this.messagesBuilder = new SnkMessageBuilder.SnkMessageBuilder();
7710
7712
  core.ApplicationContext.setContextValue("__EZUI__UPLOAD__ADD__URL__", `${UrlUtils.getUrlBase()}/mge/upload/file`);
7711
7713
  core.ApplicationContext.setContextValue("__EZUI__SEARCH__OPTION__LOADER__", (searchArgument, fieldName, dataUnit) => {
7712
7714
  return this.executeSearch(searchArgument, fieldName, dataUnit);
@@ -55,7 +55,7 @@ const SnkCrud = class {
55
55
  }
56
56
  }
57
57
  render() {
58
- return (index.h("ez-view-stack", { ref: (ref) => this._viewStack = ref }, index.h("stack-item", null, index.h("snk-grid", { configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), onActionClick: evt => this.executeAction(evt.detail), actionsList: this.actionsList }, index.h("slot", null))), index.h("stack-item", null, index.h("snk-form", { formTitle: this.formTitle, configName: this.configName, actionsList: this.actionsList, onExit: () => this._viewStack.show(GRID_MODE), recordsValidator: this.recordsValidator, onActionClick: evt => this.executeAction(evt.detail) }))));
58
+ return (index.h("ez-view-stack", { ref: (ref) => this._viewStack = ref }, index.h("stack-item", null, index.h("snk-grid", { configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), onActionClick: evt => this.executeAction(evt.detail), actionsList: this.actionsList }, index.h("slot", null))), index.h("stack-item", null, index.h("snk-form", { configName: this.configName, actionsList: this.actionsList, onExit: () => this._viewStack.show(GRID_MODE), recordsValidator: this.recordsValidator, onActionClick: evt => this.executeAction(evt.detail) }))));
59
59
  }
60
60
  get _element() { return index.getElement(this); }
61
61
  };
@@ -5,6 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const index = require('./index-c6671817.js');
6
6
  const core = require('@sankhyalabs/core');
7
7
  const utils = require('@sankhyalabs/ezui/dist/collection/utils');
8
+ const SnkMessageBuilder = require('./SnkMessageBuilder-13239761.js');
8
9
 
9
10
  const snkDataUnitCss = ".sc-snk-data-unit-h{display:flex;flex-direction:column;height:100%}";
10
11
 
@@ -25,19 +26,6 @@ const SnkDataUnit = class {
25
26
  */
26
27
  this.autoLoad = true;
27
28
  this._dataUnitObserver = (action) => {
28
- let msg;
29
- if (!this.isTransitionAction(action.type)) {
30
- msg = this.getActionInfo(action.type);
31
- }
32
- if (msg) {
33
- utils.ApplicationUtils.info(msg);
34
- }
35
- if (action.type === core.Action.RECORDS_ADDED || action.type === core.Action.RECORDS_COPIED) {
36
- this.insertionMode.emit();
37
- }
38
- if (action.type === core.Action.EDITION_CANCELED) {
39
- this.cancelEdition.emit();
40
- }
41
29
  const duState = {
42
30
  insertionMode: false,
43
31
  hasNext: this.dataUnit.hasNext(),
@@ -54,6 +42,29 @@ const SnkDataUnit = class {
54
42
  }
55
43
  });
56
44
  this.dataState = duState;
45
+ if (action.type === core.Action.DATA_SAVED) {
46
+ const msg = this.getMessage("snkDataUnit.saveInfo", action.payload.records[0]);
47
+ if (msg != undefined) {
48
+ this.showSuccessMessage(msg);
49
+ }
50
+ }
51
+ if (action.type === core.Action.RECORDS_ADDED || action.type === core.Action.RECORDS_COPIED) {
52
+ this.insertionMode.emit();
53
+ }
54
+ if (action.type === core.Action.EDITION_CANCELED) {
55
+ this.cancelEdition.emit();
56
+ const cancelFinishMsg = this.getMessage("snkDataUnit.cancelInfo");
57
+ if (cancelFinishMsg != undefined) {
58
+ this.showSuccessMessage(cancelFinishMsg);
59
+ }
60
+ }
61
+ if (action.type === core.Action.RECORDS_REMOVED) {
62
+ const removeFinishMsg = this.getMessage("snkDataUnit.removeInfo", action.payload.cachedRecords[0]);
63
+ if (removeFinishMsg != undefined) {
64
+ this.showSuccessMessage(removeFinishMsg);
65
+ }
66
+ }
67
+ this._application.messagesBuilder.currentOperation = this.getMessageOperation();
57
68
  };
58
69
  }
59
70
  observePageSize() {
@@ -101,6 +112,32 @@ const SnkDataUnit = class {
101
112
  async interceptAction(action) {
102
113
  return new Promise(resolve => {
103
114
  switch (action.type) {
115
+ case core.Action.RECORDS_ADDED:
116
+ if (this.isAllowed("INSERT")) {
117
+ resolve(action);
118
+ }
119
+ else {
120
+ utils.ApplicationUtils.info(this.getMessage("snkDataUnit.forbiddenInsert"));
121
+ }
122
+ break;
123
+ case core.Action.RECORDS_COPIED:
124
+ if (this.isAllowed("CLONE")) {
125
+ resolve(action);
126
+ }
127
+ else {
128
+ utils.ApplicationUtils.info(this.getMessage("snkDataUnit.forbiddenClone"));
129
+ }
130
+ break;
131
+ case core.Action.DATA_CHANGED:
132
+ case core.Action.CHANGING_DATA:
133
+ if (this.isAllowed("UPDATE")) {
134
+ resolve(action);
135
+ }
136
+ else {
137
+ this.dataUnit.cancelEdition();
138
+ utils.ApplicationUtils.info(this.getMessage("snkDataUnit.forbiddenUpdate"));
139
+ }
140
+ break;
104
141
  case core.Action.SAVING_DATA:
105
142
  if (this.beforeSave) {
106
143
  const continueAction = this.beforeSave(this.dataUnit);
@@ -125,52 +162,82 @@ const SnkDataUnit = class {
125
162
  break;
126
163
  case core.Action.EDITION_CANCELED:
127
164
  if (this.dataState.hasDirtyRecords) {
128
- utils.ApplicationUtils.confirm(this.i18n("components.warning"), this.i18n("components.confirmCancelEdition"))
129
- .then((result) => resolve(result ? action : undefined));
165
+ const cancelConfirmation = this.getMessage("snkDataUnit.cancelConfirmation");
166
+ if (cancelConfirmation == undefined) {
167
+ resolve(action);
168
+ }
169
+ else {
170
+ const cancelConfirmationTitle = this.getMessage("snkDataUnit.cancelConfirmationTitle");
171
+ utils.ApplicationUtils.confirm(cancelConfirmationTitle, cancelConfirmation)
172
+ .then((result) => resolve(result ? action : undefined));
173
+ }
130
174
  }
131
175
  else {
132
176
  resolve(action);
133
177
  }
134
178
  break;
135
179
  case core.Action.REMOVING_RECORDS:
136
- let msg = undefined;
137
- if (this.messageBuilder) {
138
- msg = this.messageBuilder(action.type, this.dataState, this.dataUnit);
180
+ if (this.isAllowed("REMOVE")) {
181
+ const removeConfirmation = this.getMessage("snkDataUnit.removeConfirmation");
182
+ if (removeConfirmation == undefined) {
183
+ resolve(action);
184
+ }
185
+ else {
186
+ const removeConfirmationTitle = this.getMessage("snkDataUnit.removeConfirmationTitle");
187
+ utils.ApplicationUtils.confirm(removeConfirmationTitle, removeConfirmation, "delete", true, { btnConfirmDanger: true })
188
+ .then((result) => resolve(result ? action : undefined));
189
+ }
190
+ }
191
+ else {
192
+ utils.ApplicationUtils.info(this.getMessage("snkDataUnit.forbiddenRemove"));
139
193
  }
140
- utils.ApplicationUtils.confirm(this.i18n("components.delete"), msg || this.i18n("components.confirmRemoveRecord"), "delete", true, { btnConfirmDanger: true })
141
- .then((result) => resolve(result ? action : undefined));
142
194
  break;
143
195
  default:
144
196
  resolve(action);
145
197
  }
146
198
  });
147
199
  }
148
- isTransitionAction(action) {
149
- switch (action) {
150
- case core.Action.LOADING_METADATA:
151
- case core.Action.LOADING_DATA:
152
- case core.Action.SAVING_DATA:
153
- case core.Action.REMOVING_RECORDS:
154
- case core.Action.CHANGING_DATA:
155
- return true;
156
- default:
157
- return false;
200
+ showSuccessMessage(message) {
201
+ utils.ApplicationUtils.info(message, { iconName: "check" });
202
+ }
203
+ isAllowed(flag) {
204
+ return this._permissions ? this._permissions.isSup || this._permissions[flag] : false;
205
+ }
206
+ /**
207
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
208
+ * através de um pequeno modulo na estrutura da aplicação:
209
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
210
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-data-unit.msg.ts"
211
+ */
212
+ getMessage(key, params = undefined) {
213
+ if (!params) {
214
+ params = this.getMessageParams();
158
215
  }
216
+ return this._application.messagesBuilder.getMessage(key, params);
217
+ }
218
+ getMessageParams() {
219
+ //TODO: Atualmente ainda não usamos o recurso de multiseleção do dataunit, mas no futuro
220
+ //precisaremos criar um mecanismo para oferecer todos os registros selecionados para a
221
+ //mensagem
222
+ return this.dataState.selectedRecords ? this.dataState.selectedRecords[0] : undefined;
159
223
  }
160
- getActionInfo(action) {
161
- if (this.messageBuilder) {
162
- return this.messageBuilder(action, this.dataState, this.dataUnit);
224
+ getMessageOperation() {
225
+ if (this.dataState.copyMode) {
226
+ return SnkMessageBuilder.OperationMap.CLONE;
163
227
  }
164
- if (action === core.Action.EDITION_CANCELED) {
165
- return this.i18n("components.editionCanceled");
228
+ if (this.dataState.insertionMode) {
229
+ return SnkMessageBuilder.OperationMap.INSERT;
166
230
  }
231
+ if (this.dataState.isDirty) {
232
+ return SnkMessageBuilder.OperationMap.UPDATE;
233
+ }
234
+ return SnkMessageBuilder.OperationMap.CLEAN;
167
235
  }
168
236
  async loadDataUnit() {
169
237
  if (!this.dataUnit) {
170
- const app = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
171
- if (app && this.entityName) {
238
+ if (this._application && this.entityName) {
172
239
  const cacheName = this.dataUnitName ? this.dataUnitName : this.entityName;
173
- this.dataUnit = await app.getDataUnit(this.entityName, cacheName);
240
+ this.dataUnit = await this._application.getDataUnit(this.entityName, cacheName);
174
241
  this.dataUnit.pageSize = this.pageSize;
175
242
  this.dataUnit.unsubscribe(this._dataUnitObserver);
176
243
  this.dataUnit.addInterceptor(this);
@@ -185,20 +252,12 @@ const SnkDataUnit = class {
185
252
  }
186
253
  }
187
254
  }
188
- i18n(key) {
189
- const pt_br = {
190
- "components.warning": "Aviso",
191
- "components.delete": "Excluir",
192
- "components.confirmRemoveRecord": "Deseja realmente excluir o registro atual?",
193
- "components.confirmCancelEdition": "As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de sair?</b>",
194
- "components.editionCanceled": "Todas as alterações foram descartadas.",
195
- };
196
- return pt_br[key];
197
- }
198
255
  //---------------------------------------------
199
256
  // Lifecycle web component
200
257
  //---------------------------------------------
201
258
  componentWillLoad() {
259
+ this._application = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
260
+ this._application.getAllAccess().then(access => this._permissions = access);
202
261
  this.loadDataUnit();
203
262
  }
204
263
  render() {
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-c6671817.js');
6
6
  const core = require('@sankhyalabs/core');
7
- const taskbarElements = require('./taskbar-elements-7f99f0c9.js');
7
+ const taskbarElements = require('./taskbar-elements-73d524e5.js');
8
8
 
9
9
  const snkFormCss = ".sc-snk-form-h{display:block}.snk-form.sc-snk-form{position:relative;padding:var(--space--large);padding-top:var(--space--medium)}.snk-form__header.sc-snk-form{position:relative;padding-top:var(--space--medium);padding-bottom:var(--space--medium);margin-bottom:var(--space--medium)}.snk-form__header--fixed.sc-snk-form{position:sticky;top:0;background:var(--background--body);z-index:var(--more-visible, 2);padding-left:var(--space--large);padding-right:var(--space--large);margin-left:calc(var(--space--large) * -1);margin-right:calc(var(--space--large) * -1);width:calc(100% + (var(--space--large) * 2))}";
10
10
 
@@ -56,22 +56,29 @@ const SnkForm = class {
56
56
  });
57
57
  }
58
58
  }
59
- i18n(key) {
60
- const pt_br = {
61
- "components.back": "Voltar"
62
- };
63
- return pt_br[key];
59
+ /**
60
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
61
+ * através de um pequeno modulo na estrutura da aplicação:
62
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
63
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-form.msg.ts"
64
+ */
65
+ getMessage(key) {
66
+ return this._application.messagesBuilder.getMessage(key, this.getMessageParams());
67
+ }
68
+ getMessageParams() {
69
+ var _a;
70
+ return ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.selectedRecords) ? this._dataState.selectedRecords[0] : undefined;
64
71
  }
65
72
  componentWillLoad() {
66
- const snkApplication = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
67
- if (snkApplication) {
68
- snkApplication.loadFormConfig(this.configName).then(cfg => {
73
+ this._application = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
74
+ if (this._application) {
75
+ this._application.loadFormConfig(this.configName).then(cfg => {
69
76
  this._configLoaded = true;
70
77
  this._editionFormConfig = cfg;
71
78
  this.loadInsertionConfig();
72
79
  });
73
80
  //Forçamos a carga dos acessos pra aproveitar a request inicial.
74
- snkApplication.getAllAccess();
81
+ this._application.getAllAccess();
75
82
  }
76
83
  let parent = this._element.parentElement;
77
84
  while (parent) {
@@ -100,7 +107,7 @@ const SnkForm = class {
100
107
  if (!this._configLoaded || !this._dataUnit || !this._dataState) {
101
108
  return undefined;
102
109
  }
103
- return (index.h("section", { class: "snk-form" }, index.h("div", { class: "snk-form__header snk-form__header--fixed ez-row" }, index.h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6", key: "formHeader" }, index.h("ez-button", { title: this.i18n("components.back"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small", onClick: () => this.exitForm() }), index.h("h1", { class: "ez-title ez-title--primary ez-title--xlarge ez-align--middle" }, this.formTitle)), index.h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-align--right" }, index.h("snk-taskbar", { key: "formTaskbar", buttons: this._dataState.isDirty ? "CANCEL,SAVE" : "PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,DIVIDER,GRID_MODE,INSERT", primaryButton: this._dataState.isDirty ? "SAVE" : "INSERT", disabledButtons: this.getDisabledButtons(), actionsList: this.actionsList, dataUnit: this._dataUnit }))), index.h("section", null, index.h("div", { class: "ez-row" }, index.h("div", { class: "ez-col ez-col--sd-12" }, index.h("ez-form", { key: "ezForm" + this._snkDataUnit.entityName, dataUnit: this._dataUnit, config: this.getFormConfig(), recordsValidator: this.recordsValidator }))))));
110
+ return (index.h("section", { class: "snk-form" }, index.h("div", { class: "snk-form__header snk-form__header--fixed ez-row" }, index.h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6", key: "formHeader" }, index.h("ez-button", { title: this.getMessage("snkForm.goBackTitle"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small", onClick: () => this.exitForm() }), index.h("h1", { class: "ez-title ez-title--primary ez-title--xlarge ez-align--middle" }, this.getMessage("snkForm.title"))), index.h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-align--right" }, index.h("snk-taskbar", { key: "formTaskbar", buttons: this._dataState.isDirty ? "CANCEL,SAVE" : "PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,DIVIDER,GRID_MODE,INSERT", primaryButton: this._dataState.isDirty ? "SAVE" : "INSERT", disabledButtons: this.getDisabledButtons(), actionsList: this.actionsList, dataUnit: this._dataUnit }))), index.h("section", null, index.h("div", { class: "ez-row" }, index.h("div", { class: "ez-col ez-col--sd-12" }, index.h("ez-form", { key: "ezForm" + this._snkDataUnit.entityName, dataUnit: this._dataUnit, config: this.getFormConfig(), recordsValidator: this.recordsValidator }))))));
104
111
  }
105
112
  get _element() { return index.getElement(this); }
106
113
  };
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-c6671817.js');
6
6
  const core = require('@sankhyalabs/core');
7
- const taskbarElements = require('./taskbar-elements-7f99f0c9.js');
7
+ const taskbarElements = require('./taskbar-elements-73d524e5.js');
8
8
 
9
9
  const snkTaskbarCss = ".sc-snk-taskbar-h{display:flex}";
10
10
 
@@ -35,23 +35,42 @@ const SnkTaskbar = class {
35
35
  }
36
36
  return true;
37
37
  }
38
+ /**
39
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
40
+ * através de um pequeno modulo na estrutura da aplicação:
41
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
42
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-taskbar.msg.ts"
43
+ */
38
44
  getTitle(element) {
39
- const pt_br = {
40
- [taskbarElements.TaskbarElement.UPDATE]: "Editar",
41
- [taskbarElements.TaskbarElement.PREVIOUS]: "Anterior",
42
- [taskbarElements.TaskbarElement.NEXT]: "Próximo",
43
- [taskbarElements.TaskbarElement.REFRESH]: "Atualizar",
44
- [taskbarElements.TaskbarElement.CLONE]: "Duplicar",
45
- [taskbarElements.TaskbarElement.REMOVE]: "Excluir",
46
- [taskbarElements.TaskbarElement.MORE_OPTIONS]: "Mais Opções",
47
- [taskbarElements.TaskbarElement.INSERT]: "Cadastrar",
48
- [taskbarElements.TaskbarElement.CANCEL]: "Cancelar",
49
- [taskbarElements.TaskbarElement.SAVE]: "Salvar",
50
- [taskbarElements.TaskbarElement.GRID_MODE]: "Modo Grade",
51
- [taskbarElements.TaskbarElement.CONFIG_GRID]: "Configuração da grade",
52
- [taskbarElements.TaskbarElement.FORM_MODE]: "Modo Formulário"
53
- };
54
- return pt_br[element] ? pt_br[element] : "";
45
+ switch (element) {
46
+ case taskbarElements.TaskbarElement.UPDATE:
47
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleUpdate", {});
48
+ case taskbarElements.TaskbarElement.PREVIOUS:
49
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titlePrevious", {});
50
+ case taskbarElements.TaskbarElement.NEXT:
51
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleNext", {});
52
+ case taskbarElements.TaskbarElement.REFRESH:
53
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleRefresh", {});
54
+ case taskbarElements.TaskbarElement.CLONE:
55
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleClone", {});
56
+ case taskbarElements.TaskbarElement.REMOVE:
57
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleRemove", {});
58
+ case taskbarElements.TaskbarElement.MORE_OPTIONS:
59
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleMoreOptions", {});
60
+ case taskbarElements.TaskbarElement.INSERT:
61
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleInsert", {});
62
+ case taskbarElements.TaskbarElement.CANCEL:
63
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleCancel", {});
64
+ case taskbarElements.TaskbarElement.SAVE:
65
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleSave", {});
66
+ case taskbarElements.TaskbarElement.GRID_MODE:
67
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleGridMode", {});
68
+ case taskbarElements.TaskbarElement.CONFIG_GRID:
69
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleConfigGrid", {});
70
+ case taskbarElements.TaskbarElement.FORM_MODE:
71
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleFormMode", {});
72
+ }
73
+ return "";
55
74
  }
56
75
  elementClick(elem) {
57
76
  if (this.dataUnit) {
@@ -98,9 +117,9 @@ const SnkTaskbar = class {
98
117
  }
99
118
  // Lifecycle
100
119
  componentWillLoad() {
101
- const snkApplication = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
102
- if (snkApplication) {
103
- snkApplication.getAllAccess().then(access => this._permissions = access);
120
+ this._application = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
121
+ if (this._application) {
122
+ this._application.getAllAccess().then(access => this._permissions = access);
104
123
  }
105
124
  else {
106
125
  this._permissions = {};
@@ -44,7 +44,7 @@ const buildElem = (element, className, getTitle, action, isEnabled, actions) =>
44
44
  case exports.TaskbarElement.INSERT:
45
45
  return iconTextButton("plus", element, className, getTitle, action, isEnabled);
46
46
  case exports.TaskbarElement.CANCEL:
47
- return index.h("ez-button", { label: getTitle(element), size: "small", enabled: isEnabled(element), onClick: () => action(element) });
47
+ return index.h("ez-button", { title: getTitle(element), label: getTitle(element), size: "small", enabled: isEnabled(element), onClick: () => action(element) });
48
48
  case exports.TaskbarElement.SAVE:
49
49
  return iconTextButton("save", element, className, getTitle, action, isEnabled);
50
50
  case exports.TaskbarElement.GRID_MODE: