tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 10.7 kB
Source Map (JSON)
{"version":3,"file":"list.mjs","sources":["../../../components/list/list.tsx"],"sourcesContent":["import { defineComponent, VNodeChild, computed, ref } from 'vue';\nimport { omit, isString } from 'lodash-es';\n\nimport { useConfig, useTNodeJSX, usePrefixClass, useCommonClassName } from '@tdesign/shared-hooks';\nimport TLoading from '../loading';\nimport TListItem from './list-item';\nimport props from './props';\nimport { LOAD_MORE, LOADING } from './consts';\n\nimport { useListItems, useListVirtualScroll } from './hooks';\n\nimport type { TdListProps } from './type';\n\nexport default defineComponent({\n name: 'TList',\n props,\n setup(props: TdListProps, { expose }) {\n const listRef = ref();\n\n const { globalConfig } = useConfig('list');\n const COMPONENT_NAME = usePrefixClass('list');\n const { SIZE } = useCommonClassName();\n const renderTNodeJSX = useTNodeJSX();\n const { listItems } = useListItems();\n\n const { virtualConfig, cursorStyle, listStyle, isVirtualScroll, onInnerVirtualScroll, scrollToElement } =\n useListVirtualScroll(props.scroll, listRef, listItems);\n\n /** 列表基础逻辑 start */\n const listClass = computed(() => {\n return [\n `${COMPONENT_NAME.value}`,\n SIZE.value[props.size],\n {\n [`${COMPONENT_NAME.value}--split`]: props.split,\n [`${COMPONENT_NAME.value}--stripe`]: props.stripe,\n [`${COMPONENT_NAME.value}--vertical-action`]: props.layout === 'vertical',\n },\n ];\n });\n const renderContent = (): VNodeChild => {\n const propsHeaderContent = renderTNodeJSX('header');\n const propsFooterContent = renderTNodeJSX('footer');\n const isVirtualScroll = virtualConfig.isVirtualScroll.value;\n return (\n <>\n {propsHeaderContent ? <div class={`${COMPONENT_NAME.value}__header`}>{propsHeaderContent}</div> : null}\n {isVirtualScroll ? (\n <>\n <div style={cursorStyle.value}></div>\n <ul class={`${COMPONENT_NAME.value}__inner`} style={listStyle.value}>\n {virtualConfig.visibleData.value.map((item) => (\n <>\n <TListItem v-slots={item.slots} {...omit(item, 'slots')}></TListItem>\n </>\n ))}\n </ul>\n </>\n ) : (\n <ul class={`${COMPONENT_NAME.value}__inner`}>{renderTNodeJSX('default')}</ul>\n )}\n {propsFooterContent ? <div class={`${COMPONENT_NAME.value}__footer`}>{propsFooterContent}</div> : null}\n </>\n );\n };\n /** 列表基础逻辑 end */\n\n /** 滚动相关逻辑 start */\n const handleScroll = (e: WheelEvent) => {\n const listElement = e.target as HTMLElement;\n const { scrollTop, scrollHeight, clientHeight } = listElement;\n if (isVirtualScroll.value) onInnerVirtualScroll(e);\n props.onScroll?.({\n e,\n scrollTop,\n scrollBottom: scrollHeight - clientHeight - scrollTop,\n });\n };\n /** 滚动相关逻辑 end */\n\n /** loading加载相关逻辑 start */\n const loadingClass = computed(() => {\n return isString(props.asyncLoading) && ['loading', 'load-more'].includes(props.asyncLoading)\n ? `${COMPONENT_NAME.value}__load ${COMPONENT_NAME.value}__load--${props.asyncLoading}`\n : `${COMPONENT_NAME.value}__load`;\n });\n\n const renderLoading = () => {\n if (props.asyncLoading && isString(props.asyncLoading)) {\n if (props.asyncLoading === LOADING) {\n return (\n <div>\n <TLoading />\n <span>{globalConfig.value.loadingText}</span>\n </div>\n );\n }\n if (props.asyncLoading === LOAD_MORE) {\n return <span>{globalConfig.value.loadingMoreText}</span>;\n }\n }\n return renderTNodeJSX('asyncLoading');\n };\n\n const handleLoadMore = (e: MouseEvent) => {\n if (isString(props.asyncLoading) && props.asyncLoading !== LOAD_MORE) return;\n props.onLoadMore?.({ e });\n };\n expose({ scrollTo: scrollToElement });\n return () => {\n const listContent = [\n renderContent(),\n <div class={loadingClass.value} onClick={handleLoadMore}>\n {renderLoading()}\n </div>,\n ];\n\n return (\n <div\n class={listClass.value}\n onScroll={handleScroll}\n ref={listRef}\n style={isVirtualScroll.value ? 'position:relative' : undefined}\n >\n {listContent}\n </div>\n );\n };\n },\n});\n"],"names":["defineComponent","name","props","setup","expose","_ref","listRef","ref","_useConfig","useConfig","globalConfig","COMPONENT_NAME","usePrefixClass","_useCommonClassName","useCommonClassName","SIZE","renderTNodeJSX","useTNodeJSX","_useListItems","useListItems","listItems","_useListVirtualScroll","useListVirtualScroll","scroll","virtualConfig","cursorStyle","listStyle","isVirtualScroll","onInnerVirtualScroll","scrollToElement","listClass","computed","concat","value","size","_defineProperty","split","stripe","layout","renderContent","propsHeaderContent","propsFooterContent","_createVNode","_Fragment","visibleData","map","item","TListItem","omit","slots","handleScroll","e","_props2$onScroll","listElement","target","scrollTop","scrollHeight","clientHeight","onScroll","scrollBottom","loadingClass","isString","asyncLoading","includes","renderLoading","LOADING","TLoading","loadingText","LOAD_MORE","loadingMoreText","handleLoadMore","_props2$onLoadMore","onLoadMore","scrollTo","listContent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,YAAeA,eAAgB,CAAA;AAC7BC,EAAAA,IAAM,EAAA,OAAA;AACNC,EAAAA,KAAA,EAAAA,KAAA;AACAC,EAAAA,KAAMD,WAANC,KAAMD,CAAAA,MAAAA,EAAAA,IAAAA,EAAgC;AAAA,IAAA,IAAVE,MAAA,GAAAC,IAAA,CAAAD,MAAA,CAAA;AAC1B,IAAA,IAAME,UAAUC,GAAI,EAAA,CAAA;AAEpB,IAAA,IAAAC,UAAA,GAAyBC,SAAA,CAAU,MAAM,CAAA;MAAjCC,YAAA,GAAAF,UAAA,CAAAE,YAAA,CAAA;AACF,IAAA,IAAAC,cAAA,GAAiBC,eAAe,MAAM,CAAA,CAAA;AACtC,IAAA,IAAAC,mBAAA,GAAWC,kBAAmB,EAAA;MAA5BC,IAAK,GAAAF,mBAAA,CAALE,IAAK,CAAA;AACb,IAAA,IAAMC,iBAAiBC,WAAY,EAAA,CAAA;AAC7B,IAAA,IAAAC,aAAA,GAAgBC,YAAa,EAAA;MAA3BC,SAAU,GAAAF,aAAA,CAAVE,SAAU,CAAA;IAElB,IAAAC,qBAAA,GACEC,oBAAqBpB,CAAAA,MAAAA,CAAMqB,MAAQ,EAAAjB,OAAA,EAASc,SAAS,CAAA;MAD/CI,aAAA,GAAAH,qBAAA,CAAAG,aAAA;MAAeC,WAAa,GAAAJ,qBAAA,CAAbI,WAAa;MAAAC,SAAA,GAAAL,qBAAA,CAAAK,SAAA;MAAWC,eAAiB,GAAAN,qBAAA,CAAjBM,eAAiB;MAAAC,oBAAA,GAAAP,qBAAA,CAAAO,oBAAA;MAAsBC,eAAgB,GAAAR,qBAAA,CAAhBQ,eAAgB,CAAA;AAIhG,IAAA,IAAAC,SAAA,GAAYC,SAAS,YAAM;MACxB,OAAA,CAAA,EAAA,CAAAC,MAAA,CACFrB,cAAe,CAAAsB,KAAA,CAClBlB,EAAAA,IAAA,CAAKkB,MAAM/B,MAAM,CAAAgC,IAAA,CAAA,EAAAC,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAA,EAAA,EAAA,EAAA,CAAAH,MAAA,CAEXrB,cAAe,CAAAsB,KAAA,EAAiB/B,SAAAA,CAAAA,EAAAA,MAAM,CAAAkC,KAAA,CAAAJ,EAAAA,EAAAA,CAAAA,MAAA,CACtCrB,cAAe,CAAAsB,KAAA,EAAA,UAAA,CAAA,EAAkB/B,MAAM,CAAAmC,MAAA,CAAAL,EAAAA,EAAAA,CAAAA,MAAA,CACvCrB,cAAe,CAAAsB,KAAA,EAA2B/B,mBAAAA,CAAAA,EAAAA,OAAMoC,MAAW,KAAA,UAAA,CAEnE,CAAA,CAAA;AACF,KAAC,CAAA,CAAA;AACD,IAAA,IAAMC,gBAAgB,SAAhBA,gBAAkC;AAChC,MAAA,IAAAC,kBAAA,GAAqBxB,eAAe,QAAQ,CAAA,CAAA;AAC5C,MAAA,IAAAyB,kBAAA,GAAqBzB,eAAe,QAAQ,CAAA,CAAA;AAC5CW,MAAAA,IAAAA,gBAAAA,GAAkBH,cAAcG,eAAgB,CAAAM,KAAA,CAAA;AAEpD,MAAA,OAAAS,WAAA,CAAAC,QAAA,EACGH,IAAAA,EAAAA,CAAAA,kBAAA,GAAAE,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAV,MAAA,CAAoCrB,cAAe,CAAAsB,KAAA,EAAA,UAAA,CAAA;OAAkBO,EAAAA,CAAAA,kBAAmB,CAAS,CAAA,GAAA,IAAA,EACjGb,gBACC,GAAAe,WAAA,CAAAC,QAAA,EAAA,IAAA,EAAA,CAAAD,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EACcjB,WAAA,CAAYQ,KAAAA;AAAO,OAAA,EAAA,IAAA,CAAA,EAAAS,WAAA,CAAA,IAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAV,MAAA,CACjBrB,cAAe,CAAAsB,KAAA,EAAA,SAAA,CAAA;AAAA,QAAA,OAAA,EAAuBP,SAAA,CAAUO,KAAAA;OAC3DT,EAAAA,CAAAA,aAAA,CAAcoB,WAAY,CAAAX,KAAA,CAAMY,GAAI,CAAA,UAACC,IACpC,EAAA;AAAA,QAAA,OAAAJ,WAAA,CAAAC,QAAA,EAAAD,IAAAA,EAAAA,CAAAA,WAAA,CAAAK,SAAA,EACsCC,IAAA,CAAKF,IAAM,EAAA,OAAO,CAAG,EAArCA,IAAA,CAAKG,KAAW,CAAA,CAAA,CAAA,CAAA;OAEvC,CAAA,OAAAP,WAAA,CAAA,IAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAV,MAAA,CAISrB,eAAesB,KAAiB,EAAA,SAAA,CAAA;OAAAjB,EAAAA,CAAAA,cAAA,CAAe,SAAS,CAAA,EAArE,EAEFyB,kBAAA,GAAAC,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAAV,MAAA,CAAoCrB,cAAe,CAAAsB,KAAA,EAAA,UAAA,CAAA;OAAkBQ,EAAAA,CAAAA,kBAAmB,KAAS,IAAA,CAAA,CAAA,CAAA;KAGxG,CAAA;AAIM,IAAA,IAAAS,YAAA,GAAe,SAAfA,YAAAA,CAAgBC,CAAkB,EAAA;AAAA,MAAA,IAAAC,gBAAA,CAAA;AACtC,MAAA,IAAMC,cAAcF,CAAE,CAAAG,MAAA,CAAA;AACtB,MAAA,IAAQC,SAAA,GAA0CF,WAAA,CAA1CE,SAAA;QAAWC,YAAc,GAAiBH,WAAA,CAA/BG,YAAc;QAAAC,YAAA,GAAiBJ,WAAA,CAAjBI,YAAA,CAAA;AACjC,MAAA,IAAI9B,eAAgB,CAAAM,KAAA,EAAOL,oBAAA,CAAqBuB,CAAC,CAAA,CAAA;AACjDjD,MAAAA,CAAAA,gBAAAA,GAAAA,OAAMwD,QAAW,MAAA,IAAA,IAAAN,gBAAA,KAAA,KAAA,CAAA,IAAjBlD,gBAAAA,CAAAA,IAAAA,CAAAA,QAAiB;AACfiD,QAAAA,CAAA,EAAAA,CAAA;AACAI,QAAAA,SAAA,EAAAA,SAAA;AACAI,QAAAA,YAAA,EAAcH,eAAeC,YAAe,GAAAF,SAAAA;AAC9C,OAAC,CAAA,CAAA;KACH,CAAA;AAIM,IAAA,IAAAK,YAAA,GAAe7B,SAAS,YAAM;AAC3B,MAAA,OAAA8B,QAAA,CAAS3D,OAAM4D,YAAY,CAAA,IAAK,CAAC,SAAW,EAAA,WAAW,EAAEC,QAAS7D,CAAAA,MAAAA,CAAM4D,YAAY,CACvF,GAAA9B,EAAAA,CAAAA,MAAA,CAAGrB,eAAesB,KAAe,EAAAD,SAAAA,CAAAA,CAAAA,MAAA,CAAArB,cAAA,CAAesB,0BAAgB/B,MAAM,CAAA4D,YAAA,CAAA9B,GAAAA,EAAAA,CAAAA,MAAA,CACnErB,cAAe,CAAAsB,KAAA,EAAA,QAAA,CAAA,CAAA;AACxB,KAAC,CAAA,CAAA;AAED,IAAA,IAAM+B,gBAAgB,SAAhBA,gBAAsB;MAC1B,IAAI9D,MAAM,CAAA4D,YAAA,IAAgBD,QAAS3D,CAAAA,MAAAA,CAAM4D,YAAY,CAAG,EAAA;AAClD5D,QAAAA,IAAAA,MAAAA,CAAM4D,iBAAiBG,OAAS,EAAA;AAClC,UAAA,OAAAvB,WAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAAA,WAAA,CAAAwB,OAAA,EAAA,IAAA,EAAA,IAAA,CAAA,EAAAxB,WAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAGWhC,YAAa,CAAAuB,KAAA,CAAMkC;AAGhC,SAAA;AACIjE,QAAAA,IAAAA,MAAAA,CAAM4D,iBAAiBM,SAAW,EAAA;AACpC,UAAA,OAAA1B,WAAA,CAAchC,MAAAA,EAAAA,IAAAA,EAAAA,CAAAA,YAAa,CAAAuB,KAAA,CAAMoC;AACnC,SAAA;AACF,OAAA;MACA,OAAOrD,eAAe,cAAc,CAAA,CAAA;KACtC,CAAA;AAEM,IAAA,IAAAsD,cAAA,GAAiB,SAAjBA,cAAAA,CAAkBnB,CAAkB,EAAA;AAAA,MAAA,IAAAoB,kBAAA,CAAA;AACxC,MAAA,IAAIV,QAAS3D,CAAAA,MAAAA,CAAM4D,YAAY,CAAA,IAAK5D,OAAM4D,YAAiB,KAAAM,SAAA,EAAW,OAAA;AACtElE,MAAAA,CAAAA,kBAAAA,GAAAA,MAAM,CAAAsE,UAAA,MAAA,IAAA,IAAAD,kBAAA,KAAA,KAAA,CAAA,IAANrE,kBAAAA,CAAAA,IAAAA,CAAAA,MAAM,EAAa;AAAEiD,QAAAA,CAAA,EAAAA,CAAAA;AAAE,OAAC,CAAA,CAAA;KAC1B,CAAA;AACO/C,IAAAA,MAAA,CAAA;AAAEqE,MAAAA,QAAU,EAAA5C,eAAAA;AAAgB,KAAC,CAAA,CAAA;AACpC,IAAA,OAAO,YAAM;AACX,MAAA,IAAM6C,WAAc,GAAA,CAClBnC,aAAc,EAAA,EAAAG,WAAA,CAAA,KAAA,EAAA;QAAA,OACFkB,EAAAA,YAAA,CAAa3B;iBAAgBqC,EAAAA,cAAAA;OACtCN,EAAAA,CAAAA,aAAc,EAAA,CAEnB,CAAA,CAAA,CAAA;AAEA,MAAA,OAAAtB,WAAA,CAAA,KAAA,EAAA;QAAA,OAEWZ,EAAAA,SAAA,CAAUG;oBACPiB,YAAA;AAAA,QAAA,KAAA,EACL5C,OAAA;AAAA,QAAA,OAAA,EACEqB,eAAgB,CAAAM,KAAA,GAAQ,mBAAsB,GAAA,KAAA,CAAA;AAAA,OAAA,EAAA,CAEpDyC;KAGP,CAAA;AACF,GAAA;AACF,CAAC,CAAA;;;;"}