Skip to content

Commit e9a4c4d

Browse files
Improve tree JS component (move in setSelectableTypes from sites selector)
1 parent 03b6d87 commit e9a4c4d

File tree

2 files changed

+41
-18
lines changed

2 files changed

+41
-18
lines changed

src/bemserver_ui/static/scripts/modules/components/structuralElements/selector.js

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,9 @@ export class StructuralElementSelector extends HTMLElement {
122122
this.#treeSelectorElmt.showLoading();
123123
}
124124

125-
loadTree(data) {
125+
loadTree(data, selectableTypes = ["site", "building", "storey", "space", "zone"]) {
126126
this.#treeSelectorData = data;
127-
this.#loadTree();
127+
this.#loadTree(selectableTypes);
128128
}
129129

130130
select(nodeId) {
@@ -136,20 +136,7 @@ export class StructuralElementSelector extends HTMLElement {
136136
}
137137

138138
setSelectableTypes(types = ["site", "building", "storey", "space", "zone"]) {
139-
this.showLoadingTree();
140-
141-
let recursiveSetNodeSelectable = (node, types) => {
142-
node.is_selectable = types.includes(node.type);
143-
for (let childNode of node.nodes) {
144-
recursiveSetNodeSelectable(childNode, types);
145-
}
146-
};
147-
148-
for (let node of this.#treeSelectorData) {
149-
recursiveSetNodeSelectable(node, types);
150-
}
151-
152-
this.#loadTree();
139+
this.#treeSelectorElmt.setSelectableTypes(types);
153140
}
154141

155142
static getInstance(elementId = null) {

src/bemserver_ui/static/scripts/modules/components/tree.js

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,8 @@ export class Tree extends HTMLElement {
220220
liElmt.appendChild(linkElmt);
221221

222222
linkElmt.addEventListener("click", (event) => {
223-
if (Parser.parseBoolOrDefault(node.is_selectable)) {
223+
let isSelectable = linkElmt.classList.contains("disabled") ? false : true;
224+
if (isSelectable) {
224225
if (this.#treeNodeSelected != event.target) {
225226
this.#treeNodeSelected?.classList.remove("active");
226227
this.#treeNodeSelected = event.target;
@@ -323,10 +324,24 @@ export class Tree extends HTMLElement {
323324
this.#treeContainerElmt.innerHTML = "";
324325
}
325326

326-
load(data) {
327+
load(data, selectableTypes = null) {
327328
this.hideLoading();
328329

329330
if (data.length > 0) {
331+
if (selectableTypes != null)
332+
{
333+
let recursiveSetNodeSelectable = (node, types) => {
334+
node.is_selectable = types.includes(node.type);
335+
for (let childNode of node.nodes) {
336+
recursiveSetNodeSelectable(childNode, types);
337+
}
338+
};
339+
340+
for (let node of data) {
341+
recursiveSetNodeSelectable(node, types);
342+
}
343+
}
344+
330345
this.#renderNodes(data);
331346
}
332347
else {
@@ -337,6 +352,27 @@ export class Tree extends HTMLElement {
337352
}
338353
}
339354

355+
setSelectableTypes(types = null) {
356+
if (types == null) return;
357+
358+
let linkElmts = [].slice.call(this.#treeContainerElmt.querySelectorAll(`.nav-tree-item-link`));
359+
for (let linkElmt of linkElmts)
360+
{
361+
let nodeType = linkElmt.getAttribute("data-tree-node-type");
362+
if (nodeType == null) continue;
363+
if (types.includes(nodeType))
364+
{
365+
linkElmt.classList.remove("disabled");
366+
linkElmt.removeAttribute("aria-disabled");
367+
}
368+
else
369+
{
370+
linkElmt.classList.add("disabled");
371+
linkElmt.setAttribute("aria-disabled", true);
372+
}
373+
}
374+
}
375+
340376
select(nodeId) {
341377
this.unselect();
342378
let [nodeType, _nodeId] = nodeId.split("-");

0 commit comments

Comments
 (0)