Skip to content
This repository was archived by the owner on Dec 13, 2024. It is now read-only.

Commit 6acad5b

Browse files
render values dynamically on pet page (#148)
2 parents ea5bfcf + c345222 commit 6acad5b

File tree

3 files changed

+87
-20
lines changed

3 files changed

+87
-20
lines changed

frontend/src/App.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,17 @@ function App() {
5151

5252
// https://github.com/openapi-ts/openapi-typescript/tree/main/packages/openapi-fetch
5353
(async () => {
54-
console.log("hi there!");
55-
const { data, error } = await client.GET("/api/v1/devices/self", {});
56-
57-
console.log("data", data);
58-
console.log("error", error);
54+
// console.log("hi there!");
55+
// const { data, error } = await client.GET("/api/v1/devices/self", {});
56+
// console.log("data", data);
57+
// console.log("error", error);
5958
})();
6059

6160
return (
6261
<div style={{ backgroundColor: "#FFFFFF" }}>
6362
<div>
6463
<div>
65-
<Navbar />
64+
<Navbar client={client} />
6665
</div>
6766
</div>
6867
{/* <div>

frontend/src/Components/Navbar/Navbar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import LinkDevice from "../LinkDevice.tsx";
88
import { useAuth } from "react-oidc-context";
99
import "./navbar.css";
1010

11-
const Navbar = () => {
11+
const Navbar = (client) => {
1212
const auth = useAuth();
1313
const [activePage, setActivePage] = useState("Pet Page");
1414

@@ -146,7 +146,7 @@ const Navbar = () => {
146146
}
147147
/>
148148
<Route path="/Friends" element={<Friends />} />
149-
<Route path="/PetPage" element={<PetPage />} />
149+
<Route path="/PetPage" element={<PetPage client={client} />} />
150150
</Routes>
151151
</Router>
152152
</div>

frontend/src/Components/PetPage.tsx

Lines changed: 80 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,49 @@
11
import { useEffect, useState } from "react";
22
import petImage from "../assets/pet_frog.png";
33
import { ProgressBar } from "react-progressbar-fancy";
4-
import type { paths } from "../../src/web-backend-api";
4+
import type { paths, components } from "../../src/web-backend-api";
55
import { useAuth } from "react-oidc-context";
66
import CreatePetModal from "./CreatePetModal";
7-
7+
import createClient, { type Middleware } from "openapi-fetch";
88
// https://github.com/RavinRau/react-progressbar-fancy?tab=readme-ov-file
99

10-
const PetPage = (client) => {
11-
const [petData, setPetData] = useState([]);
10+
type PetDTO = components["schemas"]["PetDTO"];
11+
12+
const PetPage = () => {
13+
const auth = useAuth();
14+
const authMiddleware: Middleware = {
15+
async onRequest({ request }) {
16+
// add Authorization header to every request
17+
request.headers.set("Authorization", `Bearer ${auth.user?.access_token}`);
18+
return request;
19+
},
20+
};
1221

22+
const client = createClient<paths>({
23+
baseUrl: "http://localhost:4000/backend",
24+
});
25+
client.use(authMiddleware);
26+
27+
const [petData, setPetData] = useState({} as PetDTO);
1328
useEffect(() => {
1429
loadData();
1530
}, []);
1631

1732
const loadData = async () => {
18-
const { response, error } = await client.GET("/api/v1/devices/self", {});
19-
if (error != null) {
20-
setPetData(await client.GET(`/api/v1/pets/self/${response.petId}`));
33+
const { data, error } = await client.GET("/api/v1/devices/self", {});
34+
if (data && data[0].petId != undefined) {
35+
const { data: data2, error } = await client.GET(
36+
"/api/v1/pets/self/{petId}",
37+
{
38+
params: {
39+
path: { petId: +data[0].petId },
40+
},
41+
}
42+
);
43+
console.log(data2);
44+
if (data2) {
45+
setPetData(data2);
46+
}
2147
}
2248
};
2349

@@ -33,23 +59,25 @@ const PetPage = (client) => {
3359
)}
3460
</div>
3561
<div className="col-6">
36-
<div className="h2 px-3 py-4">( Pet name )</div>
62+
<div className="h2 px-3 py-4">{petData.name}</div>
3763
<div>
3864
<div className="h5 px-3">HP</div>
3965
<ProgressBar
4066
className="px-1 pb-3"
4167
hideText={true}
4268
progressColor={"red"}
43-
score={100}
69+
score={petData.state?.health == null ? 0 : petData.state.health}
4470
/>
4571
</div>
4672
<div>
47-
<div className="h5 px-3">Happiness</div>
73+
<div className="h5 px-3">Well-being</div>
4874
<ProgressBar
4975
className="px-1 pb-3"
5076
hideText={true}
5177
progressColor={"purple"}
52-
score={50}
78+
score={
79+
petData.state?.wellbeing == null ? 0 : petData.state.wellbeing
80+
}
5381
/>
5482
</div>
5583
<div>
@@ -58,7 +86,47 @@ const PetPage = (client) => {
5886
className="px-1"
5987
hideText={true}
6088
progressColor={"green"}
61-
score={80}
89+
score={petData.state?.xp == null ? 0 : petData.state.xp}
90+
/>
91+
</div>
92+
<div>
93+
<div className="h5 px-3">Cleanliness</div>
94+
<ProgressBar
95+
className="px-1"
96+
hideText={true}
97+
progressColor={"green"}
98+
score={
99+
petData.state?.cleanliness == null ? 0 : petData.state.cleanliness
100+
}
101+
/>
102+
</div>
103+
<div>
104+
<div className="h5 px-3">Fun</div>
105+
<ProgressBar
106+
className="px-1"
107+
hideText={true}
108+
progressColor={"green"}
109+
score={petData.state?.fun == null ? 0 : petData.state.fun}
110+
/>
111+
</div>
112+
<div>
113+
<div className="h5 px-3">Hunger</div>
114+
<ProgressBar
115+
className="px-1"
116+
hideText={true}
117+
progressColor={"green"}
118+
score={petData.state?.hunger == null ? 0 : petData.state.hunger}
119+
/>
120+
</div>
121+
<div>
122+
<div className="h5 px-3">Happiness</div>
123+
<ProgressBar
124+
className="px-1"
125+
hideText={true}
126+
progressColor={"green"}
127+
score={
128+
petData.state?.happiness == null ? 0 : petData.state.happiness
129+
}
62130
/>
63131
</div>
64132
</div>

0 commit comments

Comments
 (0)