Skip to content

Commit 59ba6e3

Browse files
committed
Add code and petName to app context
1 parent e572ba8 commit 59ba6e3

File tree

4 files changed

+30
-12
lines changed

4 files changed

+30
-12
lines changed

src/components/DoomCanvas/DoomCanvas.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
import React, { useEffect, useRef } from "react";
22
import { EmscriptenModule } from "../../types";
3+
import { useAppContext } from "../../context/useAppContext";
34

45
const DoomCanvas: React.FC = () => {
56
const canvasRef = useRef<HTMLCanvasElement>(null);
67
const isEffectRan = useRef(false);
8+
const { gameData } = useAppContext();
9+
10+
console.log("gameData", gameData);
711

812
useEffect(() => {
913
// Prevent effect from running twice

src/components/SetNameModal/SetNameModal.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { ChangeEventHandler, FC, useEffect, useState } from "react";
1+
import { ChangeEventHandler, FC, useEffect } from "react";
22
import Modal from "../Modal";
33
import { ModalProps } from "../Modal/Modal";
44
import { FaArrowRotateRight } from "react-icons/fa6";
55
import Button from "../Button";
66
import { generateRandomName } from "./petNameWords";
7+
import { useAppContext } from "../../context/useAppContext";
78

89
interface SetNameModalProps extends Omit<ModalProps, "children"> {
910
submit: () => void;
@@ -16,23 +17,22 @@ const SetNameModal: FC<SetNameModalProps> = ({
1617
submit,
1718
title,
1819
}) => {
19-
const [petName, setPetName] = useState("");
20-
const [code, setCode] = useState("");
20+
const { setGameData, gameData } = useAppContext();
2121

2222
useEffect(() => {
23-
setPetName(generateRandomName());
24-
}, []);
23+
setGameData((prev) => ({ ...prev, petName: generateRandomName() }));
24+
}, [setGameData]);
2525

2626
const handleChangeName: ChangeEventHandler<HTMLInputElement> = (e) => {
27-
setPetName(e.target.value);
27+
setGameData((prev) => ({ ...prev, petName: e.target.value }));
2828
};
2929

3030
const handleChangeCode: ChangeEventHandler<HTMLInputElement> = (e) => {
31-
setCode(e.target.value);
31+
setGameData((prev) => ({ ...prev, code: e.target.value }));
3232
};
3333

3434
const handleGenerateName = () => {
35-
setPetName(generateRandomName());
35+
setGameData((prev) => ({ ...prev, petName: generateRandomName() }));
3636
};
3737

3838
return (
@@ -48,7 +48,7 @@ const SetNameModal: FC<SetNameModalProps> = ({
4848
id="code"
4949
onChange={handleChangeCode}
5050
type="text"
51-
value={code}
51+
value={gameData.code}
5252
/>
5353
</div>
5454
)}
@@ -65,7 +65,7 @@ const SetNameModal: FC<SetNameModalProps> = ({
6565
id="petName"
6666
onChange={handleChangeName}
6767
type="text"
68-
value={petName}
68+
value={gameData.petName}
6969
/>
7070
<Button tick className="text-2xl w-40 h-12" onClick={submit}>
7171
Go

src/context/AppContextProvider.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ import { GameStatistics, Region } from "../types";
55
import { REGIONS, SERVER_URL } from "../constants";
66

77
const AppContextProvider: FC<PropsWithChildren> = ({ children }) => {
8+
const [gameData, setGameData] = useState({
9+
petName: "",
10+
code: "",
11+
});
12+
813
const [region, setRegion] = useState<Region>(REGIONS[0]);
914
const globalQuery = useQuery<GameStatistics>({
1015
queryKey: ["global"],
@@ -16,8 +21,8 @@ const AppContextProvider: FC<PropsWithChildren> = ({ children }) => {
1621
});
1722

1823
const value = useMemo(
19-
() => ({ globalQuery, region, setRegion }),
20-
[globalQuery, region],
24+
() => ({ globalQuery, region, setRegion, gameData, setGameData }),
25+
[gameData, globalQuery, region],
2126
);
2227

2328
return <AppContext.Provider value={value}>{children}</AppContext.Provider>;

src/context/useAppContext.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,24 @@ import { GameStatistics, Region } from "../types";
33
import { UseQueryResult } from "@tanstack/react-query";
44
import { REGIONS } from "../constants";
55

6+
interface GameData {
7+
petName: string;
8+
code: string;
9+
}
10+
611
interface AppContextInterface {
12+
gameData: GameData;
713
globalQuery?: UseQueryResult<GameStatistics, Error>;
814
region: Region;
15+
setGameData: Dispatch<React.SetStateAction<GameData>>;
916
setRegion: Dispatch<React.SetStateAction<Region>>;
1017
}
1118

1219
export const AppContext = createContext<AppContextInterface>({
20+
gameData: { petName: "", code: "" },
1321
globalQuery: undefined,
1422
region: REGIONS[0],
23+
setGameData: () => {},
1524
setRegion: () => {},
1625
});
1726

0 commit comments

Comments
 (0)