Skip to content

Commit 9f024fb

Browse files
committed
refactor: 공용 접속 인원 컴포넌트
1 parent 45a9688 commit 9f024fb

File tree

3 files changed

+49
-21
lines changed

3 files changed

+49
-21
lines changed

apps/frontend/src/components/EditorView.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,22 @@ import * as Y from "yjs";
55
import { SocketIOProvider } from "y-socket.io";
66

77
import Editor from "./editor";
8-
import usePageStore from "@/store/usePageStore";
9-
import { usePage, useUpdatePage } from "@/hooks/usePages";
108
import EditorLayout from "./layout/EditorLayout";
119
import EditorTitle from "./editor/EditorTitle";
1210
import SaveStatus from "./editor/ui/SaveStatus";
11+
import ActiveUser from "./commons/activeUser";
12+
13+
import usePageStore from "@/store/usePageStore";
14+
import useUserStore from "@/store/useUserStore";
15+
import { usePage, useUpdatePage } from "@/hooks/usePages";
1316

1417
export default function EditorView() {
1518
const { currentPage } = usePageStore();
1619
const { page, isLoading } = usePage(currentPage);
1720
const [saveStatus, setSaveStatus] = useState<"saved" | "unsaved">("saved");
1821
const [ydoc, setYDoc] = useState<Y.Doc | null>(null);
1922
const [provider, setProvider] = useState<SocketIOProvider | null>(null);
23+
const { users } = useUserStore();
2024

2125
useEffect(() => {
2226
if (!currentPage) return;
@@ -88,6 +92,12 @@ export default function EditorView() {
8892
currentPage={currentPage}
8993
pageContent={pageContent}
9094
/>
95+
<ActiveUser
96+
className="px-12 py-4"
97+
users={users.filter(
98+
(user) => user.currentPageId === currentPage.toString(),
99+
)}
100+
/>
91101
<Editor
92102
key={ydoc.guid}
93103
initialContent={pageContent}

apps/frontend/src/components/canvas/NoteNode.tsx

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { Handle, NodeProps, Position, type Node } from "@xyflow/react";
2+
3+
import ActiveUser from "../commons/activeUser";
4+
25
import usePageStore from "@/store/usePageStore";
36
import useUserStore from "@/store/useUserStore";
4-
import { cn } from "@/lib/utils";
57

68
export type NoteNodeData = { title: string; id: number };
79
export type NoteNodeType = Node<NoteNodeData, "note">;
@@ -49,24 +51,12 @@ export function NoteNode({ data }: NodeProps<NoteNodeType>) {
4951
isConnectable={true}
5052
/>
5153
{data.title}
52-
<div className="flex justify-end gap-2">
53-
{users
54-
.filter((user) => user.currentPageId === data.id.toString())
55-
.map((user) => (
56-
<div
57-
style={{ backgroundColor: user.color }}
58-
className={cn("group relative h-5 w-5 rounded-full")}
59-
key={user.clientId}
60-
>
61-
<div
62-
style={{ backgroundColor: user.color }}
63-
className="absolute left-2 z-10 hidden px-2 text-sm group-hover:flex"
64-
>
65-
{user.clientId}
66-
</div>
67-
</div>
68-
))}
69-
</div>
54+
<ActiveUser
55+
className="justify-end"
56+
users={users.filter(
57+
(user) => user.currentPageId === data.id.toString(),
58+
)}
59+
/>
7060
</div>
7161
);
7262
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { User } from "@/store/useUserStore";
2+
import { cn } from "@/lib/utils";
3+
4+
interface ActiveUserProps {
5+
users: User[];
6+
className?: string;
7+
}
8+
9+
export default function ActiveUser({ users, className }: ActiveUserProps) {
10+
return (
11+
<div className={cn("flex gap-2", className)}>
12+
{users.map((user) => (
13+
<div
14+
style={{ backgroundColor: user.color }}
15+
className={cn("group relative h-5 w-5 rounded-full")}
16+
key={user.clientId}
17+
>
18+
<div
19+
style={{ backgroundColor: user.color }}
20+
className="absolute left-2 z-10 hidden px-2 text-sm group-hover:flex"
21+
>
22+
{user.clientId}
23+
</div>
24+
</div>
25+
))}
26+
</div>
27+
);
28+
}

0 commit comments

Comments
 (0)