UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

180 lines (179 loc) 6.59 kB
"use client"; require("../../_virtual/_rolldown/runtime.cjs"); const require_get_all_checked_nodes = require("./get-all-checked-nodes/get-all-checked-nodes.cjs"); const require_get_children_nodes_values = require("./get-children-nodes-values/get-children-nodes-values.cjs"); const require_is_node_checked = require("./is-node-checked/is-node-checked.cjs"); const require_is_node_indeterminate = require("./is-node-indeterminate/is-node-indeterminate.cjs"); let react = require("react"); let _mantine_hooks = require("@mantine/hooks"); //#region packages/@mantine/core/src/components/Tree/use-tree.ts function getInitialTreeExpandedState(initialState, data, value, acc = {}) { data.forEach((node) => { acc[node.value] = node.value in initialState ? initialState[node.value] : node.value === value; if (Array.isArray(node.children)) getInitialTreeExpandedState(initialState, node.children, value, acc); }); return acc; } function getTreeExpandedState(data, expandedNodesValues) { const state = getInitialTreeExpandedState({}, data, []); if (expandedNodesValues === "*") return Object.keys(state).reduce((acc, key) => ({ ...acc, [key]: true }), {}); expandedNodesValues.forEach((node) => { state[node] = true; }); return state; } function getInitialCheckedState(initialState, data) { const acc = []; initialState.forEach((node) => acc.push(...require_get_children_nodes_values.getChildrenNodesValues(node, data))); return Array.from(new Set(acc)); } function useTree({ initialSelectedState = [], expandedState, initialCheckedState = [], checkedState, initialExpandedState = {}, selectedState, multiple = false, onNodeCollapse, onNodeExpand, onCheckedStateChange, onSelectedStateChange, onExpandedStateChange } = {}) { const [data, setData] = (0, react.useState)([]); const [_expandedState, setExpandedState] = (0, _mantine_hooks.useUncontrolled)({ value: expandedState, defaultValue: initialExpandedState, finalValue: {}, onChange: onExpandedStateChange }); const [_selectedState, setSelectedState] = (0, _mantine_hooks.useUncontrolled)({ value: selectedState, defaultValue: initialSelectedState, finalValue: [], onChange: onSelectedStateChange }); const [_checkedState, setCheckedState] = (0, _mantine_hooks.useUncontrolled)({ value: checkedState, defaultValue: initialCheckedState, finalValue: [], onChange: onCheckedStateChange }); const [anchorNode, setAnchorNode] = (0, react.useState)(null); const initialize = (0, react.useCallback)((_data) => { setExpandedState(getInitialTreeExpandedState(_expandedState, _data, _selectedState)); setCheckedState(getInitialCheckedState(_checkedState, _data)); setData(_data); }, [ _selectedState, _checkedState, _expandedState ]); const toggleExpanded = (0, react.useCallback)((value) => { const nextState = { ..._expandedState, [value]: !_expandedState[value] }; nextState[value] ? onNodeExpand?.(value) : onNodeCollapse?.(value); setExpandedState(nextState); }, [ onNodeCollapse, onNodeExpand, _expandedState ]); const collapse = (0, react.useCallback)((value) => { if (_expandedState[value] !== false) onNodeCollapse?.(value); setExpandedState({ ..._expandedState, [value]: false }); }, [onNodeCollapse, _expandedState]); const expand = (0, react.useCallback)((value) => { if (_expandedState[value] !== true) onNodeExpand?.(value); setExpandedState({ ..._expandedState, [value]: true }); }, [onNodeExpand, _expandedState]); const expandAllNodes = (0, react.useCallback)(() => { const nextState = { ..._expandedState }; Object.keys(nextState).forEach((key) => { nextState[key] = true; }); setExpandedState(nextState); }, [_expandedState]); const collapseAllNodes = (0, react.useCallback)(() => { const nextState = { ..._expandedState }; Object.keys(nextState).forEach((key) => { nextState[key] = false; }); setExpandedState(nextState); }, [_expandedState]); const toggleSelected = (0, react.useCallback)((value) => { if (!multiple) { if (_selectedState.includes(value)) { setAnchorNode(null); return []; } setAnchorNode(value); return [value]; } if (_selectedState.includes(value)) { setAnchorNode(null); return _selectedState.filter((item) => item !== value); } setAnchorNode(value); setSelectedState([..._selectedState, value]); }, [_selectedState]); const select = (0, react.useCallback)((value) => { setAnchorNode(value); setSelectedState(multiple ? _selectedState.includes(value) ? _selectedState : [..._selectedState, value] : [value]); }, [_selectedState]); const deselect = (0, react.useCallback)((value) => { anchorNode === value && setAnchorNode(null); setSelectedState(_selectedState.filter((item) => item !== value)); }, [_selectedState]); const clearSelected = (0, react.useCallback)(() => { setSelectedState([]); setAnchorNode(null); }, []); const checkNode = (0, react.useCallback)((value) => { const checkedNodes = require_get_children_nodes_values.getChildrenNodesValues(value, data); setCheckedState(Array.from(new Set([..._checkedState, ...checkedNodes]))); }, [data, _checkedState]); const uncheckNode = (0, react.useCallback)((value) => { const checkedNodes = require_get_children_nodes_values.getChildrenNodesValues(value, data); setCheckedState(_checkedState.filter((item) => !checkedNodes.includes(item))); }, [data, _checkedState]); const checkAllNodes = (0, react.useCallback)(() => { setCheckedState(require_get_children_nodes_values.getAllChildrenNodes(data)); }, [data]); const uncheckAllNodes = (0, react.useCallback)(() => { setCheckedState([]); }, []); const getCheckedNodes = () => require_get_all_checked_nodes.getAllCheckedNodes(data, _checkedState).result; const isNodeChecked = (value) => require_is_node_checked.memoizedIsNodeChecked(value, data, _checkedState); const isNodeIndeterminate = (value) => require_is_node_indeterminate.memoizedIsNodeIndeterminate(value, data, _checkedState); return { multiple, expandedState: _expandedState, selectedState: _selectedState, checkedState: _checkedState, anchorNode, initialize, toggleExpanded, collapse, expand, expandAllNodes, collapseAllNodes, setExpandedState, checkNode, uncheckNode, checkAllNodes, uncheckAllNodes, setCheckedState, toggleSelected, select, deselect, clearSelected, setSelectedState, getCheckedNodes, isNodeChecked, isNodeIndeterminate }; } //#endregion exports.getTreeExpandedState = getTreeExpandedState; exports.useTree = useTree; //# sourceMappingURL=use-tree.cjs.map