11import { cn } from "@/lib/utils" ;
22
3- import { useCallback } from "react" ;
3+ import { useCallback , useMemo } from "react" ;
44import {
55 ReactFlow ,
66 MiniMap ,
@@ -10,18 +10,49 @@ import {
1010 useEdgesState ,
1111 addEdge ,
1212 BackgroundVariant ,
13+ ConnectionMode ,
1314 type OnConnect ,
1415 type Node ,
1516 type Edge ,
1617} from "@xyflow/react" ;
1718
1819import "@xyflow/react/dist/style.css" ;
1920
20- const initialNodes : Node [ ] = [
21- { id : "1" , position : { x : 0 , y : 0 } , data : { label : "1" } } ,
22- { id : "2" , position : { x : 0 , y : 100 } , data : { label : "2" } } ,
21+ import { useEffect } from "react" ;
22+ import { usePages } from "@/hooks/usePages" ;
23+ import { type NoteNodeType , NoteNode } from "./NoteNode" ;
24+
25+ // 테스트용 초기값
26+ const initialNodes : NoteNodeType [ ] = [
27+ {
28+ id : "1" ,
29+ position : { x : 100 , y : 100 } ,
30+ type : "note" ,
31+ data : {
32+ id : 0 ,
33+ title : "Node 1" ,
34+ } ,
35+ } ,
36+ {
37+ id : "2" ,
38+ position : { x : 400 , y : 200 } ,
39+ type : "note" ,
40+ data : {
41+ id : 1 ,
42+ title : "Node 2" ,
43+ } ,
44+ } ,
45+ ] ;
46+
47+ const initialEdges : Edge [ ] = [
48+ {
49+ id : "e1-2" ,
50+ source : "1" ,
51+ target : "2" ,
52+ sourceHandle : "top" ,
53+ targetHandle : "left" ,
54+ } ,
2355] ;
24- const initialEdges : Edge [ ] = [ { id : "e1-2" , source : "1" , target : "2" } ] ;
2556
2657const proOptions = { hideAttribution : true } ;
2758
@@ -30,14 +61,32 @@ interface CanvasProps {
3061}
3162
3263export default function Canvas ( { className } : CanvasProps ) {
33- const [ nodes , , onNodesChange ] = useNodesState ( initialNodes ) ;
64+ const [ nodes , setNodes , onNodesChange ] = useNodesState < Node > ( initialNodes ) ;
3465 const [ edges , setEdges , onEdgesChange ] = useEdgesState ( initialEdges ) ;
3566
67+ const { data } = usePages ( ) ;
68+ const pages = data ?. data ;
69+
70+ useEffect ( ( ) => {
71+ if ( ! pages ) {
72+ return ;
73+ }
74+
75+ const newNodes = pages . map ( ( page , index ) => ( {
76+ id : page . id . toString ( ) ,
77+ position : { x : 100 * index , y : 100 } ,
78+ data : { label : page . title , id : page . id } ,
79+ } ) ) ;
80+ setNodes ( newNodes ) ;
81+ } , [ pages , setNodes ] ) ;
82+
3683 const onConnect : OnConnect = useCallback (
3784 ( params ) => setEdges ( ( eds ) => addEdge ( params , eds ) ) ,
3885 [ setEdges ] ,
3986 ) ;
4087
88+ const nodeTypes = useMemo ( ( ) => ( { note : NoteNode } ) , [ ] ) ;
89+
4190 return (
4291 < div className = { cn ( "" , className ) } >
4392 < ReactFlow
@@ -47,6 +96,8 @@ export default function Canvas({ className }: CanvasProps) {
4796 onEdgesChange = { onEdgesChange }
4897 onConnect = { onConnect }
4998 proOptions = { proOptions }
99+ nodeTypes = { nodeTypes }
100+ connectionMode = { ConnectionMode . Loose }
50101 >
51102 < Controls />
52103 < MiniMap />
0 commit comments