@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.
- package/dist/cjs/SnkMessageBuilder-13239761.js +188 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/sankhyablocks.cjs.js +1 -1
- package/dist/cjs/snk-application.cjs.entry.js +18 -7
- package/dist/cjs/snk-crud.cjs.entry.js +2 -2
- package/dist/cjs/snk-data-unit.cjs.entry.js +107 -48
- package/dist/cjs/snk-form_2.cjs.entry.js +19 -12
- package/dist/cjs/snk-taskbar.cjs.entry.js +39 -20
- package/dist/cjs/{taskbar-elements-7f99f0c9.js → taskbar-elements-73d524e5.js} +1 -1
- package/dist/collection/components/snk-application/snk-application.js +75 -4
- package/dist/collection/components/snk-crud/snk-crud.css +1 -0
- package/dist/collection/components/snk-crud/snk-crud.js +10 -23
- package/dist/collection/components/snk-data-unit/snk-data-unit.js +108 -72
- package/dist/collection/components/snk-form/snk-form.js +20 -32
- package/dist/collection/components/snk-grid/snk-grid.js +4 -2
- package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +1 -1
- package/dist/collection/components/snk-taskbar/snk-taskbar.js +38 -19
- package/dist/collection/lib/http/data-fetcher/DataFetcher.js +8 -5
- package/dist/collection/lib/index.js +1 -0
- package/dist/collection/lib/message/SnkMessageBuilder.js +119 -0
- package/dist/collection/lib/message/resources/snk-data-unit.msg.js +22 -0
- package/dist/collection/lib/message/resources/snk-form.msg.js +10 -0
- package/dist/collection/lib/message/resources/snk-taskbar.msg.js +16 -0
- package/dist/components/SnkMessageBuilder.js +166 -0
- package/dist/components/snk-application2.js +20 -7
- package/dist/components/snk-crud.js +3 -4
- package/dist/components/snk-data-unit.js +108 -50
- package/dist/components/snk-form2.js +18 -12
- package/dist/components/snk-grid2.js +1 -1
- package/dist/components/snk-taskbar2.js +39 -20
- package/dist/esm/SnkMessageBuilder-3835f9d8.js +166 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/sankhyablocks.js +1 -1
- package/dist/esm/snk-application.entry.js +18 -7
- package/dist/esm/snk-crud.entry.js +2 -2
- package/dist/esm/snk-data-unit.entry.js +108 -49
- package/dist/esm/snk-form_2.entry.js +19 -12
- package/dist/esm/snk-taskbar.entry.js +39 -20
- package/dist/esm/{taskbar-elements-e0b8a285.js → taskbar-elements-6d01a640.js} +1 -1
- package/dist/sankhyablocks/p-2df33095.entry.js +1 -0
- package/dist/sankhyablocks/{p-c3d20542.entry.js → p-56a32417.entry.js} +1 -1
- package/dist/sankhyablocks/p-72bccbb6.js +1 -0
- package/dist/sankhyablocks/p-962d9bdd.entry.js +69 -0
- package/dist/sankhyablocks/p-9b427c4c.entry.js +1 -0
- package/dist/sankhyablocks/p-bab507ad.entry.js +1 -0
- package/dist/sankhyablocks/p-dd10a5e3.js +1 -0
- package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
- package/dist/types/components/snk-application/snk-application.d.ts +14 -4
- package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +8 -0
- package/dist/types/components.d.ts +15 -20
- package/dist/types/lib/http/data-fetcher/DataFetcher.d.ts +5 -6
- package/dist/types/lib/index.d.ts +1 -0
- package/dist/types/lib/message/SnkMessageBuilder.d.ts +42 -0
- package/dist/types/lib/message/resources/snk-data-unit.msg.d.ts +2 -0
- package/dist/types/lib/message/resources/snk-form.msg.d.ts +2 -0
- package/dist/types/lib/message/resources/snk-taskbar.msg.d.ts +2 -0
- package/package.json +2 -2
- package/dist/sankhyablocks/p-18fe0469.entry.js +0 -69
- package/dist/sankhyablocks/p-5b5afdbe.entry.js +0 -1
- package/dist/sankhyablocks/p-7fe9e5c2.entry.js +0 -1
- package/dist/sankhyablocks/p-8650ae26.entry.js +0 -1
- 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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
91
|
-
if (
|
|
92
|
-
|
|
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 =
|
|
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()}/
|
|
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
|
|
76
|
-
const
|
|
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,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 =
|
|
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()}/
|
|
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
|
|
6527
|
-
const
|
|
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,
|
|
7570
|
-
return ApplicationUtils.confirm(title, message, icon,
|
|
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",
|
|
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": [
|
|
65
|
+
"recordsValidator": [16],
|
|
67
66
|
"_dataUnit": [32],
|
|
68
67
|
"_dataState": [32]
|
|
69
68
|
}]);
|