"use client"; import { LightButton } from "@/design-system/base/button"; import { Input } from "@/design-system/base/input"; import { X } from "lucide-react"; import { useRef, useState, useEffect } from "react"; import { useTranslations } from "next-intl"; import { actionUpdateNote } from "@/modules/note/note-action"; import type { ActionOutputCardWithNote } from "@/modules/card/card-action-dto"; import { toast } from "sonner"; interface UpdateCardModalProps { isOpen: boolean; onClose: () => void; card: ActionOutputCardWithNote; onUpdated: () => void; } export function UpdateCardModal({ isOpen, onClose, card, onUpdated, }: UpdateCardModalProps) { const t = useTranslations("deck_id"); const wordRef = useRef(null); const definitionRef = useRef(null); const ipaRef = useRef(null); const exampleRef = useRef(null); const [isSubmitting, setIsSubmitting] = useState(false); useEffect(() => { if (isOpen && card) { const fields = card.note.flds.split('\x1f'); if (wordRef.current) wordRef.current.value = fields[0] || ""; if (definitionRef.current) definitionRef.current.value = fields[1] || ""; if (ipaRef.current) ipaRef.current.value = fields[2] || ""; if (exampleRef.current) exampleRef.current.value = fields[3] || ""; } }, [isOpen, card]); if (!isOpen) return null; const handleUpdate = async () => { const word = wordRef.current?.value?.trim(); const definition = definitionRef.current?.value?.trim(); if (!word || !definition) { toast.error(t("wordAndDefinitionRequired")); return; } setIsSubmitting(true); try { const fields = [ word, definition, ipaRef.current?.value?.trim() || "", exampleRef.current?.value?.trim() || "", ]; const result = await actionUpdateNote({ noteId: BigInt(card.note.id), fields, }); if (!result.success) { throw new Error(result.message || "Failed to update note"); } toast.success(result.message); onUpdated(); } catch (error) { toast.error(error instanceof Error ? error.message : "Unknown error"); } finally { setIsSubmitting(false); } }; return (
{ if (e.key === "Enter") { e.preventDefault(); handleUpdate(); } }} >

{t("updateCard")}

{isSubmitting ? t("updating") : t("update")}
); }