From b23e77585f85df0ad9d2eae660025099b3acd3ca Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Wed, 21 Jan 2026 14:49:33 -0800 Subject: [PATCH 1/2] Fix virtual keys table sorting --- .../src/app/(dashboard)/hooks/keys/useKeys.ts | 10 ++-- .../VirtualKeysPage/VirtualKeysTable.tsx | 51 +++++++++++++++---- .../key_team_helpers/filter_logic.tsx | 18 ++++--- 3 files changed, 59 insertions(+), 20 deletions(-) diff --git a/ui/litellm-dashboard/src/app/(dashboard)/hooks/keys/useKeys.ts b/ui/litellm-dashboard/src/app/(dashboard)/hooks/keys/useKeys.ts index 73daf954c1..cf477a2e55 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/hooks/keys/useKeys.ts +++ b/ui/litellm-dashboard/src/app/(dashboard)/hooks/keys/useKeys.ts @@ -101,12 +101,16 @@ const keyListCall = async ( } }; -export const useKeys = (page: number, pageSize: number): UseQueryResult => { +export const useKeys = ( + page: number, + pageSize: number, + options: KeyListCallOptions = {}, +): UseQueryResult => { const { accessToken } = useAuthorized(); return useQuery({ - queryKey: keyKeys.list({ page, limit: pageSize }), - queryFn: async () => await keyListCall(accessToken!, page, pageSize), + queryKey: keyKeys.list({ page, limit: pageSize, ...options }), + queryFn: async () => await keyListCall(accessToken!, page, pageSize, options), enabled: Boolean(accessToken), staleTime: 30000, // 30 seconds placeholderData: keepPreviousData, diff --git a/ui/litellm-dashboard/src/components/VirtualKeysPage/VirtualKeysTable.tsx b/ui/litellm-dashboard/src/components/VirtualKeysPage/VirtualKeysTable.tsx index c9d11c778f..6d96804792 100644 --- a/ui/litellm-dashboard/src/components/VirtualKeysPage/VirtualKeysTable.tsx +++ b/ui/litellm-dashboard/src/components/VirtualKeysPage/VirtualKeysTable.tsx @@ -71,12 +71,19 @@ export function VirtualKeysTable({ teams, organizations, onSortChange, currentSo pageSize: 50, }); + // Extract sort parameters from sorting state + const sortBy = sorting.length > 0 ? sorting[0].id : null; + const sortOrder = sorting.length > 0 ? (sorting[0].desc ? "desc" : "asc") : null; + const { data: keys, isPending: isLoading, isFetching, refetch, - } = useKeys(tablePagination.pageIndex + 1, tablePagination.pageSize); + } = useKeys(tablePagination.pageIndex + 1, tablePagination.pageSize, { + sortBy: sortBy || undefined, + sortOrder: sortOrder || undefined, + }); const totalCount = keys?.total_count || 0; const [expandedAccordions, setExpandedAccordions] = useState>({}); @@ -110,6 +117,7 @@ export function VirtualKeysTable({ teams, organizations, onSortChange, currentSo id: "expander", header: () => null, size: 40, + enableSorting: false, cell: ({ row }) => row.getCanExpand() ? (