1
1
import { useEffect , useState } from "react" ;
2
2
import petImage from "../assets/pet_frog.png" ;
3
3
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" ;
5
5
import { useAuth } from "react-oidc-context" ;
6
6
import CreatePetModal from "./CreatePetModal" ;
7
-
7
+ import createClient , { type Middleware } from "openapi-fetch" ;
8
8
// https://github.com/RavinRau/react-progressbar-fancy?tab=readme-ov-file
9
9
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
+ } ;
12
21
22
+ const client = createClient < paths > ( {
23
+ baseUrl : "http://localhost:4000/backend" ,
24
+ } ) ;
25
+ client . use ( authMiddleware ) ;
26
+
27
+ const [ petData , setPetData ] = useState ( { } as PetDTO ) ;
13
28
useEffect ( ( ) => {
14
29
loadData ( ) ;
15
30
} , [ ] ) ;
16
31
17
32
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
+ }
21
47
}
22
48
} ;
23
49
@@ -33,23 +59,25 @@ const PetPage = (client) => {
33
59
) }
34
60
</ div >
35
61
< 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 >
37
63
< div >
38
64
< div className = "h5 px-3" > HP</ div >
39
65
< ProgressBar
40
66
className = "px-1 pb-3"
41
67
hideText = { true }
42
68
progressColor = { "red" }
43
- score = { 100 }
69
+ score = { petData . state ?. health == null ? 0 : petData . state . health }
44
70
/>
45
71
</ div >
46
72
< div >
47
- < div className = "h5 px-3" > Happiness </ div >
73
+ < div className = "h5 px-3" > Well-being </ div >
48
74
< ProgressBar
49
75
className = "px-1 pb-3"
50
76
hideText = { true }
51
77
progressColor = { "purple" }
52
- score = { 50 }
78
+ score = {
79
+ petData . state ?. wellbeing == null ? 0 : petData . state . wellbeing
80
+ }
53
81
/>
54
82
</ div >
55
83
< div >
@@ -58,7 +86,47 @@ const PetPage = (client) => {
58
86
className = "px-1"
59
87
hideText = { true }
60
88
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
+ }
62
130
/>
63
131
</ div >
64
132
</ div >
0 commit comments