UNPKG

@hitachivantara/uikit-react-core

Version:
45 lines (44 loc) 1.85 kB
import { populateInstance } from "../utils.js"; import * as React from "react"; import { useEventCallback } from "@mui/material/utils"; //#region src/TreeView/internals/hooks/plugins/useTreeViewExpansion.ts var useTreeViewExpansion = ({ instance, params, models }) => { const isNodeExpanded = React.useCallback((nodeId) => { return Array.isArray(models.expanded.value) ? models.expanded.value.indexOf(nodeId) !== -1 : false; }, [models.expanded.value]); const isNodeExpandable = React.useCallback((nodeId) => !!instance.getNode(nodeId)?.expandable, [instance]); const toggleNodeExpansion = useEventCallback((event, nodeId) => { if (nodeId == null) return; let newExpanded; if (models.expanded.value.indexOf(nodeId) !== -1) newExpanded = models.expanded.value.filter((id) => id !== nodeId); else newExpanded = [nodeId].concat(models.expanded.value); if (params.onNodeToggle) params.onNodeToggle(event, newExpanded); models.expanded.setValue(newExpanded); }); const expandAllSiblings = (event, nodeId) => { const node = instance.getNode(nodeId); const diff = instance.getChildrenIds(node.parentId).filter((child) => instance.isNodeExpandable(child) && !instance.isNodeExpanded(child)); const newExpanded = models.expanded.value.concat(diff); if (diff.length > 0) { models.expanded.setValue(newExpanded); if (params.onNodeToggle) params.onNodeToggle(event, newExpanded); } }; populateInstance(instance, { isNodeExpanded, isNodeExpandable, toggleNodeExpansion, expandAllSiblings }); }; useTreeViewExpansion.models = { expanded: { controlledProp: "expanded", defaultProp: "defaultExpanded" } }; var DEFAULT_EXPANDED = []; useTreeViewExpansion.getDefaultizedParams = (params) => ({ ...params, defaultExpanded: params.defaultExpanded ?? DEFAULT_EXPANDED }); //#endregion export { useTreeViewExpansion };