@@ -2,7 +2,7 @@ import { Stack, Typography } from '@mui/material';
22import { useDispatch , useSelector } from 'react-redux' ;
33
44import Button from '@mui/material/Button' ;
5- import React from 'react' ;
5+ import React , { useState } from 'react' ;
66import { RootState } from '../../redux/store' ;
77import TextField from '@mui/material/TextField' ;
88import { allCooperativeState } from '../../redux/reducers/slice/appStateSlice' ;
@@ -21,8 +21,10 @@ import debounce from '../../../../node_modules/lodash/debounce.js';
2121let socket ;
2222const { API_BASE_URL } = config ;
2323const RoomsContainer = ( ) => {
24- const [ roomCode , setRoomCode ] = React . useState ( '' ) ;
25- const [ confirmRoom , setConfirmRoom ] = React . useState ( '' ) ;
24+ const [ roomCode , setRoomCode ] = useState ( '' ) ;
25+ const [ confirmRoom , setConfirmRoom ] = useState ( '' ) ;
26+ const [ userJoined , setUserJoined ] = useState ( false ) ; //setting up state for joinning a room
27+ const [ emptyInput , setEmptyInput ] = useState ( false ) ;
2628 const dispatch = useDispatch ( ) ;
2729 const { state, joinedRoom } = useSelector ( ( store : RootState ) => ( {
2830 state : store . appState ,
@@ -116,10 +118,19 @@ const RoomsContainer = () => {
116118 setConfirmRoom ( ( confirmRoom ) => roomCode ) ;
117119 // Call handleUserEnteredRoom when joining a room
118120 handleUserEnteredRoom ( roomCode ) ;
121+ setUserJoined ( true ) ; //setting joined room to true for rendering leave room button
119122 }
123+
124+ function leaveRoom ( ) {
125+ if ( socket ) socket . disconnect ( ) ; //disconnecting socket
126+ dispatch ( changeRoom ( '' ) ) ;
127+ setRoomCode ( '' ) ;
128+ setUserJoined ( false ) ; //setting joined to false so join button appear
129+ }
130+
120131 return (
121132 < div >
122- < Stack
133+ < Stack //stack styling for container
123134 spacing = { 2 }
124135 sx = { {
125136 paddingTop : '20px' ,
@@ -129,44 +140,57 @@ const RoomsContainer = () => {
129140 } }
130141 >
131142 { ' ' }
143+ { /* live room display */ }
132144 < Typography variant = "h6" color = { 'white' } >
133145 Live Room: { joinedRoom }
134146 </ Typography >
135- < TextField
136- hiddenLabel
137- id = "filled-hidden-label-small"
138- variant = "filled"
139- size = "small"
140- onChange = { ( e ) => setRoomCode ( e . target . value ) }
141- />
142- { /* <input
143- type="text"
144- style={{
145- margin: '3px 5%',
146- borderRadius: '5px',
147- padding: '3px',
148- width: '90%'
149- }}
150- placeholder="Room Code"
151- onChange={(e) => setRoomCode(e.target.value)}
152- ></input> */ }
153- < Button
154- variant = "contained"
155- onClick = { ( ) => joinRoom ( ) }
156- sx = { {
157- backgroundColor : '#ffffff' ,
158- color : '#000000' ,
159- '&:hover' : {
160- backgroundColor : '#C6C6C6' ,
161- borderColor : '#0062cc' ,
162- boxShadow : 'none'
163- }
164- } }
165- >
166- Join Room
167- </ Button >
147+ { /* Set up condition rendering depends on if user joined a room then render leave button if not render join button */ }
148+ { userJoined ? (
149+ < Button
150+ variant = "contained"
151+ onClick = { ( ) => leaveRoom ( ) }
152+ sx = { {
153+ backgroundColor : '#ffffff' ,
154+ color : '#000000' ,
155+ '&:hover' : {
156+ backgroundColor : '#C6C6C6' ,
157+ borderColor : '#0062cc'
158+ }
159+ } }
160+ >
161+ { ' ' }
162+ Leave Room{ ' ' }
163+ </ Button >
164+ ) : (
165+ < >
166+ < TextField
167+ hiddenLabel = { true }
168+ id = "filled-hidden-label-small"
169+ variant = "filled"
170+ size = "small"
171+ value = { roomCode }
172+ placeholder = "Input Room Number"
173+ onChange = { ( e ) => setRoomCode ( e . target . value ) }
174+ />
175+ < Button
176+ variant = "contained"
177+ disabled = { roomCode . trim ( ) === '' }
178+ onClick = { ( ) => joinRoom ( ) }
179+ sx = { {
180+ backgroundColor : '#ffffff' ,
181+ color : '#000000' ,
182+ '&:hover' : {
183+ backgroundColor : '#C6C6C6' ,
184+ borderColor : '#0062cc'
185+ }
186+ } }
187+ >
188+ { ' ' }
189+ Join Room{ ' ' }
190+ </ Button >
191+ </ >
192+ ) }
168193 </ Stack >
169- { /* <button onClick={() => joinRoom()}>Join Room</button> */ }
170194 </ div >
171195 ) ;
172196} ;
0 commit comments