vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 6.22 kB
Source Map (JSON)
{"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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"}