UNPKG

vexip-ui

Version:

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

1 lines 26.7 kB
{"version":3,"file":"tree-node.vue2.cjs","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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"}