UNPKG

@extclp/vexip-ui

Version:

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

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