diff --git a/src/nodes/NoteFlow.tsx b/src/nodes/NoteFlow.tsx index 2114bdb..b181b92 100644 --- a/src/nodes/NoteFlow.tsx +++ b/src/nodes/NoteFlow.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useState,useCallback } from 'react'; import { ReactFlow, addEdge, Controls, Background } from '@xyflow/react'; import '@xyflow/react/dist/style.css'; import { FiUser, FiMail, FiCheckCircle, FiList } from 'react-icons/fi'; @@ -25,6 +25,7 @@ const initialNodes = [ }, ]; +// nội dung tabbar const tabBarOptions = [ { label: 'Send email', @@ -76,6 +77,40 @@ const tabBarOptions = [ }, ]; +// Nội dung cho mỗi node +const nodeContents = { + '2': ` + + + + + `, + '1': ` + + + + + `, + '3': ` + + + `, + '5': ` + + + `, + '4': ` + + + + + ` +}; + + const NoteFlow = () => { const [nodes, setNodes] = useState(initialNodes); const [edges, setEdges] = useState([ @@ -84,6 +119,11 @@ const NoteFlow = () => { const [showTabBar, setShowTabBar] = useState(false); const [lastNodeId, setLastNodeId] = useState('1'); const [selectedNodeId, setSelectedNodeId] = useState(null); // Theo dõi node đã chọn + const [nodeToDelete, setNodeToDelete] = useState(null); + const [showPopup, setShowPopup] = useState(false); + const [selectedNodeContent, setSelectedNodeContent] = useState(''); + + const handleAddNoteClick = () => { setShowTabBar(true); @@ -186,9 +226,33 @@ const NoteFlow = () => { } }; + const onNodeContextMenu = useCallback((event, node) => { + event.preventDefault(); // Ngăn không cho menu chuột phải mặc định hiện ra + setNodeToDelete(node); + }, []); + + const handleNodeDelete = () => { + if (nodeToDelete) { + setNodes((nds) => nds.filter((node) => node.id !== nodeToDelete.id)); + setEdges((eds) => eds.filter((edge) => edge.source !== nodeToDelete.id && edge.target !== nodeToDelete.id)); + setNodeToDelete(null); + } + }; + + + const onNodeDoubleClick = (event, node) => { + const content = nodeContents[node.id]; + setSelectedNodeContent(content); + setShowPopup(true); + } + + const hideenPopup = () => { + setShowPopup(false); + } + return (