removeTreeNodes
import { removeTreeNodes } from 'cx/data'; Copied Recursively removes nodes from a tree structure that match the criteria. Returns a new tree without the matching nodes, or the original tree if no nodes were removed.
const filtered = removeTreeNodes(array, criteria, childrenField);
| Argument | Type | Description |
|---|---|---|
array | T[] | Tree data array to filter. |
criteria | (node: T) => boolean | Predicate returning true for nodes to remove. |
childrenField | keyof T | Name of the property containing child nodes. |
Returns: A new tree with matching nodes removed, or the original array if unchanged.
Examples
Delete node by ID
removeTreeNodes(
data,
(node) => node.id === targetId,
"$children"
);
Remove all leaf nodes
removeTreeNodes(
data,
(node) => node.$leaf === true,
"$children"
);
Remove empty folders
removeTreeNodes(
data,
(node) => !node.$leaf && (!node.$children || node.$children.length === 0),
"$children"
);
Remove with confirmation
function deleteNode(nodeId: number) {
const node = findTreeNode(data, (n) => n.id === nodeId, "$children");
if (!node) return;
if (!node.$leaf && node.$children?.length > 0) {
if (!confirm("Delete folder and all its contents?")) {
return;
}
}
store.update(m.data, (data) =>
removeTreeNodes(data, (n) => n.id === nodeId, "$children")
);
}
See also: updateTree, findTreeNode, Tree Operations