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 7f7d23b
Showing 1 changed file with 18 additions and 18 deletions.
36 changes: 18 additions & 18 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 };
if (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 7f7d23b

Please sign in to comment.