UNPKG

@hitachivantara/uikit-react-core

Version:
46 lines (45 loc) 1.73 kB
import { populateInstance } from "../utils.js"; import { publishTreeViewEvent } from "../../utils/publishTreeViewEvent.js"; import * as React from "react"; import { useEventCallback } from "@mui/material/utils"; //#region src/TreeView/internals/hooks/plugins/useTreeViewNodes.ts var useTreeViewNodes = ({ instance, params }) => { const nodeMap = React.useRef({}); const getNode = React.useCallback((nodeId) => nodeMap.current[nodeId], []); const insertNode = React.useCallback((node) => { nodeMap.current[node.id] = node; }, []); const removeNode = React.useCallback((nodeId) => { const newMap = { ...nodeMap.current }; delete newMap[nodeId]; nodeMap.current = newMap; publishTreeViewEvent(instance, "removeNode", { id: nodeId }); }, [instance]); const isNodeDisabled = React.useCallback((nodeId) => { if (nodeId == null) return false; let node = instance.getNode(nodeId); if (!node) return false; if (node.disabled) return true; while (node.parentId != null) { node = instance.getNode(node.parentId); if (node.disabled) return true; } return false; }, [instance]); const getChildrenIds = useEventCallback((nodeId) => Object.values(nodeMap.current).filter((node) => node.parentId === nodeId).toSorted((a, b) => a.index - b.index).map((child) => child.id)); const getNavigableChildrenIds = (nodeId) => { let childrenIds = instance.getChildrenIds(nodeId); if (!params.disabledItemsFocusable) childrenIds = childrenIds.filter((node) => !instance.isNodeDisabled(node)); return childrenIds; }; populateInstance(instance, { getNode, updateNode: insertNode, removeNode, getChildrenIds, getNavigableChildrenIds, isNodeDisabled }); }; //#endregion export { useTreeViewNodes };