feat: implement pagination reset on filter change and maintain scroll position for status toggle actions
This commit is contained in:
parent
e11df20ea6
commit
90946babeb
@ -3,6 +3,7 @@ import type {
|
|||||||
ColumnFiltersState,
|
ColumnFiltersState,
|
||||||
SortingState,
|
SortingState,
|
||||||
VisibilityState,
|
VisibilityState,
|
||||||
|
PaginationState,
|
||||||
} from '@tanstack/react-table';
|
} from '@tanstack/react-table';
|
||||||
import {
|
import {
|
||||||
flexRender,
|
flexRender,
|
||||||
@ -104,6 +105,15 @@ export function DataTable<TData, TValue>({
|
|||||||
const [columnVisibility, setColumnVisibility] =
|
const [columnVisibility, setColumnVisibility] =
|
||||||
React.useState<VisibilityState>({});
|
React.useState<VisibilityState>({});
|
||||||
const [globalFilter, setGlobalFilter] = React.useState('');
|
const [globalFilter, setGlobalFilter] = React.useState('');
|
||||||
|
const [pagination, setPagination] = React.useState<PaginationState>({
|
||||||
|
pageIndex: 0,
|
||||||
|
pageSize: 10,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Reset to page 1 when filters or search change
|
||||||
|
React.useEffect(() => {
|
||||||
|
setPagination((prev) => ({ ...prev, pageIndex: 0 }));
|
||||||
|
}, [globalFilter, columnFilters]);
|
||||||
|
|
||||||
const finalColumns = React.useMemo(() => {
|
const finalColumns = React.useMemo(() => {
|
||||||
const computedColumns = [...columns];
|
const computedColumns = [...columns];
|
||||||
@ -168,7 +178,10 @@ export function DataTable<TData, TValue>({
|
|||||||
columnVisibility,
|
columnVisibility,
|
||||||
rowSelection,
|
rowSelection,
|
||||||
globalFilter,
|
globalFilter,
|
||||||
|
pagination,
|
||||||
},
|
},
|
||||||
|
onPaginationChange: setPagination,
|
||||||
|
autoResetPageIndex: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
const selectedRows = table.getFilteredSelectedRowModel().rows;
|
const selectedRows = table.getFilteredSelectedRowModel().rows;
|
||||||
|
|||||||
@ -57,6 +57,8 @@ export function useCategoryIndex() {
|
|||||||
|
|
||||||
const onToggleStatus = (id: number) => {
|
const onToggleStatus = (id: number) => {
|
||||||
router.patch(categoryRoutes.toggleStatus(id).url, {}, {
|
router.patch(categoryRoutes.toggleStatus(id).url, {}, {
|
||||||
|
preserveState: true,
|
||||||
|
preserveScroll: true,
|
||||||
onSuccess: (response: any) => toast.success(response.props.flash.success),
|
onSuccess: (response: any) => toast.success(response.props.flash.success),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
|
import productRoutes from '@/routes/product';
|
||||||
|
import type { Product } from '@/types';
|
||||||
import { router } from '@inertiajs/react';
|
import { router } from '@inertiajs/react';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
import productRoutes from '@/routes/product';
|
|
||||||
import type { Product } from '@/types';
|
|
||||||
|
|
||||||
export function useProductIndex() {
|
export function useProductIndex() {
|
||||||
const [selectedImage, setSelectedImage] = useState<string | null>(null);
|
const [selectedImage, setSelectedImage] = useState<string | null>(null);
|
||||||
@ -46,6 +46,8 @@ export function useProductIndex() {
|
|||||||
|
|
||||||
const onToggleStatus = (id: number) => {
|
const onToggleStatus = (id: number) => {
|
||||||
router.patch(productRoutes.toggleStatus(id).url, {}, {
|
router.patch(productRoutes.toggleStatus(id).url, {}, {
|
||||||
|
preserveState: true,
|
||||||
|
preserveScroll: true,
|
||||||
onSuccess: (response: any) => toast.success(response.props.flash.success),
|
onSuccess: (response: any) => toast.success(response.props.flash.success),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user