diff --git a/javascript/extraNetworks.js b/javascript/extraNetworks.js index 37a1de80e..bdfc4a17e 100644 --- a/javascript/extraNetworks.js +++ b/javascript/extraNetworks.js @@ -1013,24 +1013,22 @@ function extraNetworksTreeFileOnClick(event, btn, tabname_full) { async function extraNetworksTreeDirectoryOnClick(event, btn, tabname_full) { const div_id = btn.dataset.divId; - const tab = extra_networks_tabs[tabname_full]; if (event.target.matches(".tree-list-item-action--leading .tree-list-item-action-chevron")) { - // If user clicks on the chevron, then we do not select the folder. await tab.tree_list.onRowExpandClick(div_id, btn); tab.setDirectoryButtons(); - return; } else if (event.target.matches(".tree-list-item-action--trailing .tree-list-item-action-expand")) { await tab.tree_list.onExpandAllClick(div_id); + tab.setDirectoryButtons(); } else if (event.target.matches(".tree-list-item-action--trailing .tree-list-item-action-collapse")) { await tab.tree_list.onCollapseAllClick(div_id); + tab.setDirectoryButtons(); } else { - // user clicked anywhere else on the row + // No action items were clicked. Select the row. await tab.tree_list.onRowSelected(div_id, btn); + tab.setDirectoryButtons(btn); } - - tab.setDirectoryButtons(btn); } function extraNetworksTreeOnClick(event, tabname_full) { diff --git a/javascript/extraNetworksClusterize.js b/javascript/extraNetworksClusterize.js index be5b186fe..03559c713 100644 --- a/javascript/extraNetworksClusterize.js +++ b/javascript/extraNetworksClusterize.js @@ -260,18 +260,6 @@ class ExtraNetworksClusterizeTreeList extends ExtraNetworksClusterize { return res; } - #setVisibility(div_id, visible) { - /** Recursively sets the visibility of a div_id and its children. */ - const this_obj = this.data_obj[div_id]; - this_obj.visible = visible; - if (!visible && div_id === this.selected_div_id) { - this.selected_div_id = null; - } - for (const child_id of this_obj.children) { - this.#setVisibility(child_id, visible && this_obj.expanded); - } - } - onRowSelected(div_id, elem, override) { /** Selects a row and deselects all others. * @@ -388,6 +376,12 @@ class ExtraNetworksClusterizeTreeList extends ExtraNetworksClusterize { _collapse(child_id); } + // Deselect current selected div id if it was just hidden. + if (!isNullOrUndefined(this.selected_div_id) && !this.data_obj[this.selected_div_id].visible) { + this.selected_div_id = null; + } + + const new_len = Object.values(this.data_obj).filter(v => v.visible).length; await this.setMaxItems(new_len); await this.refresh(true); @@ -403,9 +397,21 @@ class ExtraNetworksClusterizeTreeList extends ExtraNetworksClusterize { // Toggle state this.data_obj[div_id].expanded = !this.data_obj[div_id].expanded; - const visible = this.data_obj[div_id].expanded; + const _set_visibility = (parent_id, visible) => { + const this_obj = this.data_obj[parent_id]; + this_obj.visible = visible; + for (const child_id of this_obj.children) { + _set_visibility(child_id, visible && this_obj.expanded); + } + }; + for (const child_id of this.data_obj[div_id].children) { - this.#setVisibility(child_id, visible); + _set_visibility(child_id, this.data_obj[div_id].expanded); + } + + // Deselect current selected div id if it was just hidden. + if (!isNullOrUndefined(this.selected_div_id) && !this.data_obj[this.selected_div_id].visible) { + this.selected_div_id = null; } const new_len = Object.values(this.data_obj).filter(v => v.visible).length;