Skip to content

Commit 80b745b

Browse files
committed
Add styles and fix buggy WS behavior
Signed-off-by: SeeuSim <[email protected]>
1 parent adf2977 commit 80b745b

File tree

1 file changed

+83
-56
lines changed

1 file changed

+83
-56
lines changed

frontend/src/routes/match/waiting-room/waiting.tsx

Lines changed: 83 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -88,60 +88,63 @@ export const WaitingRoom = ({ socketPort, setIsModalOpen }: IWaitingRoomProps) =
8888

8989
socket.on(WS_EVENT.CONNECT, () => {
9090
console.log('Connected to server');
91-
socket.emit(WS_EVENT.JOIN_ROOM, socketPort);
92-
socket.emit(WS_EVENT.START_QUEUING, {
93-
roomId: socketPort,
94-
userId: getUserId(),
95-
topic: values?.selectedTopics,
96-
difficulty: values?.difficulty,
97-
});
98-
socket.on(MATCHING_EVENT.QUEUED, () => {
99-
setUIState((prevState) => ({ ...prevState, connected: true }));
100-
});
101-
102-
socket.on(WS_EVENT.MESSAGE, (data) => {
103-
console.log('Message from server:', data);
104-
});
105-
106-
socket.on(MATCHING_EVENT.MATCHING, () => {
107-
console.log('Matching in progress');
108-
setUIState((prev) => ({ ...prev, canCancel: false }));
109-
});
110-
111-
socket.on(MATCHING_EVENT.PENDING, () => {
112-
console.log('Waiting in pool');
113-
setUIState((prev) => ({ ...prev, canCancel: true }));
114-
});
115-
116-
socket.on(MATCHING_EVENT.SUCCESS, (data) => {
117-
console.log(`Received match: ${JSON.stringify(data)}`);
118-
119-
const roomId = data?.roomId;
120-
const questionId = data?.questionId;
121-
countdownRef.current = 0;
122-
clearInterval(timerRef.current!);
123-
124-
setUIState((prevState) => ({ ...prevState, uiState: UI_STATUS.SUCCESS_STATUS }));
125-
updateDescription(`RoomId: ${roomId}\nQuestionId: ${questionId} `);
126-
socket.close();
127-
});
128-
129-
socket.on(MATCHING_EVENT.FAILED, () => {
130-
countdownRef.current = 0;
131-
setUIState((prevState) => ({ ...prevState, uiState: UI_STATUS.FAILED_STATUS }));
132-
});
133-
134-
socket.on(MATCHING_EVENT.ERROR, (errorMessage: string) => {
135-
countdownRef.current = 0;
136-
setUIState((prevState) => ({
137-
...prevState,
138-
uiState: { ...UI_STATUS.FAILED_STATUS, description: errorMessage },
139-
}));
140-
});
141-
142-
socket.on(MATCHING_EVENT.DISCONNECT, () => {
143-
socket.close();
144-
});
91+
});
92+
93+
socket.emit(WS_EVENT.JOIN_ROOM, socketPort);
94+
95+
socket.emit(WS_EVENT.START_QUEUING, {
96+
roomId: socketPort,
97+
userId: getUserId(),
98+
topic: values?.selectedTopics,
99+
difficulty: values?.difficulty,
100+
});
101+
102+
socket.on(MATCHING_EVENT.QUEUED, () => {
103+
setUIState((prevState) => ({ ...prevState, connected: true }));
104+
});
105+
106+
socket.on(WS_EVENT.MESSAGE, (data) => {
107+
console.log('Message from server:', data);
108+
});
109+
110+
socket.on(MATCHING_EVENT.MATCHING, () => {
111+
console.log('Matching in progress');
112+
setUIState((prev) => ({ ...prev, canCancel: false }));
113+
});
114+
115+
socket.on(MATCHING_EVENT.PENDING, () => {
116+
console.log('Waiting in pool');
117+
setUIState((prev) => ({ ...prev, canCancel: true }));
118+
});
119+
120+
socket.on(MATCHING_EVENT.SUCCESS, (data) => {
121+
console.log(`Received match: ${JSON.stringify(data)}`);
122+
123+
const roomId = data?.roomId;
124+
const questionId = data?.questionId;
125+
countdownRef.current = 0;
126+
clearInterval(timerRef.current!);
127+
128+
setUIState((prevState) => ({ ...prevState, uiState: UI_STATUS.SUCCESS_STATUS }));
129+
updateDescription(`RoomId: ${roomId}\nQuestionId: ${questionId} `);
130+
socket.close();
131+
});
132+
133+
socket.on(MATCHING_EVENT.FAILED, () => {
134+
countdownRef.current = 0;
135+
setUIState((prevState) => ({ ...prevState, uiState: UI_STATUS.FAILED_STATUS }));
136+
});
137+
138+
socket.on(MATCHING_EVENT.ERROR, (errorMessage: string) => {
139+
countdownRef.current = 0;
140+
setUIState((prevState) => ({
141+
...prevState,
142+
uiState: { ...UI_STATUS.FAILED_STATUS, description: errorMessage },
143+
}));
144+
});
145+
146+
socket.on(MATCHING_EVENT.DISCONNECT, () => {
147+
socket.close();
145148
});
146149

147150
return () => {
@@ -170,7 +173,24 @@ export const WaitingRoom = ({ socketPort, setIsModalOpen }: IWaitingRoomProps) =
170173
<h1 className='mb-4 text-3xl'>{uiState.header}</h1>
171174
<div className='flex flex-col items-center justify-center'>
172175
{uiState.icon}
173-
<p className='mt-4 whitespace-pre-wrap text-lg'>{uiState.description}</p>
176+
{uiState.description.startsWith('RoomId') ? (
177+
<p className='flex flex-col gap-1'>
178+
<div className='flex flex-col gap-0'>
179+
<label className='text-lg'>Room Id:</label>
180+
<span className='text-md max-w-[400px] truncate text-balance font-mono'>
181+
{uiState.description.split('\nQuestionId: ')[0].replace('RoomId:', '')}
182+
</span>
183+
</div>
184+
<div className='flex flex-col'>
185+
<label className='text-lg'>Question Id:</label>
186+
<span className='font-mono text-lg'>
187+
{uiState.description.split('\nQuestionId: ')[1]}
188+
</span>
189+
</div>
190+
</p>
191+
) : (
192+
<p className='mt-4 whitespace-pre-wrap text-lg'>{uiState.description}</p>
193+
)}
174194
</div>
175195
{countdownRef.current > 0 || isCancelling ? (
176196
<Button
@@ -182,7 +202,14 @@ export const WaitingRoom = ({ socketPort, setIsModalOpen }: IWaitingRoomProps) =
182202
Cancel
183203
</Button>
184204
) : (
185-
<Button className='mt-5' variant='outline' onClick={() => setIsModalOpen(false)}>
205+
<Button
206+
className='mt-5'
207+
variant='outline'
208+
onClick={() => {
209+
setIsModalOpen(false);
210+
// form?.reset()
211+
}}
212+
>
186213
Back
187214
</Button>
188215
)}

0 commit comments

Comments
 (0)