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

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 (62) 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 +18 -7
  5. package/dist/cjs/snk-crud.cjs.entry.js +2 -2
  6. package/dist/cjs/snk-data-unit.cjs.entry.js +107 -48
  7. package/dist/cjs/snk-form_2.cjs.entry.js +19 -12
  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 +75 -4
  11. package/dist/collection/components/snk-crud/snk-crud.css +1 -0
  12. package/dist/collection/components/snk-crud/snk-crud.js +10 -23
  13. package/dist/collection/components/snk-data-unit/snk-data-unit.js +108 -72
  14. package/dist/collection/components/snk-form/snk-form.js +20 -32
  15. package/dist/collection/components/snk-grid/snk-grid.js +4 -2
  16. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +1 -1
  17. package/dist/collection/components/snk-taskbar/snk-taskbar.js +38 -19
  18. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +8 -5
  19. package/dist/collection/lib/index.js +1 -0
  20. package/dist/collection/lib/message/SnkMessageBuilder.js +119 -0
  21. package/dist/collection/lib/message/resources/snk-data-unit.msg.js +22 -0
  22. package/dist/collection/lib/message/resources/snk-form.msg.js +10 -0
  23. package/dist/collection/lib/message/resources/snk-taskbar.msg.js +16 -0
  24. package/dist/components/SnkMessageBuilder.js +166 -0
  25. package/dist/components/snk-application2.js +20 -7
  26. package/dist/components/snk-crud.js +3 -4
  27. package/dist/components/snk-data-unit.js +108 -50
  28. package/dist/components/snk-form2.js +18 -12
  29. package/dist/components/snk-grid2.js +1 -1
  30. package/dist/components/snk-taskbar2.js +39 -20
  31. package/dist/esm/SnkMessageBuilder-3835f9d8.js +166 -0
  32. package/dist/esm/loader.js +1 -1
  33. package/dist/esm/sankhyablocks.js +1 -1
  34. package/dist/esm/snk-application.entry.js +18 -7
  35. package/dist/esm/snk-crud.entry.js +2 -2
  36. package/dist/esm/snk-data-unit.entry.js +108 -49
  37. package/dist/esm/snk-form_2.entry.js +19 -12
  38. package/dist/esm/snk-taskbar.entry.js +39 -20
  39. package/dist/esm/{taskbar-elements-e0b8a285.js → taskbar-elements-6d01a640.js} +1 -1
  40. package/dist/sankhyablocks/p-2df33095.entry.js +1 -0
  41. package/dist/sankhyablocks/{p-c3d20542.entry.js → p-56a32417.entry.js} +1 -1
  42. package/dist/sankhyablocks/p-72bccbb6.js +1 -0
  43. package/dist/sankhyablocks/p-962d9bdd.entry.js +69 -0
  44. package/dist/sankhyablocks/p-9b427c4c.entry.js +1 -0
  45. package/dist/sankhyablocks/p-bab507ad.entry.js +1 -0
  46. package/dist/sankhyablocks/p-dd10a5e3.js +1 -0
  47. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  48. package/dist/types/components/snk-application/snk-application.d.ts +14 -4
  49. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +8 -0
  50. package/dist/types/components.d.ts +15 -20
  51. package/dist/types/lib/http/data-fetcher/DataFetcher.d.ts +5 -6
  52. package/dist/types/lib/index.d.ts +1 -0
  53. package/dist/types/lib/message/SnkMessageBuilder.d.ts +42 -0
  54. package/dist/types/lib/message/resources/snk-data-unit.msg.d.ts +2 -0
  55. package/dist/types/lib/message/resources/snk-form.msg.d.ts +2 -0
  56. package/dist/types/lib/message/resources/snk-taskbar.msg.d.ts +2 -0
  57. package/package.json +2 -2
  58. package/dist/sankhyablocks/p-18fe0469.entry.js +0 -69
  59. package/dist/sankhyablocks/p-5b5afdbe.entry.js +0 -1
  60. package/dist/sankhyablocks/p-7fe9e5c2.entry.js +0 -1
  61. package/dist/sankhyablocks/p-8650ae26.entry.js +0 -1
  62. package/dist/sankhyablocks/p-a5439706.js +0 -1
@@ -41,7 +41,7 @@ export const buildElem = (element, className, getTitle, action, isEnabled, actio
41
41
  case TaskbarElement.INSERT:
42
42
  return iconTextButton("plus", element, className, getTitle, action, isEnabled);
43
43
  case TaskbarElement.CANCEL:
44
- return h("ez-button", { label: getTitle(element), size: "small", enabled: isEnabled(element), onClick: () => action(element) });
44
+ return h("ez-button", { title: getTitle(element), label: getTitle(element), size: "small", enabled: isEnabled(element), onClick: () => action(element) });
45
45
  case TaskbarElement.SAVE:
46
46
  return iconTextButton("save", element, className, getTitle, action, isEnabled);
47
47
  case TaskbarElement.GRID_MODE:
@@ -24,23 +24,42 @@ export class SnkTaskbar {
24
24
  }
25
25
  return true;
26
26
  }
27
+ /**
28
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
29
+ * através de um pequeno modulo na estrutura da aplicação:
30
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
31
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-taskbar.msg.ts"
32
+ */
27
33
  getTitle(element) {
28
- const pt_br = {
29
- [TaskbarElement.UPDATE]: "Editar",
30
- [TaskbarElement.PREVIOUS]: "Anterior",
31
- [TaskbarElement.NEXT]: "Próximo",
32
- [TaskbarElement.REFRESH]: "Atualizar",
33
- [TaskbarElement.CLONE]: "Duplicar",
34
- [TaskbarElement.REMOVE]: "Excluir",
35
- [TaskbarElement.MORE_OPTIONS]: "Mais Opções",
36
- [TaskbarElement.INSERT]: "Cadastrar",
37
- [TaskbarElement.CANCEL]: "Cancelar",
38
- [TaskbarElement.SAVE]: "Salvar",
39
- [TaskbarElement.GRID_MODE]: "Modo Grade",
40
- [TaskbarElement.CONFIG_GRID]: "Configuração da grade",
41
- [TaskbarElement.FORM_MODE]: "Modo Formulário"
42
- };
43
- return pt_br[element] ? pt_br[element] : "";
34
+ switch (element) {
35
+ case TaskbarElement.UPDATE:
36
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleUpdate", {});
37
+ case TaskbarElement.PREVIOUS:
38
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titlePrevious", {});
39
+ case TaskbarElement.NEXT:
40
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleNext", {});
41
+ case TaskbarElement.REFRESH:
42
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleRefresh", {});
43
+ case TaskbarElement.CLONE:
44
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleClone", {});
45
+ case TaskbarElement.REMOVE:
46
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleRemove", {});
47
+ case TaskbarElement.MORE_OPTIONS:
48
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleMoreOptions", {});
49
+ case TaskbarElement.INSERT:
50
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleInsert", {});
51
+ case TaskbarElement.CANCEL:
52
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleCancel", {});
53
+ case TaskbarElement.SAVE:
54
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleSave", {});
55
+ case TaskbarElement.GRID_MODE:
56
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleGridMode", {});
57
+ case TaskbarElement.CONFIG_GRID:
58
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleConfigGrid", {});
59
+ case TaskbarElement.FORM_MODE:
60
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleFormMode", {});
61
+ }
62
+ return "";
44
63
  }
45
64
  elementClick(elem) {
46
65
  if (this.dataUnit) {
@@ -87,9 +106,9 @@ export class SnkTaskbar {
87
106
  }
88
107
  // Lifecycle
89
108
  componentWillLoad() {
90
- const snkApplication = ApplicationContext.getContextValue("__SNK__APPLICATION__");
91
- if (snkApplication) {
92
- snkApplication.getAllAccess().then(access => this._permissions = access);
109
+ this._application = ApplicationContext.getContextValue("__SNK__APPLICATION__");
110
+ if (this._application) {
111
+ this._application.getAllAccess().then(access => this._permissions = access);
93
112
  }
94
113
  else {
95
114
  this._permissions = {};
@@ -4,7 +4,7 @@ import UrlUtils from "../../../lib/utils/urlutils";
4
4
  import { StringUtils } from '@sankhyalabs/core';
5
5
  export class DataFetcher {
6
6
  constructor() {
7
- this.GRAPHQL_PATH = window['applicationenv'] === "sankhyaom" ? "/mge/graphql" : "";
7
+ this.GRAPHQL_PATH = "/mge/graphql";
8
8
  this.watingRequestsById = new Map();
9
9
  }
10
10
  static get() {
@@ -60,20 +60,23 @@ export class DataFetcher {
60
60
  resolveURL() {
61
61
  return UrlUtils.getUrlBase();
62
62
  }
63
- getContext() {
63
+ getContext(module) {
64
64
  const urlParams = UrlUtils.getQueryParams(location.search);
65
65
  return {
66
- baseUrl: `${this.resolveURL()}/mge/service.sbr`,
66
+ baseUrl: `${this.resolveURL()}/${module}/service.sbr`,
67
67
  appName: "SankhyaBlocks",
68
68
  mgeSession: `${window['skw_session'] || urlParams.mgeSession}`,
69
69
  globalID: "85C0093DFA240EAB699B4E47A10215BD",
70
+ //FIXME: Precisamos ajustar para buscar o resourceId pela aplicação
70
71
  resourceID: "br.com.sankhya.mov.bancaria"
71
72
  };
72
73
  }
73
74
  async callServiceBroker(serviceName, payload) {
74
75
  return new Promise((accept, reject) => {
75
- const ctx = this.getContext();
76
- const url = `${ctx.baseUrl}?serviceName=${serviceName}&counter=21&application=${ctx.appName}&outputType=json&preventTransform=false&mgeSession=${ctx.mgeSession}&resourceID=${ctx.resourceID}&globalID=${ctx.globalID}&allowConcurrentCalls=true`;
76
+ const parts = serviceName.split("@");
77
+ const [module, name] = parts.length === 2 ? parts : ['mge', serviceName];
78
+ const ctx = this.getContext(module);
79
+ const url = `${ctx.baseUrl}?serviceName=${name}&counter=21&application=${ctx.appName}&outputType=json&preventTransform=false&mgeSession=${ctx.mgeSession}&resourceID=${ctx.resourceID}&globalID=${ctx.globalID}&allowConcurrentCalls=true`;
77
80
  document.cookie = `JSESSIONID=${ctx.mgeSession};`;
78
81
  const http = new XMLHttpRequest();
79
82
  DataFetcher.requestListener.forEach(listener => listener.onRequestStart({ url }));
@@ -0,0 +1 @@
1
+ export { DataFetcher } from './http/data-fetcher/DataFetcher';
@@ -0,0 +1,119 @@
1
+ import snkDataUnitMessages from "./resources/snk-data-unit.msg.js";
2
+ import snkFormMessages from "./resources/snk-form.msg.js";
3
+ import snkTaskbarMessages from "./resources/snk-taskbar.msg.js";
4
+ export class SnkMessageBuilder {
5
+ constructor() {
6
+ this._defaults = {
7
+ snkDataUnit: snkDataUnitMessages,
8
+ snkForm: snkFormMessages,
9
+ snkTaskbar: snkTaskbarMessages
10
+ };
11
+ this._currentOperation = OperationMap.CLEAN;
12
+ this.loadAppMessages().then((msgs) => {
13
+ this._appMessages = msgs;
14
+ }, error => {
15
+ console.info('O arquivo de mensagens personalizadas não foi encontrado no caminho /messages/appmessages.js', error);
16
+ });
17
+ }
18
+ /**
19
+ * Existem mensagens sensíveis a operação. Por exemplo, a mensagem
20
+ * de inclusão pode ser diferente da mensagem de alteração do mesmo
21
+ * recurso. Para isso "currentOperation" pode variar de acordo com
22
+ * OperationMap.
23
+ */
24
+ set currentOperation(op) {
25
+ this._currentOperation = op;
26
+ }
27
+ /**
28
+ * Método usado para se obter mensagens, respeitando o padrão do sistema
29
+ * ou as mensagens específicas de cada tela
30
+ *
31
+ * @param key Chave usada para obter mensagens. Deve-se usar o separador "."
32
+ * alcançar diversos níveis.
33
+ * @param params Quando a mensagem possui o padrão {{NOME}} as ocorrências
34
+ * serão substituidas pelo respectivo valor do param.
35
+ * @returns A mensagem formatada.
36
+ */
37
+ getMessage(key, params) {
38
+ if (key == undefined) {
39
+ return undefined;
40
+ }
41
+ var parts = key.split(".");
42
+ let msg = this.resolveMessage(parts, this._appMessages);
43
+ if (msg == undefined) {
44
+ msg = this.resolveMessage(parts, this._defaults);
45
+ }
46
+ if (this.customMessageBuilder) {
47
+ const result = this.customMessageBuilder(key, msg, params);
48
+ msg = result.message;
49
+ params = result.params;
50
+ }
51
+ return this.postProcess(msg, params);
52
+ }
53
+ resolveMessage(keys, object) {
54
+ if (object == undefined) {
55
+ return undefined;
56
+ }
57
+ const key = keys[0];
58
+ const result = object[key];
59
+ if (result) {
60
+ if (this.isOperationSensitive(result)) {
61
+ return result[this._currentOperation];
62
+ }
63
+ else {
64
+ const isLeaf = keys.length === 1 ||
65
+ result == undefined ||
66
+ typeof result === "string";
67
+ return isLeaf ? result : this.resolveMessage(keys.slice(1), result);
68
+ }
69
+ }
70
+ }
71
+ isOperationSensitive(value) {
72
+ return value[OperationMap.CLONE] != undefined ||
73
+ value[OperationMap.INSERT] != undefined ||
74
+ value[OperationMap.UPDATE] != undefined ||
75
+ value[OperationMap.CLEAN] != undefined;
76
+ }
77
+ postProcess(message, params) {
78
+ if (message) {
79
+ const propPattern = /(.*?)\{\{(.+?)\}\}/g;
80
+ let processed = "";
81
+ let tail = message;
82
+ let result;
83
+ while ((result = propPattern.exec(message)) !== null) {
84
+ const [match, head, attribute] = result;
85
+ const tailIndex = result.index + match.length;
86
+ tail = tailIndex < message.length ? message.substring(tailIndex) : "";
87
+ let replacement = params ? params[attribute] : undefined;
88
+ if (replacement == undefined) {
89
+ replacement = "";
90
+ }
91
+ processed += head + replacement;
92
+ }
93
+ return processed + tail;
94
+ }
95
+ else {
96
+ return message;
97
+ }
98
+ }
99
+ loadAppMessages() {
100
+ return new Promise((accept, reject) => {
101
+ const messagesUrl = window['applicationenv'] !== "dev" ? `/${window["MGE_MODULE_NAME"]}/labsApps/${window["APPLICATION_NAME"]}/messages/appmessages.js`
102
+ : '/messages/appmessages.js';
103
+ import(/* webpackIgnore: true */ messagesUrl)
104
+ .then(module => {
105
+ accept(module.default);
106
+ })
107
+ .catch(reason => {
108
+ reject(reason);
109
+ });
110
+ });
111
+ }
112
+ }
113
+ export var OperationMap;
114
+ (function (OperationMap) {
115
+ OperationMap["CLONE"] = "clone";
116
+ OperationMap["INSERT"] = "insert";
117
+ OperationMap["UPDATE"] = "update";
118
+ OperationMap["CLEAN"] = "clean";
119
+ })(OperationMap || (OperationMap = {}));
@@ -0,0 +1,22 @@
1
+ const snkDataUnitMessages = {
2
+ saveInfo: {
3
+ clone: "Duplicação realizada!",
4
+ insert: "Inclusão realizada!",
5
+ update: "Aleração realizada!"
6
+ },
7
+ cancelInfo: {
8
+ clone: "Duplicação descartada!",
9
+ insert: "A inclusão descartada!",
10
+ update: "A edição foi descartada!"
11
+ },
12
+ removeInfo: "Registro removido com sucesso!",
13
+ cancelConfirmationTitle: "Aviso",
14
+ cancelConfirmation: "As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de cancelar?",
15
+ removeConfirmationTitle: "Excluir",
16
+ removeConfirmation: "Deseja realmente excluir o registro atual?",
17
+ forbiddenUpdate: "Não é possível fazer alterações. Verifique as permissões de acesso.",
18
+ forbiddenInsert: "Não é possível incluir. Verifique as permissões de acesso.",
19
+ forbiddenClone: "Não é possível duplicar. Verifique as permissões de acesso.",
20
+ forbiddenRemove: "Não é possível remover. Verifique as permissões de acesso."
21
+ };
22
+ export default snkDataUnitMessages;
@@ -0,0 +1,10 @@
1
+ const snkFormMessages = {
2
+ title: {
3
+ clone: "Duplicar registro",
4
+ insert: "Cadastrar registro",
5
+ update: "Alterar registro",
6
+ clean: "{{ENTITY_NAME}}"
7
+ },
8
+ goBackTitle: "Voltar"
9
+ };
10
+ export default snkFormMessages;
@@ -0,0 +1,16 @@
1
+ const snkTaskbarMessages = {
2
+ titleUpdate: "Editar",
3
+ titlePrevious: "Anterior",
4
+ titleNext: "Próximo",
5
+ titleRefresh: "Atualizar",
6
+ titleClone: "Duplicar",
7
+ titleRemove: "Excluir",
8
+ titleMoreOptions: "Mais Opções",
9
+ titleInsert: "Cadastrar",
10
+ titleCancel: "Cancelar",
11
+ titleSave: "Salvar",
12
+ titleGridMode: "Modo Grade",
13
+ titleConfigGrid: "Configuração da grade",
14
+ titleFormMode: "Modo Formulário"
15
+ };
16
+ export default snkTaskbarMessages;
@@ -0,0 +1,166 @@
1
+ const snkDataUnitMessages = {
2
+ saveInfo: {
3
+ clone: "Duplicação realizada!",
4
+ insert: "Inclusão realizada!",
5
+ update: "Aleração realizada!"
6
+ },
7
+ cancelInfo: {
8
+ clone: "Duplicação descartada!",
9
+ insert: "A inclusão descartada!",
10
+ update: "A edição foi descartada!"
11
+ },
12
+ removeInfo: "Registro removido com sucesso!",
13
+ cancelConfirmationTitle: "Aviso",
14
+ cancelConfirmation: "As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de cancelar?",
15
+ removeConfirmationTitle: "Excluir",
16
+ removeConfirmation: "Deseja realmente excluir o registro atual?",
17
+ forbiddenUpdate: "Não é possível fazer alterações. Verifique as permissões de acesso.",
18
+ forbiddenInsert: "Não é possível incluir. Verifique as permissões de acesso.",
19
+ forbiddenClone: "Não é possível duplicar. Verifique as permissões de acesso.",
20
+ forbiddenRemove: "Não é possível remover. Verifique as permissões de acesso."
21
+ };
22
+
23
+ const snkFormMessages = {
24
+ title: {
25
+ clone: "Duplicar registro",
26
+ insert: "Cadastrar registro",
27
+ update: "Alterar registro",
28
+ clean: "{{ENTITY_NAME}}"
29
+ },
30
+ goBackTitle: "Voltar"
31
+ };
32
+
33
+ const snkTaskbarMessages = {
34
+ titleUpdate: "Editar",
35
+ titlePrevious: "Anterior",
36
+ titleNext: "Próximo",
37
+ titleRefresh: "Atualizar",
38
+ titleClone: "Duplicar",
39
+ titleRemove: "Excluir",
40
+ titleMoreOptions: "Mais Opções",
41
+ titleInsert: "Cadastrar",
42
+ titleCancel: "Cancelar",
43
+ titleSave: "Salvar",
44
+ titleGridMode: "Modo Grade",
45
+ titleConfigGrid: "Configuração da grade",
46
+ titleFormMode: "Modo Formulário"
47
+ };
48
+
49
+ class SnkMessageBuilder {
50
+ constructor() {
51
+ this._defaults = {
52
+ snkDataUnit: snkDataUnitMessages,
53
+ snkForm: snkFormMessages,
54
+ snkTaskbar: snkTaskbarMessages
55
+ };
56
+ this._currentOperation = OperationMap.CLEAN;
57
+ this.loadAppMessages().then((msgs) => {
58
+ this._appMessages = msgs;
59
+ }, error => {
60
+ console.info('O arquivo de mensagens personalizadas não foi encontrado no caminho /messages/appmessages.js', error);
61
+ });
62
+ }
63
+ /**
64
+ * Existem mensagens sensíveis a operação. Por exemplo, a mensagem
65
+ * de inclusão pode ser diferente da mensagem de alteração do mesmo
66
+ * recurso. Para isso "currentOperation" pode variar de acordo com
67
+ * OperationMap.
68
+ */
69
+ set currentOperation(op) {
70
+ this._currentOperation = op;
71
+ }
72
+ /**
73
+ * Método usado para se obter mensagens, respeitando o padrão do sistema
74
+ * ou as mensagens específicas de cada tela
75
+ *
76
+ * @param key Chave usada para obter mensagens. Deve-se usar o separador "."
77
+ * alcançar diversos níveis.
78
+ * @param params Quando a mensagem possui o padrão {{NOME}} as ocorrências
79
+ * serão substituidas pelo respectivo valor do param.
80
+ * @returns A mensagem formatada.
81
+ */
82
+ getMessage(key, params) {
83
+ if (key == undefined) {
84
+ return undefined;
85
+ }
86
+ var parts = key.split(".");
87
+ let msg = this.resolveMessage(parts, this._appMessages);
88
+ if (msg == undefined) {
89
+ msg = this.resolveMessage(parts, this._defaults);
90
+ }
91
+ if (this.customMessageBuilder) {
92
+ const result = this.customMessageBuilder(key, msg, params);
93
+ msg = result.message;
94
+ params = result.params;
95
+ }
96
+ return this.postProcess(msg, params);
97
+ }
98
+ resolveMessage(keys, object) {
99
+ if (object == undefined) {
100
+ return undefined;
101
+ }
102
+ const key = keys[0];
103
+ const result = object[key];
104
+ if (result) {
105
+ if (this.isOperationSensitive(result)) {
106
+ return result[this._currentOperation];
107
+ }
108
+ else {
109
+ const isLeaf = keys.length === 1 ||
110
+ result == undefined ||
111
+ typeof result === "string";
112
+ return isLeaf ? result : this.resolveMessage(keys.slice(1), result);
113
+ }
114
+ }
115
+ }
116
+ isOperationSensitive(value) {
117
+ return value[OperationMap.CLONE] != undefined ||
118
+ value[OperationMap.INSERT] != undefined ||
119
+ value[OperationMap.UPDATE] != undefined ||
120
+ value[OperationMap.CLEAN] != undefined;
121
+ }
122
+ postProcess(message, params) {
123
+ if (message) {
124
+ const propPattern = /(.*?)\{\{(.+?)\}\}/g;
125
+ let processed = "";
126
+ let tail = message;
127
+ let result;
128
+ while ((result = propPattern.exec(message)) !== null) {
129
+ const [match, head, attribute] = result;
130
+ const tailIndex = result.index + match.length;
131
+ tail = tailIndex < message.length ? message.substring(tailIndex) : "";
132
+ let replacement = params ? params[attribute] : undefined;
133
+ if (replacement == undefined) {
134
+ replacement = "";
135
+ }
136
+ processed += head + replacement;
137
+ }
138
+ return processed + tail;
139
+ }
140
+ else {
141
+ return message;
142
+ }
143
+ }
144
+ loadAppMessages() {
145
+ return new Promise((accept, reject) => {
146
+ const messagesUrl = window['applicationenv'] !== "dev" ? `/${window["MGE_MODULE_NAME"]}/labsApps/${window["APPLICATION_NAME"]}/messages/appmessages.js`
147
+ : '/messages/appmessages.js';
148
+ import(/* webpackIgnore: true */ messagesUrl)
149
+ .then(module => {
150
+ accept(module.default);
151
+ })
152
+ .catch(reason => {
153
+ reject(reason);
154
+ });
155
+ });
156
+ }
157
+ }
158
+ var OperationMap;
159
+ (function (OperationMap) {
160
+ OperationMap["CLONE"] = "clone";
161
+ OperationMap["INSERT"] = "insert";
162
+ OperationMap["UPDATE"] = "update";
163
+ OperationMap["CLEAN"] = "clean";
164
+ })(OperationMap || (OperationMap = {}));
165
+
166
+ export { OperationMap as O, SnkMessageBuilder as S };
@@ -1,6 +1,7 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
2
  import { ErrorException, StringUtils, DataUnit, DataType, ChangeOperation, DateUtils, ObjectUtils, WaitingChangeException, WarningException, DependencyType, ApplicationContext, ErrorTracking } from '@sankhyalabs/core';
3
3
  import { ApplicationUtils } from '@sankhyalabs/ezui/dist/collection/utils';
4
+ import { S as SnkMessageBuilder } from './SnkMessageBuilder.js';
4
5
  import { d as defineCustomElement$1 } from './snk-pesquisa2.js';
5
6
 
6
7
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -6455,7 +6456,7 @@ class UrlUtils {
6455
6456
 
6456
6457
  class DataFetcher {
6457
6458
  constructor() {
6458
- this.GRAPHQL_PATH = window['applicationenv'] === "sankhyaom" ? "/mge/graphql" : "";
6459
+ this.GRAPHQL_PATH = "/mge/graphql";
6459
6460
  this.watingRequestsById = new Map();
6460
6461
  }
6461
6462
  static get() {
@@ -6511,20 +6512,23 @@ class DataFetcher {
6511
6512
  resolveURL() {
6512
6513
  return UrlUtils.getUrlBase();
6513
6514
  }
6514
- getContext() {
6515
+ getContext(module) {
6515
6516
  const urlParams = UrlUtils.getQueryParams(location.search);
6516
6517
  return {
6517
- baseUrl: `${this.resolveURL()}/mge/service.sbr`,
6518
+ baseUrl: `${this.resolveURL()}/${module}/service.sbr`,
6518
6519
  appName: "SankhyaBlocks",
6519
6520
  mgeSession: `${window['skw_session'] || urlParams.mgeSession}`,
6520
6521
  globalID: "85C0093DFA240EAB699B4E47A10215BD",
6522
+ //FIXME: Precisamos ajustar para buscar o resourceId pela aplicação
6521
6523
  resourceID: "br.com.sankhya.mov.bancaria"
6522
6524
  };
6523
6525
  }
6524
6526
  async callServiceBroker(serviceName, payload) {
6525
6527
  return new Promise((accept, reject) => {
6526
- const ctx = this.getContext();
6527
- const url = `${ctx.baseUrl}?serviceName=${serviceName}&counter=21&application=${ctx.appName}&outputType=json&preventTransform=false&mgeSession=${ctx.mgeSession}&resourceID=${ctx.resourceID}&globalID=${ctx.globalID}&allowConcurrentCalls=true`;
6528
+ const parts = serviceName.split("@");
6529
+ const [module, name] = parts.length === 2 ? parts : ['mge', serviceName];
6530
+ const ctx = this.getContext(module);
6531
+ const url = `${ctx.baseUrl}?serviceName=${name}&counter=21&application=${ctx.appName}&outputType=json&preventTransform=false&mgeSession=${ctx.mgeSession}&resourceID=${ctx.resourceID}&globalID=${ctx.globalID}&allowConcurrentCalls=true`;
6528
6532
  document.cookie = `JSESSIONID=${ctx.mgeSession};`;
6529
6533
  const http = new XMLHttpRequest();
6530
6534
  DataFetcher.requestListener.forEach(listener => listener.onRequestStart({ url }));
@@ -7563,11 +7567,17 @@ const SnkApplication = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
7563
7567
  async error(title, message, icon, options) {
7564
7568
  return ApplicationUtils.error(title, message, icon, options);
7565
7569
  }
7570
+ /**
7571
+ * Exibe um diálogo de mensagem comum
7572
+ */
7573
+ async message(title, message, icon, options) {
7574
+ return ApplicationUtils.message(title, message, icon, options);
7575
+ }
7566
7576
  /**
7567
7577
  * Exibe um diálogo de confirmação
7568
7578
  */
7569
- async confirm(title, message, icon, critical, options) {
7570
- return ApplicationUtils.confirm(title, message, icon, critical, options);
7579
+ async confirm(title, message, icon, dialogType, options) {
7580
+ return ApplicationUtils.confirm(title, message, icon, dialogType, options);
7571
7581
  }
7572
7582
  /**
7573
7583
  * Mostra uma informação efêmera (de segundo plano).
@@ -7705,6 +7715,7 @@ const SnkApplication = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
7705
7715
  }
7706
7716
  componentWillLoad() {
7707
7717
  this._errorHandler = new SnkErrorHandler(this);
7718
+ this.messagesBuilder = new SnkMessageBuilder();
7708
7719
  ApplicationContext.setContextValue("__EZUI__UPLOAD__ADD__URL__", `${UrlUtils.getUrlBase()}/mge/upload/file`);
7709
7720
  ApplicationContext.setContextValue("__EZUI__SEARCH__OPTION__LOADER__", (searchArgument, fieldName, dataUnit) => {
7710
7721
  return this.executeSearch(searchArgument, fieldName, dataUnit);
@@ -7730,6 +7741,7 @@ const SnkApplication = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
7730
7741
  }
7731
7742
  static get style() { return snkApplicationCss; }
7732
7743
  }, [2, "snk-application", {
7744
+ "messagesBuilder": [1040],
7733
7745
  "isUserSup": [64],
7734
7746
  "hasAccess": [64],
7735
7747
  "getAllAccess": [64],
@@ -7750,6 +7762,7 @@ const SnkApplication = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
7750
7762
  "getResourceID": [64],
7751
7763
  "alert": [64],
7752
7764
  "error": [64],
7765
+ "message": [64],
7753
7766
  "confirm": [64],
7754
7767
  "info": [64],
7755
7768
  "loadFormConfig": [64],
@@ -3,7 +3,7 @@ import { d as defineCustomElement$4 } from './snk-form2.js';
3
3
  import { d as defineCustomElement$3 } from './snk-grid2.js';
4
4
  import { d as defineCustomElement$2 } from './snk-taskbar2.js';
5
5
 
6
- const snkCrudCss = ".sc-snk-crud-h{display:flex;height:100%;width:100%}";
6
+ const snkCrudCss = ".sc-snk-crud-h{display:flex;flex-direction:column;height:100%;width:100%}";
7
7
 
8
8
  const GRID_MODE = 0;
9
9
  const FORM_MODE = 1;
@@ -55,15 +55,14 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
55
55
  }
56
56
  }
57
57
  render() {
58
- return (h("ez-view-stack", { ref: (ref) => this._viewStack = ref }, h("stack-item", null, h("snk-grid", { configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), onActionClick: evt => this.executeAction(evt.detail), actionsList: this.actionsList }, h("slot", null))), h("stack-item", null, 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 (h("ez-view-stack", { ref: (ref) => this._viewStack = ref }, h("stack-item", null, h("snk-grid", { configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), onActionClick: evt => this.executeAction(evt.detail), actionsList: this.actionsList }, h("slot", { name: "SnkGridHeader" }), h("slot", { name: "SnkGridFooter" }))), h("stack-item", null, 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 this; }
61
61
  static get style() { return snkCrudCss; }
62
62
  }, [6, "snk-crud", {
63
63
  "configName": [1, "config-name"],
64
- "formTitle": [1, "form-title"],
65
64
  "actionsList": [16],
66
- "recordsValidator": [8, "records-validator"],
65
+ "recordsValidator": [16],
67
66
  "_dataUnit": [32],
68
67
  "_dataState": [32]
69
68
  }]);