@genexus/genexus-ide-ui 1.1.6 → 1.1.8
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/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-deployment-tool.cjs.entry.js +61 -20
- package/dist/cjs/gx-ide-deployment-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-design-import.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-new-version.cjs.entry.js +58 -14
- package/dist/cjs/gx-ide-new-version.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +16 -9
- package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +2 -2
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +270 -0
- package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/deployment-tool/deployment-tool.js +78 -20
- package/dist/collection/components/deployment-tool/deployment-tool.js.map +1 -1
- package/dist/collection/components/design-import/design-import.js +1 -1
- package/dist/collection/components/design-import/design-import.js.map +1 -1
- package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.en.json +3 -1
- package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.ja.json +3 -1
- package/dist/collection/components/new-version/gx-ide-assets/new-version/langs/new-version.lang.zh.json +3 -1
- package/dist/collection/components/new-version/new-version.css +4 -0
- package/dist/collection/components/new-version/new-version.js +124 -18
- package/dist/collection/components/new-version/new-version.js.map +1 -1
- package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.en.json +2 -1
- package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.ja.json +1 -0
- package/dist/collection/components/select-kb-items/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.zh.json +1 -0
- package/dist/collection/components/select-kb-items/select-kb-items.css +22 -27
- package/dist/collection/components/select-kb-items/select-kb-items.js +34 -8
- package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
- package/dist/collection/components/team-dev/commit/commit.js +2 -2
- package/dist/collection/components/team-dev/commit/commit.js.map +1 -1
- package/dist/collection/components/team-dev/history/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.en.json +42 -0
- package/dist/collection/components/team-dev/history/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.ja.json +42 -0
- package/dist/collection/components/team-dev/history/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.zh.json +42 -0
- package/dist/collection/components/team-dev/history/helpers.js +22 -0
- package/dist/collection/components/team-dev/history/helpers.js.map +1 -0
- package/dist/collection/components/team-dev/history/history.css +124 -0
- package/dist/collection/components/team-dev/history/history.js +448 -0
- package/dist/collection/components/team-dev/history/history.js.map +1 -0
- package/dist/collection/components/team-dev/update/update.js +1 -1
- package/dist/collection/components/team-dev/update/update.js.map +1 -1
- package/dist/collection/testing/locale.e2e.js +1 -0
- package/dist/collection/testing/locale.e2e.js.map +1 -1
- package/dist/components/gx-ide-deployment-tool.js +62 -20
- package/dist/components/gx-ide-deployment-tool.js.map +1 -1
- package/dist/components/gx-ide-design-import.js +1 -1
- package/dist/components/gx-ide-design-import.js.map +1 -1
- package/dist/components/gx-ide-new-version.js +65 -15
- package/dist/components/gx-ide-new-version.js.map +1 -1
- package/dist/components/gx-ide-select-kb-items.js +1 -507
- package/dist/components/gx-ide-select-kb-items.js.map +1 -1
- package/dist/components/gx-ide-team-dev-commit.js +2 -2
- package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
- package/dist/components/gx-ide-team-dev-history.d.ts +11 -0
- package/dist/components/gx-ide-team-dev-history.js +322 -0
- package/dist/components/gx-ide-team-dev-history.js.map +1 -0
- package/dist/components/gx-ide-team-dev-update.js +1 -1
- package/dist/components/gx-ide-team-dev-update.js.map +1 -1
- package/dist/components/select-kb-items.js +520 -0
- package/dist/components/select-kb-items.js.map +1 -0
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-deployment-tool.entry.js +61 -20
- package/dist/esm/gx-ide-deployment-tool.entry.js.map +1 -1
- package/dist/esm/gx-ide-design-import.entry.js +1 -1
- package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-new-version.entry.js +58 -14
- package/dist/esm/gx-ide-new-version.entry.js.map +1 -1
- package/dist/esm/gx-ide-select-kb-items.entry.js +16 -9
- package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-commit.entry.js +2 -2
- package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
- package/dist/esm/gx-ide-team-dev-history.entry.js +266 -0
- package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -0
- package/dist/esm/gx-ide-team-dev-update.entry.js +1 -1
- package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.en.json +3 -1
- package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.ja.json +3 -1
- package/dist/genexus-ide-ui/gx-ide-assets/new-version/langs/new-version.lang.zh.json +3 -1
- package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.en.json +2 -1
- package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.ja.json +1 -0
- package/dist/genexus-ide-ui/gx-ide-assets/select-kb-items/langs/select-kb-items.lang.zh.json +1 -0
- package/dist/genexus-ide-ui/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.en.json +42 -0
- package/dist/genexus-ide-ui/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.ja.json +42 -0
- package/dist/genexus-ide-ui/gx-ide-assets/team-dev-history/langs/team-dev-history.lang.zh.json +42 -0
- package/dist/genexus-ide-ui/{p-3085add2.entry.js → p-03dbccde.entry.js} +193 -160
- package/dist/genexus-ide-ui/p-03dbccde.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-48062d23.entry.js → p-0acf517c.entry.js} +2 -2
- package/dist/genexus-ide-ui/{p-48062d23.entry.js.map → p-0acf517c.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-d2107cb2.entry.js → p-34fd4875.entry.js} +3 -18
- package/dist/genexus-ide-ui/p-34fd4875.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-74715731.entry.js +541 -0
- package/dist/genexus-ide-ui/p-74715731.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-036d005d.entry.js → p-75a5c51f.entry.js} +2 -2
- package/dist/genexus-ide-ui/p-75a5c51f.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-80c1ddc3.entry.js +218 -0
- package/dist/genexus-ide-ui/p-80c1ddc3.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-9fa1200f.entry.js → p-a8d0b62e.entry.js} +139 -125
- package/dist/genexus-ide-ui/p-a8d0b62e.entry.js.map +1 -0
- package/dist/types/components/deployment-tool/deployment-tool.d.ts +5 -0
- package/dist/types/components/new-version/new-version.d.ts +27 -1
- package/dist/types/components/select-kb-items/select-kb-items.d.ts +8 -0
- package/dist/types/components/team-dev/history/helpers.d.ts +7 -0
- package/dist/types/components/team-dev/history/history.d.ts +109 -0
- package/dist/types/components.d.ts +149 -18
- package/package.json +1 -1
- package/dist/genexus-ide-ui/p-036d005d.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-3085add2.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-9fa1200f.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-c91af626.entry.js +0 -149
- package/dist/genexus-ide-ui/p-c91af626.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-d2107cb2.entry.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as t, g as e, h as
|
|
1
|
+
import { r as t, g as e, h as s, H as i, a as n } from "./p-25a9f1d7.js";
|
|
2
2
|
|
|
3
3
|
import { g as o } from "./p-ede7bd20.js";
|
|
4
4
|
|
|
@@ -11,16 +11,16 @@ const r = o({
|
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
const convertItemsNodeListToFlattenedTreeViewModel = (t, e) => {
|
|
14
|
-
const
|
|
14
|
+
const s = [];
|
|
15
15
|
const processNode = t => {
|
|
16
|
-
var
|
|
16
|
+
var i;
|
|
17
17
|
const n = t.active && !t.iconStart ? r : t.iconStart;
|
|
18
|
-
const o = !((
|
|
18
|
+
const o = !((i = t.nodes) === null || i === void 0 ? void 0 : i.length);
|
|
19
19
|
const a = e === "all" || e === "custom" && t.checkbox || e === "leaf" && o;
|
|
20
20
|
const c = JSON.stringify({
|
|
21
21
|
versionType: t.type
|
|
22
22
|
});
|
|
23
|
-
|
|
23
|
+
s.push({
|
|
24
24
|
caption: t.name,
|
|
25
25
|
checkbox: a,
|
|
26
26
|
checked: t.checked,
|
|
@@ -39,15 +39,15 @@ const convertItemsNodeListToFlattenedTreeViewModel = (t, e) => {
|
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
t.forEach((t => processNode(t)));
|
|
42
|
-
return
|
|
42
|
+
return s;
|
|
43
43
|
};
|
|
44
44
|
|
|
45
45
|
const convertItemsListToTreeViewModel = (t, e) => {
|
|
46
|
-
const
|
|
46
|
+
const s = [];
|
|
47
47
|
t.forEach((t => {
|
|
48
|
-
var
|
|
48
|
+
var i;
|
|
49
49
|
const n = t.active && !t.iconStart ? r : t.iconStart;
|
|
50
|
-
const o = !((
|
|
50
|
+
const o = !((i = t.nodes) === null || i === void 0 ? void 0 : i.length);
|
|
51
51
|
const a = e === "all" || e === "custom" && t.checkbox || e === "leaf" && o;
|
|
52
52
|
const c = t.expanded;
|
|
53
53
|
const h = n;
|
|
@@ -56,7 +56,7 @@ const convertItemsListToTreeViewModel = (t, e) => {
|
|
|
56
56
|
versionType: t.type
|
|
57
57
|
});
|
|
58
58
|
const f = parseInt(t.id);
|
|
59
|
-
|
|
59
|
+
s.push({
|
|
60
60
|
caption: t.name,
|
|
61
61
|
checkbox: a,
|
|
62
62
|
checked: t.checked,
|
|
@@ -72,7 +72,7 @@ const convertItemsListToTreeViewModel = (t, e) => {
|
|
|
72
72
|
selected: t.selected
|
|
73
73
|
});
|
|
74
74
|
}));
|
|
75
|
-
return
|
|
75
|
+
return s;
|
|
76
76
|
};
|
|
77
77
|
|
|
78
78
|
const findItemNode = (t, e) => {
|
|
@@ -80,8 +80,8 @@ const findItemNode = (t, e) => {
|
|
|
80
80
|
return e;
|
|
81
81
|
}
|
|
82
82
|
if (e.nodes) {
|
|
83
|
-
for (const
|
|
84
|
-
const e = findItemNode(t,
|
|
83
|
+
for (const s of e.nodes) {
|
|
84
|
+
const e = findItemNode(t, s);
|
|
85
85
|
if (e) {
|
|
86
86
|
return e;
|
|
87
87
|
}
|
|
@@ -91,8 +91,8 @@ const findItemNode = (t, e) => {
|
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
function findItemInArray(t, e) {
|
|
94
|
-
for (const
|
|
95
|
-
const t = findItemNode(e,
|
|
94
|
+
for (const s of t) {
|
|
95
|
+
const t = findItemNode(e, s);
|
|
96
96
|
if (t) {
|
|
97
97
|
return t;
|
|
98
98
|
}
|
|
@@ -126,9 +126,9 @@ const unselectAllNodes = t => {
|
|
|
126
126
|
const checkItems = (t, e) => {
|
|
127
127
|
setAllLeafsCheckedFalse(t);
|
|
128
128
|
e.forEach((e => {
|
|
129
|
-
const
|
|
130
|
-
if (
|
|
131
|
-
|
|
129
|
+
const s = findItemInArray(t, e);
|
|
130
|
+
if (s) {
|
|
131
|
+
s.checked = true;
|
|
132
132
|
}
|
|
133
133
|
}));
|
|
134
134
|
return t;
|
|
@@ -136,9 +136,9 @@ const checkItems = (t, e) => {
|
|
|
136
136
|
|
|
137
137
|
const expandItems = (t, e) => {
|
|
138
138
|
e.forEach((e => {
|
|
139
|
-
const
|
|
140
|
-
if (
|
|
141
|
-
|
|
139
|
+
const s = findItemInArray(t, e);
|
|
140
|
+
if (s) {
|
|
141
|
+
s.expanded = true;
|
|
142
142
|
}
|
|
143
143
|
}));
|
|
144
144
|
return t;
|
|
@@ -146,27 +146,27 @@ const expandItems = (t, e) => {
|
|
|
146
146
|
|
|
147
147
|
const selectItems = (t, e) => {
|
|
148
148
|
e.forEach((e => {
|
|
149
|
-
const
|
|
150
|
-
if (
|
|
151
|
-
|
|
149
|
+
const s = findItemInArray(t, e);
|
|
150
|
+
if (s) {
|
|
151
|
+
s.selected = true;
|
|
152
152
|
}
|
|
153
153
|
}));
|
|
154
154
|
return t;
|
|
155
155
|
};
|
|
156
156
|
|
|
157
157
|
function searchInNode(t, e) {
|
|
158
|
-
var
|
|
158
|
+
var s;
|
|
159
159
|
// If the current node is the searched node, we return an empty list (it has no parents in this branch)
|
|
160
160
|
if (t.id === e) {
|
|
161
161
|
return [];
|
|
162
162
|
}
|
|
163
163
|
// We traverse each child looking for the target node
|
|
164
|
-
if ((
|
|
165
|
-
for (const
|
|
166
|
-
const
|
|
167
|
-
if (
|
|
164
|
+
if ((s = t.nodes) === null || s === void 0 ? void 0 : s.length) {
|
|
165
|
+
for (const s of t.nodes) {
|
|
166
|
+
const i = searchInNode(s, e);
|
|
167
|
+
if (i !== null) {
|
|
168
168
|
// If we find it, we include the current node at the beginning of the path and return
|
|
169
|
-
return [ t.id, ...
|
|
169
|
+
return [ t.id, ...i ];
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
}
|
|
@@ -174,18 +174,18 @@ function searchInNode(t, e) {
|
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
const searchParentsItems = (t, e) => {
|
|
177
|
-
const
|
|
178
|
-
for (const
|
|
177
|
+
const s = [];
|
|
178
|
+
for (const i of e) {
|
|
179
179
|
for (const e of t) {
|
|
180
|
-
const t = searchInNode(e,
|
|
180
|
+
const t = searchInNode(e, i);
|
|
181
181
|
if (t !== null) {
|
|
182
182
|
t.forEach((t => {
|
|
183
|
-
|
|
183
|
+
s.push(t);
|
|
184
184
|
}));
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
|
-
return
|
|
188
|
+
return s;
|
|
189
189
|
};
|
|
190
190
|
|
|
191
191
|
/**
|
|
@@ -200,20 +200,20 @@ const searchParentsItems = (t, e) => {
|
|
|
200
200
|
return null;
|
|
201
201
|
}
|
|
202
202
|
// Iterate through each node in the array
|
|
203
|
-
for (const
|
|
203
|
+
for (const s of t) {
|
|
204
204
|
// Create a new path that includes the current node
|
|
205
|
-
const t = [ ...e,
|
|
205
|
+
const t = [ ...e, s.id ];
|
|
206
206
|
// Check if the current node is active
|
|
207
|
-
if (
|
|
207
|
+
if (s.active === true) {
|
|
208
208
|
return {
|
|
209
|
-
caption:
|
|
210
|
-
iconStart:
|
|
209
|
+
caption: s.name,
|
|
210
|
+
iconStart: s.iconStart,
|
|
211
211
|
path: t
|
|
212
212
|
};
|
|
213
213
|
}
|
|
214
214
|
// If the node has children, search through them with the updated path
|
|
215
|
-
if (
|
|
216
|
-
const e = findActiveWithPath(
|
|
215
|
+
if (s.nodes && s.nodes.length > 0) {
|
|
216
|
+
const e = findActiveWithPath(s.nodes, t);
|
|
217
217
|
// If we find an active node in this subtree, return it immediately
|
|
218
218
|
if (e !== null) {
|
|
219
219
|
return e;
|
|
@@ -227,26 +227,26 @@ const searchParentsItems = (t, e) => {
|
|
|
227
227
|
return findActiveWithPath(t);
|
|
228
228
|
};
|
|
229
229
|
|
|
230
|
-
const c =
|
|
230
|
+
const c = ":host{--search-input-max-inline-size:400px;display:grid;block-size:100%}:host(:not(.has-footer)){grid-template-rows:max-content 1fr}:host(.has-footer){grid-template-rows:max-content 1fr max-content}.header.has-active-item{grid-area:header}.section{display:contents}.header__first-row,.header__second-row{display:grid;grid-auto-flow:column}.header__first-row{column-gap:var(--field-group__column-gap);grid-auto-columns:max-content}.header__second-row{column-gap:12px;grid-template-columns:minmax(150px, var(--search-input-max-inline-size)) max-content}.header__second-row--one-row{grid-template-columns:minmax(150px, var(--search-input-max-inline-size))}.active-item{background-color:var(--mer-surface__elevation--01);border-radius:var(--mer-border__radius--sm);padding:var(--mer-spacing--xs) var(--mer-spacing--sm);display:flex;align-items:center;gap:var(--mer-spacing--xs)}.active-item__icon-container{display:contents}.active-item__icon{pointer-events:none}.active-item__link{text-decoration:underline;color:var(--mer-text__primary);cursor:pointer}.active-item__link:hover{color:var(--mer-text__primary--hover)}.active-item__link:active{color:var(--mer-text__primary--active)}.dummy-control-block-size{block-size:32px}.trees{position:relative}";
|
|
231
231
|
|
|
232
|
-
var h = undefined && undefined.__classPrivateFieldSet || function(t, e,
|
|
233
|
-
if (
|
|
234
|
-
if (
|
|
232
|
+
var h = undefined && undefined.__classPrivateFieldSet || function(t, e, s, i, n) {
|
|
233
|
+
if (i === "m") throw new TypeError("Private method is not writable");
|
|
234
|
+
if (i === "a" && !n) throw new TypeError("Private accessor was defined without a setter");
|
|
235
235
|
if (typeof e === "function" ? t !== e || !n : !e.has(t)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
236
|
-
return
|
|
236
|
+
return i === "a" ? n.call(t, s) : n ? n.value = s : e.set(t, s), s;
|
|
237
237
|
};
|
|
238
238
|
|
|
239
|
-
var l = undefined && undefined.__classPrivateFieldGet || function(t, e,
|
|
240
|
-
if (
|
|
241
|
-
if (typeof e === "function" ? t !== e || !
|
|
242
|
-
return
|
|
239
|
+
var l = undefined && undefined.__classPrivateFieldGet || function(t, e, s, i) {
|
|
240
|
+
if (s === "a" && !i) throw new TypeError("Private accessor was defined without a getter");
|
|
241
|
+
if (typeof e === "function" ? t !== e || !i : !e.has(t)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
242
|
+
return s === "m" ? i : s === "a" ? i.call(t) : i ? i.value : e.get(t);
|
|
243
243
|
};
|
|
244
244
|
|
|
245
|
-
var d, f, u, p, m, v,
|
|
245
|
+
var d, f, u, p, m, v, w, g, b, k, y, _, x, W, M, I, C, S, T, z, N, j, L;
|
|
246
246
|
|
|
247
|
-
const
|
|
247
|
+
const E = [ "resets/box-sizing", "chameleon/scrollbar", "components/tooltip", "components/tree-view", "utils/form--full", "utils/layout", "utils/spacing", "utils/typography" ];
|
|
248
248
|
|
|
249
|
-
const
|
|
249
|
+
const A = o({
|
|
250
250
|
category: "system",
|
|
251
251
|
name: "search",
|
|
252
252
|
colorType: "on-surface"
|
|
@@ -259,16 +259,16 @@ const O = "list";
|
|
|
259
259
|
const P = "on";
|
|
260
260
|
|
|
261
261
|
const F = class {
|
|
262
|
-
constructor(
|
|
263
|
-
t(this,
|
|
262
|
+
constructor(i) {
|
|
263
|
+
t(this, i);
|
|
264
264
|
d.set(this, void 0);
|
|
265
265
|
f.set(this, []);
|
|
266
266
|
u.set(this, void 0);
|
|
267
267
|
p.set(this, []);
|
|
268
268
|
m.set(this, e(`./gx-ide-assets/select-kb-items/shortcuts.json`));
|
|
269
269
|
v.set(this, []);
|
|
270
|
-
g.set(this, void 0);
|
|
271
270
|
w.set(this, void 0);
|
|
271
|
+
g.set(this, void 0);
|
|
272
272
|
b.set(this, (() => {
|
|
273
273
|
if (this.cancelCallback) {
|
|
274
274
|
this.cancelCallback();
|
|
@@ -293,12 +293,12 @@ const F = class {
|
|
|
293
293
|
_.set(this, (async t => {
|
|
294
294
|
if (this.itemContextMenuCallback) {
|
|
295
295
|
let e;
|
|
296
|
-
const
|
|
297
|
-
if (!l(this, p, "f").length || !
|
|
298
|
-
await l(this,
|
|
296
|
+
const s = l(this, p, "f").find((e => e === t.detail.id));
|
|
297
|
+
if (!l(this, p, "f").length || !s) {
|
|
298
|
+
await l(this, g, "f").updateItemsProperties(l(this, p, "f"), {
|
|
299
299
|
selected: false
|
|
300
300
|
});
|
|
301
|
-
await l(this,
|
|
301
|
+
await l(this, g, "f").updateItemsProperties([ t.detail.id ], {
|
|
302
302
|
selected: true
|
|
303
303
|
});
|
|
304
304
|
e = {
|
|
@@ -322,21 +322,21 @@ const F = class {
|
|
|
322
322
|
W.set(this, (t => {
|
|
323
323
|
this.searchPatternValue = t.detail.toString();
|
|
324
324
|
}));
|
|
325
|
-
M.set(this, (() =>
|
|
325
|
+
M.set(this, (() => s("div", null, this.dialogActions.map((t => s("button", {
|
|
326
326
|
class: "button-tertiary",
|
|
327
327
|
part: `button button-${t.name}`,
|
|
328
328
|
onClick: l(this, x, "f").call(this, t.callback),
|
|
329
329
|
disabled: this.loading
|
|
330
330
|
}, t.name))))));
|
|
331
|
-
I.set(this, (() =>
|
|
331
|
+
I.set(this, (() => s("footer", {
|
|
332
332
|
class: "footer control-footer-with-border spacing-body-inline spacing-body-block-end control-footer-space-between"
|
|
333
|
-
}, l(this, M, "f").call(this),
|
|
333
|
+
}, l(this, M, "f").call(this), s("div", {
|
|
334
334
|
class: "buttons-spacer "
|
|
335
|
-
}, this.cancelCallback &&
|
|
335
|
+
}, this.cancelCallback && s("button", {
|
|
336
336
|
class: "button-secondary",
|
|
337
337
|
part: "cancel-button",
|
|
338
338
|
onClick: l(this, b, "f")
|
|
339
|
-
}, l(this, d, "f").footer.cancel), this.confirmCallback &&
|
|
339
|
+
}, l(this, d, "f").footer.cancel), this.confirmCallback && s("button", {
|
|
340
340
|
class: "button-primary",
|
|
341
341
|
part: "confirm-button",
|
|
342
342
|
onClick: l(this, y, "f"),
|
|
@@ -356,42 +356,43 @@ const F = class {
|
|
|
356
356
|
}));
|
|
357
357
|
S.set(this, (async t => {
|
|
358
358
|
const e = searchParentsItems(this.itemsList, t);
|
|
359
|
-
const
|
|
360
|
-
const
|
|
361
|
-
l(this,
|
|
359
|
+
const s = selectItems(this.itemsList, t);
|
|
360
|
+
const i = expandItems(s, e);
|
|
361
|
+
l(this, z, "f").call(this, i);
|
|
362
362
|
}));
|
|
363
363
|
T.set(this, (async t => {
|
|
364
364
|
const e = searchParentsItems(this.itemsList, t);
|
|
365
|
-
const
|
|
366
|
-
l(this,
|
|
365
|
+
const s = expandItems(this.itemsList, e);
|
|
366
|
+
l(this, z, "f").call(this, s);
|
|
367
367
|
}));
|
|
368
|
-
|
|
368
|
+
z.set(this, (t => {
|
|
369
369
|
this.nodeVersionsListTreeModel = convertItemsListToTreeViewModel(t, this.checkboxType);
|
|
370
370
|
this.nodeListFlattenedTreeModel = convertItemsNodeListToFlattenedTreeViewModel(t, this.checkboxType);
|
|
371
371
|
}));
|
|
372
|
-
|
|
372
|
+
N.set(this, (async t => {
|
|
373
373
|
const e = t.detail;
|
|
374
374
|
this.nodesVersionsViewType = e;
|
|
375
375
|
if (this.nodesVersionsViewType === "tree") {
|
|
376
376
|
await l(this, S, "f").call(this, l(this, p, "f"));
|
|
377
377
|
await l(this, T, "f").call(this, l(this, f, "f"));
|
|
378
378
|
}
|
|
379
|
-
l(this,
|
|
379
|
+
l(this, z, "f").call(this, l(this, v, "f"));
|
|
380
380
|
}));
|
|
381
|
-
|
|
381
|
+
j.set(this, (t => {
|
|
382
382
|
this.toggleCheckboxes = t.detail === P;
|
|
383
383
|
}));
|
|
384
|
-
|
|
384
|
+
L.set(this, (() => {
|
|
385
385
|
var t;
|
|
386
|
-
const e = l(this,
|
|
386
|
+
const e = l(this, g, "f") && ((t = this.activeItemNode) === null || t === void 0 ? void 0 : t.path);
|
|
387
387
|
if (e) {
|
|
388
|
-
l(this,
|
|
388
|
+
l(this, g, "f").scrollIntoVisible(this.activeItemNode.path);
|
|
389
389
|
}
|
|
390
390
|
if (this.activeItemCallback) {
|
|
391
391
|
this.activeItemCallback();
|
|
392
392
|
}
|
|
393
393
|
}));
|
|
394
394
|
this.activeItemNode = undefined;
|
|
395
|
+
this.renderFooter = false;
|
|
395
396
|
this.nodeListFlattenedTreeModel = [];
|
|
396
397
|
this.loading = true;
|
|
397
398
|
this.nodesVersionsViewType = "tree";
|
|
@@ -408,19 +409,20 @@ const F = class {
|
|
|
408
409
|
this.itemContextMenuCallback = undefined;
|
|
409
410
|
this.itemsList = [];
|
|
410
411
|
this.multiSelection = false;
|
|
412
|
+
this.showActiveItemLink = false;
|
|
411
413
|
this.selectionChanged = undefined;
|
|
412
414
|
}
|
|
413
415
|
watchNodeListHandler(t) {
|
|
416
|
+
l(this, z, "f").call(this, t);
|
|
417
|
+
// Check and update activeItem
|
|
418
|
+
this.activeItemNode = findFirstActiveNode(t);
|
|
414
419
|
if (t.length > 0) {
|
|
415
420
|
this.loading = false;
|
|
416
421
|
}
|
|
417
|
-
l(this, N, "f").call(this, t);
|
|
418
|
-
// Check and update activeItem
|
|
419
|
-
this.activeItemNode = findFirstActiveNode(t);
|
|
420
422
|
}
|
|
421
423
|
async componentWillLoad() {
|
|
422
424
|
h(this, d, await a.getComponentStrings(this.el), "f");
|
|
423
|
-
h(this,
|
|
425
|
+
h(this, w, [ {
|
|
424
426
|
value: H,
|
|
425
427
|
caption: l(this, d, "f").main.tree
|
|
426
428
|
}, {
|
|
@@ -428,6 +430,7 @@ const F = class {
|
|
|
428
430
|
caption: "List"
|
|
429
431
|
} ], "f");
|
|
430
432
|
this.watchNodeListHandler(this.itemsList);
|
|
433
|
+
this.renderFooter = this.dialogActions.length > 0 || !!this.cancelCallback || !!this.confirmCallback;
|
|
431
434
|
}
|
|
432
435
|
/**
|
|
433
436
|
* Suspends or reactivates the shortcuts
|
|
@@ -442,72 +445,83 @@ const F = class {
|
|
|
442
445
|
* Allow to update the selected items
|
|
443
446
|
*/ async updateSelection(t) {
|
|
444
447
|
// first clear selected
|
|
445
|
-
l(this,
|
|
448
|
+
l(this, g, "f").updateItemsProperties(l(this, p, "f"), {
|
|
446
449
|
selected: false
|
|
447
450
|
});
|
|
448
451
|
// then select
|
|
449
|
-
l(this,
|
|
452
|
+
l(this, g, "f").updateItemsProperties(t, {
|
|
450
453
|
selected: true
|
|
451
454
|
});
|
|
452
455
|
}
|
|
453
456
|
render() {
|
|
454
|
-
return i
|
|
455
|
-
class:
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
457
|
+
return s(i, {
|
|
458
|
+
class: {
|
|
459
|
+
widget: true,
|
|
460
|
+
"has-footer": this.renderFooter
|
|
461
|
+
}
|
|
462
|
+
}, s("ch-theme", {
|
|
463
|
+
model: E
|
|
464
|
+
}), s("ch-shortcuts", {
|
|
459
465
|
src: l(this, m, "f"),
|
|
460
466
|
ref: t => h(this, u, t, "f")
|
|
461
|
-
}),
|
|
467
|
+
}), s("section", {
|
|
462
468
|
class: "section"
|
|
463
|
-
},
|
|
469
|
+
}, s("header", {
|
|
470
|
+
part: "header",
|
|
464
471
|
class: "header control-header field-group spacing-body-block-start spacing-body-inline"
|
|
465
|
-
},
|
|
466
|
-
class: "
|
|
467
|
-
},
|
|
468
|
-
class: "field field-inline
|
|
469
|
-
},
|
|
472
|
+
}, s("div", {
|
|
473
|
+
class: "header__first-row"
|
|
474
|
+
}, s("div", {
|
|
475
|
+
class: "field field-inline"
|
|
476
|
+
}, s("label", {
|
|
470
477
|
class: "label",
|
|
471
478
|
htmlFor: "view-mode"
|
|
472
|
-
}, "Select view mode:"),
|
|
473
|
-
class: "radio-group",
|
|
479
|
+
}, "Select view mode:"), s("ch-radio-group-render", {
|
|
480
|
+
class: "radio-group dummy-control-block-size",
|
|
474
481
|
id: "view-mode",
|
|
475
|
-
model: l(this,
|
|
476
|
-
onChange: l(this,
|
|
477
|
-
value: l(this,
|
|
478
|
-
})), this.checkboxType !== "none" &&
|
|
479
|
-
class: "field field-inline
|
|
480
|
-
},
|
|
482
|
+
model: l(this, w, "f"),
|
|
483
|
+
onChange: l(this, N, "f"),
|
|
484
|
+
value: l(this, w, "f")[0].value
|
|
485
|
+
})), this.checkboxType !== "none" && s("div", {
|
|
486
|
+
class: "field field-inline"
|
|
487
|
+
}, s("label", {
|
|
481
488
|
class: "label",
|
|
482
489
|
htmlFor: "toggle-checkboxes"
|
|
483
|
-
}, "Toggle Checkboxes"),
|
|
484
|
-
class: "checkbox",
|
|
490
|
+
}, "Toggle Checkboxes"), s("ch-checkbox", {
|
|
491
|
+
class: "checkbox dummy-control-block-size",
|
|
485
492
|
id: "toggle-checkboxes",
|
|
486
493
|
checkedValue: P,
|
|
487
494
|
value: P,
|
|
488
|
-
onInput: l(this,
|
|
489
|
-
}))),
|
|
490
|
-
class:
|
|
495
|
+
onInput: l(this, j, "f")
|
|
496
|
+
}))), s("div", {
|
|
497
|
+
class: {
|
|
498
|
+
"header__second-row": true,
|
|
499
|
+
"header__second-row--one-row": !this.showActiveItemLink
|
|
500
|
+
}
|
|
501
|
+
}, s("ch-edit", {
|
|
502
|
+
class: "input",
|
|
491
503
|
placeholder: l(this, d, "f").header.searchPatternPlaceholder,
|
|
492
|
-
startImgSrc:
|
|
493
|
-
onInput: l(this, W, "f")
|
|
494
|
-
|
|
504
|
+
startImgSrc: A,
|
|
505
|
+
onInput: l(this, W, "f"),
|
|
506
|
+
accessibleName: "search pattern"
|
|
507
|
+
}), this.activeItemNode && this.showActiveItemLink && s("div", {
|
|
495
508
|
class: "active-item"
|
|
496
|
-
},
|
|
509
|
+
}, s("span", {
|
|
497
510
|
class: "active-item__icon-container"
|
|
498
|
-
},
|
|
511
|
+
}, s("ch-image", {
|
|
499
512
|
class: "icon-md active-item__icon",
|
|
500
513
|
src: this.activeItemNode.iconStart || r,
|
|
501
514
|
containerRef: null
|
|
502
|
-
})), l(this, d, "f").header.activeItem,
|
|
515
|
+
})), l(this, d, "f").header.activeItem, s("button", {
|
|
503
516
|
class: "active-item__link",
|
|
504
|
-
onClick: l(this,
|
|
505
|
-
}, this.activeItemNode.caption))),
|
|
517
|
+
onClick: l(this, L, "f")
|
|
518
|
+
}, this.activeItemNode.caption)))), s("div", {
|
|
506
519
|
class: "spacing-body-inline-start trees"
|
|
507
|
-
}, this.loading ?
|
|
520
|
+
}, this.loading ? s("gx-ide-loader", {
|
|
508
521
|
loaderTitle: l(this, d, "f").loader.title,
|
|
522
|
+
description: l(this, d, "f").loader.description,
|
|
509
523
|
show: true
|
|
510
|
-
}) :
|
|
524
|
+
}) : s("ch-tree-view-render", {
|
|
511
525
|
class: "tree-view",
|
|
512
526
|
model: this.nodesVersionsViewType === "tree" ? this.nodeVersionsListTreeModel : this.nodeListFlattenedTreeModel,
|
|
513
527
|
"show-lines": this.nodesVersionsViewType === "tree" ? "all" : "none",
|
|
@@ -521,9 +535,9 @@ const F = class {
|
|
|
521
535
|
filterType: "caption",
|
|
522
536
|
toggleCheckboxes: this.toggleCheckboxes,
|
|
523
537
|
ref: t => {
|
|
524
|
-
h(this,
|
|
538
|
+
h(this, g, t, "f");
|
|
525
539
|
}
|
|
526
|
-
})),
|
|
540
|
+
})), this.renderFooter && l(this, I, "f").call(this)));
|
|
527
541
|
}
|
|
528
542
|
static get assetsDirs() {
|
|
529
543
|
return [ "gx-ide-assets/select-kb-items" ];
|
|
@@ -539,12 +553,12 @@ const F = class {
|
|
|
539
553
|
};
|
|
540
554
|
|
|
541
555
|
d = new WeakMap, f = new WeakMap, u = new WeakMap, p = new WeakMap, m = new WeakMap,
|
|
542
|
-
v = new WeakMap,
|
|
556
|
+
v = new WeakMap, w = new WeakMap, g = new WeakMap, b = new WeakMap, k = new WeakMap,
|
|
543
557
|
y = new WeakMap, _ = new WeakMap, x = new WeakMap, W = new WeakMap, M = new WeakMap,
|
|
544
|
-
I = new WeakMap, C = new WeakMap, S = new WeakMap, T = new WeakMap,
|
|
545
|
-
|
|
558
|
+
I = new WeakMap, C = new WeakMap, S = new WeakMap, T = new WeakMap, z = new WeakMap,
|
|
559
|
+
N = new WeakMap, j = new WeakMap, L = new WeakMap;
|
|
546
560
|
|
|
547
561
|
F.style = c;
|
|
548
562
|
|
|
549
563
|
export { F as gx_ide_select_kb_items };
|
|
550
|
-
//# sourceMappingURL=p-
|
|
564
|
+
//# sourceMappingURL=p-a8d0b62e.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ACTIVE_ITEM_DEFAULT_ICON","getIconPath","category","name","colorType","convertItemsNodeListToFlattenedTreeViewModel","itemsList","checkboxType","itemsListFlattenedTreeViewModel","processNode","item","startImgSrc","active","iconStart","leaf","_a","nodes","length","checkbox","metaData","JSON","stringify","versionType","type","push","caption","checked","endImgSrc","iconEnd","expanded","id","toString","items","metadata","parts","selected","forEach","childNode","convertItemsListToTreeViewModel","itemsListTreeViewModel","order","parseInt","findItemNode","itemNode","result","findItemInArray","itemsNodes","setAllLeafsCheckedFalse","uncheck","unselectAllNodes","unselect","checkItems","idsChecked","itemFind","expandItems","selectItems","idsSelected","searchInNode","node","parents","searchParentsItems","ids","rootItem","results","findFirstActiveNode","findActiveWithPath","nodeList","currentPath","nodePath","path","selectKbItemsCss","CSS_BUNDLES","SYSTEM_SEARCH_ICON","VIEW_AS_TREE_ID","VIEW_AS_LIST_ID","TOGGLE_CHECKBOXES_CHECKED_VALUE","GxIdeSelectKbItems","_GxIdeSelectKbItems__componentLocale","set","this","_GxIdeSelectKbItems_checkedNodesIds","_GxIdeSelectKbItems_chShortcutsEl","_GxIdeSelectKbItems_selectedNodesIds","_GxIdeSelectKbItems_shortcutsSrc","getAssetPath","_GxIdeSelectKbItems_updatedModelList","_GxIdeSelectKbItems_viewItemsAsModel","_GxIdeSelectKbItems_treeViewRenderEl","_GxIdeSelectKbItems_cancelHandler","cancelCallback","_GxIdeSelectKbItems_checkedItemsChangeHandler","async","e","checkedNodesIds","detail","__classPrivateFieldSet","__classPrivateFieldGet","checkedChanged","_GxIdeSelectKbItems_confirmHandler","confirmCallback","_GxIdeSelectKbItems_contextMenuHandler","itemContextMenuCallback","info","isSelected","find","updateItemsProperties","clientX","contextmenuEvent","clientY","selection","_GxIdeSelectKbItems_executeDialogAction","callback","_GxIdeSelectKbItems_patternSearchValueChangedHandler","event","searchPatternValue","_GxIdeSelectKbItems_renderActionButtons","h","dialogActions","map","action","class","part","onClick","call","disabled","loading","_GxIdeSelectKbItems_renderFooter","footer","cancel","select","_GxIdeSelectKbItems_selectedItemsChangeHandler","selectedNodesIds","selectionChanged","_GxIdeSelectKbItems_toggleAndSelectNodesInModelItems","selectedItemsIds","nodesToToggle","newItemsSelected","newItemsExpanded","_GxIdeSelectKbItems_updateViews","_GxIdeSelectKbItems_toggleCheckedNodesInModelItems","newItemsList","nodeVersionsListTreeModel","nodeListFlattenedTreeModel","_GxIdeSelectKbItems_viewItemsAsChangedHandler","selectedViewType","nodesVersionsViewType","_GxIdeSelectKbItems_toggleCheckboxesChangedHandler","toggleCheckboxes","_GxIdeSelectKbItems_scrollIntoActiveVersionNode","doScrollIntoView","activeItemNode","scrollIntoVisible","activeItemCallback","watchNodeListHandler","componentWillLoad","Locale","getComponentStrings","el","value","main","tree","renderFooter","suspendShortcuts","suspend","updateSelection","render","Host","widget","model","src","ref","htmlFor","onChange","checkedValue","onInput","showActiveItemLink","placeholder","header","searchPatternPlaceholder","accessibleName","containerRef","activeItem","loaderTitle","loader","title","description","show","expandableButton","onItemContextmenu","onCheckedItemsChange","onSelectedItemsChange","expandOnClick","multiSelection","filter","filterType"],"sources":["src/components/select-kb-items/helpers.tsx","src/components/select-kb-items/select-kb-items.scss?tag=gx-ide-select-kb-items&encapsulation=shadow","src/components/select-kb-items/select-kb-items.tsx"],"sourcesContent":["import { ItemNode, CheckboxType, ActiveNode } from \"./select-kb-items\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath } from \"@genexus/mercury\";\n\nexport const ACTIVE_ITEM_DEFAULT_ICON = getIconPath({\n category: \"system\",\n name: \"check-circle\",\n colorType: \"primary\"\n});\n\nexport const convertItemsNodeListToFlattenedTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListFlattenedTreeViewModel: TreeViewItemModel[] = [];\n\n const processNode = (item: ItemNode) => {\n const startImgSrc =\n item.active && !item.iconStart\n ? ACTIVE_ITEM_DEFAULT_ICON\n : item.iconStart;\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const metaData = JSON.stringify({\n versionType: item.type\n });\n itemsListFlattenedTreeViewModel.push({\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n startImgSrc: startImgSrc,\n endImgSrc: item.iconEnd,\n expanded: item.expanded,\n id: item.id.toString(),\n items: null,\n leaf: leaf,\n metadata: metaData,\n parts: item.parts,\n selected: item.selected\n });\n\n if (item.nodes) {\n item.nodes.forEach(childNode => processNode(childNode));\n }\n };\n\n itemsList.forEach(item => processNode(item));\n return itemsListFlattenedTreeViewModel;\n};\n\nexport const convertItemsListToTreeViewModel = (\n itemsList: ItemNode[],\n checkboxType: CheckboxType\n): TreeViewItemModel[] => {\n const itemsListTreeViewModel: TreeViewItemModel[] = [];\n itemsList.forEach(item => {\n const startImgSrc =\n item.active && !item.iconStart\n ? ACTIVE_ITEM_DEFAULT_ICON\n : item.iconStart;\n const leaf = !item.nodes?.length;\n const checkbox =\n checkboxType === \"all\" ||\n (checkboxType === \"custom\" && item.checkbox) ||\n (checkboxType === \"leaf\" && leaf);\n const expanded = item.expanded;\n const iconStart = startImgSrc;\n const iconEnd = item.iconEnd;\n const metaData = JSON.stringify({\n versionType: item.type\n });\n const order = parseInt(item.id);\n itemsListTreeViewModel.push({\n caption: item.name,\n checkbox: checkbox,\n checked: item.checked,\n startImgSrc: iconStart,\n endImgSrc: iconEnd,\n expanded: expanded,\n id: item.id.toString(),\n items: !leaf\n ? convertItemsListToTreeViewModel(item.nodes, checkboxType)\n : null,\n leaf: leaf,\n metadata: metaData,\n parts: item.parts,\n order: order,\n selected: item.selected\n });\n });\n\n return itemsListTreeViewModel;\n};\n\nconst findItemNode = (id: string, item: ItemNode): ItemNode | null => {\n if (item.id === id) {\n return item;\n }\n\n if (item.nodes) {\n for (const itemNode of item.nodes) {\n const result = findItemNode(id, itemNode);\n if (result) {\n return result;\n }\n }\n }\n return null;\n};\n\nfunction findItemInArray(itemsNodes: ItemNode[], id: string): ItemNode | null {\n for (const item of itemsNodes) {\n const result = findItemNode(id, item);\n if (result) {\n return result;\n }\n }\n return null;\n}\nconst setAllLeafsCheckedFalse = (itemsList: ItemNode[]): ItemNode[] => {\n const uncheck = (itemNode: ItemNode) => {\n itemNode.checked = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => uncheck(childNode));\n }\n };\n\n itemsList.forEach(item => uncheck(item));\n return itemsList;\n};\n\nexport const unselectAllNodes = (itemsList: ItemNode[]) => {\n const unselect = (itemNode: ItemNode) => {\n itemNode.selected = false;\n if (itemNode.nodes?.length) {\n itemNode.nodes.forEach(childNode => unselect(childNode));\n }\n };\n\n itemsList.forEach(item => unselect(item));\n};\n\nexport const checkItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n setAllLeafsCheckedFalse(itemsList);\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.checked = true;\n }\n });\n\n return itemsList;\n};\n\nexport const expandItems = (\n itemsList: ItemNode[],\n idsChecked: string[]\n): ItemNode[] => {\n idsChecked.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.expanded = true;\n }\n });\n\n return itemsList;\n};\n\nexport const selectItems = (\n itemsList: ItemNode[],\n idsSelected: string[]\n): ItemNode[] => {\n idsSelected.forEach(id => {\n const itemFind = findItemInArray(itemsList, id);\n if (itemFind) {\n itemFind.selected = true;\n }\n });\n return itemsList;\n};\n\nfunction searchInNode(item: ItemNode, id: string): string[] | null {\n // If the current node is the searched node, we return an empty list (it has no parents in this branch)\n if (item.id === id) {\n return [];\n }\n\n // We traverse each child looking for the target node\n if (item.nodes?.length) {\n for (const node of item.nodes) {\n const parents = searchInNode(node, id);\n if (parents !== null) {\n // If we find it, we include the current node at the beginning of the path and return\n return [item.id, ...parents];\n }\n }\n }\n return null;\n}\n\nexport const searchParentsItems = (\n items: ItemNode[],\n ids: string[]\n): string[] | null => {\n const parents: string[] = [];\n for (const id of ids) {\n for (const rootItem of items) {\n const results = searchInNode(rootItem, id);\n if (results !== null) {\n results.forEach(result => {\n parents.push(result);\n });\n }\n }\n }\n return parents;\n};\n\n/**\n * Recursively searches for the first node with the active=true property\n * @param nodes Array of nodes to search through\n * @returns An object with caption, iconStart, and path to the first active node found, or null if none is found\n */\nexport const findFirstActiveNode = (nodes: ItemNode[]): ActiveNode | null => {\n // Helper function that keeps track of the path during recursion\n const findActiveWithPath = (\n nodeList: ItemNode[],\n currentPath: string[] = []\n ): ActiveNode | null => {\n // Base case: if nodes is undefined or empty\n if (!nodeList || nodeList.length === 0) {\n return null;\n }\n\n // Iterate through each node in the array\n for (const node of nodeList) {\n // Create a new path that includes the current node\n const nodePath = [...currentPath, node.id];\n\n // Check if the current node is active\n if (node.active === true) {\n return {\n caption: node.name,\n iconStart: node.iconStart,\n path: nodePath\n };\n }\n\n // If the node has children, search through them with the updated path\n if (node.nodes && node.nodes.length > 0) {\n const result = findActiveWithPath(node.nodes, nodePath);\n // If we find an active node in this subtree, return it immediately\n if (result !== null) {\n return result;\n }\n }\n }\n\n // No active node found in any of the nodes\n return null;\n };\n\n // Start the search with an empty path\n return findActiveWithPath(nodes);\n};\n",":host {\n --search-input-max-inline-size: 400px;\n display: grid;\n block-size: 100%;\n}\n:host(:not(.has-footer)) {\n grid-template-rows: max-content 1fr;\n}\n:host(.has-footer) {\n grid-template-rows: max-content 1fr max-content;\n}\n\n.header.has-active-item {\n grid-area: header;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n &__first-row,\n &__second-row {\n display: grid;\n grid-auto-flow: column;\n }\n &__first-row {\n column-gap: var(--field-group__column-gap);\n grid-auto-columns: max-content;\n }\n &__second-row {\n column-gap: 12px;\n grid-template-columns: minmax(150px, var(--search-input-max-inline-size)) max-content;\n\n &--one-row {\n grid-template-columns: minmax(150px, var(--search-input-max-inline-size));\n }\n }\n}\n\n.active-item {\n background-color: var(--mer-surface__elevation--01);\n border-radius: var(--mer-border__radius--sm);\n padding: var(--mer-spacing--xs) var(--mer-spacing--sm);\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n}\n.active-item {\n &__icon-container {\n display: contents;\n }\n &__icon {\n pointer-events: none; // We do not want the icon to change the colors, since the clickable area is the caption only\n }\n &__link {\n text-decoration: underline;\n // TODO: There should be a class in Merucry to apply link styles\n color: var(--mer-text__primary);\n cursor: pointer;\n &:hover {\n color: var(--mer-text__primary--hover);\n }\n &:active {\n color: var(--mer-text__primary--active);\n }\n }\n}\n\n.dummy-control-block-size {\n // WA: Make as tall as a regular contorl (ie.: a input, a combo-box) in order to\n // make the label vertically aligned with this control.\n block-size: 32px;\n}\n\n.trees {\n position: relative;\n}\n","import {\n Component,\n Element,\n getAssetPath,\n Host,\n h,\n Prop,\n State,\n Watch,\n Method\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n TreeViewItemModel,\n TreeViewItemModelExtended\n} from \"@genexus/chameleon-controls-library\";\n\nimport {\n checkItems,\n convertItemsListToTreeViewModel,\n convertItemsNodeListToFlattenedTreeViewModel,\n expandItems,\n searchParentsItems,\n selectItems,\n unselectAllNodes,\n findFirstActiveNode\n} from \"./helpers\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { ContextMenuInfo } from \"../../common/types\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\n\nimport { ACTIVE_ITEM_DEFAULT_ICON } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"chameleon/scrollbar\",\n \"components/tooltip\",\n \"components/tree-view\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\"\n];\n\nconst SYSTEM_SEARCH_ICON = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n});\n\nconst VIEW_AS_TREE_ID: NodesVersionsViewType = \"tree\";\nconst VIEW_AS_LIST_ID: NodesVersionsViewType = \"list\";\n\nconst TOGGLE_CHECKBOXES_CHECKED_VALUE = \"on\";\n\n@Component({\n tag: \"gx-ide-select-kb-items\",\n styleUrl: \"select-kb-items.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/select-kb-items\"]\n})\nexport class GxIdeSelectKbItems {\n #_componentLocale: any;\n\n #checkedNodesIds: string[] = [];\n #chShortcutsEl: HTMLChShortcutsElement;\n #selectedNodesIds: string[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/select-kb-items/shortcuts.json`\n );\n #updatedModelList: ItemNode[] = [];\n\n #viewItemsAsModel: RadioGroupItemModel[];\n\n @Element() el: HTMLGxIdeSelectKbItemsElement;\n #treeViewRenderEl: HTMLChTreeViewRenderElement;\n\n /**\n * Represents the active version node caption and icon (if any)\n */\n @State() activeItemNode: ActiveNode;\n\n /**\n * If true, the footer will be rendered\n */\n @State() renderFooter: boolean = false;\n\n /**\n * Represents the nodes list model\n */\n @State() nodeListFlattenedTreeModel: TreeViewItemModel[] = [];\n\n /**\n * To show a loader when the component is loading\n */\n @State() loading: boolean = true;\n\n /**\n * View type for the nodes.\n */\n @State() nodesVersionsViewType: NodesVersionsViewType = \"tree\";\n\n /**\n * Represents the nodes tree model\n */\n @State() nodeVersionsListTreeModel: TreeViewItemModel[] = [];\n\n /**\n * \"Search Pattern\" input value, used to filter the nodes tree/list.\n */\n @State() searchPatternValue: string = null;\n\n /**\n * It maps to the ch-tree-view-render \"toggleCheckboxes\" property.\n */\n @State() toggleCheckboxes: boolean = true;\n\n /**\n * Callback emitted when the user clicks on the \"Active item\"\n */\n @Prop() readonly activeItemCallback?: () => Promise<void>;\n\n /**\n * Callback emitted when the 'cancel' button is pressed\n */\n @Prop() readonly cancelCallback?: () => Promise<void>;\n\n /**\n * Defines which nodes of the component have checkboxes.\n */\n @Prop() readonly checkboxType: CheckboxType;\n\n /**\n * Define if a item node is expanded on click interaction. If false item-node will only be expanded on double click.\n */\n @Prop() readonly expandOnClick: boolean = true;\n\n /**\n * Callback emitted when the items checked items change\n */\n @Prop() readonly checkedChanged?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Callback emitted when the 'select' button is pressed\n */\n @Prop() readonly confirmCallback?: (checkedItems: string[]) => Promise<void>;\n\n /**\n * Set of additional actions (callbacks) to those already provided by default by the selector (cancelCallback and selectCallback)\n */\n @Prop() readonly dialogActions: DialogAction[] = [];\n\n /**\n * Callback emitted when the user right click on an item\n */\n @Prop() readonly itemContextMenuCallback: (\n info: ContextMenuInfo\n ) => Promise<void>;\n\n /**\n * Represents the itemLis list model\n */\n @Prop() readonly itemsList: ItemNode[] = [];\n\n @Watch(\"itemsList\")\n watchNodeListHandler(newItemsList: ItemNode[]) {\n this.#updateViews(newItemsList);\n // Check and update activeItem\n this.activeItemNode = findFirstActiveNode(newItemsList);\n\n if (newItemsList.length > 0) {\n this.loading = false;\n }\n }\n\n /**\n * This define if the selection is unique or not\n */\n @Prop() readonly multiSelection?: boolean = false;\n\n /**\n * Used to define if the component must show the \"Active item\" link or not\n */\n @Prop() readonly showActiveItemLink?: boolean = false;\n\n /**\n * Callback emitted when the items selection change\n */\n @Prop() readonly selectionChanged?: (selectedItem: string[]) => Promise<void>;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.#viewItemsAsModel = [\n { value: VIEW_AS_TREE_ID, caption: this.#_componentLocale.main.tree },\n { value: VIEW_AS_LIST_ID, caption: \"List\" }\n ];\n this.watchNodeListHandler(this.itemsList);\n this.renderFooter =\n this.dialogActions.length > 0 ||\n !!this.cancelCallback ||\n !!this.confirmCallback;\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Allow to update the selected items\n */\n @Method()\n async updateSelection(selectedItemsIds: string[]) {\n // first clear selected\n this.#treeViewRenderEl.updateItemsProperties(this.#selectedNodesIds, {\n selected: false\n });\n // then select\n this.#treeViewRenderEl.updateItemsProperties(selectedItemsIds, {\n selected: true\n });\n }\n\n #cancelHandler = () => {\n if (this.cancelCallback) {\n this.cancelCallback();\n }\n };\n\n #checkedItemsChangeHandler = async (\n e: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const checkedNodesIds: string[] = [];\n e.detail.forEach(node => {\n node.item.checked && checkedNodesIds.push(node.item.id);\n });\n this.#checkedNodesIds = checkedNodesIds;\n this.#updatedModelList = checkItems(this.itemsList, this.#checkedNodesIds);\n\n if (this.checkedChanged) {\n this.checkedChanged(this.#checkedNodesIds);\n }\n };\n\n #confirmHandler = () => {\n if (this.confirmCallback) {\n this.confirmCallback(this.#checkedNodesIds);\n }\n };\n\n #contextMenuHandler = async (\n e: CustomEvent<{\n id: string;\n itemRef: HTMLChTreeViewItemElement;\n metadata: string;\n contextmenuEvent: PointerEvent;\n }>\n ) => {\n if (this.itemContextMenuCallback) {\n let info: ContextMenuInfo;\n const isSelected = this.#selectedNodesIds.find(id => id === e.detail.id);\n if (!this.#selectedNodesIds.length || !isSelected) {\n await this.#treeViewRenderEl.updateItemsProperties(\n this.#selectedNodesIds,\n { selected: false }\n );\n await this.#treeViewRenderEl.updateItemsProperties([e.detail.id], {\n selected: true\n });\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: [e.detail.id]\n };\n } else {\n info = {\n clientX: e.detail.contextmenuEvent.clientX,\n clientY: e.detail.contextmenuEvent.clientY,\n selection: this.#selectedNodesIds\n };\n }\n this.itemContextMenuCallback(info);\n }\n };\n\n #executeDialogAction = (\n callback: (checkedNodesIds: string[], selectedNodesIds: string[]) => void\n ) => {\n return () => {\n callback(this.#checkedNodesIds, this.#selectedNodesIds);\n };\n };\n\n #patternSearchValueChangedHandler = (\n event: CustomEvent<string> | InputEvent\n ) => {\n this.searchPatternValue = event.detail.toString();\n };\n\n #renderActionButtons = (): HTMLElement[] => {\n return (\n <div>\n {this.dialogActions.map(action => {\n return (\n <button\n class={\"button-tertiary\"}\n part={`button button-${action.name}`}\n onClick={this.#executeDialogAction(action.callback)}\n disabled={this.loading}\n >\n {action.name}\n </button>\n );\n })}\n </div>\n );\n };\n\n #renderFooter = (): HTMLElement => {\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end control-footer-space-between\">\n {this.#renderActionButtons()}\n <div class=\"buttons-spacer \">\n {this.cancelCallback && (\n <button\n class={\"button-secondary\"}\n part={\"cancel-button\"}\n onClick={this.#cancelHandler}\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n )}\n {this.confirmCallback && (\n <button\n class={\"button-primary\"}\n part={\"confirm-button\"}\n onClick={this.#confirmHandler}\n disabled={this.loading}\n >\n {this.#_componentLocale.footer.select}\n </button>\n )}\n </div>\n </footer>\n );\n };\n\n #selectedItemsChangeHandler = (\n e: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n const selectedNodesIds: string[] = [];\n unselectAllNodes(this.itemsList);\n e.detail.forEach(node => {\n selectedNodesIds.push(node.item.id);\n });\n this.#selectedNodesIds = selectedNodesIds;\n if (this.selectionChanged) {\n this.selectionChanged(this.#selectedNodesIds);\n }\n\n this.#updatedModelList = selectItems(this.itemsList, selectedNodesIds);\n };\n\n #toggleAndSelectNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsSelected = selectItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(newItemsSelected, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #toggleCheckedNodesInModelItems = async (selectedItemsIds: string[]) => {\n const nodesToToggle = searchParentsItems(this.itemsList, selectedItemsIds);\n const newItemsExpanded = expandItems(this.itemsList, nodesToToggle);\n this.#updateViews(newItemsExpanded);\n };\n\n #updateViews = (newItemsList: ItemNode[]) => {\n this.nodeVersionsListTreeModel = convertItemsListToTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n\n this.nodeListFlattenedTreeModel =\n convertItemsNodeListToFlattenedTreeViewModel(\n newItemsList,\n this.checkboxType\n );\n };\n\n #viewItemsAsChangedHandler = async (event: CustomEvent<string>) => {\n const selectedViewType = event.detail as NodesVersionsViewType;\n this.nodesVersionsViewType = selectedViewType;\n if (this.nodesVersionsViewType === \"tree\") {\n await this.#toggleAndSelectNodesInModelItems(this.#selectedNodesIds);\n await this.#toggleCheckedNodesInModelItems(this.#checkedNodesIds);\n }\n this.#updateViews(this.#updatedModelList);\n };\n\n #toggleCheckboxesChangedHandler = (\n event: ChCheckboxCustomEvent<string> | InputEvent\n ) => {\n this.toggleCheckboxes = event.detail === TOGGLE_CHECKBOXES_CHECKED_VALUE;\n };\n\n #scrollIntoActiveVersionNode = () => {\n const doScrollIntoView =\n this.#treeViewRenderEl && this.activeItemNode?.path;\n if (doScrollIntoView) {\n this.#treeViewRenderEl.scrollIntoVisible(this.activeItemNode.path);\n }\n\n if (this.activeItemCallback) {\n this.activeItemCallback();\n }\n };\n\n render() {\n return (\n <Host class={{ \"widget\": true, \"has-footer\": this.renderFooter }}>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n <section class=\"section\">\n <header\n part=\"header\"\n class=\"header control-header field-group spacing-body-block-start spacing-body-inline\"\n >\n <div class=\"header__first-row\">\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"view-mode\">\n Select view mode:\n </label>\n <ch-radio-group-render\n class=\"radio-group dummy-control-block-size\"\n id=\"view-mode\"\n model={this.#viewItemsAsModel}\n onChange={this.#viewItemsAsChangedHandler}\n value={this.#viewItemsAsModel[0].value}\n ></ch-radio-group-render>\n </div>\n\n {this.checkboxType !== \"none\" && (\n <div class=\"field field-inline\">\n <label class=\"label\" htmlFor=\"toggle-checkboxes\">\n Toggle Checkboxes\n </label>\n <ch-checkbox\n class=\"checkbox dummy-control-block-size\"\n id=\"toggle-checkboxes\"\n checkedValue={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n value={TOGGLE_CHECKBOXES_CHECKED_VALUE}\n onInput={this.#toggleCheckboxesChangedHandler}\n ></ch-checkbox>\n </div>\n )}\n </div>\n\n <div\n class={{\n \"header__second-row\": true,\n \"header__second-row--one-row\": !this.showActiveItemLink\n }}\n >\n <ch-edit\n class=\"input\"\n placeholder={\n this.#_componentLocale.header.searchPatternPlaceholder\n }\n startImgSrc={SYSTEM_SEARCH_ICON}\n onInput={this.#patternSearchValueChangedHandler}\n accessibleName=\"search pattern\"\n ></ch-edit>\n {this.activeItemNode && this.showActiveItemLink && (\n <div class=\"active-item\">\n <span\n class=\"active-item__icon-container\"\n // make this span the icon container, to prevent icon state changes when\n // interacting with div.active-item\n >\n <ch-image\n class=\"icon-md active-item__icon\"\n src={\n this.activeItemNode.iconStart ||\n ACTIVE_ITEM_DEFAULT_ICON\n }\n containerRef={null}\n ></ch-image>\n </span>\n {this.#_componentLocale.header.activeItem}\n <button\n class=\"active-item__link\"\n onClick={this.#scrollIntoActiveVersionNode}\n >\n {this.activeItemNode.caption}\n </button>\n </div>\n )}\n </div>\n </header>\n\n <div class=\"spacing-body-inline-start trees\">\n {this.loading ? (\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n description={this.#_componentLocale.loader.description}\n show\n ></gx-ide-loader>\n ) : (\n <ch-tree-view-render\n class=\"tree-view\"\n model={\n this.nodesVersionsViewType === \"tree\"\n ? this.nodeVersionsListTreeModel\n : this.nodeListFlattenedTreeModel\n }\n show-lines={\n this.nodesVersionsViewType === \"tree\" ? \"all\" : \"none\"\n }\n expandableButton={\n this.nodesVersionsViewType === \"tree\" ? \"decorative\" : \"no\"\n }\n onItemContextmenu={this.#contextMenuHandler}\n onCheckedItemsChange={this.#checkedItemsChangeHandler}\n onSelectedItemsChange={this.#selectedItemsChangeHandler}\n expandOnClick={this.expandOnClick}\n multiSelection={this.multiSelection}\n filter={this.searchPatternValue}\n filterType=\"caption\"\n toggleCheckboxes={this.toggleCheckboxes}\n ref={(el: HTMLChTreeViewRenderElement) => {\n this.#treeViewRenderEl = el as HTMLChTreeViewRenderElement;\n }}\n ></ch-tree-view-render>\n )}\n </div>\n {this.renderFooter && this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type CheckboxType = \"none\" | \"all\" | \"leaf\" | \"custom\";\n\nexport type DialogAction = {\n name: string;\n callback: DialogActionCallback;\n};\n\nexport type DialogActionCallback = (...args: any[]) => void;\n\nexport type ItemCommon = {\n icon: string;\n expanded: boolean;\n};\n\nexport type ItemNode = {\n active?: boolean;\n checkbox?: boolean;\n checked?: boolean;\n expanded?: boolean;\n iconStart?: string;\n iconEnd?: string;\n id: string;\n name: string;\n nodes?: ItemNode[];\n parts?: string;\n selected?: boolean;\n type: ItemType;\n};\n\nexport type ActiveNode = {\n caption: string;\n iconStart?: string;\n path: string[]; // for using the scrollIntoVisible method of the tree-view-render\n};\n\nexport type ItemType = {\n id: string;\n name: string;\n};\n\ntype NodesVersionsViewType = \"tree\" | \"list\";\n"],"mappings":"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"}
|