'use client'; import * as Select from '@radix-ui/react-select'; import { useCallback, useEffect, useState } from 'react'; import { iamTenant } from '@/lib/api/iam'; import type { IamTenant } from '@/lib/api/types/tenant'; import { useTenantStore } from '@/stores/tenant-store'; import { useTabStore } from '@/stores/tab-store'; /** Radix Select 不允许空字符串作 value,用哨兵表示「默认租户」 */ const DEFAULT_TENANT_VALUE = '__tenant_default__'; export function TenantSwitcher() { const tenantId = useTenantStore((s) => s.tenantId); const setTenantId = useTenantStore((s) => s.setTenantId); const resetTabsForTenantSwitch = useTabStore((s) => s.resetForTenantSwitch); const [rows, setRows] = useState(null); const [loadErr, setLoadErr] = useState(false); const load = useCallback(async () => { try { const data = await iamTenant.list(); setRows(data.items ?? []); setLoadErr(false); } catch { setLoadErr(true); setRows([]); } }, []); useEffect(() => { void load(); }, [load]); const short = tenantId ? (tenantId.length > 10 ? `${tenantId.slice(0, 8)}…` : tenantId) : '默认'; if (loadErr || !rows || rows.length === 0) { return (
租户 {short}
); } return (
租户 { setTenantId(v === DEFAULT_TENANT_VALUE ? null : v); resetTabsForTenantSwitch(); }} > 默认 {rows.map((r) => ( {r.tenant_name || r.tenant_code || r.id} ))}
); }