xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 6.4 kB
Source Map (JSON)
{"version":3,"file":"usePagination.mjs","sources":["../../../src/table/hooks/usePagination.tsx"],"sourcesContent":["import { ref, SetupContext, toRefs, watch } from 'vue';\nimport { useConfig } from '../../hooks/useConfig';\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 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 {...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":["watch","current","pageSize","updateDataSourceAndPaginate","immediate","_createVNode","_mergeProps","totalContent","isPaginateData","dataSource","innerPagination","renderPagination"],"mappings":"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"}