import { useState } from "react"; import { useMutation } from "@tanstack/react-query"; import type { NodeModel } from "@minoru/react-dnd-treeview"; import { cn } from "@common/components/lib"; import { Button, Input } from "@common/components/ui"; import type { Menu } from "../model/menu-interface"; import { MenuApi } from "../api/menu-service"; type MenuNodeProps = { node: NodeModel; depth: number; isOpen: boolean; isSelected: boolean; onToggle: (id: NodeModel["id"]) => void; onSelect: (node: NodeModel) => void; }; function MenuNode({ node, depth, isOpen, isSelected, onToggle, onSelect, }: MenuNodeProps) { const { id, text, data } = node; const indent = depth * 10 + 5; const { mutateAsync: modifyMenuName } = useMutation({ mutationFn: (nodeName: string) => { const encodedName = encodeURIComponent(nodeName); return MenuApi.modifyMenuName(id as number, encodedName); }, }); const [editMode, setEditMode] = useState(false); const [nodeName, setNodeName] = useState(text); const handleToggle = () => onToggle(id); const handleSelect = () => onSelect(node); const handleSave = async () => { await modifyMenuName(nodeName); setEditMode(false); }; return (
{editMode ? ( <> setNodeName(e.target.value)} className="h-[2.5rem] !text-[1.3rem] text-foreground" /> ) : ( <> {data?.children?.length && ( )} {text} )}
{editMode ? (
) : ( )}
); } export { MenuNode };