B: Fix pagination change rendering error
This commit is contained in:
parent
1cd780504d
commit
419b5e6379
|
@ -120,6 +120,7 @@ export function DataTable<TData extends RowData>({
|
||||||
onRowDoubleClicked,
|
onRowDoubleClicked,
|
||||||
noDataComponent,
|
noDataComponent,
|
||||||
|
|
||||||
|
onChangePaginationOption,
|
||||||
paginationPerPage,
|
paginationPerPage,
|
||||||
paginationOptions = [10, 20, 30, 40, 50],
|
paginationOptions = [10, 20, 30, 40, 50],
|
||||||
|
|
||||||
|
@ -182,6 +183,7 @@ export function DataTable<TData extends RowData>({
|
||||||
<PaginationTools
|
<PaginationTools
|
||||||
id={id ? `${id}__pagination` : undefined}
|
id={id ? `${id}__pagination` : undefined}
|
||||||
table={table}
|
table={table}
|
||||||
|
onChangePaginationOption={onChangePaginationOption}
|
||||||
paginationOptions={paginationOptions}
|
paginationOptions={paginationOptions}
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
|
@ -12,15 +12,22 @@ interface PaginationToolsProps<TData> {
|
||||||
id?: string;
|
id?: string;
|
||||||
table: Table<TData>;
|
table: Table<TData>;
|
||||||
paginationOptions: number[];
|
paginationOptions: number[];
|
||||||
|
onChangePaginationOption?: (newValue: number) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function PaginationTools<TData>({ id, table, paginationOptions }: PaginationToolsProps<TData>) {
|
export function PaginationTools<TData>({
|
||||||
|
id,
|
||||||
|
table,
|
||||||
|
onChangePaginationOption,
|
||||||
|
paginationOptions
|
||||||
|
}: PaginationToolsProps<TData>) {
|
||||||
const handlePaginationOptionsChange = useCallback(
|
const handlePaginationOptionsChange = useCallback(
|
||||||
(event: React.ChangeEvent<HTMLSelectElement>) => {
|
(event: React.ChangeEvent<HTMLSelectElement>) => {
|
||||||
const perPage = Number(event.target.value);
|
const perPage = Number(event.target.value);
|
||||||
table.setPageSize(perPage);
|
table.setPageSize(perPage);
|
||||||
|
onChangePaginationOption?.(perPage);
|
||||||
},
|
},
|
||||||
[table]
|
[table, onChangePaginationOption]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useCallback, useState } from 'react';
|
import { useState } from 'react';
|
||||||
import {
|
import {
|
||||||
type ColumnSort,
|
type ColumnSort,
|
||||||
getCoreRowModel,
|
getCoreRowModel,
|
||||||
|
@ -11,7 +11,6 @@ import {
|
||||||
type RowSelectionState,
|
type RowSelectionState,
|
||||||
type SortingState,
|
type SortingState,
|
||||||
type TableOptions,
|
type TableOptions,
|
||||||
type Updater,
|
|
||||||
useReactTable,
|
useReactTable,
|
||||||
type VisibilityState
|
type VisibilityState
|
||||||
} from '@tanstack/react-table';
|
} from '@tanstack/react-table';
|
||||||
|
@ -45,9 +44,6 @@ interface UseDataTableProps<TData extends RowData>
|
||||||
/** Number of rows per page. */
|
/** Number of rows per page. */
|
||||||
paginationPerPage?: number;
|
paginationPerPage?: number;
|
||||||
|
|
||||||
/** Callback to be called when the pagination option is changed. */
|
|
||||||
onChangePaginationOption?: (newValue: number) => void;
|
|
||||||
|
|
||||||
/** Enable sorting. */
|
/** Enable sorting. */
|
||||||
enableSorting?: boolean;
|
enableSorting?: boolean;
|
||||||
|
|
||||||
|
@ -73,7 +69,6 @@ export function useDataTable<TData extends RowData>({
|
||||||
|
|
||||||
enablePagination,
|
enablePagination,
|
||||||
paginationPerPage = 10,
|
paginationPerPage = 10,
|
||||||
onChangePaginationOption,
|
|
||||||
|
|
||||||
...restProps
|
...restProps
|
||||||
}: UseDataTableProps<TData>) {
|
}: UseDataTableProps<TData>) {
|
||||||
|
@ -83,19 +78,6 @@ export function useDataTable<TData extends RowData>({
|
||||||
pageSize: paginationPerPage
|
pageSize: paginationPerPage
|
||||||
});
|
});
|
||||||
|
|
||||||
const handleChangePagination = useCallback(
|
|
||||||
(updater: Updater<PaginationState>) => {
|
|
||||||
setPagination(prev => {
|
|
||||||
const resolvedValue = typeof updater === 'function' ? updater(prev) : updater;
|
|
||||||
if (onChangePaginationOption && prev.pageSize !== resolvedValue.pageSize) {
|
|
||||||
onChangePaginationOption(resolvedValue.pageSize);
|
|
||||||
}
|
|
||||||
return resolvedValue;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
[onChangePaginationOption]
|
|
||||||
);
|
|
||||||
|
|
||||||
const table = useReactTable({
|
const table = useReactTable({
|
||||||
state: {
|
state: {
|
||||||
pagination: pagination,
|
pagination: pagination,
|
||||||
|
@ -111,7 +93,7 @@ export function useDataTable<TData extends RowData>({
|
||||||
onSortingChange: enableSorting ? setSorting : undefined,
|
onSortingChange: enableSorting ? setSorting : undefined,
|
||||||
|
|
||||||
getPaginationRowModel: enablePagination ? getPaginationRowModel() : undefined,
|
getPaginationRowModel: enablePagination ? getPaginationRowModel() : undefined,
|
||||||
onPaginationChange: enablePagination ? handleChangePagination : undefined,
|
onPaginationChange: enablePagination ? setPagination : undefined,
|
||||||
|
|
||||||
enableHiding: enableHiding,
|
enableHiding: enableHiding,
|
||||||
enableMultiRowSelection: enableRowSelection,
|
enableMultiRowSelection: enableRowSelection,
|
||||||
|
|
|
@ -7,6 +7,24 @@
|
||||||
|
|
||||||
@custom-variant dark (&:is(.dark *));
|
@custom-variant dark (&:is(.dark *));
|
||||||
|
|
||||||
|
/* Uncomment to debug layering and overflow */
|
||||||
|
/* *,
|
||||||
|
*::after,
|
||||||
|
*::before {
|
||||||
|
:focus,
|
||||||
|
:focus-visible,
|
||||||
|
:focus-within {
|
||||||
|
outline: 2px solid hotpink !important;
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
|
||||||
|
/* *,
|
||||||
|
*::after,
|
||||||
|
*::before {
|
||||||
|
background: hsla(135, 50%, 50%, 0.05) !important;
|
||||||
|
outline: 2px solid hotpink !important;
|
||||||
|
} */
|
||||||
|
|
||||||
@theme {
|
@theme {
|
||||||
/* stylelint-disable-next-line custom-property-pattern */
|
/* stylelint-disable-next-line custom-property-pattern */
|
||||||
--color-*: initial;
|
--color-*: initial;
|
||||||
|
|
|
@ -4,24 +4,6 @@
|
||||||
|
|
||||||
@import './constants.css' layer(base);
|
@import './constants.css' layer(base);
|
||||||
|
|
||||||
/* Uncomment to debug layering and overflow */
|
|
||||||
/* *,
|
|
||||||
*::after,
|
|
||||||
*::before {
|
|
||||||
:focus,
|
|
||||||
:focus-visible,
|
|
||||||
:focus-within {
|
|
||||||
outline: 2px solid hotpink !important;
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
|
|
||||||
/* *,
|
|
||||||
*::after,
|
|
||||||
*::before {
|
|
||||||
background: hsla(135, 50%, 50%, 0.05) !important;
|
|
||||||
outline: 2px solid hotpink !important;
|
|
||||||
} */
|
|
||||||
|
|
||||||
@layer utilities {
|
@layer utilities {
|
||||||
*,
|
*,
|
||||||
*::after,
|
*::after,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user