import { type FormEvent, useState } from "react"; import { ApiClientError, apiClient } from "../api"; interface CreateNoteTypeModalProps { isOpen: boolean; onClose: () => void; onNoteTypeCreated: () => void; } export function CreateNoteTypeModal({ isOpen, onClose, onNoteTypeCreated, }: CreateNoteTypeModalProps) { const [name, setName] = useState(""); const [frontTemplate, setFrontTemplate] = useState("{{Front}}"); const [backTemplate, setBackTemplate] = useState("{{Back}}"); const [isReversible, setIsReversible] = useState(false); const [error, setError] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const resetForm = () => { setName(""); setFrontTemplate("{{Front}}"); setBackTemplate("{{Back}}"); setIsReversible(false); setError(null); }; const handleClose = () => { resetForm(); onClose(); }; const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setError(null); setIsSubmitting(true); try { const res = await apiClient.rpc.api["note-types"].$post({ json: { name: name.trim(), frontTemplate: frontTemplate.trim(), backTemplate: backTemplate.trim(), isReversible, }, }); await apiClient.handleResponse(res); resetForm(); onNoteTypeCreated(); onClose(); } catch (err) { if (err instanceof ApiClientError) { setError(err.message); } else { setError("Failed to create note type. Please try again."); } } finally { setIsSubmitting(false); } }; if (!isOpen) { return null; } return (
{ if (e.target === e.currentTarget) { handleClose(); } }} onKeyDown={(e) => { if (e.key === "Escape") { handleClose(); } }} >

Create Note Type

{error && (
{error}
)}
setName(e.target.value)} required maxLength={255} disabled={isSubmitting} className="w-full px-4 py-2.5 bg-ivory border border-border rounded-lg text-slate placeholder-muted transition-all duration-200 hover:border-muted focus:border-primary focus:ring-2 focus:ring-primary/10 disabled:opacity-50 disabled:cursor-not-allowed" placeholder="Basic" />