"use client"; import { useState } from "react"; import { DndProvider } from "react-dnd"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { Tree, MultiBackend, getBackendOptions, type NodeModel, } from "@minoru/react-dnd-treeview"; import { ENDPOINT } from "@/shared/config"; import { MenuApi } from "../api/menu-service"; import type { Menu, TreeMenu } from "../model/menu-interface"; import { handleDropNode, handleSelectNode } from "../lib/utils"; import { MenuNode } from "./menu-node"; type MenuTreeProps = { treeData: NodeModel[]; siteId: string; }; function MenuTree({ treeData, siteId }: MenuTreeProps) { const queryClient = useQueryClient(); const { mutate: modifyTreeMenu } = useMutation({ mutationFn: (newTree: TreeMenu) => MenuApi.modifyTreeMenu(siteId, [newTree]), onSuccess: () => { queryClient.invalidateQueries({ queryKey: [ENDPOINT.CMS_SERVICE.MENUS], }); }, }); const [selectedNode, setSelectedNode] = useState | null>( null, ); return ( , { depth, isOpen, onToggle }) => ( )} onDrop={handleDropNode(modifyTreeMenu)} classes={{ root: "p-4", container: "flex flex-col", dropTarget: "!bg-[rgba(32,148,250,0.5)] rounded-sm", placeholder: "relative", }} sort={false} dropTargetOffset={5} insertDroppableFirst={false} canDrop={(_, { dragSource, dropTargetId }) => { if (dragSource?.parent === dropTargetId) { return true; } }} placeholderRender={(_, { depth }) => { return (
); }} /> ); } export { MenuTree };