diff --git a/client/src/components/sidebar/components/menuButton/components/components/WorkspaceSelectItem.tsx b/client/src/components/sidebar/components/menuButton/components/components/WorkspaceSelectItem.tsx index 4ecc8d2..abca2ec 100644 --- a/client/src/components/sidebar/components/menuButton/components/components/WorkspaceSelectItem.tsx +++ b/client/src/components/sidebar/components/menuButton/components/components/WorkspaceSelectItem.tsx @@ -2,7 +2,7 @@ import { WorkspaceListItem } from "@noctaCrdt/Interfaces"; // 이전에 만든 import { useSocketStore } from "@src/stores/useSocketStore"; import { useToastStore } from "@src/stores/useToastStore"; import { useUserInfo } from "@src/stores/useUserStore"; -import { useWorkspaceStore, WorkspaceRole } from "@src/stores/useWorkspaceStore"; +import { useWorkspaceStore } from "@src/stores/useWorkspaceStore"; import { itemContainer, itemContent, @@ -34,7 +34,7 @@ export const WorkspaceSelectItem = ({ const handleClick = () => { if (!isActive) { switchWorkspace(userId, id); - setCurrentRole(role as WorkspaceRole); + setCurrentRole(role); addToast(`워크스페이스(${name})에 접속하였습니다.`); } }; diff --git a/client/src/stores/useSocketStore.ts b/client/src/stores/useSocketStore.ts index 0d191ce..b5720f9 100644 --- a/client/src/stores/useSocketStore.ts +++ b/client/src/stores/useSocketStore.ts @@ -15,6 +15,7 @@ import { } from "@noctaCrdt/Interfaces"; import { io, Socket } from "socket.io-client"; import { create } from "zustand"; +import { useWorkspaceStore } from "./useWorkspaceStore"; class BatchProcessor { private batch: any[] = []; @@ -136,7 +137,7 @@ export const useSocketStore = create((set, get) => ({ socket.on("workspace", (workspace: WorkSpaceSerializedProps) => { const { setWorkspace } = get(); - setWorkspace(workspace); // 수정된 부분 + setWorkspace(workspace); }); socket.on("workspace/connections", (connections: Record) => { @@ -153,12 +154,23 @@ export const useSocketStore = create((set, get) => ({ socket.on("workspace/list", (workspaces: WorkspaceListItem[]) => { set({ availableWorkspaces: workspaces }); + const { availableWorkspaces } = get(); + console.log(availableWorkspaces); + const { workspace } = get(); + const currentWorkspace = availableWorkspaces.find((ws) => ws.id === workspace!.id); + if (currentWorkspace) { + useWorkspaceStore.getState().setCurrentRole(currentWorkspace.role); + } }); socket.on("error", (error: Error) => { console.error("Socket error:", error); }); + socket.on("workspace/role", (data: { role: "owner" | "editor" }) => { + useWorkspaceStore.getState().setCurrentRole(data.role); + }); + socket.connect(); }, diff --git a/client/src/stores/useWorkspaceStore.ts b/client/src/stores/useWorkspaceStore.ts index 45bcedb..4cd1d1b 100644 --- a/client/src/stores/useWorkspaceStore.ts +++ b/client/src/stores/useWorkspaceStore.ts @@ -1,13 +1,12 @@ import { create } from "zustand"; // 워크스페이스 권한 타입 정의 -export type WorkspaceRole = "owner" | "editor"; interface WorkspaceStore { // 현재 선택된 워크스페이스의 권한 - currentRole: WorkspaceRole | null; + currentRole: string | null; // 권한 설정 함수 - setCurrentRole: (role: WorkspaceRole | null) => void; + setCurrentRole: (role: string | null) => void; } export const useWorkspaceStore = create((set) => ({