1
- import { useState , useReducer } from "react" ;
1
+ import { useState , useReducer , useEffect } from "react" ;
2
2
import GameCard from "./components/GameCard" ;
3
3
import "./App.css" ;
4
- import { Col , Row , Container } from "react-bootstrap" ;
4
+ import { Navbar , Nav , NavDropdown , Row , Col , Container } from "react-bootstrap" ;
5
+ import axios from "./axios" ;
6
+ import { propTypes } from "react-bootstrap/esm/Image" ;
5
7
6
8
const defaultPokedex = [
7
9
{
@@ -71,8 +73,9 @@ function App() {
71
73
const [ score , setScore ] = useState ( 0 ) ;
72
74
const [ highScore , setHS ] = useState ( 0 ) ;
73
75
const [ pokedex , setPokedex ] = useState ( defaultPokedex ) ;
74
- // const [pokimonToPlay, setPokimonToPlay ] = useState();
76
+ const [ imageCache , setImageCache ] = useState ( { } ) ;
75
77
const [ pokemonToDisplay , setPokemonToDisply ] = useState ( defaultPokedex ) ;
78
+ const [ isLoading , setLoading ] = useState ( null ) ;
76
79
77
80
function isHighScore ( newScore ) {
78
81
if ( newScore > highScore ) setHS ( newScore ) ;
@@ -95,6 +98,25 @@ function App() {
95
98
setPokemonToDisply ( array ) ;
96
99
forceUpdate ( ) ;
97
100
}
101
+ useEffect ( ( ) => {
102
+ async function cacheImages ( ) {
103
+ try {
104
+ let cacheImages = { } ;
105
+ pokedex . map ( async ( pokemon ) => {
106
+ const response = await axios . get ( pokemon . name ) ;
107
+ const img_url = response . data . sprites . other [ "official-artwork" ] ;
108
+ cacheImages [ pokemon . name ] = img_url . front_default ;
109
+ console . log ( img_url . front_default ) ;
110
+ console . log ( cacheImages [ pokemon . name ] ) ;
111
+ } ) ;
112
+ setImageCache ( cacheImages ) ;
113
+ } catch ( error ) {
114
+ console . error ( error ) ;
115
+ }
116
+ }
117
+ cacheImages ( ) ;
118
+ setLoading ( false ) ;
119
+ } , [ pokedex ] )
98
120
99
121
const handleClick = ( pokemonID ) => {
100
122
let newState = ( pokedex . map ( pokemon => {
@@ -110,22 +132,60 @@ function App() {
110
132
} ;
111
133
112
134
return (
135
+ < >
136
+ < Navbar expand = "lg" className = "bg-body-tertiary" pb = { 4 } >
137
+ < Container >
138
+ < Navbar . Brand href = "#home" > Pokemon Memorization</ Navbar . Brand >
139
+ < Navbar . Toggle aria-controls = "basic-navbar-nav" />
140
+ < Navbar . Collapse id = "basic-navbar-nav" >
141
+ { /* <Nav className="me-auto">
142
+ <Nav.Link href="#home">Home</Nav.Link>
143
+ <Nav.Link href="#link">Link</Nav.Link>
144
+ <NavDropdown title="Dropdown" id="basic-nav-dropdown">
145
+ <NavDropdown.Item href="#action/3.1">Action</NavDropdown.Item>
146
+ <NavDropdown.Item href="#action/3.2">
147
+ Another action
148
+ </NavDropdown.Item>
149
+ <NavDropdown.Item href="#action/3.3">Something</NavDropdown.Item>
150
+ <NavDropdown.Divider />
151
+ <NavDropdown.Item href="#action/3.4">
152
+ Separated link
153
+ </NavDropdown.Item>
154
+ </NavDropdown>
155
+ </Nav> */ }
156
+ </ Navbar . Collapse >
157
+ < Navbar . Collapse className = "justify-content-end" >
158
+ < Col >
159
+ < Row >
160
+ < Navbar . Text >
161
+ Score: { score }
162
+ </ Navbar . Text >
163
+ </ Row >
164
+ < Row >
165
+ < Navbar . Text >
166
+ High Score: { highScore }
167
+ </ Navbar . Text >
168
+ </ Row >
169
+ </ Col >
170
+ </ Navbar . Collapse >
171
+ </ Container >
172
+
173
+ </ Navbar >
113
174
< Container >
114
- < div >
115
- < p > Score: { score } </ p >
116
- < p > High Score: { highScore } </ p >
117
- </ div >
118
- < Row md = { 4 } >
175
+ < Row className = "justify-content-md-center pt-5" >
119
176
{ pokemonToDisplay . map ( ( pokemon , index ) => (
120
177
< GameCard
121
178
key = { index }
122
179
name = { pokemon . name }
123
180
handleClick = { handleClick }
181
+ images = { imageCache }
124
182
id = { pokemon . id }
183
+ isLoading = { isLoading }
125
184
/>
126
185
) ) }
127
186
</ Row >
128
187
</ Container >
188
+ </ >
129
189
) ;
130
190
}
131
191
export default App ;
0 commit comments