{"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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"}