update remove
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { useState } from 'react';
|
import { useState,useCallback } from 'react';
|
||||||
import {ReactFlow, addEdge, Controls, Background, MarkerType } from '@xyflow/react';
|
import {ReactFlow, addEdge, Controls, Background, MarkerType } from '@xyflow/react';
|
||||||
import '@xyflow/react/dist/style.css';
|
import '@xyflow/react/dist/style.css';
|
||||||
import { FiUser, FiMail, FiCheckCircle,FiList } from 'react-icons/fi';
|
import { FiUser, FiMail, FiCheckCircle,FiList } from 'react-icons/fi';
|
||||||
@@ -112,6 +112,7 @@ const NoteFlow = () => {
|
|||||||
const [showAdditionalOptions, setShowAdditionalOptions] = useState(false);
|
const [showAdditionalOptions, setShowAdditionalOptions] = useState(false);
|
||||||
const [selectedNodeContent, setSelectedNodeContent] = useState('');
|
const [selectedNodeContent, setSelectedNodeContent] = useState('');
|
||||||
const [showPopup, setShowPopup] = useState(false);
|
const [showPopup, setShowPopup] = useState(false);
|
||||||
|
const [nodeToDelete, setNodeToDelete] = useState(null);
|
||||||
|
|
||||||
const handleAddNoteClick = () => {
|
const handleAddNoteClick = () => {
|
||||||
setShowTabBar(true);
|
setShowTabBar(true);
|
||||||
@@ -203,14 +204,22 @@ const NoteFlow = () => {
|
|||||||
|
|
||||||
const onConnect = (params) => setEdges((eds) => addEdge(params, eds));
|
const onConnect = (params) => setEdges((eds) => addEdge(params, eds));
|
||||||
|
|
||||||
const handleNodeDelete = (nodesToDelete) => {
|
const onNodeContextMenu = useCallback((event, node) => {
|
||||||
setNodes((nds) => nds.filter((node) => !nodesToDelete.some((n) => n.id === node.id)));
|
event.preventDefault(); // Ngăn không cho menu chuột phải mặc định hiện ra
|
||||||
setEdges((eds) => eds.filter((edge) => !nodesToDelete.some((n) => n.id === edge.source || n.id === edge.target)));
|
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);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div style={{ height: '100vh', width: '100%' }}>
|
<div style={{ height: '100vh', width: '100%' }}>
|
||||||
<ReactFlow nodes={nodes} edges={edges} onConnect={onConnect} onNodeClick={onNodeClick} onNodesDelete={handleNodeDelete}>
|
<ReactFlow nodes={nodes} edges={edges} onConnect={onConnect} onNodeClick={onNodeClick} onNodeContextMenu={onNodeContextMenu}>
|
||||||
<Controls />
|
<Controls />
|
||||||
<Background />
|
<Background />
|
||||||
</ReactFlow>
|
</ReactFlow>
|
||||||
@@ -288,6 +297,29 @@ const NoteFlow = () => {
|
|||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
{nodeToDelete && (
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: nodeToDelete.position.y - 12,
|
||||||
|
left: nodeToDelete.position.x + 260,
|
||||||
|
zIndex: 10,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
onClick={handleNodeDelete}
|
||||||
|
style={{
|
||||||
|
background: 'red',
|
||||||
|
color: 'white',
|
||||||
|
border: 'none',
|
||||||
|
borderRadius: '4px',
|
||||||
|
cursor: 'pointer'
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
X
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user