UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

1 lines • 6.58 kB
{"version":3,"file":"useTableState.mjs","names":[],"sources":["../../../src/base-ui/Table/useTableState.ts"],"sourcesContent":["import type {\n ColumnFiltersState,\n PaginationState,\n SortingState,\n Updater,\n} from '@tanstack/react-table';\nimport { useState } from 'react';\n\nimport { getColumnId } from './toColumnDefs';\nimport type {\n TableColumn,\n TableFilters,\n TablePaginationConfig,\n TableProps,\n TableSorterResult,\n} from './type';\n\nconst resolve = <S>(updater: Updater<S>, previous: S): S =>\n typeof updater === 'function' ? (updater as (old: S) => S)(previous) : updater;\n\nconst initialSorting = (columns: TableColumn<any>[]): SortingState => {\n const index = columns.findIndex((column) => column.defaultSortOrder);\n if (index === -1) return [];\n return [\n { desc: columns[index].defaultSortOrder === 'descend', id: getColumnId(columns[index], index) },\n ];\n};\n\nexport const useTableState = <T>({\n columns,\n onChange,\n pagination,\n}: Pick<TableProps<T>, 'columns' | 'onChange' | 'pagination'>) => {\n const config: TablePaginationConfig | undefined =\n pagination === false ? undefined : (pagination ?? {});\n const columnIds = columns.map((column, index) => getColumnId(column, index));\n\n const [sorting, setSorting] = useState<SortingState>(() => initialSorting(columns));\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const [innerPage, setInnerPage] = useState<PaginationState>({\n pageIndex: (config?.defaultCurrent ?? 1) - 1,\n pageSize: config?.defaultPageSize ?? 10,\n });\n\n const page: PaginationState = {\n pageIndex: config?.current === undefined ? innerPage.pageIndex : config.current - 1,\n pageSize: config?.pageSize ?? innerPage.pageSize,\n };\n\n const toFilters = (state: ColumnFiltersState): TableFilters =>\n Object.fromEntries(\n columns\n .map((column, index) => [column, columnIds[index]] as const)\n .filter(([column]) => column.filters?.length)\n .map(([, id]) => [\n id,\n (state.find((filter) => filter.id === id)?.value as TableFilters[string]) ?? null,\n ]),\n );\n\n const toSorter = (state: SortingState): TableSorterResult<T> => {\n const [active] = state;\n if (!active) return {};\n const index = columnIds.indexOf(active.id);\n return {\n column: columns[index],\n columnKey: active.id,\n order: active.desc ? 'descend' : 'ascend',\n };\n };\n\n const toPaginationArg = (next: PaginationState): TablePaginationConfig =>\n config ? { ...config, current: next.pageIndex + 1, pageSize: next.pageSize } : {};\n\n const report = (\n nextPage: PaginationState,\n nextFilters: ColumnFiltersState,\n nextSorting: SortingState,\n ) => onChange?.(toPaginationArg(nextPage), toFilters(nextFilters), toSorter(nextSorting));\n\n const changePage = (next: PaginationState) => {\n setInnerPage(next);\n const sizeChanged = next.pageSize !== page.pageSize;\n if (sizeChanged) config?.onShowSizeChange?.(next.pageIndex + 1, next.pageSize);\n if (sizeChanged || next.pageIndex !== page.pageIndex) {\n config?.onChange?.(next.pageIndex + 1, next.pageSize);\n }\n };\n\n const clampPage = (pageIndex: number) => {\n if (config?.current === undefined) {\n setInnerPage((previous) => ({ ...previous, pageIndex }));\n return;\n }\n config.onChange?.(pageIndex + 1, page.pageSize);\n };\n\n const onSortingChange = (updater: Updater<SortingState>) => {\n const next = resolve(updater, sorting);\n const firstPage = { ...page, pageIndex: 0 };\n setSorting(next);\n changePage(firstPage);\n report(firstPage, columnFilters, next);\n };\n\n const onColumnFiltersChange = (updater: Updater<ColumnFiltersState>) => {\n const next = resolve(updater, columnFilters);\n const firstPage = { ...page, pageIndex: 0 };\n setColumnFilters(next);\n changePage(firstPage);\n report(firstPage, next, sorting);\n };\n\n const onPaginationChange = (updater: Updater<PaginationState>) => {\n const next = resolve(updater, page);\n changePage(next);\n report(next, columnFilters, sorting);\n };\n\n return {\n clampPage,\n columnFilters,\n columnIds,\n config,\n manualSorting: columns.some((column) => column.sorter === true),\n onColumnFiltersChange,\n onPaginationChange,\n onSortingChange,\n page,\n sorting,\n };\n};\n"],"mappings":"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"}