UNPKG

tdesign-mobile-vue

Version:
1 lines 6.05 kB
{"version":3,"file":"list.mjs","sources":["../../src/list/list.tsx"],"sourcesContent":["import { defineComponent, ref } from 'vue';\nimport { useWindowSize, useEventListener } from '@vueuse/core';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport TLoading from '../loading';\nimport config from '../config';\nimport props from './props';\nimport { useScrollParent } from '../shared';\nimport { usePrefixClass, useConfig } from '../hooks/useClass';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n name: `${prefix}-list`,\n components: {\n TLoading,\n },\n props,\n emits: ['load-more', 'scroll'],\n setup(props, { slots }) {\n const listClass = usePrefixClass('list');\n const { globalConfig } = useConfig('list');\n const renderTNodeJSX = useTNodeJSX();\n\n const LOADING_TEXT_MAP = {\n loading: globalConfig.value.loading,\n 'load-more': globalConfig.value.loadingMoreText,\n };\n\n const root = ref<HTMLElement>();\n const scrollParent = useScrollParent(root);\n const { height } = useWindowSize();\n\n const onLoadMore = (e: MouseEvent) => {\n if (props.asyncLoading === 'load-more') {\n props.onLoadMore?.();\n }\n };\n const handleScroll = (e: WheelEvent | Event) => {\n const scrollHeight =\n (e.target as HTMLElement).scrollHeight ||\n Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n const scrollTop =\n (e.target as HTMLElement).scrollTop || document.documentElement.scrollTop || document.body.scrollTop;\n const offsetHeight = (e.target as HTMLElement).offsetHeight || height.value;\n\n props.onScroll?.(scrollHeight - (scrollTop + offsetHeight), scrollTop);\n };\n\n useEventListener(scrollParent, 'scroll', handleScroll);\n return () => {\n const headerContent = renderTNodeJSX('header');\n const footerContent = renderTNodeJSX('footer');\n return (\n <div ref={root} class={listClass.value} onScroll={handleScroll}>\n {headerContent}\n {slots.default && slots.default()}\n <div class={`${listClass.value}__loading--wrapper`} onClick={onLoadMore}>\n {typeof props.asyncLoading === 'string' && ['loading', 'load-more'].includes(props.asyncLoading) && (\n <TLoading\n indicator={props.asyncLoading === 'loading'}\n text={typeof props.asyncLoading === 'string' ? LOADING_TEXT_MAP[props.asyncLoading] : ''}\n class={`${listClass.value}__loading`}\n />\n )}\n </div>\n {footerContent}\n </div>\n );\n };\n },\n});\n"],"names":["prefix","config","defineComponent","name","components","TLoading","props","emits","setup","slots","_ref","listClass","usePrefixClass","_useConfig","useConfig","globalConfig","renderTNodeJSX","useTNodeJSX","LOADING_TEXT_MAP","loading","value","loadingMoreText","root","ref","scrollParent","useScrollParent","_useWindowSize","useWindowSize","height","onLoadMore","e","asyncLoading","_props2$onLoadMore","handleScroll","_props2$onScroll","scrollHeight","target","Math","max","document","documentElement","body","scrollTop","offsetHeight","onScroll","useEventListener","headerContent","footerContent","_createVNode","default","concat","includes"],"mappings":"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"}