node
This commit is contained in:
10
src/App.tsx
10
src/App.tsx
@@ -4,7 +4,7 @@ import {
|
|||||||
addEdge,
|
addEdge,
|
||||||
applyEdgeChanges,
|
applyEdgeChanges,
|
||||||
applyNodeChanges,
|
applyNodeChanges,
|
||||||
Background
|
Background,
|
||||||
} from '@xyflow/react';
|
} from '@xyflow/react';
|
||||||
import '@xyflow/react/dist/style.css';
|
import '@xyflow/react/dist/style.css';
|
||||||
|
|
||||||
@@ -107,6 +107,13 @@ function Flow() {
|
|||||||
[setEdges],
|
[setEdges],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const onNodesDelete = useCallback((deletedNodes) => {
|
||||||
|
console.log('Các node đã bị xóa:', deletedNodes);
|
||||||
|
|
||||||
|
// Lọc lại danh sách nodes sau khi xóa
|
||||||
|
setNodes((nds) => nds.filter((node) => !deletedNodes.some((deletedNode) => deletedNode.id === node.id)));
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactFlow
|
<ReactFlow
|
||||||
nodes={nodes}
|
nodes={nodes}
|
||||||
@@ -115,6 +122,7 @@ function Flow() {
|
|||||||
onEdgesChange={onEdgesChange}
|
onEdgesChange={onEdgesChange}
|
||||||
onConnect={onConnect}
|
onConnect={onConnect}
|
||||||
nodeTypes={nodeTypes}
|
nodeTypes={nodeTypes}
|
||||||
|
onNodesDelete={onNodesDelete}
|
||||||
fitView
|
fitView
|
||||||
>
|
>
|
||||||
<Background />
|
<Background />
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ const tabBarOptions = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
// Nội dung cho mỗi node
|
// Nội dung popup cho mỗi node
|
||||||
const nodeContents = {
|
const nodeContents = {
|
||||||
'2': `
|
'2': `
|
||||||
<label for="email-subject">Subject:</label>
|
<label for="email-subject">Subject:</label>
|
||||||
@@ -199,14 +199,18 @@ const NoteFlow = () => {
|
|||||||
|
|
||||||
const hideenPopup = () => {
|
const hideenPopup = () => {
|
||||||
setShowPopup(false);
|
setShowPopup(false);
|
||||||
console.log('hide')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const onConnect = (params) => setEdges((eds) => addEdge(params, eds));
|
const onConnect = (params) => setEdges((eds) => addEdge(params, eds));
|
||||||
|
|
||||||
|
const handleNodeDelete = (nodesToDelete) => {
|
||||||
|
setNodes((nds) => nds.filter((node) => !nodesToDelete.some((n) => n.id === node.id)));
|
||||||
|
setEdges((eds) => eds.filter((edge) => !nodesToDelete.some((n) => n.id === edge.source || n.id === edge.target)));
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div style={{ height: '100vh', width: '100%' }}>
|
<div style={{ height: '100vh', width: '100%' }}>
|
||||||
<ReactFlow nodes={nodes} edges={edges} onConnect={onConnect} onNodeClick={onNodeClick}>
|
<ReactFlow nodes={nodes} edges={edges} onConnect={onConnect} onNodeClick={onNodeClick} onNodesDelete={handleNodeDelete}>
|
||||||
<Controls />
|
<Controls />
|
||||||
<Background />
|
<Background />
|
||||||
</ReactFlow>
|
</ReactFlow>
|
||||||
@@ -269,7 +273,7 @@ const NoteFlow = () => {
|
|||||||
)}
|
)}
|
||||||
{showPopup && (
|
{showPopup && (
|
||||||
<>
|
<>
|
||||||
<button className="popup-overlay" onClick={hideenPopup}></button>
|
<div className="popup-overlay" onClick={hideenPopup}></div>
|
||||||
<div
|
<div
|
||||||
className={`popup global-popup ${showPopup ? '' : 'hidden'}`}
|
className={`popup global-popup ${showPopup ? '' : 'hidden'}`}
|
||||||
>
|
>
|
||||||
@@ -288,6 +292,4 @@ const NoteFlow = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default NoteFlow;
|
export default NoteFlow;
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user