Skip to content

Commit 8259e19

Browse files
committed
configure yjs to client side
1 parent b4313a1 commit 8259e19

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

client/src/App.jsx

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import { useEffect, useRef, useState } from "react";
33
import "./App.css";
44
import { io } from "socket.io-client";
5+
import * as Y from "yjs";
6+
import { SocketIOProvider } from "y-socket.io";
57

68
const socket = io("http://localhost:8000");
79

@@ -22,7 +24,45 @@ function App() {
2224
const [isDrawing, setIsDrawing] = useState(false);
2325
const [penColor, setPenColor] = useState("#000000");
2426
const canvasColor = useRecoilValue(canvasColors);
25-
const [currentCanvas, setCanvas] = useRecoilState(canvasState);
27+
const [currentCanvas, setCanvas] = useRecoilState(canvasState);
28+
const [doc, setDoc] = useState(null);
29+
const [provider, setProvider] = useState(null);
30+
const [text, setText] = useState('');
31+
32+
useEffect(() => {
33+
if (!doc) {
34+
console.log("setting doc");
35+
const _doc = Y.Doc();
36+
setDoc(_doc);
37+
}
38+
}, [doc]);
39+
40+
useEffect(() => {
41+
if (!!doc && !provider) {
42+
console.log("setting provider");
43+
const socketioprovider = new SocketIOProvider(
44+
"ws://localhost:8000",
45+
"text-editor",
46+
doc,
47+
{ autoConnect: true }
48+
);
49+
setProvider(socketioprovider);
50+
socketioprovider.connect();
51+
}
52+
}, [doc, provider]);
53+
54+
useEffect(() => {
55+
if (provider) {
56+
const yText = doc.getText("text");
57+
const observer = () => {
58+
setText(yText.toString());
59+
};
60+
yText.observe(observer);
61+
return () => {
62+
yText.unobserve(observer);
63+
};
64+
}
65+
}, [provider]);
2666

2767
function toggleMenu() {
2868
setShowMenu(!showMenu);

0 commit comments

Comments
 (0)