Skip to content

Commit 65e334e

Browse files
committed
feat: 소켓 연결 상태 표시
Co-authored-by: 김동준 <[email protected]>
1 parent 9a09d47 commit 65e334e

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

Diff for: apps/frontend/src/features/canvas/ui/Canvas/index.tsx

+21-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { CollaborativeCursors } from "../CollaborativeCursors";
1414
import { useCanvas } from "../../model/useCanvas";
1515
import { MemoizedGroupNode, NoteNode, NoteNodeType } from "@/entities/node";
1616
import { cn } from "@/shared/lib";
17+
import { useConnectionStatus } from "@/shared/model/useConnectionStatus";
1718

1819
interface CanvasProps {
1920
className?: string;
@@ -36,6 +37,7 @@ export function Canvas({ className }: CanvasProps) {
3637
onNodeDragStop,
3738
onConnect,
3839
} = useCanvas();
40+
const status = useConnectionStatus();
3941

4042
const proOptions = { hideAttribution: true };
4143

@@ -75,8 +77,25 @@ export function Canvas({ className }: CanvasProps) {
7577
selectNodesOnDrag={false}
7678
>
7779
<Controls />
78-
<div className="fixed bottom-5 left-16 z-30 h-4 w-4 text-neutral-50 hover:cursor-pointer">
79-
{/* <button onClick={sortNodes}>Sort</button> */}
80+
<div
81+
className={cn(
82+
status === "connected" && "text-green-500",
83+
status === "connecting" && "text-amber-500",
84+
status === "disconnected" && "text-red-500",
85+
"fixed bottom-5 left-16 z-30 text-xs hover:cursor-pointer",
86+
)}
87+
>
88+
<div className="flex items-center gap-1">
89+
<div
90+
className={cn(
91+
status === "connected" && "bg-green-500",
92+
status === "connecting" && "bg-amber-500",
93+
status === "disconnected" && "bg-red-500",
94+
"h-2 w-2 rounded-full",
95+
)}
96+
></div>
97+
<div>{status}</div>
98+
</div>
8099
</div>
81100
<MiniMap />
82101
<Background variant={BackgroundVariant.Dots} gap={12} size={1} />
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import useConnectionStore, {
2+
type ConnectionStatus,
3+
} from "./useConnectionStore";
4+
import { usePageStore } from "@/entities/page";
5+
6+
export const useConnectionStatus = (): ConnectionStatus => {
7+
const { canvas, editor, user } = useConnectionStore();
8+
const { currentPage } = usePageStore();
9+
10+
if (
11+
(currentPage &&
12+
canvas.connectionStatus === "connected" &&
13+
editor.connectionStatus === "connected" &&
14+
user.connectionStatus === "connected") ||
15+
(!currentPage &&
16+
canvas.connectionStatus === "connected" &&
17+
user.connectionStatus === "connected")
18+
) {
19+
return "connected";
20+
}
21+
22+
if (
23+
canvas.connectionStatus === "connecting" ||
24+
editor.connectionStatus === "connecting" ||
25+
user.connectionStatus === "connecting"
26+
) {
27+
return "connecting";
28+
}
29+
30+
return "disconnected";
31+
};

0 commit comments

Comments
 (0)