UNPKG

tdesign-vue-next

Version:
1 lines 9.11 kB
{"version":3,"file":"usePagination.mjs","sources":["../../../../components/table/hooks/usePagination.tsx"],"sourcesContent":["import { Ref, ref, SetupContext, toRefs, watch } from 'vue';\nimport { useConfig } from '@tdesign/shared-hooks';\nimport Pagination, { PageInfo, PaginationProps } from '../../pagination';\nimport { TdBaseTableProps, TableRowData } from '../type';\nimport { getLocalPaginationPageData } from '../utils';\n\n// 分页功能包含:远程数据排序受控、远程数据排序非受控、本地数据排序受控、本地数据排序非受控 等 4 类功能\nexport default function usePagination(\n props: TdBaseTableProps,\n context: SetupContext,\n tableContentRef: Ref<HTMLElement | null>,\n) {\n const { pagination, data, disableDataPage } = toRefs(props);\n const { classPrefix } = useConfig();\n const innerPagination = ref<PaginationProps>(props.pagination);\n\n const dataSource = ref<TableRowData[]>([]);\n const isPaginateData = ref(false);\n\n const updateDataSourceAndPaginate = (current = 1, pageSize = 10) => {\n const { data } = props;\n // data 数据数量超出分页大小时,则自动启动本地数据分页\n const t = Boolean(!disableDataPage.value && data.length > pageSize);\n isPaginateData.value = t;\n dataSource.value = getLocalPaginationPageData(data, { current, pageSize }, disableDataPage.value);\n };\n\n // 受控情况:current / pageSize / data 引用或条数变化时,同步本地分页展示数据\n watch(\n [data, () => data.value.length, () => pagination.value?.current, () => pagination.value?.pageSize, disableDataPage],\n () => {\n if (!pagination.value || !pagination.value.current) return;\n const { current, pageSize } = pagination.value;\n\n const newPageInfo = { current, pageSize };\n innerPagination.value = newPageInfo;\n updateDataSourceAndPaginate(\n pagination.value.current,\n pagination.value.pageSize || pagination.value.defaultPageSize,\n );\n },\n { immediate: true },\n );\n\n // 非受控情况,只执行一次 Props 数据更新(pagination.defaultCurrent 和 pagination.defaultPageSize)\n watch(\n [data],\n () => {\n if (!pagination.value || !pagination.value.defaultCurrent) return;\n const isControlled = Boolean(pagination.value.current);\n // 存在受控属性时,立即返回不再执行后续内容\n if (isControlled) return;\n updateDataSourceAndPaginate(\n innerPagination.value.current ?? pagination.value.defaultCurrent,\n innerPagination.value.pageSize ?? pagination.value.defaultPageSize,\n );\n },\n { immediate: true },\n );\n\n const renderPagination = () => {\n if (!props.pagination) return null;\n const paginationProps = { ...props.pagination };\n // Vue3,两个 onChange 事件绑定,会成为数组,因为需提前移除外部 onChange\n delete paginationProps.onChange;\n return (\n <div class={`${classPrefix.value}-table__pagination`}>\n <Pagination\n size={props.size === 'large' ? null : props.size}\n {...paginationProps}\n onChange={(pageInfo: PageInfo) => {\n props.pagination?.onChange?.(pageInfo);\n innerPagination.value = pageInfo;\n updateDataSourceAndPaginate(pageInfo.current, pageInfo.pageSize);\n props.onPageChange?.(pageInfo, dataSource.value);\n\n // 当切换分页时,内容区域滚动到顶部\n const ref = tableContentRef.value;\n if (ref.scrollTo) {\n ref.scrollTo({ top: 0, left: 0 });\n } else {\n // 兼容测试环境或旧浏览器\n ref.scrollTop = 0;\n ref.scrollLeft = 0;\n }\n }}\n v-slots={{ totalContent: context.slots.totalContent }}\n />\n </div>\n );\n };\n\n return {\n isPaginateData,\n dataSource,\n innerPagination,\n renderPagination,\n };\n}\n"],"names":["usePagination","props","context","tableContentRef","_toRefs","toRefs","pagination","data","disableDataPage","_useConfig","useConfig","classPrefix","innerPagination","ref","dataSource","isPaginateData","updateDataSourceAndPaginate","current","arguments","length","undefined","pageSize","t","Boolean","value","getLocalPaginationPageData","watch","_pagination$value","_pagination$value2","_pagination$value3","newPageInfo","defaultPageSize","immediate","_innerPagination$valu","_innerPagination$valu2","defaultCurrent","isControlled","renderPagination","paginationProps","_objectSpread","onChange","_createVNode","concat","Pagination","_mergeProps","size","pageInfo","_props$pagination","_props$pagination$onC","_props$onPageChange","call","onPageChange","scrollTo","top","left","scrollTop","scrollLeft","totalContent","slots"],"mappings":"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"}