{"version":3,"file":"useTreeHelpers.mjs","sources":["../../../../../../src/components/va-tree-view/hooks/useTreeHelpers.ts"],"sourcesContent":["import { PropType, ExtractPropTypes } from 'vue'\n\nimport type { TreeNode, TreeViewFilterMethod, TreeViewPropKey } from '../types'\n\nimport { getValueByKey } from '../../../utils/value-by-key'\n\nexport const useTreeViewProps = {\n  nodes: {\n    type: Array as PropType<TreeNode[]>,\n    default: [],\n  },\n  stateful: {\n    type: Boolean,\n    default: true,\n  },\n  selectable: {\n    type: Boolean,\n    default: false,\n  },\n  selectionType: {\n    type: String,\n    default: 'leaf',\n    validator: (v: string) => ['leaf', 'independent'].includes(v),\n  },\n  valueBy: {\n    type: [String, Function] as PropType<TreeViewPropKey>,\n    default: 'id',\n  },\n  textBy: {\n    type: [String, Function] as PropType<TreeViewPropKey>,\n    default: 'label',\n  },\n  trackBy: {\n    type: [String, Function] as PropType<TreeViewPropKey>,\n    default: 'id',\n  },\n  iconBy: {\n    type: [String, Function] as PropType<TreeViewPropKey>,\n    default: 'icon',\n  },\n  disabledBy: {\n    type: [String, Function] as PropType<TreeViewPropKey>,\n    default: 'disabled',\n  },\n  expandedBy: {\n    type: [String, Function] as PropType<TreeViewPropKey>,\n    default: 'expanded',\n  },\n  checkedBy: {\n    type: [String, Function] as PropType<TreeViewPropKey>,\n    default: 'checked',\n  },\n  childrenBy: {\n    type: [String, Function] as PropType<TreeViewPropKey>,\n    default: 'children',\n  },\n  expandAll: {\n    type: Boolean,\n    default: false,\n  },\n  expanded: {\n    type: Array as PropType<(string | number | TreeNode)[]>,\n    default: [],\n  },\n  expandNodeBy: {\n    type: String as PropType<'leaf' | 'node'>,\n    default: 'leaf',\n  },\n  filter: {\n    type: String,\n    default: '',\n  },\n  filterMethod: {\n    type: Function as PropType<TreeViewFilterMethod | undefined>,\n    default: undefined,\n  },\n  checked: {\n    type: Array as PropType<(string | number | TreeNode)[]>,\n    default: [],\n  },\n  color: {\n    type: String,\n    default: 'primary',\n  },\n}\n\nexport const useTreeViewEmits = ['update:modelValue', 'update:checked', 'update:expanded', 'update:selected']\n\nexport const useTreeHelpers = (props: ExtractPropTypes<typeof useTreeViewProps>) => {\n  const isStringOrNumber = (node: TreeNode): node is any => {\n    const typeOfNode = typeof node\n\n    return typeOfNode === 'string' || typeOfNode === 'number'\n  }\n\n  const getNodeProperty = (node: TreeNode, key: TreeViewPropKey) =>\n    !key || isStringOrNumber(node) ? node : getValueByKey(node, key)\n\n  const getValue = (node: TreeNode) => getNodeProperty(node, props.valueBy)\n\n  const getNodeByValue = (value: TreeNode) => {\n    if (!props.valueBy) { return value }\n\n    return props.nodes.find((node: TreeNode) => value === getValue(node)) || value\n  }\n\n  const getText = (node: TreeNode) => getNodeProperty(node, props.textBy)\n  const getChecked = (node: TreeNode) => getNodeProperty(node, props.checkedBy)\n  const getDisabled = (node: TreeNode) => getNodeProperty(node, props.disabledBy)\n  const getExpanded = (node: TreeNode) => getNodeProperty(node, props.expandedBy)\n  const getTrackBy = (node: TreeNode) => getNodeProperty(node, props.trackBy)\n  const getChildren = (node: TreeNode) => getNodeProperty(node, props.childrenBy) ?? []\n\n  const iterateNodes = (nodes: TreeNode[], cb: (node: TreeNode) => unknown) => {\n    nodes.forEach((node: TreeNode) => {\n      const children = node.children || []\n\n      if (children.length) { iterateNodes(children, cb) }\n\n      cb(node)\n    })\n  }\n\n  return {\n    getText,\n    getValue,\n    getChecked,\n    getTrackBy,\n    getChildren,\n    getDisabled,\n    getExpanded,\n    iterateNodes,\n    getNodeByValue,\n    getNodeProperty,\n  }\n}\n"],"names":[],"mappings":"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"}