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 { cn } from '@/lib/utils' const BUILT_IN_TYPES = [ 'Note', 'Project', 'Experiment', 'Responsibility', 'Procedure', 'Person', 'Event', 'Topic', ] as const export type NoteType = (typeof BUILT_IN_TYPES)[number] interface CreateNoteDialogProps { open: boolean onClose: () => void onCreate: (title: string, type: string) => void defaultType?: string /** Custom types from the vault (Type documents not in built-in list) */ customTypes?: string[] } export function CreateNoteDialog({ open, onClose, onCreate, defaultType, customTypes = [] }: CreateNoteDialogProps) { const [title, setTitle] = useState('') const [type, setType] = useState('Note') const inputRef = useRef(null) useEffect(() => { if (open) { // eslint-disable-next-line react-hooks/set-state-in-effect -- reset on dialog open setTitle(''); setType(defaultType ?? 'Note') setTimeout(() => inputRef.current?.focus(), 50) } }, [open, defaultType]) const handleSubmit = (e: React.FormEvent) => { e.preventDefault() const trimmed = title.trim() if (!trimmed) return onCreate(trimmed, type) onClose() } return ( { if (!isOpen) onClose() }}> Create New Note
setTitle(e.target.value)} />
{BUILT_IN_TYPES.map((t) => ( ))} {customTypes.map((t) => ( ))}
) }