1
- import { ChangeEvent , Dispatch , Fragment , SetStateAction , useEffect , useState } from "react" ;
2
- import { calculateTotalScore , finishedGame , getAllRounds , loadGameState , saveGameState } from "../funcs/global" ;
3
- import { Player } from "../types/global" ;
4
- import { themeChange } from "theme-change" ;
5
- import { Simulate } from "react-dom/test-utils" ;
6
- import load = Simulate . load ;
1
+ import { Dispatch , Fragment , SetStateAction , useEffect , useState } from "react" ;
2
+ import { calculateTotalScore , finishedGame , getAllRounds , loadGameState , saveGameState } from "@/funcs/global" ;
3
+ import { Player } from "@/types/global" ;
7
4
8
- interface GameScreenProps {
5
+ export const GameScreen = ( {
6
+ players,
7
+ setPlayers,
8
+ setGameFinished,
9
+ } : {
9
10
players : Player [ ] ;
10
11
setPlayers : Dispatch < SetStateAction < Player [ ] > > ;
11
12
setGameFinished : Dispatch < SetStateAction < boolean > > ;
12
- }
13
-
14
- export const GameScreen = ( { players, setPlayers, setGameFinished } : GameScreenProps ) => {
13
+ } ) => {
15
14
const rounds = getAllRounds ( ) ;
16
- const [ currentRound , setCurrentRound ] = useState < number > ( 0 ) ;
15
+ const [ currentRound , setCurrentRound ] = useState ( 0 ) ;
17
16
18
17
useEffect ( ( ) => {
19
18
const gameState = loadGameState ( ) ;
@@ -23,25 +22,8 @@ export const GameScreen = ({ players, setPlayers, setGameFinished }: GameScreenP
23
22
}
24
23
} , [ ] ) ;
25
24
26
- function updateScore ( event : ChangeEvent < HTMLInputElement > , index : number ) {
27
- const newPlayers = [ ...players ] ;
28
- newPlayers [ index ] . score [ rounds [ currentRound ] ] = parseFloat ( event . target . value ) || 0 ;
29
- setPlayers ( newPlayers ) ;
30
- saveGameState ( newPlayers , currentRound ) ;
31
- }
32
-
33
- function updateJokers ( amountOfJokers : number , index : number ) {
34
- const newPlayers = [ ...players ] ;
35
- newPlayers [ index ] . jokers [ rounds [ currentRound ] ] = amountOfJokers ;
36
- setPlayers ( newPlayers ) ;
37
- saveGameState ( newPlayers , currentRound ) ;
38
- }
39
-
40
- function endGame ( ) {
41
- setGameFinished ( true ) ;
42
- finishedGame ( ) ;
43
- }
44
25
const amountOfJokers = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ;
26
+
45
27
return (
46
28
< >
47
29
< p className = "text-5xl" >
@@ -64,15 +46,25 @@ export const GameScreen = ({ players, setPlayers, setGameFinished }: GameScreenP
64
46
className = "w-3/4 input input-bordered"
65
47
placeholder = "0"
66
48
value = { player . score [ rounds [ currentRound ] ] }
67
- onChange = { ( e ) => updateScore ( e , index ) }
49
+ onChange = { ( e ) => {
50
+ const newPlayers = [ ...players ] ;
51
+ newPlayers [ index ] . score [ rounds [ currentRound ] ] = parseFloat ( e . target . value ) || 0 ;
52
+ setPlayers ( newPlayers ) ;
53
+ saveGameState ( newPlayers , currentRound ) ;
54
+ } }
68
55
/>
69
56
</ div >
70
57
< span > Amount of Jokers: (optional)</ span >
71
58
< div className = "w-full flex gap-2" >
72
59
{ amountOfJokers . map ( ( joker ) => (
73
60
< span
74
61
key = { joker }
75
- onClick = { ( ) => updateJokers ( joker , index ) }
62
+ onClick = { ( ) => {
63
+ const newPlayers = [ ...players ] ;
64
+ newPlayers [ index ] . jokers [ rounds [ currentRound ] ] = joker ;
65
+ setPlayers ( newPlayers ) ;
66
+ saveGameState ( newPlayers , currentRound ) ;
67
+ } }
76
68
className = { `flex cursor-pointer items-center justify-center grow rounded-lg p-2 border border-gray-400 ${
77
69
player . jokers [ rounds [ currentRound ] ] === joker && "bg-primary text-white"
78
70
} `}
@@ -83,7 +75,7 @@ export const GameScreen = ({ players, setPlayers, setGameFinished }: GameScreenP
83
75
</ div >
84
76
< hr > </ hr >
85
77
</ Fragment >
86
- ) ) } { " " }
78
+ ) ) }
87
79
< div className = "flex justify-between" >
88
80
< button
89
81
className = "gap-2 btn btn-primary"
@@ -93,7 +85,14 @@ export const GameScreen = ({ players, setPlayers, setGameFinished }: GameScreenP
93
85
</ button >
94
86
< button
95
87
className = "gap-2 btn btn-primary"
96
- onClick = { ( ) => ( currentRound + 1 < rounds . length ? setCurrentRound ( currentRound + 1 ) : endGame ( ) ) }
88
+ onClick = { ( ) => {
89
+ if ( currentRound + 1 < rounds . length ) {
90
+ setCurrentRound ( currentRound + 1 ) ;
91
+ } else {
92
+ setGameFinished ( true ) ;
93
+ finishedGame ( ) ;
94
+ }
95
+ } }
97
96
>
98
97
Next Round
99
98
</ button >
0 commit comments