import { useState, useRef, useEffect } from 'react' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { FilterBuilder } from './FilterBuilder' import type { FilterCondition, ViewDefinition } from '../types' interface CreateViewDialogProps { open: boolean onClose: () => void onCreate: (definition: ViewDefinition) => void availableFields: string[] } export function CreateViewDialog({ open, onClose, onCreate, availableFields }: CreateViewDialogProps) { const [name, setName] = useState('') const [icon, setIcon] = useState('') const [conditions, setConditions] = useState([ { field: 'type', op: 'equals', value: '' }, ]) const inputRef = useRef(null) useEffect(() => { if (open) { setName('') // eslint-disable-line react-hooks/set-state-in-effect -- reset on dialog open setIcon('') // eslint-disable-line react-hooks/set-state-in-effect -- reset on dialog open setConditions([{ field: availableFields[0] ?? 'type', op: 'equals', value: '' }]) // eslint-disable-line react-hooks/set-state-in-effect -- reset on dialog open setTimeout(() => inputRef.current?.focus(), 50) } }, [open, availableFields]) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() const trimmed = name.trim() if (!trimmed) return const validConditions = conditions.filter((c) => c.field) const definition: ViewDefinition = { name: trimmed, icon: icon || null, color: null, sort: null, filters: { all: validConditions }, } onCreate(definition) onClose() } return ( { if (!isOpen) onClose() }}> Create View
setIcon(e.target.value)} className="text-center" maxLength={2} />
setName(e.target.value)} />
) }