@@ -17,19 +17,22 @@ type IWaitingRoomProps = {
17
17
18
18
type IWaitingRoomUIState = {
19
19
connected : boolean ;
20
- cancel : boolean ;
20
+ isCancelling : boolean ;
21
+ canCancel : boolean ;
21
22
uiState : ( typeof UI_STATUS ) [ keyof typeof UI_STATUS ] ;
22
23
} ;
23
24
24
25
export const WaitingRoom = ( { socketPort, setIsModalOpen } : IWaitingRoomProps ) => {
25
26
const navigate = useNavigate ( ) ;
26
27
const { values } = useMatchRequest ( ) ;
27
28
28
- const [ { connected, cancel, uiState } , setUIState ] = useState < IWaitingRoomUIState > ( {
29
- connected : false ,
30
- cancel : false ,
31
- uiState : UI_STATUS . WAITING_STATUS ,
32
- } ) ;
29
+ const [ { connected, isCancelling, canCancel, uiState } , setUIState ] =
30
+ useState < IWaitingRoomUIState > ( {
31
+ connected : false ,
32
+ isCancelling : false ,
33
+ canCancel : false ,
34
+ uiState : UI_STATUS . WAITING_STATUS ,
35
+ } ) ;
33
36
34
37
const countdownRef = useRef ( 31 ) ;
35
38
const timerRef = useRef < number | null > ( null ) ;
@@ -45,11 +48,12 @@ export const WaitingRoom = ({ socketPort, setIsModalOpen }: IWaitingRoomProps) =
45
48
} ;
46
49
47
50
useEffect ( ( ) => {
48
- if ( cancel ) {
51
+ if ( isCancelling ) {
49
52
clearInterval ( timerRef . current ! ) ;
50
53
setUIState ( ( state ) => ( {
51
54
...state ,
52
- cancel : true ,
55
+ isCancelling : true ,
56
+ canCancel : false ,
53
57
} ) ) ;
54
58
} else if ( connected ) {
55
59
timerRef . current = window . setInterval ( ( ) => {
@@ -68,7 +72,7 @@ export const WaitingRoom = ({ socketPort, setIsModalOpen }: IWaitingRoomProps) =
68
72
}
69
73
70
74
return ( ) => clearInterval ( timerRef . current ! ) ;
71
- } , [ connected , cancel ] ) ;
75
+ } , [ connected , isCancelling ] ) ;
72
76
73
77
useEffect ( ( ) => {
74
78
if ( ! socketPort ) {
@@ -101,10 +105,12 @@ export const WaitingRoom = ({ socketPort, setIsModalOpen }: IWaitingRoomProps) =
101
105
102
106
socket . on ( MATCHING_EVENT . MATCHING , ( ) => {
103
107
console . log ( 'Matching in progress' ) ;
108
+ setUIState ( ( prev ) => ( { ...prev , canCancel : false } ) ) ;
104
109
} ) ;
105
110
106
111
socket . on ( MATCHING_EVENT . PENDING , ( ) => {
107
112
console . log ( 'Waiting in pool' ) ;
113
+ setUIState ( ( prev ) => ( { ...prev , canCancel : true } ) ) ;
108
114
} ) ;
109
115
110
116
socket . on ( MATCHING_EVENT . SUCCESS , ( data ) => {
@@ -148,7 +154,7 @@ export const WaitingRoom = ({ socketPort, setIsModalOpen }: IWaitingRoomProps) =
148
154
try {
149
155
setUIState ( ( prevState ) => ( {
150
156
...prevState ,
151
- cancel : true ,
157
+ isCancelling : true ,
152
158
uiState : UI_STATUS . CANCELLING_STATUS ,
153
159
} ) ) ;
154
160
countdownRef . current = 0 ;
@@ -166,8 +172,13 @@ export const WaitingRoom = ({ socketPort, setIsModalOpen }: IWaitingRoomProps) =
166
172
{ uiState . icon }
167
173
< p className = 'mt-4 whitespace-pre-wrap text-lg' > { uiState . description } </ p >
168
174
</ div >
169
- { countdownRef . current > 0 || cancel ? (
170
- < Button className = 'mt-5' variant = 'destructive' onClick = { handleCancel } disabled = { cancel } >
175
+ { countdownRef . current > 0 || isCancelling ? (
176
+ < Button
177
+ className = 'mt-5'
178
+ variant = 'destructive'
179
+ onClick = { handleCancel }
180
+ disabled = { isCancelling || ! canCancel }
181
+ >
171
182
Cancel
172
183
</ Button >
173
184
) : (
0 commit comments