{"version":3,"file":"list.mjs","sources":["../../src/list/list.tsx"],"sourcesContent":["import { defineComponent, VNodeChild, computed } from 'vue';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport TLoading from '../loading';\nimport props from './props';\nimport { TdListProps } from './type';\nimport { LOAD_MORE, LOADING } from './const';\nimport { useConfig, usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport isString from 'lodash/isString';\n\nexport default defineComponent({\n  name: 'XList',\n  props: {\n    ...props,\n  },\n  setup(props: TdListProps) {\n    const { globalConfig } = useConfig('list');\n    const COMPONENT_NAME = usePrefixClass('list');\n    const { SIZE } = useCommonClassName();\n    const renderTNodeJSX = useTNodeJSX();\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      return [\n        propsHeaderContent && <div class={`${COMPONENT_NAME.value}__header`}>{propsHeaderContent}</div>,\n        <ul class={`${COMPONENT_NAME.value}__inner`}>{renderTNodeJSX('default')}</ul>,\n        propsFooterContent && <div class={`${COMPONENT_NAME.value}__footer`}>{propsFooterContent}</div>,\n      ];\n    };\n    /** 列表基础逻辑 end */\n\n    /** 滚动相关逻辑 start */\n\n    const handleScroll = (e: WheelEvent | Event) => {\n      const listElement = e.target as HTMLElement;\n      const { scrollTop, scrollHeight, clientHeight } = listElement;\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    /** loading加载相关逻辑 end */\n    return {\n      COMPONENT_NAME,\n      listClass,\n      loadingClass,\n      renderLoading,\n      renderContent,\n      handleScroll,\n      handleLoadMore,\n    };\n  },\n\n  render() {\n    let listContent = this.renderContent();\n    listContent = [\n      listContent,\n      <div class={this.loadingClass} onClick={this.handleLoadMore}>\n        {this.renderLoading()}\n      </div>,\n    ];\n    return (\n      <div class={this.listClass} onScroll={this.handleScroll}>\n        {listContent}\n      </div>\n    );\n  },\n});\n"],"names":["name","props","_createVNode","e","scrollTop","scrollBottom","isString","TLoading","COMPONENT_NAME","listClass","loadingClass","renderLoading","renderContent","handleScroll","handleLoadMore","listContent"],"mappings":"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"}