import { useState, useRef, useEffect } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { HotkeyButton } from '@/components/ui/hotkey-button'; import { Textarea } from '@/components/ui/textarea'; import { Play, Plus } from 'lucide-react'; import type { PhaseModelEntry } from '@automaker/types'; import { PhaseModelSelector } from '@/components/views/settings-view/model-defaults/phase-model-selector'; import { useAppStore } from '@/store/app-store'; interface QuickAddDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onAdd: (description: string, modelEntry: PhaseModelEntry) => void; onAddAndStart: (description: string, modelEntry: PhaseModelEntry) => void; } export function QuickAddDialog({ open, onOpenChange, onAdd, onAddAndStart }: QuickAddDialogProps) { const [description, setDescription] = useState(''); const [descriptionError, setDescriptionError] = useState(false); const textareaRef = useRef(null); // Get default feature model from store const defaultFeatureModel = useAppStore((s) => s.defaultFeatureModel); const currentProject = useAppStore((s) => s.currentProject); // Use project-level default feature model if set, otherwise fall back to global const effectiveDefaultFeatureModel = currentProject?.defaultFeatureModel ?? defaultFeatureModel; const [modelEntry, setModelEntry] = useState( effectiveDefaultFeatureModel || { model: 'claude-opus' } ); // Reset form when dialog opens (in useEffect to avoid state mutation during render) useEffect(() => { if (open) { setDescription(''); setDescriptionError(false); setModelEntry(effectiveDefaultFeatureModel || { model: 'claude-opus' }); } }, [open, effectiveDefaultFeatureModel]); const handleSubmit = (actionFn: (description: string, modelEntry: PhaseModelEntry) => void) => { if (!description.trim()) { setDescriptionError(true); textareaRef.current?.focus(); return; } actionFn(description.trim(), modelEntry); setDescription(''); setDescriptionError(false); onOpenChange(false); }; const handleAdd = () => handleSubmit(onAdd); const handleAddAndStart = () => handleSubmit(onAddAndStart); const handleDescriptionChange = (value: string) => { setDescription(value); if (value.trim()) { setDescriptionError(false); } }; return ( { e.preventDefault(); textareaRef.current?.focus(); }} > Quick Add Feature Create a new feature with minimal configuration. All other settings use defaults.
{/* Description Input */}