Skip to content

Commit acc0775

Browse files
authored
Merge pull request #4 from ItaloMedici/3-hide-player-choice-on-choice-event
3 hide player choice on choice event
2 parents d76b2ee + 41873a5 commit acc0775

File tree

4 files changed

+46
-6
lines changed

4 files changed

+46
-6
lines changed

context/board.tsx

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { useRouter } from "next/navigation";
1313
import {
1414
ReactNode,
1515
createContext,
16+
useCallback,
1617
useContext,
1718
useEffect,
1819
useRef,
@@ -40,6 +41,8 @@ export const useBoard = () => {
4041
return useContext(BoardContext);
4142
};
4243

44+
const TIMEOUT = 60 * 1000;
45+
4346
export const BoardProvider = ({
4447
roomId,
4548
children,
@@ -76,7 +79,7 @@ export const BoardProvider = ({
7679
joinBoard();
7780
}, []);
7881

79-
const leaveBoard = async () => {
82+
const leaveBoard = useCallback(async () => {
8083
if (!selfRef.current?.boardId) return;
8184

8285
await http.post("/leave-board", {
@@ -88,7 +91,27 @@ export const BoardProvider = ({
8891
setSelf({} as Player);
8992
setOthers([]);
9093
selfRef.current = undefined;
91-
};
94+
}, [roomId]);
95+
96+
useEffect(() => {
97+
const timer = setTimeout(() => {
98+
if (!isConnected || !self?.id) {
99+
toast("Você foi desconectado da sala 💩");
100+
leaveBoard();
101+
router.push("/");
102+
}
103+
}, TIMEOUT);
104+
105+
if (isConnected && self?.id) {
106+
return () => {
107+
clearTimeout(timer);
108+
};
109+
}
110+
111+
return () => {
112+
clearTimeout(timer);
113+
};
114+
}, [isConnected, leaveBoard, router, self?.id]);
92115

93116
useEffect(() => {
94117
return () => {
@@ -148,7 +171,15 @@ export const BoardProvider = ({
148171

149172
socket.on(revealCardsEventKey, (message) => {
150173
console.log(`[${revealCardsEventKey}] for ${self.name}:`, message);
174+
175+
if (!message?.players?.length) return;
176+
177+
const players = message.players as Array<Player>;
178+
179+
const _others = players.filter((_player) => _player.id !== self.id);
180+
151181
setRevealCards(message.reveal);
182+
setOthers(_others);
152183
});
153184

154185
const resetBoardEventKey = resetBoardKey(self.boardId);

pages/api/make-choice.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ const makeChoiceHandler = async (
3030
const eventKey = playerChoiceKey(updatedPlayer.boardId);
3131

3232
const message = {
33-
player: updatedPlayer,
33+
player: {
34+
...updatedPlayer,
35+
choice: "hidden",
36+
},
3437
};
3538

3639
res.socket?.server?.io?.emit(eventKey, message);

pages/api/reveal-cards.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import { ResponseWithSocket } from "@/types/response-with-socket";
22
import { revealCardsKey } from "@/use-cases/event-keys/board";
3+
import { getPlayersByBoardId } from "@/use-cases/player/get-players-by-board-id";
34
import { NextApiRequest } from "next";
45

5-
const revealCardsHandler = (req: NextApiRequest, res: ResponseWithSocket) => {
6+
const revealCardsHandler = async (
7+
req: NextApiRequest,
8+
res: ResponseWithSocket
9+
) => {
610
if (req.method !== "POST") {
711
res.status(405).json({ message: "Method Not Allowed" });
812
return;
@@ -16,9 +20,11 @@ const revealCardsHandler = (req: NextApiRequest, res: ResponseWithSocket) => {
1620
return;
1721
}
1822

23+
const players = await getPlayersByBoardId({ boardId });
24+
1925
const eventKey = revealCardsKey(boardId);
2026

21-
const message = { reveal };
27+
const message = { reveal, players };
2228

2329
res.socket?.server?.io?.emit(eventKey, message);
2430

use-cases/event-keys/board.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ const createBoardEventKey = (event: string) => {
55
export const joinBoardKey = createBoardEventKey("join");
66
export const leaveBoardKey = createBoardEventKey("leave");
77
export const playerChoiceKey = createBoardEventKey("choice");
8-
export const revealCardsKey = createBoardEventKey("choice");
8+
export const revealCardsKey = createBoardEventKey("reveal");
99
export const resetBoardKey = createBoardEventKey("reset");

0 commit comments

Comments
 (0)