@sankhyalabs/ezui 2.12.0 → 2.14.0-develop.1
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/{ez-tree.cjs.entry.js → ez-filter-input_3.cjs.entry.js} +103 -16
- package/dist/cjs/ez-form.cjs.entry.js +325 -184
- package/dist/cjs/ez-guide-navigator.cjs.entry.js +339 -0
- package/dist/cjs/ezui.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/ez-form/ez-form.css +1 -1
- package/dist/collection/components/ez-form/ez-form.js +20 -16
- package/dist/collection/components/ez-form/fieldbuilder/FieldBuilder.js +48 -0
- package/dist/collection/components/{ez-form-view/fieldbuilder/templates → ez-form/fieldbuilder/tpl}/CheckBox.tpl.js +4 -4
- package/dist/collection/components/{ez-form-view/fieldbuilder/templates → ez-form/fieldbuilder/tpl}/ComboBox.tpl.js +2 -2
- package/dist/collection/components/{ez-form-view/fieldbuilder/templates → ez-form/fieldbuilder/tpl}/DateInput.tpl.js +1 -1
- package/dist/collection/components/{ez-form-view/fieldbuilder/templates → ez-form/fieldbuilder/tpl}/NumberInput.tpl.js +3 -3
- package/dist/collection/components/ez-form/structure/FormItem.js +11 -0
- package/dist/collection/components/ez-form/{FormMetadata.js → structure/FormMetadata.js} +53 -38
- package/dist/collection/components/ez-form/structure/FormSheet.js +6 -0
- package/dist/collection/components/ez-guide-navigator/Guide.js +200 -0
- package/dist/collection/components/ez-guide-navigator/ez-guide-navigator.css +53 -0
- package/dist/collection/components/ez-guide-navigator/ez-guide-navigator.js +230 -0
- package/dist/collection/components/ez-tree/ez-tree.js +5 -5
- package/dist/collection/components/ez-tree/subcomponents/TreeItem.js +1 -1
- package/dist/collection/components/ez-tree/types/Tree.js +0 -11
- package/dist/custom-elements/index.d.ts +6 -6
- package/dist/custom-elements/index.js +667 -337
- package/dist/esm/{ez-tree.entry.js → ez-filter-input_3.entry.js} +103 -18
- package/dist/esm/ez-form.entry.js +327 -186
- package/dist/esm/ez-guide-navigator.entry.js +335 -0
- package/dist/esm/ezui.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/ezui/ezui.esm.js +1 -1
- package/dist/ezui/p-6500a260.entry.js +1 -0
- package/dist/ezui/p-6c45dc64.entry.js +1 -0
- package/dist/ezui/p-fa2f4ea5.entry.js +1 -0
- package/dist/types/components/ez-form/DataBinder.d.ts +1 -1
- package/dist/types/components/ez-form/ez-form.d.ts +3 -4
- package/dist/types/components/ez-form/fieldbuilder/FieldBuilder.d.ts +2 -0
- package/dist/types/components/ez-form/fieldbuilder/tpl/CheckBox.tpl.d.ts +3 -0
- package/dist/types/components/ez-form/fieldbuilder/tpl/ComboBox.tpl.d.ts +6 -0
- package/dist/types/components/ez-form/fieldbuilder/tpl/DateInput.tpl.d.ts +15 -0
- package/dist/types/components/ez-form/fieldbuilder/tpl/FileInput.tpl.d.ts +5 -0
- package/dist/types/components/ez-form/fieldbuilder/tpl/NumberInput.tpl.d.ts +7 -0
- package/dist/types/components/ez-form/fieldbuilder/tpl/SearchInput.tpl.d.ts +6 -0
- package/dist/types/components/ez-form/fieldbuilder/tpl/TextArea.tpl.d.ts +5 -0
- package/dist/types/components/ez-form/fieldbuilder/tpl/TextInput.tpl.d.ts +5 -0
- package/dist/types/components/ez-form/store/form.slice.d.ts +2 -2
- package/dist/types/components/ez-form/structure/FormItem.d.ts +9 -0
- package/dist/types/components/ez-form/{FormMetadata.d.ts → structure/FormMetadata.d.ts} +5 -2
- package/dist/types/components/ez-form/structure/FormSheet.d.ts +10 -0
- package/dist/types/components/ez-guide-navigator/Guide.d.ts +69 -0
- package/dist/types/components/ez-tree/types/Tree.d.ts +0 -1
- package/dist/types/components.d.ts +41 -26
- package/dist/types/interfaces/ez-form/IFieldMetadata.d.ts +6 -0
- package/dist/types/interfaces/ez-form/IFieldSetMetadata.d.ts +5 -0
- package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/IFormSheetMetadata.d.ts +3 -2
- package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/IRecordValidator.d.ts +1 -1
- package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/index.d.ts +2 -0
- package/package.json +2 -2
- package/react/components.d.ts +1 -1
- package/react/components.js +1 -1
- package/react/components.js.map +1 -1
- package/dist/cjs/ez-filter-input.cjs.entry.js +0 -81
- package/dist/cjs/ez-form-view.cjs.entry.js +0 -140
- package/dist/cjs/ez-sidebar-button.cjs.entry.js +0 -31
- package/dist/collection/components/ez-form-view/ez-form-view.css +0 -6
- package/dist/collection/components/ez-form-view/ez-form-view.js +0 -71
- package/dist/collection/components/ez-form-view/fieldbuilder/FieldBuilder.js +0 -26
- package/dist/esm/ez-filter-input.entry.js +0 -77
- package/dist/esm/ez-form-view.entry.js +0 -136
- package/dist/esm/ez-sidebar-button.entry.js +0 -27
- package/dist/ezui/p-36ed5c45.entry.js +0 -1
- package/dist/ezui/p-7799666d.entry.js +0 -1
- package/dist/ezui/p-81897c04.entry.js +0 -1
- package/dist/ezui/p-97d2d2f6.entry.js +0 -1
- package/dist/ezui/p-ba03ac61.entry.js +0 -1
- package/dist/types/components/ez-form-view/fieldbuilder/FieldBuilder.d.ts +0 -2
- package/dist/types/components/ez-form-view/fieldbuilder/templates/CheckBox.tpl.d.ts +0 -3
- package/dist/types/components/ez-form-view/fieldbuilder/templates/ComboBox.tpl.d.ts +0 -2
- package/dist/types/components/ez-form-view/fieldbuilder/templates/DateInput.tpl.d.ts +0 -4
- package/dist/types/components/ez-form-view/fieldbuilder/templates/FileInput.tpl.d.ts +0 -2
- package/dist/types/components/ez-form-view/fieldbuilder/templates/NumberInput.tpl.d.ts +0 -3
- package/dist/types/components/ez-form-view/fieldbuilder/templates/SearchInput.tpl.d.ts +0 -2
- package/dist/types/components/ez-form-view/fieldbuilder/templates/TextArea.tpl.d.ts +0 -2
- package/dist/types/components/ez-form-view/fieldbuilder/templates/TextInput.tpl.d.ts +0 -2
- package/dist/types/components/ez-form-view/interfaces/IFormViewField.d.ts +0 -10
- package/dist/types/components/ez-form-view/interfaces/index.d.ts +0 -1
- /package/dist/collection/components/{ez-form-view/fieldbuilder/templates → ez-form/fieldbuilder/tpl}/FileInput.tpl.js +0 -0
- /package/dist/collection/components/{ez-form-view/fieldbuilder/templates → ez-form/fieldbuilder/tpl}/SearchInput.tpl.js +0 -0
- /package/dist/collection/components/{ez-form-view/fieldbuilder/templates → ez-form/fieldbuilder/tpl}/TextArea.tpl.js +0 -0
- /package/dist/collection/components/{ez-form-view/fieldbuilder/templates → ez-form/fieldbuilder/tpl}/TextInput.tpl.js +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/IDefaultConfig.js +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/IFieldConfig.js +0 -0
- /package/dist/collection/{components/ez-form-view/interfaces/IFormViewField.js → interfaces/ez-form/IFieldMetadata.js} +0 -0
- /package/dist/collection/{components/ez-form-view/interfaces/index.js → interfaces/ez-form/IFieldSetMetadata.js} +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/IFormConfig.js +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/IFormSheetMetadata.js +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/IInvalidField.js +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/IRecordValidator.js +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/ITabConfig.js +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/IValidationResult.js +0 -0
- /package/dist/collection/{components/ez-form/interfaces → interfaces/ez-form}/index.js +0 -0
- /package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/IDefaultConfig.d.ts +0 -0
- /package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/IFieldConfig.d.ts +0 -0
- /package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/IFormConfig.d.ts +0 -0
- /package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/IInvalidField.d.ts +0 -0
- /package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/ITabConfig.d.ts +0 -0
- /package/dist/types/{components/ez-form/interfaces → interfaces/ez-form}/IValidationResult.d.ts +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
import { CheckMode } from "../../../ez-check/CheckMode";
|
|
3
|
-
export const buildSwitch = (
|
|
4
|
-
return buildField(
|
|
3
|
+
export const buildSwitch = (fieldConfig) => {
|
|
4
|
+
return buildField(fieldConfig.name, fieldConfig.label, fieldConfig.readOnly, true);
|
|
5
5
|
};
|
|
6
|
-
export const buildCheckBox = (
|
|
7
|
-
return buildField(
|
|
6
|
+
export const buildCheckBox = (fieldConfig) => {
|
|
7
|
+
return buildField(fieldConfig.name, fieldConfig.label, fieldConfig.readOnly, false);
|
|
8
8
|
};
|
|
9
9
|
function buildField(fieldName, fieldLabel, readOnly, switchMode = false) {
|
|
10
10
|
return (h("div", { class: "ez-col ez-col--sd-12 ez-col--tb-3 ez-align--middle ez-padding-horizontal--small ez-padding-bottom--large" },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
-
export const buildComboBox = ({ name, label, readOnly, required,
|
|
3
|
-
const prop =
|
|
2
|
+
export const buildComboBox = ({ name, label, readOnly, required }, properties) => {
|
|
3
|
+
const prop = properties === null || properties === void 0 ? void 0 : properties.options;
|
|
4
4
|
let options;
|
|
5
5
|
if (typeof prop === "string") {
|
|
6
6
|
const parsed = JSON.parse(prop);
|
|
@@ -7,7 +7,7 @@ export const buildTime = ({ name, label, readOnly }) => {
|
|
|
7
7
|
return (h("div", { class: "ez-col ez-col--sd-12 ez-col--tb-3 ez-padding-horizontal--small" },
|
|
8
8
|
h("ez-time-input", { enabled: !readOnly, label: label, "data-field-name": name, key: name })));
|
|
9
9
|
};
|
|
10
|
-
export const
|
|
10
|
+
export const buildTimeDate = ({ name, label, readOnly }) => {
|
|
11
11
|
return (h("div", { class: "ez-col ez-col--sd-12 ez-col--tb-3 ez-padding-horizontal--small" },
|
|
12
12
|
h("ez-date-time-input", { enabled: !readOnly, label: label, "data-field-name": name, key: name })));
|
|
13
13
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
-
export const buildDecimal = ({ name, label, readOnly,
|
|
3
|
-
const precision = Number((
|
|
4
|
-
const prettyPrecision = Number((
|
|
2
|
+
export const buildDecimal = ({ name, label, readOnly }, properties) => {
|
|
3
|
+
const precision = Number((properties === null || properties === void 0 ? void 0 : properties.precision) || 2);
|
|
4
|
+
const prettyPrecision = Number((properties === null || properties === void 0 ? void 0 : properties.prettyPrecision) || precision);
|
|
5
5
|
return buildNumeric(name, label, readOnly, precision, prettyPrecision);
|
|
6
6
|
};
|
|
7
7
|
export const buildInteger = ({ name, label, readOnly }) => {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { h } from "@stencil/core";
|
|
2
|
+
import { buildField } from "../fieldbuilder/FieldBuilder";
|
|
3
|
+
export const FormItem = ({ source }) => {
|
|
4
|
+
if ("items" in source) {
|
|
5
|
+
const fieldSet = source;
|
|
6
|
+
return h("ez-collapsible-box", { label: source.label, "header-size": "large", key: source.label }, fieldSet.items.map(fi => buildField(fi)));
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
return buildField(source);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { UserInterface } from "@sankhyalabs/core";
|
|
2
1
|
export class FormMetadata {
|
|
3
2
|
constructor() {
|
|
4
3
|
this._sheets = new Map();
|
|
@@ -28,20 +27,40 @@ export class FormMetadata {
|
|
|
28
27
|
return this._defaultValues;
|
|
29
28
|
}
|
|
30
29
|
}
|
|
30
|
+
export const isRequiredField = (descriptor, config) => {
|
|
31
|
+
if (descriptor.required) {
|
|
32
|
+
//Se for required pelo descritor não olha pra configuração.
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return config === null || config === void 0 ? void 0 : config.required;
|
|
36
|
+
};
|
|
37
|
+
export const isReadOnlyField = (descriptor, config) => {
|
|
38
|
+
if (descriptor.readOnly) {
|
|
39
|
+
//Se for readOnly pelo descritor não olha pra configuração.
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return config === null || config === void 0 ? void 0 : config.readOnly;
|
|
43
|
+
};
|
|
31
44
|
export const buildFromDataUnit = (dataUnit) => {
|
|
45
|
+
var _a, _b;
|
|
32
46
|
const unitMD = dataUnit.metadata;
|
|
33
47
|
const metadata = new FormMetadata();
|
|
34
48
|
if (unitMD) {
|
|
35
|
-
const visibleFields = (unitMD.fields ||
|
|
36
|
-
const
|
|
49
|
+
const visibleFields = (_a = unitMD.fields) === null || _a === void 0 ? void 0 : _a.filter(descriptor => descriptor.visible !== false);
|
|
50
|
+
const items = new Map();
|
|
51
|
+
(_b = unitMD === null || unitMD === void 0 ? void 0 : unitMD.fields) === null || _b === void 0 ? void 0 : _b.forEach((descriptor) => {
|
|
52
|
+
if (descriptor.visible !== false) {
|
|
53
|
+
resolveFieldGroup(items, null, descriptor);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
37
56
|
let defaultValues = {};
|
|
38
57
|
visibleFields
|
|
39
58
|
.filter(descriptor => descriptor.defaultValue)
|
|
40
59
|
.forEach((descriptor) => defaultValues[descriptor.name] = descriptor.defaultValue);
|
|
41
60
|
metadata.addSheet({
|
|
42
|
-
name: unitMD.name,
|
|
43
61
|
label: unitMD.label,
|
|
44
|
-
|
|
62
|
+
name: unitMD.name,
|
|
63
|
+
items: Array.from(items.values()),
|
|
45
64
|
requiredFields: visibleFields
|
|
46
65
|
.filter(descriptor => descriptor.required)
|
|
47
66
|
.map(descriptor => descriptor.name),
|
|
@@ -53,6 +72,29 @@ export const buildFromDataUnit = (dataUnit) => {
|
|
|
53
72
|
}
|
|
54
73
|
return metadata;
|
|
55
74
|
};
|
|
75
|
+
function getTabConfig(tab, sheets) {
|
|
76
|
+
const tabConfig = (typeof tab === "string" ? Array.from(sheets.keys()).find(t => t.label === tab) : tab);
|
|
77
|
+
return tabConfig || { label: tab, visible: true };
|
|
78
|
+
}
|
|
79
|
+
function sortTabs(a, b) {
|
|
80
|
+
return a[0].label == '__main' ? -1 : (a[0].order || 10000) - (b[0].order || 10000);
|
|
81
|
+
}
|
|
82
|
+
function resolveFieldGroup(items, field, descriptor) {
|
|
83
|
+
const fieldMD = { config: field, descriptor: descriptor };
|
|
84
|
+
let group = (field === null || field === void 0 ? void 0 : field.group) || descriptor.group;
|
|
85
|
+
if (group) {
|
|
86
|
+
const key = `group::${group}`;
|
|
87
|
+
if (!items.has(key)) {
|
|
88
|
+
items.set(key, { label: group, items: [fieldMD] });
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
items.get(key).items.push(fieldMD);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
items.set((field === null || field === void 0 ? void 0 : field.name) || descriptor.name, fieldMD);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
56
98
|
export const buildFromConfig = (config, dataUnit) => {
|
|
57
99
|
var _a, _b;
|
|
58
100
|
const sheets = new Map();
|
|
@@ -75,11 +117,10 @@ export const buildFromConfig = (config, dataUnit) => {
|
|
|
75
117
|
const descriptor = dataUnit.getField(field.name);
|
|
76
118
|
if (descriptor && tabConfig.visible) {
|
|
77
119
|
if (!sheets.has(tabConfig)) {
|
|
78
|
-
sheets.set(tabConfig,
|
|
120
|
+
sheets.set(tabConfig, new Map());
|
|
79
121
|
}
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
if (formField.required) {
|
|
122
|
+
const tabItens = sheets.get(tabConfig);
|
|
123
|
+
if (isRequiredField(descriptor, field)) {
|
|
83
124
|
requiredFields.push(field.name);
|
|
84
125
|
}
|
|
85
126
|
const cleanOnCopy = field.cleanOnCopy == undefined ? (_a = descriptor.properties) === null || _a === void 0 ? void 0 : _a.cleanOnCopy : field.cleanOnCopy;
|
|
@@ -90,17 +131,18 @@ export const buildFromConfig = (config, dataUnit) => {
|
|
|
90
131
|
if (defaultValue) {
|
|
91
132
|
defaultValues[field.name] = field.defaultValue;
|
|
92
133
|
}
|
|
134
|
+
resolveFieldGroup(tabItens, field, descriptor);
|
|
93
135
|
}
|
|
94
136
|
}
|
|
95
137
|
});
|
|
96
138
|
const metadata = new FormMetadata();
|
|
97
139
|
Array.from(sheets.entries())
|
|
98
140
|
.sort(sortTabs)
|
|
99
|
-
.forEach(([key,
|
|
141
|
+
.forEach(([key, value]) => {
|
|
100
142
|
metadata.addSheet({
|
|
101
143
|
label: (key.label === "__main") ? "Principal" : key.label,
|
|
102
144
|
name: key.label,
|
|
103
|
-
|
|
145
|
+
items: Array.from(value.values()),
|
|
104
146
|
requiredFields,
|
|
105
147
|
cleanOnCopyFields,
|
|
106
148
|
defaultValues
|
|
@@ -108,30 +150,3 @@ export const buildFromConfig = (config, dataUnit) => {
|
|
|
108
150
|
});
|
|
109
151
|
return metadata;
|
|
110
152
|
};
|
|
111
|
-
const buildFormField = (descriptor, config) => {
|
|
112
|
-
let { name, label, group } = Object.assign({}, config);
|
|
113
|
-
let { readOnly, required } = Object.assign({}, config);
|
|
114
|
-
let props;
|
|
115
|
-
let userInterface;
|
|
116
|
-
if (descriptor) {
|
|
117
|
-
label = label || descriptor.label;
|
|
118
|
-
name = name || descriptor.name;
|
|
119
|
-
required = descriptor.required || (config === null || config === void 0 ? void 0 : config.required);
|
|
120
|
-
readOnly = descriptor.readOnly || (config === null || config === void 0 ? void 0 : config.readOnly);
|
|
121
|
-
props = descriptor.properties;
|
|
122
|
-
userInterface = descriptor.userInterface;
|
|
123
|
-
}
|
|
124
|
-
return {
|
|
125
|
-
name, label, group,
|
|
126
|
-
readOnly, required,
|
|
127
|
-
props,
|
|
128
|
-
userInterface: userInterface || UserInterface.SHORTTEXT
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
const getTabConfig = (tab, sheets) => {
|
|
132
|
-
const tabConfig = (typeof tab === "string" ? Array.from(sheets.keys()).find(t => t.label === tab) : tab);
|
|
133
|
-
return tabConfig || { label: tab, visible: true };
|
|
134
|
-
};
|
|
135
|
-
const sortTabs = (a, b) => {
|
|
136
|
-
return a[0].label == '__main' ? -1 : (a[0].order || 10000) - (b[0].order || 10000);
|
|
137
|
-
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { h } from "@stencil/core";
|
|
2
|
+
import { FormItem } from "./FormItem";
|
|
3
|
+
export const FormSheet = ({ store, source, dataElementId }) => {
|
|
4
|
+
return (h("div", { class: "dynamic-content ez-box__container", "data-element-id": dataElementId },
|
|
5
|
+
h("div", { class: "ez-row ez-padding-vertical--small" }, source.items.map(item => h(FormItem, { store: store, source: item })))));
|
|
6
|
+
};
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { ObjectUtils } from '@sankhyalabs/core';
|
|
2
|
+
export const HIERARCHY_SEPARATOR = '>>';
|
|
3
|
+
export class Guide {
|
|
4
|
+
constructor(list) {
|
|
5
|
+
this.originalList = [];
|
|
6
|
+
this.guideMap = new Map();
|
|
7
|
+
this.hierarchiesAlreadyLoaded = new Set();
|
|
8
|
+
if (list === null || list === void 0 ? void 0 : list.length)
|
|
9
|
+
this.setList(list);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Converte uma lista de objetos IGuideItem em um objeto IGuideMap com sua hierarquia.
|
|
13
|
+
* @param list Uma lista de objetos IGuideItem representando a lista de itens.
|
|
14
|
+
* @param hierarquiaList Uma lista opcional de strings que representa a hierarquia dos itens pai.
|
|
15
|
+
* @param indexReferences Uma lista opcional de números que representa as referências de índice da lista original.
|
|
16
|
+
* @returns Uma Promise que resolve para um objeto IGuideMap com os itens e sua hierarquia.
|
|
17
|
+
*/
|
|
18
|
+
convertArrayToMap(list, hierarchyList = [], indexReferences = []) {
|
|
19
|
+
return new Promise(resolve => {
|
|
20
|
+
list.forEach(async (item, index) => {
|
|
21
|
+
const updatedHierarchyList = [...hierarchyList, item.id];
|
|
22
|
+
const key = updatedHierarchyList.join(HIERARCHY_SEPARATOR);
|
|
23
|
+
const currentIndexReferences = [...indexReferences, index];
|
|
24
|
+
const children = Array.isArray(item.children) ? item.children : [];
|
|
25
|
+
item = Object.assign(Object.assign({}, item), { parentId: hierarchyList[hierarchyList.length - 1], indexReferences: currentIndexReferences, hierarchy: updatedHierarchyList, hierarchyId: key });
|
|
26
|
+
delete item.children;
|
|
27
|
+
this.guideMap.set(key, item);
|
|
28
|
+
if (children.length)
|
|
29
|
+
await this.convertArrayToMap(children, updatedHierarchyList, currentIndexReferences);
|
|
30
|
+
});
|
|
31
|
+
resolve(this.guideMap);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Converte um objeto IGuideMap em uma lista de objetos IGuideItem com sua hierarquia.
|
|
36
|
+
* @param map Um objeto IGuideMap opcional que representa o mapa de itens com sua hierarquia.
|
|
37
|
+
* @returns Uma Promise que resolve para uma lista de objetos IGuideItem com sua hierarquia.
|
|
38
|
+
*/
|
|
39
|
+
convertMapToArray(map = this.guideMap) {
|
|
40
|
+
return new Promise(resolve => {
|
|
41
|
+
const array = [];
|
|
42
|
+
const itemsById = {};
|
|
43
|
+
map.forEach(value => {
|
|
44
|
+
var _a;
|
|
45
|
+
const item = Object.assign({}, value);
|
|
46
|
+
if (((_a = item.children) === null || _a === void 0 ? void 0 : _a.length) === 0) {
|
|
47
|
+
delete item.children;
|
|
48
|
+
}
|
|
49
|
+
itemsById[item.id] = item;
|
|
50
|
+
});
|
|
51
|
+
Object.values(itemsById).forEach(item => {
|
|
52
|
+
if (item.parentId) {
|
|
53
|
+
const parent = itemsById[item.parentId];
|
|
54
|
+
if (Array.isArray(parent.children)) {
|
|
55
|
+
parent.children.push(item);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
parent.children = [item];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
array.push(item);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
resolve(array);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Obtém a lista selecionada de itens com base na lista original e na lista de índice selecionada.
|
|
70
|
+
* @param originalList Uma lista de objetos IGuideItem representando a lista original de itens.
|
|
71
|
+
* @param selectedIndexList Uma matriz representando a lista de índices selecionada.
|
|
72
|
+
* @returns Uma lista de objetos IGuideItem representando a lista selecionada de itens.
|
|
73
|
+
*/
|
|
74
|
+
getSelectedList(originalList, selectedIndexList) {
|
|
75
|
+
const selectedList = [];
|
|
76
|
+
selectedIndexList.forEach(selectedIndex => {
|
|
77
|
+
if (!selectedIndex.length)
|
|
78
|
+
return;
|
|
79
|
+
const [parentIndex, childIndex] = selectedIndex;
|
|
80
|
+
if (childIndex === undefined) {
|
|
81
|
+
selectedList.push(originalList[parentIndex]);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const parent = originalList[parentIndex];
|
|
85
|
+
const child = parent.children[childIndex];
|
|
86
|
+
const selectedParent = selectedList.find(item => item.id === parent.id);
|
|
87
|
+
if (selectedParent) {
|
|
88
|
+
selectedParent.children.push(child);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
selectedList.push(Object.assign(Object.assign({}, parent), { children: [child] }));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return selectedList;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Define a lista de itens para o Map guideMap.
|
|
99
|
+
* @param list Uma lista de objetos IGuideItem representando a lista de itens.
|
|
100
|
+
* @returns Uma Promise que resolve quando a lista é convertida para o Map.
|
|
101
|
+
*/
|
|
102
|
+
setList(list) {
|
|
103
|
+
return new Promise(async (resolve) => {
|
|
104
|
+
this.guideMap.clear();
|
|
105
|
+
if (!this.originalList.length) {
|
|
106
|
+
this.originalList = ObjectUtils.copy(list);
|
|
107
|
+
}
|
|
108
|
+
await this.convertArrayToMap(list);
|
|
109
|
+
resolve();
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Obtém a lista de itens com sua hierarquia.
|
|
114
|
+
* @returns Uma Promise que resolve para uma lista de objetos IGuideItem com sua hierarquia.
|
|
115
|
+
*/
|
|
116
|
+
getList() {
|
|
117
|
+
return this.convertMapToArray();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Adiciona filhos a um item pai no guia.
|
|
121
|
+
* @param parent Um objeto IGuideItem que representa o item pai.
|
|
122
|
+
* @param children Uma lista de objetos IGuideItem representando os itens filhos.
|
|
123
|
+
* @returns Uma Promise que resolve para uma lista de objetos IGuideItem com sua hierarquia.
|
|
124
|
+
*/
|
|
125
|
+
addChildren(parent, children) {
|
|
126
|
+
return new Promise(async (resolve, reject) => {
|
|
127
|
+
if (parent.disabled)
|
|
128
|
+
return reject('Parent is disabled');
|
|
129
|
+
if (!parent.hierarchy || !parent.hierarchyId)
|
|
130
|
+
return reject('Hierarchy not found');
|
|
131
|
+
if (this.hierarchiesAlreadyLoaded.has(parent.hierarchyId))
|
|
132
|
+
return resolve([]);
|
|
133
|
+
await this.convertArrayToMap(children, parent.hierarchy);
|
|
134
|
+
const list = await this.getList();
|
|
135
|
+
this.originalList = ObjectUtils.copy(list);
|
|
136
|
+
this.hierarchiesAlreadyLoaded.add(parent.hierarchyId);
|
|
137
|
+
resolve(list);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Obtém os itens a partir de um campo corresponde à string de consulta.
|
|
142
|
+
* @param query Uma string que representa a consulta para corresponder ao rótulo.
|
|
143
|
+
* @param fieldName Uma string opcional que representa o nome do campo para corresponder à consulta.
|
|
144
|
+
* @returns Uma Promise que resolve para um objeto com o primeiro item encontrado e uma matriz de itens correspondentes com sua hierarquia.
|
|
145
|
+
*/
|
|
146
|
+
getItemsByLabel(query, fieldName = 'label', selectedItem) {
|
|
147
|
+
return new Promise(async (resolve) => {
|
|
148
|
+
var _a;
|
|
149
|
+
const mapResults = [];
|
|
150
|
+
let firstOcorrence;
|
|
151
|
+
const itemFromMap = this.guideMap.get(selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.hierarchyId);
|
|
152
|
+
if (itemFromMap)
|
|
153
|
+
itemFromMap.expanded = true;
|
|
154
|
+
for (const item of this.guideMap.values()) {
|
|
155
|
+
const label = ((_a = item === null || item === void 0 ? void 0 : item[fieldName]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || '';
|
|
156
|
+
if (label.includes(query.toLowerCase())) {
|
|
157
|
+
if (!firstOcorrence)
|
|
158
|
+
firstOcorrence = item;
|
|
159
|
+
mapResults.push(item.indexReferences);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const updatedList = this.getSelectedList(this.originalList, mapResults);
|
|
163
|
+
resolve({
|
|
164
|
+
first: firstOcorrence,
|
|
165
|
+
list: updatedList,
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Habilita todos os objetos IGuideItem.
|
|
171
|
+
* @returns Uma Promise que resolve com o array atualizado de objetos IGuideItem.
|
|
172
|
+
*/
|
|
173
|
+
enableAllItems() {
|
|
174
|
+
return new Promise(async (resolve) => {
|
|
175
|
+
for (const item of this.guideMap.values())
|
|
176
|
+
item.disabled = false;
|
|
177
|
+
const list = await this.getList();
|
|
178
|
+
this.originalList = ObjectUtils.copy(list);
|
|
179
|
+
resolve(list);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Ativa somente objetos IGuideItem com base em uma matriz de IDs.
|
|
184
|
+
* @param ids Um array de IDs para habilitar.
|
|
185
|
+
* @param customTooltip Uma string para definir o tooltip de itens desabilitados.
|
|
186
|
+
* @returns Uma Promise que resolve com o array atualizado de objetos IGuideItem.
|
|
187
|
+
*/
|
|
188
|
+
enableItemsById(ids = [], customTooltip = '') {
|
|
189
|
+
return new Promise(async (resolve) => {
|
|
190
|
+
for (const item of this.guideMap.values()) {
|
|
191
|
+
const isEnabled = ids.includes(item.id);
|
|
192
|
+
item.disabled = !isEnabled;
|
|
193
|
+
item.tooltip = isEnabled ? item.tooltip : customTooltip;
|
|
194
|
+
}
|
|
195
|
+
const list = await this.getList();
|
|
196
|
+
this.originalList = ObjectUtils.copy(list);
|
|
197
|
+
resolve(list);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
/* Label Container */
|
|
3
|
+
/*@doc Define o espaçamento interno do container de label*/
|
|
4
|
+
--ez-guide-navigator--padding: 0 var(--space--large);
|
|
5
|
+
/*@doc Define a cor de shadow box do container de label*/
|
|
6
|
+
--ez-guide-navigator--box-shadow: var(--shadow, 0px 0px 24px 0px #000);
|
|
7
|
+
/*@doc Define a cor de fundo do container de label*/
|
|
8
|
+
--ez-guide-navigator--background-color: var(--color--inverted);
|
|
9
|
+
/*@doc Define o border radius do container de label*/
|
|
10
|
+
--ez-guide-navigator--border-radius: 0px var(--border--radius-medium) var(--border--radius-medium) 0px;
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
/*Labels Actions */
|
|
14
|
+
/*@doc Define o espaçamento entre as ações*/
|
|
15
|
+
--ez-guide-navigator--actions-gap: var(--space--medium);
|
|
16
|
+
/*@doc Define a margem vertical do elemento*/
|
|
17
|
+
--ez-guide-navigator--actions-margin: var(--space--medium) 0 var(--space--medium);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.inverted {
|
|
21
|
+
transform: rotate(180deg);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.ez-guide-navigator {
|
|
25
|
+
/* public */
|
|
26
|
+
display: -webkit-box;
|
|
27
|
+
display: -ms-flexbox;
|
|
28
|
+
display: flex;
|
|
29
|
+
-webkit-box-orient: vertical;
|
|
30
|
+
-webkit-box-direction: normal;
|
|
31
|
+
-ms-flex-direction: column;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
/* private */
|
|
34
|
+
padding: var(--ez-guide-navigator--padding);
|
|
35
|
+
background-color: var(--ez-guide-navigator--background-color);
|
|
36
|
+
-webkit-box-shadow: var(--ez-guide-navigator--box-shadow);
|
|
37
|
+
box-shadow: var(--ez-guide-navigator--box-shadow);
|
|
38
|
+
border-radius: var(--ez-guide-navigator--border-radius);
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ez-guide-navigator__actions {
|
|
43
|
+
/* public */
|
|
44
|
+
display: -webkit-box;
|
|
45
|
+
display: -ms-flexbox;
|
|
46
|
+
display: flex;
|
|
47
|
+
-webkit-box-align: center;
|
|
48
|
+
-ms-flex-align: center;
|
|
49
|
+
align-items: center;
|
|
50
|
+
/* private */
|
|
51
|
+
gap: var(--ez-guide-navigator--actions-gap);
|
|
52
|
+
margin: var(--ez-guide-navigator--actions-margin)
|
|
53
|
+
}
|