import { useState, useEffect, useMemo } from 'react'; import { toast } from 'sonner'; import { Label } from '@/components/ui/label'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { useSettings } from '@/state/useSettings'; import { useVisibleClaudeModels, useVisibleOpenCodeModels } from '@/state/useModels'; export const TaskDefaults = () => { const { settings, saveSettings } = useSettings(); const claudeModels = useVisibleClaudeModels(); const openCodeModels = useVisibleOpenCodeModels(); const [isSaving, setIsSaving] = useState(false); const [model, setModel] = useState(settings.tasks.defaultModel); useEffect(() => { setModel(settings.tasks.defaultModel); }, [settings]); const openCodeGroups = useMemo(() => { const groups: Record = {}; for (const m of openCodeModels) { const provider = m.provider ?? 'OpenCode'; if (!groups[provider]) groups[provider] = []; groups[provider].push({ id: m.id, name: m.name }); } return Object.entries(groups) .sort(([a], [b]) => a.localeCompare(b)) .map(([provider, models]) => ({ provider, models: models.sort((a, b) => a.name.localeCompare(b.name)) })); }, [openCodeModels]); const handleSave = async () => { if (isSaving) return; setIsSaving(true); try { const isOpenCode = openCodeModels.some((m) => m.id === model); const defaultProvider = isOpenCode ? ('opencode' as const) : ('claude' as const); await saveSettings({ ...settings, tasks: { defaultProvider, defaultModel: model } }); toast.success('Task defaults saved'); } catch { toast.error('Failed to save settings'); } finally { setIsSaving(false); } }; return (
); };