@@ -12,8 +12,7 @@ import { createSpace } from "@/api/space";
1212import Edge from "@/components/Edge" ;
1313import { HeadNode , NoteNode , SubspaceNode } from "@/components/Node" ;
1414import useAutofit from "@/hooks/useAutofit" ;
15- import useDragNode from "@/hooks/useDragNode" ;
16- import useMoveNode from "@/hooks/useMoveNode" ;
15+ import useSpaceInteractions from "@/hooks/useSpaceInteractions" ;
1716import useSpaceSelection from "@/hooks/useSpaceSelection" ;
1817import useYjsSpace from "@/hooks/useYjsSpace" ;
1918import { useZoomSpace } from "@/hooks/useZoomSpace" ;
@@ -35,7 +34,7 @@ const dragBoundFunc = function (this: Konva.Node) {
3534
3635export default function SpaceView ( { spaceId, autofitTo } : SpaceViewProps ) {
3736 const stageRef = React . useRef < Konva . Stage > ( null ) ;
38- const stageSize = useAutofit ( autofitTo ) ; // useAutofit 호출
37+ const stageSize = useAutofit ( autofitTo ) ;
3938 const { zoomSpace, handleTouchMove, handleTouchEnd } = useZoomSpace ( {
4039 stageRef,
4140 } ) ;
@@ -52,69 +51,71 @@ export default function SpaceView({ spaceId, autofitTo }: SpaceViewProps) {
5251
5352 const nodesArray = nodes ? Object . values ( nodes ) : [ ] ;
5453
55- const { move, moveState } = useMoveNode ( {
56- nodes : nodesArray ,
57- spaceActions : { updateNode } ,
58- } ) ;
54+ const {
55+ drag,
56+ move,
57+ dropPosition,
58+ setDropPosition,
59+ handlePaletteSelect,
60+ nodeEventHandlers,
61+ } = useSpaceInteractions ( nodesArray , {
62+ createNode : ( type , parentNode , position , name = "New Note" ) => {
63+ if ( type === "note" ) {
64+ createNote ( {
65+ userId : "honeyflow" ,
66+ noteName : name ,
67+ spaceId,
68+ } ) . then ( ( res ) => {
69+ defineNode (
70+ {
71+ type,
72+ x : position . x ,
73+ y : position . y ,
74+ name,
75+ src : res . urlPath . toString ( ) ,
76+ } ,
77+ parentNode . id ,
78+ ) ;
79+ } ) ;
80+ return ;
81+ }
5982
60- const { drag, dropPosition, setDropPosition, handlePaletteSelect } =
61- useDragNode ( nodesArray , {
62- createNode : ( type , parentNode , position , name = "New Note" ) => {
63- if ( type === "note" ) {
64- createNote ( {
65- userId : "honeyflow" ,
66- noteName : name ,
67- spaceId,
68- } ) . then ( ( res ) => {
69- defineNode (
70- {
71- type,
72- x : position . x ,
73- y : position . y ,
74- name,
75- src : res . urlPath . toString ( ) ,
76- } ,
77- parentNode . id ,
78- ) ;
79- } ) ;
80- return ;
81- }
82-
83- if ( type === "subspace" ) {
84- createSpace ( {
85- spaceName : name ,
86- userId : "honeyflow" ,
87- parentContextNodeId : spaceId ,
88- } ) . then ( ( res ) => {
89- defineNode (
90- {
91- type,
92- x : position . x ,
93- y : position . y ,
94- name,
95- src : res . urlPath . toString ( ) ,
96- } ,
97- parentNode . id ,
98- ) ;
99- } ) ;
100- return ;
101- }
102-
103- defineNode (
104- {
105- type,
106- x : position . x ,
107- y : position . y ,
108- name,
109- src : "" ,
110- } ,
111- parentNode . id ,
112- ) ;
113- } ,
114- createEdge : ( fromNode , toNode ) => {
115- defineEdge ( fromNode . id , toNode . id ) ;
116- } ,
117- } ) ;
83+ if ( type === "subspace" ) {
84+ createSpace ( {
85+ spaceName : name ,
86+ userId : "honeyflow" ,
87+ parentContextNodeId : spaceId ,
88+ } ) . then ( ( res ) => {
89+ defineNode (
90+ {
91+ type,
92+ x : position . x ,
93+ y : position . y ,
94+ name,
95+ src : res . urlPath . toString ( ) ,
96+ } ,
97+ parentNode . id ,
98+ ) ;
99+ } ) ;
100+ return ;
101+ }
102+
103+ defineNode (
104+ {
105+ type,
106+ x : position . x ,
107+ y : position . y ,
108+ name,
109+ src : "" ,
110+ } ,
111+ parentNode . id ,
112+ ) ;
113+ } ,
114+ createEdge : ( fromNode , toNode ) => {
115+ defineEdge ( fromNode . id , toNode . id ) ;
116+ } ,
117+ updateNode,
118+ } ) ;
118119
119120 const { selectedNode, selectNode, selectedEdge, selectEdge, clearSelection } =
120121 useSpaceSelection ( ) ;
@@ -198,9 +199,7 @@ export default function SpaceView({ spaceId, autofitTo }: SpaceViewProps) {
198199 key = { node . id }
199200 id = { node . id }
200201 name = { node . name }
201- onDragStart = { ( ) => drag . handlers . onDragStart ( node ) }
202- onDragMove = { drag . handlers . onDragMove }
203- onDragEnd = { ( ) => drag . handlers . onDragEnd ( ) }
202+ { ...nodeEventHandlers ( node ) }
204203 dragBoundFunc = { dragBoundFunc }
205204 />
206205 ) ,
@@ -212,20 +211,8 @@ export default function SpaceView({ spaceId, autofitTo }: SpaceViewProps) {
212211 y = { node . y }
213212 name = { node . name }
214213 src = { node . src || "" }
215- onDragStart = { ( ) => drag . handlers . onDragStart ( node ) }
216- onDragMove = { ( e ) => {
217- drag . handlers . onDragMove ( e ) ;
218- move . callbacks . monitorHoldingPosition ( e ) ;
219- } }
220- onDragEnd = { ( e ) => {
221- drag . handlers . onDragEnd ( moveState . isMoving ) ;
222- move . callbacks . endMove ( e ) ;
223- } }
214+ { ...nodeEventHandlers ( node ) }
224215 dragBoundFunc = { dragBoundFunc }
225- onMouseDown = { ( e ) => move . callbacks . startHold ( node , e ) }
226- onMouseUp = { move . callbacks . endHold }
227- onTouchStart = { ( e ) => move . callbacks . startHold ( node , e ) }
228- onTouchEnd = { move . callbacks . endHold }
229216 onContextMenu = { handleContextMenu }
230217 onMouseEnter = { handleHover }
231218 onMouseLeave = { handleHover }
@@ -239,20 +226,8 @@ export default function SpaceView({ spaceId, autofitTo }: SpaceViewProps) {
239226 y = { node . y }
240227 name = { node . name }
241228 src = { node . src || "" }
242- onDragStart = { ( ) => drag . handlers . onDragStart ( node ) }
243- onDragMove = { ( e ) => {
244- drag . handlers . onDragMove ( e ) ;
245- move . callbacks . monitorHoldingPosition ( e ) ;
246- } }
247- onDragEnd = { ( e ) => {
248- drag . handlers . onDragEnd ( moveState . isMoving ) ;
249- move . callbacks . endMove ( e ) ;
250- } }
229+ { ...nodeEventHandlers ( node ) }
251230 dragBoundFunc = { dragBoundFunc }
252- onMouseDown = { ( e ) => move . callbacks . startHold ( node , e ) }
253- onMouseUp = { move . callbacks . endHold }
254- onTouchStart = { ( e ) => move . callbacks . startHold ( node , e ) }
255- onTouchEnd = { move . callbacks . endHold }
256231 onContextMenu = { handleContextMenu }
257232 onMouseEnter = { handleHover }
258233 onMouseLeave = { handleHover }
@@ -274,11 +249,11 @@ export default function SpaceView({ spaceId, autofitTo }: SpaceViewProps) {
274249 startPosition = { { x : 0 , y : 0 } }
275250 dragPosition = { drag . position }
276251 connectionVisible = { false }
277- color = { moveState . isOverlapping ? "#ECE8E4" : "#FFF2CB" }
252+ color = { move . state . isOverlapping ? "#ECE8E4" : "#FFF2CB" }
278253 />
279254 ) ;
280255
281- const nearIndicatorRenderer = ! moveState . isMoving &&
256+ const nearIndicatorRenderer = ! move . state . isMoving &&
282257 drag . position &&
283258 drag . startNode &&
284259 drag . overlapNode &&
@@ -312,7 +287,7 @@ export default function SpaceView({ spaceId, autofitTo }: SpaceViewProps) {
312287 < Group x = { dropPosition ?. x } y = { dropPosition ?. y } >
313288 < Html >
314289 < Popover . Root
315- open = { ! moveState . isMoving && Boolean ( dropPosition ) }
290+ open = { ! move . state . isMoving && Boolean ( dropPosition ) }
316291 onOpenChange = { ( open ) => ! open && setDropPosition ( null ) }
317292 >
318293 < Popover . Anchor />
@@ -359,7 +334,7 @@ export default function SpaceView({ spaceId, autofitTo }: SpaceViewProps) {
359334 draggable
360335 >
361336 < Layer >
362- { moveState . isMoving
337+ { move . state . isMoving
363338 ? gooeyNodeMovingRenderer
364339 : gooeyNodeCreatingRenderer }
365340 { nearIndicatorRenderer }
0 commit comments