fix: use getUserGroups for ratio display to respect GroupGroupRatio (#4772)

fix(web/default): use getUserGroups for ratio display to respect GroupGroupRatio

Unifies admin/user ratio display so API key list matches the actual billing ratio.
This commit is contained in:
Micah-Zheng 2026-05-12 16:23:14 +08:00 committed by GitHub
parent 3057f04a17
commit 7fe896d2f8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -16,11 +16,9 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
For commercial licensing, please contact support@quantumnous.com
*/
import { useMemo } from 'react'
import { useQuery } from '@tanstack/react-query'
import { type ColumnDef } from '@tanstack/react-table'
import { useTranslation } from 'react-i18next'
import { useAuthStore } from '@/stores/auth-store'
import { getUserGroups } from '@/lib/api'
import { formatQuota, formatTimestampToDate } from '@/lib/format'
import { cn } from '@/lib/utils'
@ -34,7 +32,6 @@ import {
import { DataTableColumnHeader } from '@/components/data-table'
import { GroupBadge } from '@/components/group-badge'
import { StatusBadge } from '@/components/status-badge'
import { getSystemOptions } from '@/features/system-settings/api'
import { API_KEY_STATUSES } from '../constants'
import { type ApiKey } from '../types'
import {
@ -51,31 +48,9 @@ function getQuotaProgressColor(percentage: number): string {
}
function useGroupRatios(): Record<string, number> {
const isAdmin = useAuthStore((s) =>
Boolean(s.auth.user?.role && s.auth.user.role >= 10)
)
const { data: adminData } = useQuery({
queryKey: ['system-options-group-ratio'],
queryFn: getSystemOptions,
enabled: isAdmin,
staleTime: 5 * 60 * 1000,
select: (res) => {
if (!res.success || !res.data) return {}
const option = res.data.find((o) => o.key === 'GroupRatio')
if (!option?.value) return {}
try {
return JSON.parse(option.value) as Record<string, number>
} catch {
return {}
}
},
})
const { data: userGroupsData } = useQuery({
const { data } = useQuery({
queryKey: ['user-self-groups'],
queryFn: getUserGroups,
enabled: !isAdmin,
staleTime: 5 * 60 * 1000,
select: (res) => {
if (!res.success || !res.data) return {}
@ -89,10 +64,7 @@ function useGroupRatios(): Record<string, number> {
},
})
return useMemo(
() => (isAdmin ? adminData : userGroupsData) ?? {},
[isAdmin, adminData, userGroupsData]
)
return data ?? {}
}
export function useApiKeysColumns(): ColumnDef<ApiKey>[] {