{"version":3,"file":"use-tree.cjs","names":["getChildrenNodesValues","findTreeNode","getAllChildrenNodes","getAllCheckedNodes","memoizedIsNodeChecked","memoizedIsNodeIndeterminate"],"sources":["../../../src/components/Tree/use-tree.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { useUncontrolled } from '@mantine/hooks';\nimport {\n  CheckedNodeStatus,\n  getAllCheckedNodes,\n} from './get-all-checked-nodes/get-all-checked-nodes';\nimport {\n  findTreeNode,\n  getAllChildrenNodes,\n  getChildrenNodesValues,\n} from './get-children-nodes-values/get-children-nodes-values';\nimport { memoizedIsNodeChecked } from './is-node-checked/is-node-checked';\nimport { memoizedIsNodeIndeterminate } from './is-node-indeterminate/is-node-indeterminate';\nimport type { TreeNodeData } from './Tree';\n\nexport type TreeExpandedState = Record<string, boolean>;\n\nfunction getInitialTreeExpandedState(\n  initialState: TreeExpandedState,\n  data: TreeNodeData[],\n  value: string | string[] | undefined,\n  acc: TreeExpandedState = {}\n) {\n  data.forEach((node) => {\n    acc[node.value] = node.value in initialState ? initialState[node.value] : node.value === value;\n\n    if (Array.isArray(node.children)) {\n      getInitialTreeExpandedState(initialState, node.children, value, acc);\n    }\n  });\n\n  return acc;\n}\n\nexport function getTreeExpandedState(\n  data: TreeNodeData[],\n  expandedNodesValues: string[] | '*'\n): Record<string, boolean> {\n  const state = getInitialTreeExpandedState({}, data, []);\n\n  if (expandedNodesValues === '*') {\n    const result: Record<string, boolean> = {};\n    const keys = Object.keys(state);\n    for (let i = 0; i < keys.length; i++) {\n      result[keys[i]] = true;\n    }\n    return result;\n  }\n\n  expandedNodesValues.forEach((node) => {\n    state[node] = true;\n  });\n\n  return state;\n}\n\nfunction getInitialCheckedState(\n  initialState: string[],\n  data: TreeNodeData[],\n  checkStrictly: boolean\n) {\n  if (checkStrictly) {\n    return initialState;\n  }\n\n  const acc: string[] = [];\n\n  initialState.forEach((node) => acc.push(...getChildrenNodesValues(node, data)));\n\n  return Array.from(new Set(acc));\n}\n\nfunction getAllNodeValues(data: TreeNodeData[]): string[] {\n  const acc: string[] = [];\n  for (const node of data) {\n    acc.push(node.value);\n    if (Array.isArray(node.children) && node.children.length > 0) {\n      acc.push(...getAllNodeValues(node.children));\n    }\n  }\n  return acc;\n}\n\nexport interface UseTreeInput {\n  /** Initial expanded state of all nodes, uncontrolled state */\n  initialExpandedState?: TreeExpandedState;\n\n  /** Expanded state of all nodes, controlled state */\n  expandedState?: TreeExpandedState;\n\n  /** Called when the tree expanded state changes */\n  onExpandedStateChange?: (expandedState: TreeExpandedState) => void;\n\n  /** Initial selected state of nodes */\n  initialSelectedState?: string[];\n\n  /** Selected state of all nodes, controlled state */\n  selectedState?: string[];\n\n  /** Called when the tree selected state changes */\n  onSelectedStateChange?: (selectedState: string[]) => void;\n\n  /** Initial checked state of nodes */\n  initialCheckedState?: string[];\n\n  /** Checked state of all nodes, controlled state */\n  checkedState?: string[];\n\n  /** Called when the tree checked state changes */\n  onCheckedStateChange?: (checkedState: string[]) => void;\n\n  /** Determines whether multiple node can be selected at a time */\n  multiple?: boolean;\n\n  /** Called with the node value when it is expanded */\n  onNodeExpand?: (value: string) => void;\n\n  /** Called with the node value when it is collapsed */\n  onNodeCollapse?: (value: string) => void;\n\n  /** Called when a node with `hasChildren: true` is expanded for the first time.\n   * The callback should update the tree data with loaded children.\n   */\n  onLoadChildren?: (nodeValue: string) => Promise<void>;\n\n  /** When `true`, checking a parent does not affect children and vice versa.\n   * Each node's checked state is fully independent. @default false\n   */\n  checkStrictly?: boolean;\n}\n\nexport interface UseTreeReturnType {\n  /** When `true`, each node's checked state is independent (no parent-child cascading) */\n  checkStrictly: boolean;\n\n  /** Determines whether multiple node can be selected at a time */\n  multiple: boolean;\n\n  /** A record of `node.value` and boolean values that represent nodes expanded state */\n  expandedState: TreeExpandedState;\n\n  /** An array of selected nodes values */\n  selectedState: string[];\n\n  /** An array of checked nodes values */\n  checkedState: string[];\n\n  /** A value of the node that was last clicked\n   * Anchor node is used to determine range of selected nodes for multiple selection\n   */\n  anchorNode: string | null;\n\n  /** Initializes tree state based on provided data, called automatically by the Tree component */\n  initialize: (data: TreeNodeData[]) => void;\n\n  /** Toggles expanded state of the node with provided value */\n  toggleExpanded: (value: string) => void;\n\n  /** Collapses node with provided value */\n  collapse: (value: string) => void;\n\n  /** Expands node with provided value */\n  expand: (value: string) => void;\n\n  /** Expands all nodes */\n  expandAllNodes: () => void;\n\n  /** Collapses all nodes */\n  collapseAllNodes: () => void;\n\n  /** Sets expanded state */\n  setExpandedState: (value: TreeExpandedState) => void;\n\n  /** Toggles selected state of the node with provided value */\n  toggleSelected: (value: string) => void;\n\n  /** Selects node with provided value */\n  select: (value: string) => void;\n\n  /** Deselects node with provided value */\n  deselect: (value: string) => void;\n\n  /** Clears selected state */\n  clearSelected: () => void;\n\n  /** Sets selected state */\n  setSelectedState: (value: string[]) => void;\n\n  /** Checks node with provided value */\n  checkNode: (value: string) => void;\n\n  /** Unchecks node with provided value */\n  uncheckNode: (value: string) => void;\n\n  /** Checks all nodes */\n  checkAllNodes: () => void;\n\n  /** Unchecks all nodes */\n  uncheckAllNodes: () => void;\n\n  /** Sets checked state */\n  setCheckedState: (value: string[]) => void;\n\n  /** Returns all checked nodes with status */\n  getCheckedNodes: () => CheckedNodeStatus[];\n\n  /** Returns `true` if node with provided value is checked */\n  isNodeChecked: (value: string) => boolean;\n\n  /** Returns `true` if node with provided value is indeterminate */\n  isNodeIndeterminate: (value: string) => boolean;\n\n  /** Returns `true` if the node's children are currently being loaded */\n  isNodeLoading: (value: string) => boolean;\n\n  /** Returns the error from the last failed load attempt for the given node, or `null` */\n  getNodeLoadError: (value: string) => Error | null;\n\n  /** Programmatically triggers loading of a node's children */\n  loadNode: (value: string) => Promise<void>;\n\n  /** Clears the loaded cache for a node, causing it to re-fetch on next expand */\n  invalidateNode: (value: string) => void;\n}\n\nexport function useTree({\n  initialSelectedState = [],\n  expandedState,\n  initialCheckedState = [],\n  checkedState,\n  initialExpandedState = {},\n  selectedState,\n  multiple = false,\n  onNodeCollapse,\n  onNodeExpand,\n  onCheckedStateChange,\n  onSelectedStateChange,\n  onExpandedStateChange,\n  onLoadChildren,\n  checkStrictly = false,\n}: UseTreeInput = {}): UseTreeReturnType {\n  const [data, setData] = useState<TreeNodeData[]>([]);\n  const [_expandedState, setExpandedState] = useUncontrolled({\n    value: expandedState,\n    defaultValue: initialExpandedState,\n    finalValue: {},\n    onChange: onExpandedStateChange,\n  });\n\n  const [_selectedState, setSelectedState] = useUncontrolled({\n    value: selectedState,\n    defaultValue: initialSelectedState,\n    finalValue: [],\n    onChange: onSelectedStateChange,\n  });\n\n  const [_checkedState, setCheckedState] = useUncontrolled({\n    value: checkedState,\n    defaultValue: initialCheckedState,\n    finalValue: [],\n    onChange: onCheckedStateChange,\n  });\n\n  const [anchorNode, setAnchorNode] = useState<string | null>(null);\n\n  const loadingNodesRef = useRef(new Set<string>());\n  const loadedNodesRef = useRef(new Set<string>());\n  const [loadingNodes, setLoadingNodes] = useState<string[]>([]);\n  const [loadErrors, setLoadErrors] = useState<Record<string, Error>>({});\n\n  const initialize = useCallback(\n    (_data: TreeNodeData[]) => {\n      setExpandedState(getInitialTreeExpandedState(_expandedState, _data, _selectedState));\n      setCheckedState(getInitialCheckedState(_checkedState, _data, checkStrictly));\n      setData(_data);\n    },\n    [_selectedState, _checkedState, _expandedState, checkStrictly]\n  );\n\n  const loadNodeImpl = useCallback(\n    async (value: string) => {\n      if (!onLoadChildren) {\n        return;\n      }\n\n      if (loadingNodesRef.current.has(value) || loadedNodesRef.current.has(value)) {\n        return;\n      }\n\n      loadingNodesRef.current.add(value);\n      setLoadingNodes(Array.from(loadingNodesRef.current));\n      setLoadErrors((prev) => {\n        if (!(value in prev)) {\n          return prev;\n        }\n\n        const next = { ...prev };\n        delete next[value];\n        return next;\n      });\n\n      try {\n        await onLoadChildren(value);\n        loadedNodesRef.current.add(value);\n      } catch (error) {\n        const err = error instanceof Error ? error : new Error(String(error));\n        setLoadErrors((prev) => ({ ...prev, [value]: err }));\n      } finally {\n        loadingNodesRef.current.delete(value);\n        setLoadingNodes(Array.from(loadingNodesRef.current));\n      }\n    },\n    [onLoadChildren]\n  );\n\n  const tryLoadAsync = useCallback(\n    (value: string) => {\n      if (!onLoadChildren) {\n        return;\n      }\n\n      const node = findTreeNode(value, data);\n      if (node && node.hasChildren && !Array.isArray(node.children)) {\n        loadNodeImpl(value);\n      }\n    },\n    [onLoadChildren, data, loadNodeImpl]\n  );\n\n  const toggleExpanded = useCallback(\n    (value: string) => {\n      const nextState = { ..._expandedState, [value]: !_expandedState[value] };\n      nextState[value] ? onNodeExpand?.(value) : onNodeCollapse?.(value);\n      if (nextState[value]) {\n        tryLoadAsync(value);\n      }\n      setExpandedState(nextState);\n    },\n    [onNodeCollapse, onNodeExpand, _expandedState, tryLoadAsync]\n  );\n\n  const collapse = useCallback(\n    (value: string) => {\n      if (_expandedState[value] !== false) {\n        onNodeCollapse?.(value);\n      }\n\n      setExpandedState({ ..._expandedState, [value]: false });\n    },\n    [onNodeCollapse, _expandedState]\n  );\n\n  const expand = useCallback(\n    (value: string) => {\n      if (_expandedState[value] !== true) {\n        onNodeExpand?.(value);\n      }\n\n      tryLoadAsync(value);\n      setExpandedState({ ..._expandedState, [value]: true });\n    },\n    [onNodeExpand, _expandedState, tryLoadAsync]\n  );\n\n  const expandAllNodes = useCallback(() => {\n    const nextState = { ..._expandedState };\n    Object.keys(nextState).forEach((key) => {\n      nextState[key] = true;\n      tryLoadAsync(key);\n    });\n\n    setExpandedState(nextState);\n  }, [_expandedState, tryLoadAsync]);\n\n  const collapseAllNodes = useCallback(() => {\n    const nextState = { ..._expandedState };\n    Object.keys(nextState).forEach((key) => {\n      nextState[key] = false;\n    });\n\n    setExpandedState(nextState);\n  }, [_expandedState]);\n\n  const toggleSelected = useCallback(\n    (value: string) => {\n      if (!multiple) {\n        if (_selectedState.includes(value)) {\n          setAnchorNode(null);\n          return [];\n        }\n\n        setAnchorNode(value);\n        return [value];\n      }\n\n      if (_selectedState.includes(value)) {\n        setAnchorNode(null);\n        return _selectedState.filter((item) => item !== value);\n      }\n\n      setAnchorNode(value);\n      setSelectedState([..._selectedState, value]);\n    },\n    [_selectedState]\n  );\n\n  const select = useCallback(\n    (value: string) => {\n      setAnchorNode(value);\n      setSelectedState(\n        multiple\n          ? _selectedState.includes(value)\n            ? _selectedState\n            : [..._selectedState, value]\n          : [value]\n      );\n    },\n    [_selectedState]\n  );\n\n  const deselect = useCallback(\n    (value: string) => {\n      anchorNode === value && setAnchorNode(null);\n      setSelectedState(_selectedState.filter((item) => item !== value));\n    },\n    [_selectedState]\n  );\n\n  const clearSelected = useCallback(() => {\n    setSelectedState([]);\n    setAnchorNode(null);\n  }, []);\n\n  const checkNode = useCallback(\n    (value: string) => {\n      if (checkStrictly) {\n        if (!_checkedState.includes(value)) {\n          setCheckedState([..._checkedState, value]);\n        }\n      } else {\n        const checkedNodes = getChildrenNodesValues(value, data);\n        setCheckedState(Array.from(new Set([..._checkedState, ...checkedNodes])));\n      }\n    },\n    [data, _checkedState, checkStrictly]\n  );\n\n  const uncheckNode = useCallback(\n    (value: string) => {\n      if (checkStrictly) {\n        setCheckedState(_checkedState.filter((item) => item !== value));\n      } else {\n        const checkedNodes = getChildrenNodesValues(value, data);\n        setCheckedState(_checkedState.filter((item) => !checkedNodes.includes(item)));\n      }\n    },\n    [data, _checkedState, checkStrictly]\n  );\n\n  const checkAllNodes = useCallback(() => {\n    if (checkStrictly) {\n      setCheckedState(getAllNodeValues(data));\n    } else {\n      setCheckedState(getAllChildrenNodes(data));\n    }\n  }, [data, checkStrictly]);\n\n  const uncheckAllNodes = useCallback(() => {\n    setCheckedState([]);\n  }, []);\n\n  const getCheckedNodes = useCallback((): CheckedNodeStatus[] => {\n    if (checkStrictly) {\n      return _checkedState.map((value) => {\n        const node = findTreeNode(value, data);\n        return {\n          checked: true,\n          indeterminate: false,\n          value,\n          hasChildren: node\n            ? (Array.isArray(node.children) && node.children.length > 0) || !!node.hasChildren\n            : false,\n        };\n      });\n    }\n    return getAllCheckedNodes(data, _checkedState).result;\n  }, [checkStrictly, _checkedState, data]);\n\n  const isNodeChecked = useCallback(\n    (value: string) => {\n      if (checkStrictly) {\n        return _checkedState.includes(value);\n      }\n      return memoizedIsNodeChecked(value, data, _checkedState);\n    },\n    [checkStrictly, _checkedState, data]\n  );\n\n  const isNodeIndeterminate = useCallback(\n    (value: string) => {\n      if (checkStrictly) {\n        return false;\n      }\n      return memoizedIsNodeIndeterminate(value, data, _checkedState);\n    },\n    [checkStrictly, _checkedState, data]\n  );\n\n  const isNodeLoading = useCallback(\n    (value: string) => loadingNodes.includes(value),\n    [loadingNodes]\n  );\n\n  const getNodeLoadError = useCallback((value: string) => loadErrors[value] || null, [loadErrors]);\n\n  const invalidateNode = useCallback((value: string) => {\n    loadedNodesRef.current.delete(value);\n    setLoadErrors((prev) => {\n      if (!(value in prev)) {\n        return prev;\n      }\n\n      const next = { ...prev };\n      delete next[value];\n      return next;\n    });\n  }, []);\n\n  return useMemo(\n    () => ({\n      checkStrictly,\n      multiple,\n      expandedState: _expandedState,\n      selectedState: _selectedState,\n      checkedState: _checkedState,\n      anchorNode,\n      initialize,\n\n      toggleExpanded,\n      collapse,\n      expand,\n      expandAllNodes,\n      collapseAllNodes,\n      setExpandedState,\n\n      checkNode,\n      uncheckNode,\n      checkAllNodes,\n      uncheckAllNodes,\n      setCheckedState,\n\n      toggleSelected,\n      select,\n      deselect,\n      clearSelected,\n      setSelectedState,\n\n      getCheckedNodes,\n      isNodeChecked,\n      isNodeIndeterminate,\n\n      isNodeLoading,\n      getNodeLoadError,\n      loadNode: loadNodeImpl,\n      invalidateNode,\n    }),\n    [\n      checkStrictly,\n      multiple,\n      _expandedState,\n      _selectedState,\n      _checkedState,\n      anchorNode,\n      initialize,\n      toggleExpanded,\n      collapse,\n      expand,\n      expandAllNodes,\n      collapseAllNodes,\n      setExpandedState,\n      checkNode,\n      uncheckNode,\n      checkAllNodes,\n      uncheckAllNodes,\n      setCheckedState,\n      toggleSelected,\n      select,\n      deselect,\n      clearSelected,\n      setSelectedState,\n      getCheckedNodes,\n      isNodeChecked,\n      isNodeIndeterminate,\n      isNodeLoading,\n      getNodeLoadError,\n      loadNodeImpl,\n      invalidateNode,\n    ]\n  );\n}\n\nexport type TreeController = ReturnType<typeof useTree>;\n"],"mappings":"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"}