Skip to content

Commit 5a48e69

Browse files
authored
Merge pull request #134 from boostcampwm-2024/bug-fe-#133
에디터 초기 값 설정 문제 해결
2 parents c54c9f0 + 2542f94 commit 5a48e69

File tree

3 files changed

+31
-51
lines changed

3 files changed

+31
-51
lines changed

frontend/src/components/EditorView.tsx

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,35 @@
1-
import usePageStore from "@/store/usePageStore";
1+
import { useMemo, useState } from "react";
2+
import { EditorInstance } from "novel";
3+
import { useDebouncedCallback } from "use-debounce";
4+
import { WebsocketProvider } from "y-websocket";
5+
import * as Y from "yjs";
6+
27
import Editor from "./editor";
8+
import usePageStore from "@/store/usePageStore";
39
import {
410
usePage,
511
useUpdatePage,
612
useOptimisticUpdatePage,
713
} from "@/hooks/usePages";
814
import EditorLayout from "./layout/EditorLayout";
915
import EditorTitle from "./editor/EditorTitle";
10-
import { EditorInstance } from "novel";
11-
import { useEffect, useRef, useState } from "react";
12-
import { useDebouncedCallback } from "use-debounce";
13-
import { WebsocketProvider } from "y-websocket";
14-
import * as Y from "yjs";
1516
import SaveStatus from "./editor/ui/SaveStatus";
1617

1718
export default function EditorView() {
1819
const { currentPage } = usePageStore();
1920
const { page, isLoading } = usePage(currentPage);
20-
const [editorKey, setEditorKey] = useState(0);
2121
const [saveStatus, setSaveStatus] = useState<"saved" | "unsaved">("saved");
2222

23-
const ydoc = useRef<Y.Doc>();
24-
const provider = useRef<WebsocketProvider>();
25-
26-
useEffect(() => {
27-
if (currentPage === null) return;
28-
29-
if (provider.current) {
30-
provider.current.disconnect();
31-
provider.current.destroy();
32-
}
33-
if (ydoc.current) {
34-
ydoc.current.destroy();
35-
}
23+
const ydoc = useMemo(() => {
24+
return new Y.Doc();
25+
}, [currentPage]);
3626

37-
const doc = new Y.Doc();
38-
const wsProvider = new WebsocketProvider(
27+
const provider = useMemo(() => {
28+
return new WebsocketProvider(
3929
"ws://localhost:1234",
4030
`document-${currentPage}`,
41-
doc,
31+
ydoc,
4232
);
43-
44-
ydoc.current = doc;
45-
provider.current = wsProvider;
46-
47-
setEditorKey((prev) => prev + 1);
48-
49-
return () => {
50-
wsProvider.disconnect();
51-
wsProvider.destroy();
52-
doc.destroy();
53-
};
5433
}, [currentPage]);
5534

5635
const pageTitle = page?.title ?? "제목없음";
@@ -107,18 +86,18 @@ export default function EditorView() {
10786
);
10887
}
10988

110-
if (!ydoc.current || !provider.current) return <div>로딩중</div>;
89+
if (!ydoc || !provider) return <div>로딩중</div>;
11190

11291
return (
11392
<EditorLayout>
11493
<SaveStatus saveStatus={saveStatus} />
11594
<EditorTitle title={pageTitle} onTitleChange={handleTitleChange} />
11695
<Editor
117-
key={editorKey}
96+
key={ydoc.guid}
11897
initialContent={pageContent}
11998
pageId={currentPage}
120-
ydoc={ydoc.current}
121-
provider={provider.current}
99+
ydoc={ydoc}
100+
provider={provider}
122101
onEditorUpdate={handleEditorUpdate}
123102
/>
124103
</EditorLayout>

frontend/src/components/editor/EditorTitle.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ export default function EditorTitle({
77
title,
88
onTitleChange,
99
}: EditorTitleProps) {
10-
console.log(title);
1110
return (
1211
<div className="p-12 pb-0">
1312
<input

frontend/src/components/editor/index.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,12 @@ interface EditorProp {
3939
provider: WebsocketProvider;
4040
}
4141

42-
const Editor = ({ onEditorUpdate, ydoc, provider }: EditorProp) => {
42+
const Editor = ({
43+
initialContent,
44+
onEditorUpdate,
45+
ydoc,
46+
provider,
47+
}: EditorProp) => {
4348
const [openNode, setOpenNode] = useState(false);
4449
const [openColor, setOpenColor] = useState(false);
4550
const [openLink, setOpenLink] = useState(false);
@@ -52,17 +57,14 @@ const Editor = ({ onEditorUpdate, ydoc, provider }: EditorProp) => {
5257
onContentError={({ disableCollaboration }) => {
5358
disableCollaboration();
5459
}}
55-
// onCreate={({ editor: currentEditor }) => {
56-
// provider.on("synced", () => {
57-
// if (
58-
// !ydoc.getMap("config").get("initialContentLoaded") &&
59-
// currentEditor
60-
// ) {
61-
// ydoc.getMap("config").set("initialContentLoaded", true);
62-
// ydoc.getMap("content").set("content", initialContent);
63-
// }
64-
// });
65-
// }}
60+
initialContent={initialContent}
61+
onCreate={({ editor }) => {
62+
provider.on("sync", () => {
63+
if (editor.isEmpty && initialContent) {
64+
editor.commands.setContent(initialContent);
65+
}
66+
});
67+
}}
6668
extensions={[
6769
...extensions,
6870
Collaboration.extend().configure({

0 commit comments

Comments
 (0)