import { useState } from 'react';
import {ReactFlow, addEdge, Controls, Background, MarkerType } from '@xyflow/react';
import '@xyflow/react/dist/style.css';
import { FiUser, FiMail, FiCheckCircle,FiList } from 'react-icons/fi';
import {FaShuffle } from "react-icons/fa6";
const initialNode = {
id: '1',
type: 'input',
data: {
label: (
Customer signs up for product updates
)
},
position: { x: 250, y: 100 },
};
const tabBarOptions = [
{
label: 'Send email',
id: '2',
type: '',
html: (
Send email
),
position: { x: 250, y: 200 },
},
{
label: 'Replied to conversation?',
id: '3',
type: '',
html: (
Replied to conversation?
),
position: { x: 250, y: 290 },
},
{
label: 'Send survey',
id: '4',
type: 'output',
html: (
Send survey
),
position: { x: 100, y: 400 },
},
{
label: 'Contact Exists',
id: '5',
type: 'output',
html: (
Contact Exits
),
position: { x: 400, y: 400 },
},
];
// Nội dung cho mỗi node
const nodeContents = {
'2': `
`,
'1': `
`,
'3': `
`,
'5': `
`,
'4': `
`
};
const NoteFlow = () => {
const [nodes, setNodes] = useState([initialNode]);
const [edges, setEdges] = useState([]);
const [showTabBar, setShowTabBar] = useState(false);
const [lastNodeId, setLastNodeId] = useState('1');
const [showAdditionalOptions, setShowAdditionalOptions] = useState(false);
const [selectedNodeContent, setSelectedNodeContent] = useState('');
const [showPopup, setShowPopup] = useState(false);
const handleAddNoteClick = () => {
setShowTabBar(true);
};
const handleTabClick = (option) => {
setShowTabBar(false);
const newNode = {
id: option.id,
data: { label: option.html },
position: { x: option.position.x, y: option.position.y },
};
setNodes((nds) => [...nds, newNode]);
setEdges((eds) => addEdge({ id: `e${lastNodeId}-${option.id}`, source: lastNodeId, target: option.id, animated: false }, eds));
setLastNodeId(option.id);
if (option.id === '3') {
const yesNode = {
id: '4',
type: 'output',
data: { label: (
Send survey
) },
position: { x: 100, y: 400 },
};
const noNode = {
id: '5',
type: 'output',
data: { label: (
Contact Exits
) },
position: { x: 400, y: 400 },
};
setNodes((nds) => [...nds, yesNode, noNode]);
setEdges((eds) => [
...eds,
{ id: 'e3-4', source: '3', target: '4', label: 'yes', animated: false,},
{ id: 'e3-5', source: '3', target: '5', label: 'no', animated: false},
]);
}
};
const handleAdditionalOptionClick = (option) => {
setShowAdditionalOptions(false);
const surveyNode = {
id: option.id,
data: { label: 'Send survey' },
position: { x: 100, y: 150 * (nodes.length + 1) },
};
const contactExistsNode = {
id: '5',
data: { label: 'Contact Exists' },
position: { x: 400, y: 150 * (nodes.length + 1) },
};
setNodes((nds) => [...nds, surveyNode, contactExistsNode]);
setEdges((eds) => [
...eds,
{ id: `e${lastNodeId}-${option.id}`, source: lastNodeId, target: option.id, label: 'yes', animated: true },
{ id: `e${option.id}-5`, source: option.id, target: '5', label: 'no', animated: true },
]);
};
const onNodeClick = (event, node) => {
const content = nodeContents[node.id];
setSelectedNodeContent(content);
setShowPopup(true);
};
const hideenPopup = () => {
setShowPopup(false);
console.log('hide')
}
const onConnect = (params) => setEdges((eds) => addEdge(params, eds));
return (
{showTabBar && (
{tabBarOptions.map((option) => (
handleTabClick(option)}
style={{
padding: '10px',
cursor: 'pointer',
borderBottom: '1px solid #ddd',
}}
>
{option.label}
))}
)}
{showAdditionalOptions && (
{additionalOptions.map((option) => (
handleAdditionalOptionClick(option)}
style={{
padding: '10px',
cursor: 'pointer',
borderBottom: '1px solid #ddd',
}}
>
{option.label}
))}
)}
{showPopup && (
<>
>
)}
);
};
export default NoteFlow;