Skip to content

Commit bbb19f5

Browse files
committed
refactor: Node Entity 추가
1 parent ac32744 commit bbb19f5

File tree

7 files changed

+33
-15
lines changed

7 files changed

+33
-15
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export {
2+
type Node,
3+
type NoteNodeData,
4+
type NoteNodeType,
5+
} from "./model/nodeTypes";
6+
7+
export { MemoizedGroupNode } from "./ui/GroupNode";
8+
export { NoteNode } from "./ui/NoteNode";
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { type Node as FlowNode } from "@xyflow/react";
2+
3+
export interface Node extends FlowNode {
4+
isHolding: boolean;
5+
}
6+
7+
export type NoteNodeData = {
8+
title: string;
9+
id: number;
10+
emoji: string;
11+
};
12+
13+
export type NoteNodeType = FlowNode<NoteNodeData, "note">;

apps/frontend/src/features/canvas/ui/Node/GroupNode/index.tsx renamed to apps/frontend/src/entities/node/ui/GroupNode/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const controlStyle = {
77
border: "none",
88
};
99

10-
export function GroupNode() {
10+
function GroupNode() {
1111
return (
1212
<>
1313
<NodeResizeControl style={controlStyle} minWidth={100} minHeight={50}>
@@ -20,4 +20,4 @@ export function GroupNode() {
2020
);
2121
}
2222

23-
export default memo(GroupNode);
23+
export const MemoizedGroupNode = memo(GroupNode);

apps/frontend/src/features/canvas/ui/Node/NoteNode/index.tsx renamed to apps/frontend/src/entities/node/ui/NoteNode/index.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import { useEffect, useState } from "react";
22
import { FileText } from "lucide-react";
3-
import { Handle, NodeProps, Position, type Node } from "@xyflow/react";
3+
import { Handle, NodeProps, Position } from "@xyflow/react";
44

5-
import { useUserStore } from "@/entities/user";
5+
import { NoteNodeType } from "../../model/nodeTypes";
66
import { usePageStore } from "@/entities/page";
7+
import { useUserStore } from "@/entities/user";
78
import { ActiveUser, Emoji } from "@/shared/ui";
89

9-
export type NoteNodeData = { title: string; id: number; emoji: string };
10-
export type NoteNodeType = Node<NoteNodeData, "note">;
11-
1210
export function NoteNode({ data }: NodeProps<NoteNodeType>) {
1311
const { currentPage, setCurrentPage } = usePageStore();
1412
const { users } = useUserStore();

apps/frontend/src/features/canvas/ui/Canvas/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
import "@xyflow/react/dist/style.css";
1212

1313
import { CollaborativeCursors } from "../CollaborativeCursors";
14-
import { NoteNode, GroupNode } from "../Node";
1514
import { useCanvas } from "../../model/useCanvas";
15+
import { MemoizedGroupNode, NoteNode } from "@/entities/node";
1616
import { cn } from "@/shared/lib";
1717

1818
const proOptions = { hideAttribution: true };
@@ -40,7 +40,10 @@ export function Canvas({ className }: CanvasProps) {
4040
cursors,
4141
} = useCanvas();
4242

43-
const nodeTypes = useMemo(() => ({ note: NoteNode, group: GroupNode }), []);
43+
const nodeTypes = useMemo(
44+
() => ({ note: NoteNode, group: MemoizedGroupNode }),
45+
[],
46+
);
4447

4548
return (
4649
<div className={cn("", className)} onMouseMove={handleMouseMove}>

apps/frontend/src/features/canvas/ui/Node/index.tsx

Lines changed: 0 additions & 2 deletions
This file was deleted.

apps/frontend/src/features/pageSidebar/model/useNoteList.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import { useEffect, useState } from "react";
22

33
import { useDeletePage } from "../api/usePages";
4+
import { Node, NoteNodeData } from "@/entities/node";
45
import { usePageStore } from "@/entities/page";
5-
// TODO: Node entity 만들어야할듯?
6-
import { YNode } from "@/features/canvas/model/useCanvas";
7-
import { NoteNodeData } from "@/features/canvas/ui/Node/NoteNode";
86
import { useYDocStore } from "@/shared/model";
97

108
export const useNoteList = () => {
@@ -17,7 +15,7 @@ export const useNoteList = () => {
1715
// TODO: 최적화 필요
1816
useEffect(() => {
1917
nodesMap.observe(() => {
20-
const yNodes = Array.from(nodesMap.values()) as YNode[];
18+
const yNodes = Array.from(nodesMap.values()) as Node[];
2119
const data = yNodes.map((yNode) => yNode.data) as NoteNodeData[];
2220
setPages(data);
2321
});

0 commit comments

Comments
 (0)