@@ -7,6 +7,68 @@ import Board from "../components/Board/Board";
7
7
import Status from "../components/Status/Status" ;
8
8
import Menu from "../components/Menu/Menu" ;
9
9
import _ from "lodash" ;
10
+ import { useAuthStore } from "../../../hooks/useStore" ;
11
+ import { useMap } from "@joebobmiles/y-react" ;
12
+
13
+ function withHooksAndPlayers ( Component ) {
14
+ return function WrappedComponent ( props ) {
15
+ const [ currentUser ] = useAuthStore ( ( state ) => [ state . currentUser ] ) ;
16
+ const ymap = useMap ( "tictactoe-state" ) ;
17
+ const state = ymap . get ( "game-state" ) ;
18
+ const setState = ( value ) => ymap . set ( "game-state" , value ) ;
19
+ let users = ymap . get ( "users" ) ;
20
+ const setUsers = ( value ) => {
21
+ ymap . set ( "users" , value ) ;
22
+ } ;
23
+
24
+ if ( users === undefined ) {
25
+ users = { p1 : null , p2 : null } ;
26
+ setUsers ( users ) ;
27
+ }
28
+ if ( ! users . p1 || ! users . p2 ) {
29
+ return (
30
+ < div >
31
+ { users . p1 ? (
32
+ < span > { users . p1 . name } </ span >
33
+ ) : (
34
+ < button
35
+ onClick = { ( ) => {
36
+ if ( users . p2 ?. id !== currentUser . id ) {
37
+ setUsers ( { ...users , p1 : currentUser } ) ;
38
+ }
39
+ } }
40
+ >
41
+ Play as Player One
42
+ </ button >
43
+ ) } { " " }
44
+ VS{ " " }
45
+ < button
46
+ onClick = { ( ) => {
47
+ if ( users . p1 ?. id !== currentUser . id ) {
48
+ setUsers ( { ...users , p2 : currentUser } ) ;
49
+ }
50
+ } }
51
+ >
52
+ Play as Player Two
53
+ </ button >
54
+ </ div >
55
+ ) ;
56
+ }
57
+
58
+ return ( < >
59
+ < button onClick = { ( ) => {
60
+ setUsers ( { p1 :null , p2 :null } )
61
+ } } > Reset Players</ button >
62
+ < Component
63
+ { ...props }
64
+ currentUser = { currentUser }
65
+ state = { state }
66
+ setState = { setState }
67
+ users = { users }
68
+ /> </ >
69
+ ) ;
70
+ } ;
71
+ }
10
72
11
73
class App extends Component {
12
74
constructor ( props ) {
@@ -22,19 +84,14 @@ class App extends Component {
22
84
grayBar : { checkersP1 : 0 , checkersP2 : 0 } ,
23
85
outSideBar : { checkersP1 : 15 , checkersP2 : 15 } ,
24
86
movingChecker : false ,
25
- players : { p1 : "Player 1" , p2 : "Player 2" } ,
87
+ players : { p1 : this . props . users . p1 , p2 : this . props . users . p2 } ,
26
88
showMenu : true ,
27
89
} ;
28
- const handleData = ( data ) => {
29
- if ( data . type === "backgammon" ) {
30
- console . log ( "backgammon: " , data ) ;
31
- this . setState ( data . data ) ;
32
- }
33
- } ;
34
- props . setDataListeners ( ( prevDataListeners ) => [
35
- ...prevDataListeners ,
36
- handleData ,
37
- ] ) ;
90
+ }
91
+ componentDidUpdate ( prevProps ) {
92
+ if ( this . props . state !== prevProps . state ) {
93
+ this . setState ( this . props . state ) ;
94
+ }
38
95
}
39
96
40
97
//Toggle menu
@@ -46,16 +103,7 @@ class App extends Component {
46
103
47
104
setSharedState = ( newState ) => {
48
105
this . setState ( newState ) ;
49
- function customizer ( value ) {
50
- if ( _ . isFunction ( value ) ) {
51
- return false ;
52
- }
53
- }
54
- const withoutFunc = _ . cloneDeepWith ( newState , customizer ) ;
55
- this . props . sendData ( {
56
- type : "backgammon" ,
57
- data : withoutFunc ,
58
- } ) ;
106
+ this . props . setState ( newState ) ;
59
107
} ;
60
108
61
109
//set up new game
@@ -71,11 +119,6 @@ class App extends Component {
71
119
const movingChecker = false ;
72
120
const showMenu = false ;
73
121
74
- const players = {
75
- p1 : this . props . id ,
76
- p2 : this . props . players . find ( ( p ) => p . id !== this . props . id ) . id ,
77
- } ;
78
-
79
122
history . push ( this . setHistory ( p1IsNext , dice , points , grayBar , outSideBar ) ) ;
80
123
81
124
//set points
@@ -100,7 +143,6 @@ class App extends Component {
100
143
outSideBar : outSideBar ,
101
144
movingChecker : movingChecker ,
102
145
showMenu : showMenu ,
103
- players : players ,
104
146
} ) ;
105
147
} ;
106
148
@@ -662,7 +704,7 @@ class App extends Component {
662
704
dice = { this . state . dice }
663
705
points = { this . state . points }
664
706
p1IsNext = { this . state . p1IsNext }
665
- isP1 = { this . state . players . p1 === this . props . id }
707
+ isP1 = { this . state . players . p1 . id === this . props . currentUser . id }
666
708
gameStatus = { this . state . gameStatus }
667
709
>
668
710
< Graybar checkers = { this . state . grayBar } />
@@ -680,4 +722,4 @@ class App extends Component {
680
722
}
681
723
}
682
724
683
- export default App ;
725
+ export default withHooksAndPlayers ( App ) ;
0 commit comments