@sankhyalabs/sankhyablocks 1.3.31-beta.1 → 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.
- package/dist/cjs/SnkMessageBuilder-13239761.js +188 -0
- package/dist/cjs/{index-1133bc2a.js → index-c6671817.js} +416 -9
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/sankhyablocks.cjs.js +2 -2
- package/dist/cjs/snk-application.cjs.entry.js +283 -108
- package/dist/cjs/snk-crud.cjs.entry.js +64 -0
- package/dist/cjs/snk-data-unit.cjs.entry.js +277 -0
- package/dist/cjs/snk-form_2.cjs.entry.js +177 -0
- package/dist/cjs/snk-pesquisa.cjs.entry.js +6 -3
- package/dist/cjs/snk-taskbar.cjs.entry.js +159 -0
- package/dist/cjs/taskbar-elements-73d524e5.js +70 -0
- package/dist/cjs/teste-pesquisa.cjs.entry.js +1 -1
- package/dist/collection/collection-manifest.json +5 -0
- package/dist/collection/components/snk-application/errorhandler/snk-error-handler.js +2 -2
- package/dist/collection/components/snk-application/snk-application.js +267 -63
- package/dist/collection/components/snk-crud/snk-crud.css +5 -0
- package/dist/collection/components/snk-crud/snk-crud.js +137 -0
- package/dist/collection/components/snk-data-unit/snk-data-unit.css +6 -0
- package/dist/collection/components/snk-data-unit/snk-data-unit.js +528 -0
- package/dist/collection/components/snk-form/snk-form.css +34 -0
- package/dist/collection/components/snk-form/snk-form.js +220 -0
- package/dist/collection/components/snk-grid/snk-grid.css +5 -0
- package/dist/collection/components/snk-grid/snk-grid.js +148 -0
- package/dist/collection/components/snk-pesquisa/snk-pesquisa.css +56 -13
- package/dist/collection/components/snk-pesquisa/snk-pesquisa.js +5 -1
- package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +65 -0
- package/dist/collection/components/snk-taskbar/snk-taskbar.css +3 -0
- package/dist/collection/components/snk-taskbar/snk-taskbar.js +271 -0
- package/dist/collection/lib/http/data-fetcher/DataFetcher.js +1 -1
- package/dist/collection/lib/http/data-fetcher/fetchers/dataunit-fetcher.js +52 -21
- package/dist/collection/lib/http/data-fetcher/fetchers/grid-config-fetcher.js +4 -3
- package/dist/collection/lib/http/data-fetcher/fetchers/pesquisa-fetcher.js +2 -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 +284 -107
- package/dist/components/snk-crud.d.ts +11 -0
- package/dist/components/snk-crud.js +101 -0
- package/dist/components/snk-data-unit.d.ts +11 -0
- package/dist/components/snk-data-unit.js +300 -0
- package/dist/components/snk-form.d.ts +11 -0
- package/dist/components/snk-form.js +6 -0
- package/dist/components/snk-form2.js +140 -0
- package/dist/components/snk-grid.d.ts +11 -0
- package/dist/components/snk-grid.js +6 -0
- package/dist/components/snk-grid2.js +91 -0
- package/dist/components/snk-pesquisa2.js +5 -2
- package/dist/components/snk-taskbar.d.ts +11 -0
- package/dist/components/snk-taskbar.js +6 -0
- package/dist/components/snk-taskbar2.js +240 -0
- package/dist/esm/SnkMessageBuilder-3835f9d8.js +166 -0
- package/dist/esm/{index-ffda6382.js → index-6a83ac96.js} +416 -10
- package/dist/esm/loader.js +2 -2
- package/dist/esm/sankhyablocks.js +2 -2
- package/dist/esm/snk-application.entry.js +283 -108
- package/dist/esm/snk-crud.entry.js +60 -0
- package/dist/esm/snk-data-unit.entry.js +273 -0
- package/dist/esm/snk-form_2.entry.js +172 -0
- package/dist/esm/snk-pesquisa.entry.js +6 -3
- package/dist/esm/snk-taskbar.entry.js +155 -0
- package/dist/esm/taskbar-elements-6d01a640.js +68 -0
- package/dist/esm/teste-pesquisa.entry.js +1 -1
- package/dist/sankhyablocks/p-4c7b32d6.entry.js +1 -0
- package/dist/sankhyablocks/p-5e1b7e51.entry.js +1 -0
- package/dist/sankhyablocks/p-72bccbb6.js +1 -0
- package/dist/sankhyablocks/p-8c74d163.entry.js +1 -0
- package/dist/sankhyablocks/p-bab507ad.entry.js +1 -0
- package/dist/sankhyablocks/p-cd1dc099.js +2 -0
- package/dist/sankhyablocks/{p-2a7b4cb3.entry.js → p-d25637c9.entry.js} +1 -1
- package/dist/sankhyablocks/p-dd10a5e3.js +1 -0
- package/dist/sankhyablocks/p-e942c604.entry.js +69 -0
- package/dist/sankhyablocks/p-f4d0394b.entry.js +1 -0
- package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
- package/dist/types/components/snk-application/snk-application.d.ts +109 -15
- package/dist/types/components/snk-taskbar/elements/taskbar-elements.d.ts +25 -0
- package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +53 -0
- package/dist/types/components.d.ts +372 -6
- package/dist/types/lib/http/data-fetcher/fetchers/dataunit-fetcher.d.ts +2 -0
- package/dist/types/lib/http/data-fetcher/fetchers/grid-config-fetcher.d.ts +3 -3
- 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 +5 -5
- package/react/components.d.ts +5 -0
- package/react/components.js +5 -0
- package/react/components.js.map +1 -1
- package/dist/sankhyablocks/p-d62412bb.entry.js +0 -1
- package/dist/sankhyablocks/p-e6e91d5f.entry.js +0 -69
- package/dist/sankhyablocks/p-edcb9d8e.js +0 -2
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
|
|
2
|
+
import { ApplicationContext } from '@sankhyalabs/core';
|
|
3
|
+
import { T as TaskbarElement, d as defineCustomElement$1 } from './snk-taskbar2.js';
|
|
4
|
+
|
|
5
|
+
const snkGridCss = ".sc-snk-grid-h{display:flex;height:100%;width:100%}";
|
|
6
|
+
|
|
7
|
+
const SnkGrid = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
8
|
+
constructor() {
|
|
9
|
+
super();
|
|
10
|
+
this.__registerHost();
|
|
11
|
+
this.actionClick = createEvent(this, "actionClick", 7);
|
|
12
|
+
this.gridDoubleClick = createEvent(this, "gridDoubleClick", 7);
|
|
13
|
+
}
|
|
14
|
+
getHeaderButtons() {
|
|
15
|
+
return this._dataState && this._dataState.selectedRecords.length > 0 ? "UPDATE,CLONE,REMOVE,MORE_OPTIONS,DIVIDER,REFRESH" : "REFRESH";
|
|
16
|
+
}
|
|
17
|
+
actionClickHandler(evt) {
|
|
18
|
+
if (evt.detail === TaskbarElement.CONFIG_GRID && this._grid) {
|
|
19
|
+
this._grid.openGridConfig();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
saveConfig(config) {
|
|
23
|
+
const snkApplication = ApplicationContext.getContextValue("__SNK__APPLICATION__");
|
|
24
|
+
if (snkApplication) {
|
|
25
|
+
snkApplication.saveGridConfig(config);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
componentWillLoad() {
|
|
29
|
+
const snkApplication = ApplicationContext.getContextValue("__SNK__APPLICATION__");
|
|
30
|
+
if (snkApplication) {
|
|
31
|
+
snkApplication.loadGridConfig(this.configName).then(cfg => {
|
|
32
|
+
this._gridConfig = cfg;
|
|
33
|
+
this._configLoaded = true;
|
|
34
|
+
});
|
|
35
|
+
//Forçamos a carga dos acessos pra aproveitar a request inicial.
|
|
36
|
+
snkApplication.getAllAccess();
|
|
37
|
+
}
|
|
38
|
+
let parent = this._element.parentElement;
|
|
39
|
+
while (parent) {
|
|
40
|
+
if (parent.tagName.toUpperCase() === "SNK-DATA-UNIT") {
|
|
41
|
+
this._snkDataUnit = parent;
|
|
42
|
+
this._dataUnit = this._snkDataUnit.dataUnit;
|
|
43
|
+
if (!this._dataUnit) {
|
|
44
|
+
this._snkDataUnit.addEventListener("dataUnitReady", (evt) => {
|
|
45
|
+
this._dataUnit = evt.detail;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
this._snkDataUnit.addEventListener("dataStateChange", (evt) => {
|
|
49
|
+
this._dataState = evt.detail;
|
|
50
|
+
});
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
parent = parent.parentElement;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
render() {
|
|
57
|
+
if (!this._configLoaded || !this._dataUnit) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return (h("div", { class: "ez-flex ez-flex--column ez-flex-item--auto ez-padding--large" }, h("div", { class: "ez-row ez-padding-bottom--medium ez-margin-bottom--medium" }, h("div", { class: "ez-col ez-col--sd-9 ez-col--tb-9 ez-align--bottom" }, h("slot", null)), h("div", { class: "ez-col ez-col--sd-3 ez-col--tb-3 ez-align--right" }, h("snk-taskbar", { onActionClick: evt => this.actionClickHandler(evt), key: "topTaskbar", dataUnit: this._dataUnit, buttons: "FORM_MODE,CONFIG_GRID,INSERT", primaryButton: "INSERT" }))), h("ez-grid", { ref: ref => this._grid = ref, dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: evt => { this.saveConfig(evt.detail); }, onEzDoubleClick: () => this.gridDoubleClick.emit() }, h("snk-taskbar", { dataUnit: this._dataUnit, buttons: this.getHeaderButtons(), slot: "leftButtons", actionsList: this.actionsList }))));
|
|
61
|
+
}
|
|
62
|
+
get _element() { return this; }
|
|
63
|
+
static get style() { return snkGridCss; }
|
|
64
|
+
}, [6, "snk-grid", {
|
|
65
|
+
"configName": [1, "config-name"],
|
|
66
|
+
"actionsList": [16],
|
|
67
|
+
"_dataUnit": [32],
|
|
68
|
+
"_configLoaded": [32],
|
|
69
|
+
"_dataState": [32],
|
|
70
|
+
"_gridConfig": [32]
|
|
71
|
+
}]);
|
|
72
|
+
function defineCustomElement() {
|
|
73
|
+
if (typeof customElements === "undefined") {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const components = ["snk-grid", "snk-taskbar"];
|
|
77
|
+
components.forEach(tagName => { switch (tagName) {
|
|
78
|
+
case "snk-grid":
|
|
79
|
+
if (!customElements.get(tagName)) {
|
|
80
|
+
customElements.define(tagName, SnkGrid);
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
case "snk-taskbar":
|
|
84
|
+
if (!customElements.get(tagName)) {
|
|
85
|
+
defineCustomElement$1();
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
} });
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export { SnkGrid as S, defineCustomElement as d };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
|
|
2
2
|
import { ObjectUtils, StringUtils } from '@sankhyalabs/core';
|
|
3
3
|
|
|
4
|
-
const snkPesquisaCss = ".sc-snk-pesquisa-h{--snk-pesquisa--font-size:var(--text--medium, 14px);--snk-pesquisa--font-family:var(--font-pattern, Arial);--snk-pesquisa--font-weight:var(--text-weight--medium, 400);--snk-pesquisa__records--color:var(--text--primary, #626e82);--snk-pesquisa__records--padding-vertical:var(--space--medium, 12px);--snk-pesquisa__content--padding-right:var(--space--small, 6px);--snk-pesquisa__content-scrollbar--background-color:var(--
|
|
4
|
+
const snkPesquisaCss = ".sc-snk-pesquisa-h{--snk-pesquisa--font-size:var(--text--medium, 14px);--snk-pesquisa--font-family:var(--font-pattern, Arial);--snk-pesquisa--font-weight:var(--text-weight--medium, 400);--snk-pesquisa__records--color:var(--text--primary, #626e82);--snk-pesquisa__records--padding-vertical:var(--space--medium, 12px);--snk-pesquisa__content--padding-right:var(--space--small, 6px);--snk-pesquisa__content-scrollbar--background-color-primary:var(--scrollbar--primary, #2B3A54);--snk-pesquisa__content-scrollbar--background-color-secondary:var(--scrollbar--secondary, #E5EAF0);--snk-pesquisa__content-scrollbar--border-radius:var(--border--radius-small, 6px);--snk-pesquisa__content-scrollbar--width:var(--space--medium, 12px);--snk-pesquisa__btn--color:var(--title--primary, #2B3A54);--snk-pesquisa__btn-disabled--color:var(--text--disable, #AFB6C0);--snk-pesquisa__btn-hover--color:var(--color--primary, #4e4e4e);max-height:100%;height:100%;display:flex;flex-direction:column;overflow-y:auto}.snk-pesquisa.sc-snk-pesquisa{display:flex;flex-direction:column;height:100%}.snk-pesquisa__input.sc-snk-pesquisa{display:flex;width:100%;box-sizing:border-box;padding-top:4px;padding-right:4px}.snk-pesquisa__input.sc-snk-pesquisa ez-icon.sc-snk-pesquisa{--ez-icon--color:inherit;font-weight:var(--text-weight--large, 600)}.snk-pesquisa__content.sc-snk-pesquisa{display:flex;flex-direction:column;height:100%;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--snk-pesquisa__content-scrollbar--background-color-primary) var(--snk-pesquisa__content-scrollbar--background-color-secondary);padding-right:var(--snk-pesquisa__content--padding-right)}.snk-pesquisa__content.sc-snk-pesquisa::-webkit-scrollbar-track{background-color:var(--snk-pesquisa__content-scrollbar--background-color-secondary);border-radius:var(--snk-pesquisa__content-scrollbar--border-radius)}.snk-pesquisa__content.sc-snk-pesquisa::-webkit-scrollbar-thumb{background-color:var(--snk-pesquisa__content-scrollbar--background-color-primary);border-radius:var(--snk-pesquisa__content-scrollbar--border-radius)}.snk-pesquisa__content.sc-snk-pesquisa::-webkit-scrollbar{background-color:var(--snk-pesquisa__content-scrollbar--background-color-secondary);width:var(--snk-pesquisa__content-scrollbar--width);max-width:var(--snk-pesquisa__content-scrollbar--width);min-width:var(--snk-pesquisa__content-scrollbar--width)}.snk-pesquisa__records.sc-snk-pesquisa{font-family:var(--snk-pesquisa--font-family);font-weight:var(--snk-pesquisa--font-weight);font-size:var(--snk-pesquisa--font-size);color:var(--snk-pesquisa__records--color);padding-bottom:var(--snk-pesquisa__records--padding-vertical);padding-top:var(--snk-pesquisa__records--padding-vertical)}.snk-pesquisa__btn.sc-snk-pesquisa{outline:none;border:none;background:none;cursor:pointer;color:var(--snk-pesquisa__btn--color)}.snk-pesquisa__btn.sc-snk-pesquisa:disabled{cursor:unset;color:var(--snk-pesquisa__btn-disabled--color)}.snk-pesquisa__btn.sc-snk-pesquisa:disabled:hover{cursor:unset;color:var(--snk-pesquisa__btn-disabled--color)}.snk-pesquisa__btn.sc-snk-pesquisa:hover{color:var(--snk-pesquisa__btn-hover--color)}";
|
|
5
5
|
|
|
6
6
|
const SnkPesquisa = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
7
7
|
constructor() {
|
|
@@ -296,7 +296,10 @@ const SnkPesquisa = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
|
296
296
|
: 'Os resultados de sua pesquisa aparecerão aqui...';
|
|
297
297
|
}
|
|
298
298
|
render() {
|
|
299
|
-
|
|
299
|
+
var _a;
|
|
300
|
+
return (h(Host, null, h("div", { class: "snk-pesquisa" }, h("div", { class: "snk-pesquisa__input" }, h("ez-text-input", { label: "Buscar", class: "ez-margin-right--medium", canShowError: false, ref: (ref) => this._textInput = ref, onEzChange: (event) => this.onChangeValue(event), value: this.argument }, h("ez-icon", { slot: "leftIcon", iconName: "search" }), this.argument && ((_a = this._textInput) === null || _a === void 0 ? void 0 : _a.value)
|
|
301
|
+
? h("button", { slot: "rightIcon", class: "snk-pesquisa__btn", onClick: () => this.clearSearch() }, h("ez-icon", { iconName: "close" }))
|
|
302
|
+
: undefined), h("ez-button", { class: "ez-button--primary", label: "Pesquisar", onClick: () => this.onClickSearch() })), h("label", { class: "snk-pesquisa__records" }, this.getMessageView()), h("div", { class: "snk-pesquisa__content" }, this._itemList && this._itemList.map((item) => {
|
|
300
303
|
return (h("ez-card-item", { onEzClick: (event) => this.createOption(event.detail), item: item }));
|
|
301
304
|
})))));
|
|
302
305
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../types/components";
|
|
2
|
+
|
|
3
|
+
interface SnkTaskbar extends Components.SnkTaskbar, HTMLElement {}
|
|
4
|
+
export const SnkTaskbar: {
|
|
5
|
+
prototype: SnkTaskbar;
|
|
6
|
+
new (): SnkTaskbar;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { h, proxyCustomElement, HTMLElement, createEvent, Host } from '@stencil/core/internal/client';
|
|
2
|
+
import { ApplicationContext } from '@sankhyalabs/core';
|
|
3
|
+
|
|
4
|
+
var TaskbarElement;
|
|
5
|
+
(function (TaskbarElement) {
|
|
6
|
+
TaskbarElement["PREVIOUS"] = "PREVIOUS";
|
|
7
|
+
TaskbarElement["NEXT"] = "NEXT";
|
|
8
|
+
TaskbarElement["REFRESH"] = "REFRESH";
|
|
9
|
+
TaskbarElement["UPDATE"] = "UPDATE";
|
|
10
|
+
TaskbarElement["CLONE"] = "CLONE";
|
|
11
|
+
TaskbarElement["REMOVE"] = "REMOVE";
|
|
12
|
+
TaskbarElement["INSERT"] = "INSERT";
|
|
13
|
+
TaskbarElement["CANCEL"] = "CANCEL";
|
|
14
|
+
TaskbarElement["SAVE"] = "SAVE";
|
|
15
|
+
TaskbarElement["GRID_MODE"] = "GRID_MODE";
|
|
16
|
+
TaskbarElement["FORM_MODE"] = "FORM_MODE";
|
|
17
|
+
TaskbarElement["CONFIG_GRID"] = "CONFIG_GRID";
|
|
18
|
+
TaskbarElement["MORE_OPTIONS"] = "MORE_OPTIONS";
|
|
19
|
+
TaskbarElement["DIVIDER"] = "DIVIDER";
|
|
20
|
+
})(TaskbarElement || (TaskbarElement = {}));
|
|
21
|
+
var AuthorizationElements;
|
|
22
|
+
(function (AuthorizationElements) {
|
|
23
|
+
AuthorizationElements["UPDATE"] = "UPDATE";
|
|
24
|
+
AuthorizationElements["CLONE"] = "CLONE";
|
|
25
|
+
AuthorizationElements["REMOVE"] = "REMOVE";
|
|
26
|
+
AuthorizationElements["INSERT"] = "INSERT";
|
|
27
|
+
AuthorizationElements["CONFIG_GRID"] = "CONFIG_GRID";
|
|
28
|
+
})(AuthorizationElements || (AuthorizationElements = {}));
|
|
29
|
+
const buildElem = (element, className, getTitle, action, isEnabled, actions) => {
|
|
30
|
+
switch (element) {
|
|
31
|
+
case TaskbarElement.PREVIOUS:
|
|
32
|
+
return iconButton("chevron-left", element, className, getTitle, action, isEnabled);
|
|
33
|
+
case TaskbarElement.NEXT:
|
|
34
|
+
return iconButton("chevron-right", element, className, getTitle, action, isEnabled);
|
|
35
|
+
case TaskbarElement.REFRESH:
|
|
36
|
+
return iconButton("sync", element, className, getTitle, action, isEnabled);
|
|
37
|
+
case TaskbarElement.UPDATE:
|
|
38
|
+
return iconButton("edit", element, className, getTitle, action, isEnabled);
|
|
39
|
+
case TaskbarElement.CLONE:
|
|
40
|
+
return iconButton("copy", element, className, getTitle, action, isEnabled);
|
|
41
|
+
case TaskbarElement.REMOVE:
|
|
42
|
+
return iconButton("delete", element, className, getTitle, action, isEnabled);
|
|
43
|
+
case TaskbarElement.INSERT:
|
|
44
|
+
return iconTextButton("plus", element, className, getTitle, action, isEnabled);
|
|
45
|
+
case TaskbarElement.CANCEL:
|
|
46
|
+
return h("ez-button", { title: getTitle(element), label: getTitle(element), size: "small", enabled: isEnabled(element), onClick: () => action(element) });
|
|
47
|
+
case TaskbarElement.SAVE:
|
|
48
|
+
return iconTextButton("save", element, className, getTitle, action, isEnabled);
|
|
49
|
+
case TaskbarElement.GRID_MODE:
|
|
50
|
+
return iconButton("table", element, className, getTitle, action, isEnabled);
|
|
51
|
+
case TaskbarElement.FORM_MODE:
|
|
52
|
+
return iconButton("list", element, className, getTitle, action, isEnabled);
|
|
53
|
+
case TaskbarElement.CONFIG_GRID:
|
|
54
|
+
return iconButton("settings-inverted", element, className, getTitle, action, isEnabled);
|
|
55
|
+
case TaskbarElement.MORE_OPTIONS:
|
|
56
|
+
return actions && actions.length > 0 ? h("ez-actions-button", { title: getTitle(element), size: "small", class: className, enabled: isEnabled(element), onEzAction: (evt) => action(evt.detail.value), actions: actions }) : undefined;
|
|
57
|
+
case TaskbarElement.DIVIDER:
|
|
58
|
+
return h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-horizontal--medium" });
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
function iconButton(iconName, element, className, getTitle, action, isEnabled) {
|
|
62
|
+
return h("ez-button", { key: iconName, title: getTitle(element), mode: "icon", size: "small", class: className, iconName: iconName, enabled: isEnabled(element), onClick: () => action(element) });
|
|
63
|
+
}
|
|
64
|
+
function iconTextButton(iconName, element, className, getTitle, action, isEnabled) {
|
|
65
|
+
return h("ez-button", { key: iconName, title: getTitle(element), label: getTitle(element), size: "small", class: className, enabled: isEnabled(element), onClick: () => action(element) },
|
|
66
|
+
h("ez-icon", { class: "ez-padding-right--small", slot: "leftIcon", iconName: iconName }));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const snkTaskbarCss = ".sc-snk-taskbar-h{display:flex}";
|
|
70
|
+
|
|
71
|
+
const SnkTaskbar = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
72
|
+
constructor() {
|
|
73
|
+
super();
|
|
74
|
+
this.__registerHost();
|
|
75
|
+
this.actionClick = createEvent(this, "actionClick", 7);
|
|
76
|
+
}
|
|
77
|
+
observeButtons() {
|
|
78
|
+
this._definitions = undefined;
|
|
79
|
+
}
|
|
80
|
+
// Internal methods
|
|
81
|
+
elementsFromString(strButtons) {
|
|
82
|
+
const elements = [];
|
|
83
|
+
if (strButtons) {
|
|
84
|
+
strButtons.split(",").forEach(buttonName => {
|
|
85
|
+
buttonName = buttonName.trim();
|
|
86
|
+
if (this.isAllowed(buttonName)) {
|
|
87
|
+
elements.push(buttonName.trim());
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return elements;
|
|
92
|
+
}
|
|
93
|
+
isAllowed(buttonName) {
|
|
94
|
+
if (AuthorizationElements[buttonName]) {
|
|
95
|
+
return this._permissions ? this._permissions.isSup || this._permissions[buttonName] : false;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
|
|
101
|
+
* através de um pequeno modulo na estrutura da aplicação:
|
|
102
|
+
* - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
|
|
103
|
+
* Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-taskbar.msg.ts"
|
|
104
|
+
*/
|
|
105
|
+
getTitle(element) {
|
|
106
|
+
switch (element) {
|
|
107
|
+
case TaskbarElement.UPDATE:
|
|
108
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleUpdate", {});
|
|
109
|
+
case TaskbarElement.PREVIOUS:
|
|
110
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titlePrevious", {});
|
|
111
|
+
case TaskbarElement.NEXT:
|
|
112
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleNext", {});
|
|
113
|
+
case TaskbarElement.REFRESH:
|
|
114
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleRefresh", {});
|
|
115
|
+
case TaskbarElement.CLONE:
|
|
116
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleClone", {});
|
|
117
|
+
case TaskbarElement.REMOVE:
|
|
118
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleRemove", {});
|
|
119
|
+
case TaskbarElement.MORE_OPTIONS:
|
|
120
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleMoreOptions", {});
|
|
121
|
+
case TaskbarElement.INSERT:
|
|
122
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleInsert", {});
|
|
123
|
+
case TaskbarElement.CANCEL:
|
|
124
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleCancel", {});
|
|
125
|
+
case TaskbarElement.SAVE:
|
|
126
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleSave", {});
|
|
127
|
+
case TaskbarElement.GRID_MODE:
|
|
128
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleGridMode", {});
|
|
129
|
+
case TaskbarElement.CONFIG_GRID:
|
|
130
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleConfigGrid", {});
|
|
131
|
+
case TaskbarElement.FORM_MODE:
|
|
132
|
+
return this._application.messagesBuilder.getMessage("snkTaskbar.titleFormMode", {});
|
|
133
|
+
}
|
|
134
|
+
return "";
|
|
135
|
+
}
|
|
136
|
+
elementClick(elem) {
|
|
137
|
+
if (this.dataUnit) {
|
|
138
|
+
switch (elem) {
|
|
139
|
+
case TaskbarElement.PREVIOUS:
|
|
140
|
+
this.dataUnit.previousRecord();
|
|
141
|
+
break;
|
|
142
|
+
case TaskbarElement.NEXT:
|
|
143
|
+
this.dataUnit.nextRecord();
|
|
144
|
+
break;
|
|
145
|
+
case TaskbarElement.REFRESH:
|
|
146
|
+
this.dataUnit.loadData();
|
|
147
|
+
break;
|
|
148
|
+
case TaskbarElement.CLONE:
|
|
149
|
+
this.dataUnit.copySelected();
|
|
150
|
+
break;
|
|
151
|
+
case TaskbarElement.REMOVE:
|
|
152
|
+
this.dataUnit.removeSelectedRecords();
|
|
153
|
+
break;
|
|
154
|
+
case TaskbarElement.INSERT:
|
|
155
|
+
this.dataUnit.addRecord();
|
|
156
|
+
break;
|
|
157
|
+
case TaskbarElement.CANCEL:
|
|
158
|
+
this.dataUnit.cancelEdition();
|
|
159
|
+
break;
|
|
160
|
+
case TaskbarElement.SAVE:
|
|
161
|
+
this.dataUnit.saveData();
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
this.actionClick.emit(elem);
|
|
166
|
+
}
|
|
167
|
+
isEnabled(elem) {
|
|
168
|
+
return !(this.disabledButtons && this.disabledButtons.includes(elem));
|
|
169
|
+
}
|
|
170
|
+
getElement(index, def) {
|
|
171
|
+
let element;
|
|
172
|
+
let className = def === this.primaryButton ? "ez-button--primary " : "";
|
|
173
|
+
if (index > 1) {
|
|
174
|
+
className += "ez-padding-left--medium";
|
|
175
|
+
}
|
|
176
|
+
element = buildElem(def, className, elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem), this.actionsList);
|
|
177
|
+
return element;
|
|
178
|
+
}
|
|
179
|
+
// Lifecycle
|
|
180
|
+
componentWillLoad() {
|
|
181
|
+
this._application = ApplicationContext.getContextValue("__SNK__APPLICATION__");
|
|
182
|
+
if (this._application) {
|
|
183
|
+
this._application.getAllAccess().then(access => this._permissions = access);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
this._permissions = {};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
componentWillRender() {
|
|
190
|
+
if (this._definitions == undefined && this._permissions) {
|
|
191
|
+
this._definitions = this.elementsFromString(this.buttons);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
render() {
|
|
195
|
+
if (this._definitions === undefined) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
let index = 0;
|
|
199
|
+
return (h(Host, null, this._definitions.map((btn) => {
|
|
200
|
+
if (btn === TaskbarElement.DIVIDER) {
|
|
201
|
+
index = 0;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
index++;
|
|
205
|
+
}
|
|
206
|
+
if (TaskbarElement[btn]) {
|
|
207
|
+
return this.getElement(index, TaskbarElement[btn]);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
return h("slot", { name: btn });
|
|
211
|
+
}
|
|
212
|
+
})));
|
|
213
|
+
}
|
|
214
|
+
static get watchers() { return {
|
|
215
|
+
"buttons": ["observeButtons"]
|
|
216
|
+
}; }
|
|
217
|
+
static get style() { return snkTaskbarCss; }
|
|
218
|
+
}, [6, "snk-taskbar", {
|
|
219
|
+
"buttons": [1],
|
|
220
|
+
"actionsList": [16],
|
|
221
|
+
"primaryButton": [1, "primary-button"],
|
|
222
|
+
"disabledButtons": [16],
|
|
223
|
+
"dataUnit": [16],
|
|
224
|
+
"_permissions": [32]
|
|
225
|
+
}]);
|
|
226
|
+
function defineCustomElement() {
|
|
227
|
+
if (typeof customElements === "undefined") {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const components = ["snk-taskbar"];
|
|
231
|
+
components.forEach(tagName => { switch (tagName) {
|
|
232
|
+
case "snk-taskbar":
|
|
233
|
+
if (!customElements.get(tagName)) {
|
|
234
|
+
customElements.define(tagName, SnkTaskbar);
|
|
235
|
+
}
|
|
236
|
+
break;
|
|
237
|
+
} });
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export { SnkTaskbar as S, TaskbarElement as T, defineCustomElement as d };
|
|
@@ -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 };
|