"use client"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Switch } from "@/components/ui/switch"; import type { MenuTreeNode, UpdateNodeInput } from "../types"; interface EditNodeDialogProps { open: boolean; onOpenChange: (open: boolean) => void; node: MenuTreeNode | null; onSave: (nodeId: number, data: UpdateNodeInput) => Promise; } interface FormData { titleKo: string; titleEn: string; descriptionKo: string; descriptionEn: string; scrId: string; isActive: boolean; } export function EditNodeDialog({ open, onOpenChange, node, onSave, }: EditNodeDialogProps) { const { register, handleSubmit, reset, setValue, watch, formState: { isSubmitting }, } = useForm({ defaultValues: { titleKo: "", titleEn: "", descriptionKo: "", descriptionEn: "", scrId: "", isActive: true, }, }); const isActive = watch("isActive"); useEffect(() => { if (node) { reset({ titleKo: node.titleKo, titleEn: node.titleEn || "", descriptionKo: node.descriptionKo || "", descriptionEn: node.descriptionEn || "", scrId: node.scrId || "", isActive: node.isActive, }); } }, [node, reset]); const onSubmit = async (data: FormData) => { if (!node) return; await onSave(node.id, { titleKo: data.titleKo, titleEn: data.titleEn || undefined, descriptionKo: data.descriptionKo || undefined, descriptionEn: data.descriptionEn || undefined, scrId: data.scrId || undefined, isActive: data.isActive, }); onOpenChange(false); }; const getTypeLabel = () => { switch (node?.nodeType) { case "menu_group": return "Menu Group"; case "group": return "Group"; case "menu": return "Menu"; case "additional": return "Additional Menu"; default: return "Node"; } }; const showMenuFields = node?.nodeType === "menu" || node?.nodeType === "additional"; return ( Edit {getTypeLabel()} {node?.menuPath && ( {node.menuPath} )}
{/* Korean Name */}
{/* English Name */}
{/* Korean Description */} {showMenuFields && (