UNPKG

tdesign-vue-next

Version:
1 lines 7.73 kB
{"version":3,"file":"useTreeScroll.mjs","sources":["../../../../components/tree/hooks/useTreeScroll.ts"],"sourcesContent":["import { computed, onMounted, TypeRef, TypeScroll, TreeNode } from '../utils/adapt';\nimport { get } from 'lodash-es';\nimport { TypeTreeState, TypeTimer } from '../types';\nimport log from '@tdesign/common-js/log/index';\nimport { useVirtualScrollNew } from '@tdesign/shared-hooks';\n\nimport type { ComponentScrollToElementParams } from '../../common';\n\n// tree 虚拟滚动整合\nexport default function useTreeScroll(state: TypeTreeState) {\n const treeState = state;\n const { props, context, allNodes, nodes, scope, treeContentRef, isScrolling } = treeState;\n\n const scrollProps: TypeRef<TypeScroll> = computed(() => ({\n // 默认一行高度为 34px\n rowHeight: 34,\n ...props.scroll,\n }));\n scope.scrollProps = scrollProps;\n\n // 虚拟滚动\n const virtualScrollParams = computed(() => {\n const list = allNodes.value.filter((node: TreeNode) => node.visible);\n return {\n data: list,\n scroll: scrollProps.value,\n preventResizeRefresh: true,\n };\n });\n\n const virtualConfig = useVirtualScrollNew(treeContentRef, virtualScrollParams);\n scope.virtualConfig = virtualConfig;\n treeState.virtualConfig = virtualConfig;\n\n onMounted(() => {\n const isVirtual = virtualConfig?.isVirtualScroll.value;\n if (isVirtual) {\n virtualConfig.handleScroll();\n }\n });\n\n const emitScrollEvent = (e: WheelEvent) => {\n props.onScroll?.({ e });\n // Vue3 ignore next line\n context.emit('scroll', { e });\n };\n\n // 设置滚动结束状态\n let scrollStopTimer: TypeTimer = null;\n const setScrolling = () => {\n isScrolling.value = true;\n if (scrollStopTimer) {\n clearTimeout(scrollStopTimer);\n scrollStopTimer = null;\n }\n scrollStopTimer = setTimeout(() => {\n scrollStopTimer = null;\n isScrolling.value = false;\n }, 100);\n };\n\n let lastScrollY = 0;\n const onInnerVirtualScroll = (e: WheelEvent) => {\n setScrolling();\n const isVirtual = virtualConfig?.isVirtualScroll.value;\n const target = (e.target || e.srcElement) as HTMLElement;\n const top = target.scrollTop;\n\n // 排除横向滚动触发的纵向虚拟滚动计算\n if (lastScrollY !== top) {\n if (isVirtual) {\n virtualConfig.handleScroll();\n nodes.value = virtualConfig.visibleData.value;\n }\n } else {\n lastScrollY = 0;\n }\n lastScrollY = top;\n emitScrollEvent(e);\n };\n\n const handleScrollTo = (params: ComponentScrollToElementParams) => {\n let index = params.index;\n if (!index && index !== 0) {\n if (!params.key) {\n log.error('Tree', 'scrollToElement: one of `index` or `key` must exist.');\n return;\n }\n index = allNodes.value?.findIndex((item) =>\n [get(item.data, 'key'), get(item.data, props.keys?.['value'] || 'value')].includes(params.key),\n );\n if (index < 0) {\n log.error('Tree', `${params.key} does not exist in data, check \\`key\\` or \\`data\\` please.`);\n return;\n }\n }\n virtualConfig.scrollToElement({ ...params, index: index - 1 });\n };\n return {\n // 虚拟滚动相关\n treeContentRef,\n onInnerVirtualScroll,\n virtualConfig,\n scrollToElement: handleScrollTo,\n };\n}\n"],"names":["useTreeScroll","state","treeState","props","context","allNodes","nodes","scope","treeContentRef","isScrolling","scrollProps","computed","_objectSpread","rowHeight","scroll","virtualScrollParams","list","value","filter","node","visible","data","preventResizeRefresh","virtualConfig","useVirtualScrollNew","onMounted","isVirtual","isVirtualScroll","handleScroll","emitScrollEvent","e","_props$onScroll","onScroll","call","emit","scrollStopTimer","setScrolling","clearTimeout","setTimeout","lastScrollY","onInnerVirtualScroll","target","srcElement","top","scrollTop","visibleData","handleScrollTo","params","index","_allNodes$value","key","log","error","findIndex","item","_props$keys","get","keys","includes","concat","scrollToElement"],"mappings":"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"}