"use client"; import { AlertCircle, RefreshCw } from "lucide-react"; import { useEffect, useRef } from "react"; import { Badge } from "@/components/primitives/badge"; import { Button } from "@/components/primitives/button"; import { Select } from "@/components/primitives/select"; import { Skeleton } from "@/components/primitives/skeleton"; import { useConfig, useGuilds } from "@/hooks"; export interface GuildSelectorProps { /** Currently selected guild ID */ value: string; /** Called when user selects a different guild */ onChange: (guildId: string) => void; /** If true, the bar is hidden when there's only one guild */ autoHide?: boolean; } export function GuildSelector({ value, onChange, autoHide = true, }: GuildSelectorProps) { const { data: guilds = [], isLoading, error, mutate: refetch } = useGuilds(); const { data: config } = useConfig(); const initDone = useRef(false); useEffect(() => { if (value || guilds.length === 0 || initDone.current) return; initDone.current = true; const preferred = config?.monitorGuildId ?? guilds[0].id; if (preferred) onChange(preferred); }, [value, guilds, config, onChange]); if (autoHide && guilds.length <= 1 && !isLoading && !error) return null; if (isLoading) { return (
Could not load guilds: {error?.message ?? "Failed to load"}
No guilds available. Make sure the Discord gateway is connected.