2
2
import { useEffect , useRef , useState } from "react" ;
3
3
import "./App.css" ;
4
4
import { io } from "socket.io-client" ;
5
+ import * as Y from "yjs" ;
6
+ import { SocketIOProvider } from "y-socket.io" ;
5
7
6
8
const socket = io ( "http://localhost:8000" ) ;
7
9
@@ -22,7 +24,45 @@ function App() {
22
24
const [ isDrawing , setIsDrawing ] = useState ( false ) ;
23
25
const [ penColor , setPenColor ] = useState ( "#000000" ) ;
24
26
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 ] ) ;
26
66
27
67
function toggleMenu ( ) {
28
68
setShowMenu ( ! showMenu ) ;
0 commit comments