{"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';\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    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\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","start","end","slice","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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"}