UNPKG

tdesign-vue-next

Version:
1 lines 8.29 kB
{"version":3,"file":"usePagination.mjs","sources":["../../../../components/table/hooks/usePagination.tsx"],"sourcesContent":["import { ref, SetupContext, toRefs, watch } from 'vue';\nimport { useConfig } from '@tdesign/shared-hooks';\nimport Pagination, { PageInfo, PaginationProps } from '../../pagination';\nimport { TdBaseTableProps, TableRowData } from '../type';\n\n// 分页功能包含:远程数据排序受控、远程数据排序非受控、本地数据排序受控、本地数据排序非受控 等 4 类功能\nexport default function usePagination(props: TdBaseTableProps, context: SetupContext) {\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 if (t) {\n const start = (current - 1) * pageSize;\n const end = current * pageSize;\n dataSource.value = data.slice(start, end);\n } else {\n dataSource.value = data;\n }\n };\n\n // 受控情况,只有 pagination.current 或者 pagination.pageSize 变化,才对数据进行排序\n watch(\n () => [pagination.value?.current, pagination.value?.pageSize, data.value.length, disableDataPage],\n () => {\n if (!pagination.value || !pagination.value.current) return;\n const { current, pageSize } = pagination.value;\n innerPagination.value = { current, pageSize };\n updateDataSourceAndPaginate(pagination.value.current, pagination.value.pageSize);\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 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","_toRefs","toRefs","pagination","data","disableDataPage","_useConfig","useConfig","classPrefix","innerPagination","ref","dataSource","isPaginateData","updateDataSourceAndPaginate","current","arguments","length","undefined","pageSize","t","Boolean","value","start","end","slice","watch","_pagination$value","_pagination$value2","_pagination$value3","immediate","_innerPagination$valu","_innerPagination$valu2","defaultCurrent","isControlled","defaultPageSize","renderPagination","paginationProps","_objectSpread","onChange","_createVNode","concat","Pagination","_mergeProps","size","pageInfo","_props$pagination","_props$pagination$onC","_props$onPageChange","call","onPageChange","totalContent","slots"],"mappings":"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"}