Skip to content

Commit e1ffb27

Browse files
authored
Merge pull request #195 from boostcampwm-2024/feature-fe-#192
새로운 페이지 열 때 이전 페이지의 웹소켓 연결 끊기 기능
2 parents b38817b + e5fc4f4 commit e1ffb27

File tree

1 file changed

+20
-27
lines changed

1 file changed

+20
-27
lines changed

Diff for: apps/frontend/src/components/EditorView.tsx

+20-27
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useMemo, useState } from "react";
1+
import { useEffect, useState } from "react";
22
import { EditorInstance } from "novel";
33
import { useDebouncedCallback } from "use-debounce";
44
import * as Y from "yjs";
@@ -15,16 +15,23 @@ export default function EditorView() {
1515
const { currentPage } = usePageStore();
1616
const { page, isLoading } = usePage(currentPage);
1717
const [saveStatus, setSaveStatus] = useState<"saved" | "unsaved">("saved");
18+
const [ydoc, setYDoc] = useState<Y.Doc | null>(null);
19+
const [provider, setProvider] = useState<SocketIOProvider | null>(null);
1820

19-
const ydoc = useMemo(() => {
20-
return new Y.Doc();
21-
}, [currentPage]);
21+
useEffect(() => {
22+
if (!currentPage) return;
23+
24+
if (provider) {
25+
provider.disconnect();
26+
}
2227

23-
const provider = useMemo(() => {
24-
return new SocketIOProvider(
28+
const doc = new Y.Doc();
29+
setYDoc(doc);
30+
31+
const wsProvider = new SocketIOProvider(
2532
import.meta.env.VITE_WS_URL,
2633
`document-${currentPage}`,
27-
ydoc,
34+
doc,
2835
{
2936
autoConnect: true,
3037
disableBc: false,
@@ -35,32 +42,18 @@ export default function EditorView() {
3542
transports: ["websocket", "polling"],
3643
},
3744
);
45+
46+
setProvider(wsProvider);
47+
48+
return () => {
49+
wsProvider.disconnect();
50+
};
3851
}, [currentPage]);
3952

4053
const pageTitle = page?.title ?? "제목없음";
4154
const pageContent = page?.content ?? {};
4255

4356
const updatePageMutation = useUpdatePage();
44-
/* const optimisticUpdatePageMutation = useOptimisticUpdatePage({
45-
id: currentPage ?? 0,
46-
});
47-
48-
const handleTitleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
49-
if (currentPage === null) return;
50-
51-
setSaveStatus("unsaved");
52-
53-
optimisticUpdatePageMutation.mutate(
54-
{
55-
pageData: { title: e.target.value, content: pageContent },
56-
},
57-
{
58-
onSuccess: () => setSaveStatus("saved"),
59-
onError: () => setSaveStatus("unsaved"),
60-
},
61-
);
62-
}; */
63-
6457
const handleEditorUpdate = useDebouncedCallback(
6558
async ({ editor }: { editor: EditorInstance }) => {
6659
if (currentPage === null) {

0 commit comments

Comments
 (0)