feat(extension-requests): add manager queue with quick decisions

This commit is contained in:
2026-07-31 16:33:20 +05:30
parent 2caeae7c91
commit 87fa04e1b5
19 changed files with 1011 additions and 117 deletions

View File

@@ -30,9 +30,11 @@ export function TableFooter<TData>({
pageSize?: number;
onPageSizeChange?: (pageSize: number) => void;
}) {
const currentPageSize = pageSize ?? table.getState().pagination.pageSize;
const paginationState = table.getState().pagination;
const currentPageSize =
pageSize ?? paginationState?.pageSize ?? PAGE_SIZE_OPTIONS[0];
const selectedRowCount = Object.keys(table.getState().rowSelection).length;
const pageIndex = table.getState().pagination.pageIndex;
const pageIndex = paginationState?.pageIndex ?? 0;
const rawPageCount = table.getPageCount();
const pageCount = Math.max(
1,

View File

@@ -45,6 +45,7 @@ export interface DataTableAction<TData> {
onClick: (item: TData) => void;
permission?: PermissionInput;
disabled?: (item: TData) => boolean;
hidden?: (item: TData) => boolean;
className?: string;
}
@@ -156,6 +157,8 @@ function DataTableContent<TData, TValue>({
return (
<div className="flex justify-start gap-2">
{actions.map((action) => {
if (action.hidden?.(item)) return null;
const label =
typeof action.label === 'function'
? action.label(item)
@@ -212,37 +215,41 @@ function DataTableContent<TData, TValue>({
manualSorting: isManualSorting,
pageCount: pagination
? Math.ceil((pagination.totalItems ?? data.length) / pagination.limit)
: -1,
: undefined,
state: {
rowSelection,
columnVisibility,
columnPinning,
columnSizing,
sorting,
pagination: pagination
...(pagination
? {
pagination: {
pageIndex: Math.floor(pagination.skip / pagination.limit),
pageSize: pagination.limit,
},
}
: {}),
},
onPaginationChange: pagination
? (updater) => {
const currentState = {
pageIndex: Math.floor(pagination.skip / pagination.limit),
pageSize: pagination.limit,
};
const newState =
typeof updater === 'function' ? updater(currentState) : updater;
const pageSizeChanged = newState.pageSize !== pagination.limit;
if (pageSizeChanged) {
pagination.onLimitChange(newState.pageSize);
pagination.onPageChange(0);
return;
}
: undefined,
},
onPaginationChange: (updater) => {
if (typeof updater === 'function' && pagination) {
const newState = updater({
pageIndex: Math.floor(pagination.skip / pagination.limit),
pageSize: pagination.limit,
});
const pageSizeChanged = newState.pageSize !== pagination.limit;
if (pageSizeChanged) {
pagination.onLimitChange(newState.pageSize);
pagination.onPageChange(0);
return;
pagination.onPageChange(newState.pageIndex * newState.pageSize);
}
pagination.onPageChange(newState.pageIndex * newState.pageSize);
}
},
: undefined,
});
return (