fix(usage): use sentinel value for All Accounts select to prevent Radix empty string crash

This commit is contained in:
Gemini Nexus Bot committed 2026-04-22 16:26:36 -03:00
1 parent 2f42d70d78
commit c73537d44c
1 file changed
+8 -7
+8 -7
View File
@@ -114,7 +114,8 @@ function formatBucketLabel(bucket: string, range: TimeRange): string {
function UsagePage() { function UsagePage() {
const { t } = useTranslation(); const { t } = useTranslation();
const [range, setRange] = useState<TimeRange>('7d'); const [range, setRange] = useState<TimeRange>('7d');
const [selectedAccountId, setSelectedAccountId] = useState<string | undefined>(undefined); const ALL_ACCOUNTS = '__all__';
const [selectedAccountId, setSelectedAccountId] = useState<string>(ALL_ACCOUNTS);
const { data: accounts, isLoading: accountsLoading } = useCloudAccounts(); const { data: accounts, isLoading: accountsLoading } = useCloudAccounts();
const { const {
@@ -126,7 +127,7 @@ function UsagePage() {
queryKey: ['usage', 'day', range, selectedAccountId], queryKey: ['usage', 'day', range, selectedAccountId],
queryFn: () => { queryFn: () => {
const { start, end } = getTimeRange(range); const { start, end } = getTimeRange(range);
return ipc.client.usage.getUsageByDay({ accountId: selectedAccountId, start, end }); return ipc.client.usage.getUsageByDay({ accountId: selectedAccountId === ALL_ACCOUNTS ? undefined : selectedAccountId, start, end });
}, },
refetchInterval: 30000, refetchInterval: 30000,
refetchIntervalInBackground: false, refetchIntervalInBackground: false,
@@ -142,7 +143,7 @@ function UsagePage() {
queryKey: ['usage', 'model', range, selectedAccountId], queryKey: ['usage', 'model', range, selectedAccountId],
queryFn: () => { queryFn: () => {
const { start, end } = getTimeRange(range); const { start, end } = getTimeRange(range);
return ipc.client.usage.getUsageByModel({ accountId: selectedAccountId, start, end }); return ipc.client.usage.getUsageByModel({ accountId: selectedAccountId === ALL_ACCOUNTS ? undefined : selectedAccountId, start, end });
}, },
refetchInterval: 30000, refetchInterval: 30000,
refetchIntervalInBackground: false, refetchIntervalInBackground: false,
@@ -158,7 +159,7 @@ function UsagePage() {
queryKey: ['usage', 'hour', range, selectedAccountId], queryKey: ['usage', 'hour', range, selectedAccountId],
queryFn: () => { queryFn: () => {
const { start, end } = getTimeRange(range); const { start, end } = getTimeRange(range);
return ipc.client.usage.getUsageByHour({ accountId: selectedAccountId, start, end }); return ipc.client.usage.getUsageByHour({ accountId: selectedAccountId === ALL_ACCOUNTS ? undefined : selectedAccountId, start, end });
}, },
enabled: range === '24h', enabled: range === '24h',
refetchInterval: 30000, refetchInterval: 30000,
@@ -231,8 +232,8 @@ function UsagePage() {
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
{/* Account filter */} {/* Account filter */}
<Select <Select
value={selectedAccountId || ''} value={selectedAccountId}
onValueChange={(value) => setSelectedAccountId(value || undefined)} onValueChange={(value) => setSelectedAccountId(value)}
disabled={accountsLoading} disabled={accountsLoading}
> >
<SelectTrigger className="h-9 w-[200px] text-xs"> <SelectTrigger className="h-9 w-[200px] text-xs">
@@ -246,7 +247,7 @@ function UsagePage() {
)} )}
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>
<SelectItem value="">{t('usage.allAccounts')}</SelectItem> <SelectItem value={ALL_ACCOUNTS}>{t('usage.allAccounts')}</SelectItem>
{accounts?.map((acc) => ( {accounts?.map((acc) => (
<SelectItem key={acc.id} value={acc.id}> <SelectItem key={acc.id} value={acc.id}>
{acc.email} {acc.email}