B: Fix pagination change rendering error

This commit is contained in:
Ivan 2025-03-20 19:23:02 +03:00
parent 1cd780504d
commit 419b5e6379
5 changed files with 31 additions and 40 deletions

View File

@ -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}

View File

@ -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 (

View File

@ -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,

View File

@ -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;

View File

@ -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,