UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 27.4 kB
{"version":3,"file":"tree-node.vue2.mjs","sources":["../../../components/tree/tree-node.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Checkbox } from '@/components/checkbox'\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\n\nimport { computed, inject, nextTick, onBeforeUnmount, reactive, ref, watch } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\nimport { decide, isNull } from '@vexip-ui/utils'\nimport { TREE_STATE } from './symbol'\n\nimport type { PropType } from 'vue'\nimport type { TreeNodeProps } from './symbol'\n\ndefineOptions({ name: 'TreeNode', inheritAttrs: false })\n\nconst props = defineProps({\n node: {\n type: Object as PropType<TreeNodeProps>,\n default: () => ({}),\n },\n})\n\nconst treeState = inject(TREE_STATE)!\n\nconst nh = useNameHelper('tree')\nconst icons = useIcons()\n\nconst { isRtl } = useRtl()\n\nconst wrapper = ref<HTMLElement>()\nconst arrowEl = ref<HTMLElement>()\n\nconst parentState = computed(() => {\n return props.node.parent ? treeState.nodeStates.get(props.node.parent) : undefined\n})\n\nuseModifier({\n target: wrapper,\n passive: false,\n onKeyDown: (event, modifier) => {\n if (treeState.expanding) return\n\n decide(\n [\n [\n () => modifier.up || modifier.down,\n () => treeState.handleHittingChange(modifier.up ? 'up' : 'down'),\n ],\n [\n () => modifier.left || modifier.right,\n () => {\n const hasChild = props.node.children?.length > 0\n\n if (modifier.right && props.node.expanded && hasChild) {\n treeState.handleHittingChange('down')\n } else if (modifier.left && (!props.node.expanded || !hasChild)) {\n treeState.handleNodeHitting(parentState.value?.el)\n } else {\n toggleExpanded(modifier.right)\n }\n },\n ],\n [() => hasCheckbox.value && modifier.space, handleToggleCheck],\n [() => modifier.enter, handleToggleSelect],\n ],\n {\n beforeMatchAny: () => {\n event.preventDefault()\n event.stopPropagation()\n },\n afterMatchAny: modifier.resetAll,\n },\n )\n },\n})\n\nconst loaded = ref(!treeState.boundAsyncLoad || props.node.loaded)\nconst loadFail = ref(treeState.boundAsyncLoad && props.node.loadFail)\nconst dragging = ref(false)\nconst isDragOver = ref(false)\nconst focused = ref(false)\n\nconst isDisabled = computed(() => {\n return (!treeState.noCascaded && parentState.value?.disabled) || props.node.disabled\n})\nconst isReadonly = computed(() => {\n return (!treeState.noCascaded && parentState.value?.readonly) || props.node.readonly\n})\n// const depth = computed(() => parentState.depth + 1)\nconst secondary = computed(\n () => !props.node.matched && (props.node.childMatched || props.node.upperMatched),\n)\nconst hasLinkLine = computed(() => !!treeState.linkLine && props.node.depth > 0)\nconst className = computed(() => {\n return {\n [nh.be('node')]: true,\n [nh.bem('node', 'last')]: props.node.last,\n [nh.bem('node', 'focused')]: focused.value,\n [nh.bem('node', 'selected')]: props.node.selected,\n [nh.bem('node', 'expanded')]: props.node.expanded,\n [nh.bem('node', 'disabled')]: isDisabled.value,\n [nh.bem('node', 'readonly')]: isReadonly.value,\n [nh.bem('node', 'secondary')]: secondary.value,\n [nh.bem('node', 'dragging')]: dragging.value,\n [nh.bem('node', 'drag-over')]: isDragOver.value,\n [nh.bem('node', 'link-line')]: hasLinkLine.value,\n [nh.bem('node', 'no-arrow')]: !hasArrow.value,\n [nh.bem('node', 'is-floor')]: treeState.floorSelect && props.node.children?.length,\n [nh.bem('node', 'loaded')]: loaded.value,\n [nh.bem('node', 'load-fail')]: loadFail.value,\n }\n})\nconst isLeaf = computed(() => {\n const isLeaf = props.node.isLeaf\n\n let leafSign: boolean | 'auto' = 'auto'\n let asyncLoad = false\n\n if (isNull(isLeaf) || isLeaf === 'auto') {\n leafSign = 'auto'\n asyncLoad = treeState.boundAsyncLoad\n } else {\n leafSign = isLeaf\n }\n\n return leafSign === 'auto'\n ? !(props.node.children?.length || (asyncLoad && !loaded.value))\n : !!leafSign\n})\nconst hasArrow = computed(() => {\n return isNull(props.node.arrow) || props.node.arrow === 'auto'\n ? treeState.arrow === 'auto'\n ? !isLeaf.value\n : treeState.arrow\n : props.node.arrow\n})\nconst hasCheckbox = computed(() => {\n const checkbox = props.node.checkbox\n\n return isNull(checkbox) ? treeState.checkbox : checkbox\n})\n// const renderer = computed(() => treeState.renderer)\nconst suffixCheckbox = computed(() => treeState.suffixCheckbox)\nconst nodeState = reactive({\n el: wrapper,\n depth: computed(() => props.node.depth),\n disabled: isDisabled,\n readonly: isReadonly,\n})\n\nwatch([() => treeState.boundAsyncLoad, () => props.node.loaded], values => {\n loaded.value = !values[0] || values[1]\n})\nwatch([() => treeState.boundAsyncLoad, () => props.node.loadFail], values => {\n loadFail.value = !values[0] || values[1]\n})\nwatch(\n () => props.node.id,\n (value, prev) => {\n treeState.nodeStates.delete(prev)\n treeState.nodeStates.set(value, nodeState)\n },\n)\n\ntreeState.nodeStates.set(props.node.id, nodeState)\n\nlet dragTimer: ReturnType<typeof setTimeout>\n\nonBeforeUnmount(() => {\n clearTimeout(dragTimer)\n treeState.nodeStates.set(props.node.id, nodeState)\n})\n\n// function updateVisible() {\n// treeState.updateVisibleNodeEls()\n// }\n\nfunction setValue<T = unknown>(key: keyof TreeNodeProps, value: T) {\n ;(props.node as any)[key] = value\n}\n\nfunction handleClick() {\n treeState.handleNodeClick(props.node)\n\n if (treeState.blockEffect) {\n handleLabelClick()\n }\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n treeState.handleNodeContextmenu(event, props.node)\n}\n\nfunction handleToggleCheck(able = !props.node.checked) {\n if (isDisabled.value || props.node.checkDisabled) return\n\n setValue('checked', able)\n setValue('partial', false)\n\n nextTick(() => {\n treeState.computeCheckedState(props.node, able)\n })\n}\n\nasync function toggleExpanded(able = !props.node.expanded) {\n if (\n treeState.expanding ||\n props.node.loading ||\n isDisabled.value ||\n props.node.expandDisabled ||\n isLeaf.value\n ) {\n return\n }\n\n if (able && treeState.boundAsyncLoad && !loaded.value) {\n setValue('loading', true)\n\n const result = await treeState.handleAsyncLoad(props.node)\n\n asyncLoadCallback(result)\n } else {\n setValue('expanded', able)\n\n if (able) {\n treeState.handleNodeExpand(props.node)\n } else {\n treeState.handleNodeReduce(props.node)\n }\n }\n}\n\nasync function handleToggleSelect(able = !props.node.selected) {\n if (isDisabled.value || props.node.selectDisabled) return\n\n if (treeState.floorSelect) {\n await toggleExpanded()\n return\n }\n\n const selected = !isReadonly.value && able\n\n if (selected || !treeState.keepSelected) {\n setValue('selected', selected)\n }\n\n // 只读时也派发 select 事件\n if (isReadonly.value || able) {\n treeState.handleNodeSelect(props.node)\n } else if (treeState.multiple || !treeState.keepSelected) {\n treeState.handleNodeCancel(props.node)\n }\n}\n\nfunction handleLabelClick() {\n treeState.handleLabelClick(props.node)\n handleToggleSelect()\n}\n\nfunction asyncLoadCallback(success = true) {\n setValue('loading', false)\n setValue('expanded', success !== false)\n\n if (success !== false) {\n setValue('loaded', true)\n setValue('loadFail', false)\n\n if (props.node.children?.length) {\n treeState.handleNodeExpand(props.node)\n } else {\n setValue('arrow', false)\n }\n } else {\n setValue('loadFail', true)\n }\n}\n\nfunction getNodeState() {\n return {\n el: wrapper.value,\n arrow: arrowEl.value,\n node: props.node,\n }\n}\n\nfunction handleDragStart() {\n if (!treeState.draggable) return\n\n dragging.value = true\n treeState.handleNodeDragStart(getNodeState())\n}\n\nfunction handleDragOver(event: DragEvent) {\n if (!treeState.draggable || !treeState.dragging) return\n\n clearTimeout(dragTimer)\n event.stopPropagation()\n event.preventDefault()\n\n isDragOver.value = true\n\n treeState.handleNodeDragOver(getNodeState(), event)\n}\n\nfunction handleDragLeave(event: DragEvent) {\n if (!treeState.draggable) return\n\n clearTimeout(dragTimer)\n event.preventDefault()\n\n dragTimer = setTimeout(() => {\n isDragOver.value = false\n }, 100)\n}\n\nfunction handleDrop(event: DragEvent) {\n if (!treeState.draggable || !treeState.dragging) return\n\n clearTimeout(dragTimer)\n event.stopPropagation()\n event.preventDefault()\n\n isDragOver.value = false\n\n treeState.handleNodeDrop(getNodeState())\n}\n\nfunction handleDragEnd(event: DragEvent) {\n if (!treeState.draggable || !treeState.dragging) return\n\n event.stopPropagation()\n dragging.value = false\n treeState.handleNodeDragEnd(getNodeState())\n}\n</script>\n\n<template>\n <li\n v-bind=\"$attrs\"\n ref=\"wrapper\"\n :class=\"className\"\n :draggable=\"treeState.draggable\"\n tabindex=\"-1\"\n :aria-disabled=\"isDisabled\"\n :aria-grabbed=\"treeState.draggable && dragging ? 'true' : undefined\"\n :style=\"{ [nh.cv('depth')]: node.depth }\"\n @click.left=\"handleClick\"\n @contextmenu=\"handleContextmenu\"\n @focus=\"focused = true\"\n @blur=\"focused = false\"\n @dragstart.stop=\"handleDragStart\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @dragend=\"handleDragEnd\"\n @drop=\"handleDrop\"\n >\n <slot\n :data=\"node.data\"\n :node=\"node\"\n :depth=\"node.depth\"\n :focused=\"focused\"\n :line-count=\"0\"\n :line-indexes=\"node.lineIndexes\"\n :toggle-check=\"handleToggleCheck\"\n :toggle-expand=\"toggleExpanded\"\n :toggle-select=\"handleToggleSelect\"\n >\n <template v-if=\"hasLinkLine\">\n <div\n v-for=\"(lineIndex, index) in node.lineIndexes\"\n :key=\"index\"\n :class=\"[\n nh.be('link-line'),\n nh.bem('link-line', 'vertical'),\n !index && nh.bem('link-line', 'first')\n ]\"\n :style=\"{ [nh.cv('link-line-index')]: lineIndex }\"\n aria-hidden=\"true\"\n ></div>\n\n <div\n :class=\"[nh.be('link-line'), nh.bem('link-line', 'horizontal')]\"\n aria-hidden=\"true\"\n ></div>\n </template>\n <div\n :class=\"{\n [nh.be('content')]: true,\n [nh.bem('content', 'effect')]: treeState.blockEffect,\n [nh.bem('content', 'disabled')]:\n treeState.blockEffect && (isDisabled || node.selectDisabled)\n }\"\n >\n <span\n ref=\"arrowEl\"\n :class=\"{\n [nh.be('arrow')]: true,\n [nh.bem('arrow', 'transparent')]: !node.loading && !hasArrow,\n [nh.bem('arrow', 'expanded')]: node.expanded,\n [nh.bem('arrow', 'disabled')]: isDisabled || node.expandDisabled\n }\"\n :aria-hidden=\"!node.loading && !hasArrow\"\n @click.stop=\"toggleExpanded()\"\n >\n <Icon v-if=\"node.loading\" v-bind=\"icons.loading\" label=\"loading\"></Icon>\n <slot\n v-else\n name=\"arrow\"\n :data=\"node.data\"\n :node=\"node\"\n :depth=\"node.depth\"\n :focused=\"focused\"\n >\n <Icon v-if=\"treeState.arrowIcon\" :icon=\"treeState.arrowIcon\"></Icon>\n <Icon v-else v-bind=\"isRtl ? icons.angleLeft : icons.angleRight\"></Icon>\n </slot>\n </span>\n <Checkbox\n v-if=\"hasCheckbox && !suffixCheckbox\"\n inherit\n :class=\"nh.be('checkbox')\"\n :tab-index=\"-1\"\n :control=\"hasArrow\"\n :checked=\"node.checked\"\n :disabled=\"isDisabled || node.checkDisabled\"\n :partial=\"node.partial\"\n @click.prevent.stop=\"handleToggleCheck()\"\n ></Checkbox>\n <div\n :class=\"{\n [nh.be('label')]: true,\n [nh.bem('label', 'effect')]: !treeState.blockEffect,\n [nh.bem('label', 'disabled')]:\n !treeState.blockEffect && (isDisabled || node.selectDisabled)\n }\"\n @click=\"!treeState.blockEffect && handleLabelClick()\"\n >\n <div v-if=\"treeState.prefixRenderer || $slots.prefix\" :class=\"nh.be('prefix')\">\n <Renderer\n v-if=\"treeState.prefixRenderer\"\n :renderer=\"treeState.prefixRenderer\"\n :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n ></Renderer>\n <slot\n v-else\n name=\"prefix\"\n :data=\"node.data\"\n :node=\"node\"\n :depth=\"node.depth\"\n :focused=\"focused\"\n ></slot>\n </div>\n <div :class=\"nh.be('text')\">\n <Renderer\n v-if=\"treeState.renderer\"\n :renderer=\"treeState.renderer\"\n :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n ></Renderer>\n <slot\n v-else\n name=\"label\"\n :data=\"node.data\"\n :node=\"node\"\n :depth=\"node.depth\"\n :focused=\"focused\"\n >\n {{ node.data[treeState.labelKey] }}\n </slot>\n </div>\n <div v-if=\"treeState.suffixRenderer || $slots.suffix\" :class=\"nh.be('suffix')\">\n <Renderer\n v-if=\"treeState.suffixRenderer\"\n :renderer=\"treeState.suffixRenderer\"\n :data=\"{ node, depth: node.depth, data: node.data, focused }\"\n ></Renderer>\n <slot\n v-else\n name=\"suffix\"\n :data=\"node.data\"\n :node=\"node\"\n :depth=\"node.depth\"\n :focused=\"focused\"\n ></slot>\n </div>\n </div>\n <Checkbox\n v-if=\"hasCheckbox && suffixCheckbox\"\n inherit\n :class=\"[nh.be('checkbox'), nh.bem('checkbox', 'suffix')]\"\n :tab-index=\"-1\"\n :control=\"hasArrow\"\n :checked=\"node.checked\"\n :disabled=\"isDisabled || node.checkDisabled\"\n :partial=\"node.partial\"\n @click.prevent.stop=\"handleToggleCheck()\"\n ></Checkbox>\n </div>\n </slot>\n </li>\n</template>\n"],"names":["props","__props","treeState","inject","TREE_STATE","nh","useNameHelper","icons","useIcons","isRtl","useRtl","wrapper","ref","arrowEl","parentState","computed","useModifier","event","modifier","decide","hasChild","_a","_b","toggleExpanded","hasCheckbox","handleToggleCheck","handleToggleSelect","loaded","loadFail","dragging","isDragOver","focused","isDisabled","isReadonly","secondary","hasLinkLine","className","hasArrow","isLeaf","leafSign","asyncLoad","isNull","checkbox","suffixCheckbox","nodeState","reactive","watch","values","value","prev","dragTimer","onBeforeUnmount","setValue","key","handleClick","handleLabelClick","handleContextmenu","able","nextTick","result","asyncLoadCallback","selected","success","getNodeState","handleDragStart","handleDragOver","handleDragLeave","handleDrop","handleDragEnd","_createElementBlock","_mergeProps","_ctx","_unref","_renderSlot","_Fragment","_openBlock","lineIndex","index","_normalizeClass","_normalizeStyle","_createElementVNode","_createBlock","Icon","_normalizeProps","Checkbox","_cache","$event","$slots","Renderer","_createTextVNode","_toDisplayString"],"mappings":"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"}