Skip to content

Commit

Permalink
primefaces#6950 Fixes performance issue for TreeSelect component
Browse files Browse the repository at this point in the history
  • Loading branch information
sinkersan committed Dec 11, 2024
1 parent 0c5a092 commit 3782131
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions packages/primevue/src/treeselect/TreeSelect.vue
Original file line number Diff line number Diff line change
Expand Up @@ -452,22 +452,11 @@ export default {
onOverlayKeydown(event) {
if (event.code === 'Escape') this.hide();
},
findSelectedNodes(node, keys, selectedNodes) {
if (node) {
if (this.isSelected(node, keys)) {
selectedNodes.push(node);
delete keys[node.key];
}
fillNodeMap(node, nodeMap) {
nodeMap[node.key] = node;
if (Object.keys(keys).length && node.children) {
for (let childNode of node.children) {
this.findSelectedNodes(childNode, keys, selectedNodes);
}
}
} else {
for (let childNode of this.options) {
this.findSelectedNodes(childNode, keys, selectedNodes);
}
if (node.children?.length) {
node.children.forEach(children => this.fillNodeMap(children, nodeMap))
}
},
isSelected(node, keys) {
Expand Down Expand Up @@ -520,13 +509,24 @@ export default {
}
},
computed: {
nodeMap() {
const nodeMap = {};
this.options?.forEach(node => this.fillNodeMap(node, nodeMap))
return nodeMap;
},
selectedNodes() {
let selectedNodes = [];
if (this.d_value && this.options) {
let keys = { ...this.d_value };
Object.keys(this.d_value).forEach(key => {
const node = this.nodeMap[key];
this.findSelectedNodes(null, keys, selectedNodes);
if (this.isSelected(node, this.d_value)) {
selectedNodes.push(node)
}
})
}
return selectedNodes;
Expand Down

0 comments on commit 3782131

Please sign in to comment.