diff --git a/packages/ui/src/makerkit/data-table.tsx b/packages/ui/src/makerkit/data-table.tsx index 31b9571c9..320db0c95 100644 --- a/packages/ui/src/makerkit/data-table.tsx +++ b/packages/ui/src/makerkit/data-table.tsx @@ -46,6 +46,7 @@ interface ReactTableProps { pageSize?: number; pageCount?: number; onPaginationChange?: (pagination: PaginationState) => void; + onSortingChange?: (sorting: SortingState) => void; manualPagination?: boolean; manualSorting?: boolean; sorting?: SortingState; @@ -60,6 +61,7 @@ export function DataTable({ pageSize, pageCount, onPaginationChange, + onSortingChange, tableProps, manualPagination = true, manualSorting = false, @@ -84,7 +86,6 @@ export function DataTable({ getSortedRowModel: getSortedRowModel(), manualPagination, manualSorting, - onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, onColumnVisibilityChange: setColumnVisibility, onRowSelectionChange: setRowSelection, @@ -96,6 +97,23 @@ export function DataTable({ columnVisibility, rowSelection, }, + onSortingChange: (updater) => { + if (typeof updater === 'function') { + const nextState = updater(sorting); + + setSorting(nextState); + + if (onSortingChange) { + onSortingChange(nextState); + } + } else { + setSorting(updater); + + if (onSortingChange) { + onSortingChange(updater); + } + } + }, onPaginationChange: (updater) => { const navigate = (page: number) => setTimeout(() => navigateToPage(page)); @@ -190,8 +208,8 @@ function Pagination({ table: ReactTable; }>) { return ( -
- +
+ ({ /> -
+