From 3cb08f16e94a76e811660a5a9069c95155e058fe Mon Sep 17 00:00:00 2001 From: mthomas41 <mthomas41@huskers.unl.edu> Date: Sat, 6 Aug 2022 14:57:34 -0500 Subject: [PATCH] moved Card to own folder --- my-pokedex/.gitignore | 1 + my-pokedex/src/component/pokecard.js | 86 +++++++++++++ .../src/{features => component}/pokenavbar.js | 9 +- my-pokedex/src/features/dex.js | 115 +++--------------- my-pokedex/src/features/dex.module.css | 18 +++ 5 files changed, 129 insertions(+), 100 deletions(-) create mode 100644 my-pokedex/src/component/pokecard.js rename my-pokedex/src/{features => component}/pokenavbar.js (83%) diff --git a/my-pokedex/.gitignore b/my-pokedex/.gitignore index 4d29575..8692cf6 100644 --- a/my-pokedex/.gitignore +++ b/my-pokedex/.gitignore @@ -13,6 +13,7 @@ # misc .DS_Store +.env .env.local .env.development.local .env.test.local diff --git a/my-pokedex/src/component/pokecard.js b/my-pokedex/src/component/pokecard.js new file mode 100644 index 0000000..450c310 --- /dev/null +++ b/my-pokedex/src/component/pokecard.js @@ -0,0 +1,86 @@ +import Card from 'react-bootstrap/Card'; +import ProgressBar from 'react-bootstrap/ProgressBar'; + +import '../features/custom.css'; + + +export default function PokemonCard(pokemon) { + const COLORS = { + normal: 'cornsilk', + grass: 'green', + fire: 'red', + water: 'blue', + electric: 'yellow', + ice: 'darkturquoise', + fighting: 'firebrick', + poison: 'darkmagenta', + ground: 'tan', + rock: 'sienna', + flying: 'silver', + steel: 'slategrey', + psychic: 'deeppink', + bug: 'yellowgreen', + ghost: 'darkslateblue', + dark: 'darkslategrey', + dragon: 'royalblue', + fairy: 'thistle' + } + + function getTyping(types){ + if( types.length === 1) { + return COLORS[types[0].type.name]; + }else { // .join() reverses when mapping types. but .reverse() fixes it + return 'linear-gradient(to left,'+types.map( (type) => COLORS[type['type'].name]).reverse().join()+')'; + } + } + +function statLevel(stat) { + if( stat > 120) { // think of switching order since there are lower stats normally + return 'info'; + }else if( stat > 90) { + return 'success'; + }else if( stat > 40) { + return 'warning'; + }else { + return 'danger'; + } +} + return ( + <Card style={{ width: '18rem', margin: '10px'}} + > + <Card.Header>{pokemon.name}</Card.Header> + <Card.Img variant="top" src={pokemon.sprites.other['official-artwork'].front_default} /> + <Card.Body> + <Card.Title style={{background: getTyping(pokemon.types) }}> + { pokemon.types.length > 1 ? + `${pokemon.types[0].type.name} ${pokemon.types[1].type.name}` + : `${pokemon.types[0].type.name}` + } + </Card.Title> + <Card.Text> + + + </Card.Text> + { `Health Points:` } + <ProgressBar variant={statLevel(pokemon.stats[0].base_stat)} + now={pokemon.stats[0].base_stat} max={255} label={`${pokemon.stats[0].base_stat}`}/> <br/> + {`Attack:`} + <ProgressBar variant={statLevel(pokemon.stats[1].base_stat)} + now={pokemon.stats[1].base_stat} max={255} label={`${pokemon.stats[1].base_stat}`}/> <br/> + {`Defense:`} + <ProgressBar variant={statLevel(pokemon.stats[2].base_stat)} + now={pokemon.stats[2].base_stat} max={255} label={`${pokemon.stats[2].base_stat}`}/> <br/> + { `Special-Attack:`} + <ProgressBar variant={statLevel(pokemon.stats[3].base_stat)} + now={pokemon.stats[3].base_stat} max={255} label={`${pokemon.stats[3].base_stat}`}/> <br/> + { `Special-Defense:`} + <ProgressBar variant={statLevel(pokemon.stats[4].base_stat)} + now={pokemon.stats[4].base_stat} max={255} label={`${pokemon.stats[4].base_stat}`}/> <br/> + {`Speed:`} + <ProgressBar variant={statLevel(pokemon.stats[5].base_stat)} + now={pokemon.stats[5].base_stat} max={255} label={`${pokemon.stats[5].base_stat}`}/> <br/> + </Card.Body> + </Card> + ); +} + diff --git a/my-pokedex/src/features/pokenavbar.js b/my-pokedex/src/component/pokenavbar.js similarity index 83% rename from my-pokedex/src/features/pokenavbar.js rename to my-pokedex/src/component/pokenavbar.js index 0154bf9..5d0e9a7 100644 --- a/my-pokedex/src/features/pokenavbar.js +++ b/my-pokedex/src/component/pokenavbar.js @@ -2,8 +2,8 @@ import React, {useEffect} from "react"; import { Navbar, Nav, NavItem, NavDropdown, MenuItem, Container } from 'react-bootstrap'; // public/Poké_Ball_icon.svg.png // import './custom.css'; -import styles from './dex.module.css'; -import logo from './Poké_Ball_icon.svg.png'; +import styles from '../features/dex.module.css'; +import logo from '../features/Poké_Ball_icon.svg.png'; export default function PokeNavBar(props) { @@ -13,14 +13,13 @@ export default function PokeNavBar(props) { <Navbar bg="dark"> <Container> <Navbar.Brand href="#home"> - <img className={styles.logoimg} src={logo} alt="" /> + <img className={styles.logoimg} src={logo} alt="pokeball" /> </Navbar.Brand> <Navbar.Toggle aria-controls="basic-navbar-nav" /> <Navbar.Collapse id="basic-navbar-nav"> <Nav className="me-auto"> <Nav.Link href="#home">Home</Nav.Link> - <Nav.Link href="#link">Link</Nav.Link> - <NavDropdown title="Dropdown" id="basic-nav-dropdown"> + <NavDropdown title="Generations" id="basic-nav-dropdown"> <NavDropdown.Item href="#action/genone">Gen I</NavDropdown.Item> <NavDropdown.Item href="#action/gentwo">Gen II</NavDropdown.Item> <NavDropdown.Item href="#action/genthree">Gen III</NavDropdown.Item> diff --git a/my-pokedex/src/features/dex.js b/my-pokedex/src/features/dex.js index 865c0cf..e4163bb 100644 --- a/my-pokedex/src/features/dex.js +++ b/my-pokedex/src/features/dex.js @@ -2,9 +2,9 @@ import React, { useState, useEffect } from "react"; import styles from './dex.module.css'; import './custom.css'; -import Card from 'react-bootstrap/Card'; -import ProgressBar from 'react-bootstrap/ProgressBar'; -import PokeNavBar from './pokenavbar.js'; +import PokemonCard from '../component/pokecard'; + +import PokeNavBar from '../component/pokenavbar'; @@ -21,131 +21,56 @@ function Pokemon(name, typing, moves, abilities, stats, artwork) { export default function Dex() { - + //const API_KEY = process.env.REACT_APP_API_KEY; + const [listofpokemon, setlistofpokemon] = useState([]); const [disable, setDisable] = useState(false); - const COLORS = { - normal: 'cornsilk', - grass: 'green', - fire: 'red', - water: 'blue', - electric: 'yellow', - ice: 'darkturquoise', - fighting: 'firebrick', - poison: 'darkmagenta', - ground: 'tan', - rock: 'sienna', - flying: 'silver', - steel: 'slategrey', - psychic: 'deeppink', - bug: 'yellowgreen', - ghost: 'darkslateblue', - dark: 'darkslategrey', - dragon: 'royalblue', - fairy: 'thistle' - } - - function getTyping(types){ - if( types.length === 1) { - return COLORS[types[0].type.name]; - }else { // .join() reverses when mapping types. but .reverse() fixes it - return 'linear-gradient(to left,'+types.map( (type) => COLORS[type['type'].name]).reverse().join()+')'; - } - } - - function statLevel(stat) { - if( stat > 120) { // think of switching order since there are lower stats normally - return 'info'; - }else if( stat > 90) { - return 'success'; - }else if( stat > 40) { - return 'warning'; - }else { - return 'danger'; - } - } - - - - - - - async function pokemonFetchHelper(url) { let result = await fetch(url); let json = await result.json(); // console.log(json); - return json; + return json; } async function pokemonFetcher(){ for(let currentPokemon = 1; currentPokemon < 152; currentPokemon++) { - let responseURL = `https://pokeapi.co/api/v2/pokemon/${currentPokemon}/`; + let responseURL = `https://pokeapi.co/api/v2/pokemon/${currentPokemon}/`; + console.log(responseURL); let currentResponse = await pokemonFetchHelper(responseURL); setlistofpokemon(listofpokemon => { return [...listofpokemon, currentResponse]; }); } } - + return ( <main> <div> <PokeNavBar/> </div> <div> - <label>Pokedex</label> + <h1>Pokedex</h1> </div> <div> <button disabled={disable} onClick={() => {pokemonFetcher(); setDisable(true);}}>fetch pokemon</button> </div> - <div> - <ul className={styles.pokemonlist}> + <div className={styles.allcontainer}> + + + { listofpokemon.length > 0 ? listofpokemon.map((pokemon) => ( - <li key={pokemon.id}> - <Card style={{ width: '18rem' }} - > - <Card.Header>{pokemon.name}</Card.Header> - <Card.Img variant="top" src={pokemon.sprites.other['official-artwork'].front_default} /> - <Card.Body> - <Card.Title style={{background: getTyping(pokemon.types) }}> - { pokemon.types.length > 1 ? - `${pokemon.types[0].type.name} ${pokemon.types[1].type.name}` - : `${pokemon.types[0].type.name}` - } - </Card.Title> - <Card.Text> - - - </Card.Text> - { `Health Points:` } - <ProgressBar variant={statLevel(pokemon.stats[0].base_stat)} - now={pokemon.stats[0].base_stat} max={255} label={`${pokemon.stats[0].base_stat}`}/> <br/> - {`Attack:`} - <ProgressBar variant={statLevel(pokemon.stats[1].base_stat)} - now={pokemon.stats[1].base_stat} max={255} label={`${pokemon.stats[1].base_stat}`}/> <br/> - {`Defense:`} - <ProgressBar variant={statLevel(pokemon.stats[2].base_stat)} - now={pokemon.stats[2].base_stat} max={255} label={`${pokemon.stats[2].base_stat}`}/> <br/> - { `Special-Attack:`} - <ProgressBar variant={statLevel(pokemon.stats[3].base_stat)} - now={pokemon.stats[3].base_stat} max={255} label={`${pokemon.stats[3].base_stat}`}/> <br/> - { `Special-Defense:`} - <ProgressBar variant={statLevel(pokemon.stats[4].base_stat)} - now={pokemon.stats[4].base_stat} max={255} label={`${pokemon.stats[4].base_stat}`}/> <br/> - {`Speed:`} - <ProgressBar variant={statLevel(pokemon.stats[5].base_stat)} - now={pokemon.stats[5].base_stat} max={255} label={`${pokemon.stats[5].base_stat}`}/> <br/> - </Card.Body> - </Card> - </li> + <div id={pokemon.name} className={styles.pokemoncontainer}> + + <PokemonCard {...pokemon}/> + </div> + )) : null} - </ul> + </div> </main> ); diff --git a/my-pokedex/src/features/dex.module.css b/my-pokedex/src/features/dex.module.css index cada27e..79ea8be 100644 --- a/my-pokedex/src/features/dex.module.css +++ b/my-pokedex/src/features/dex.module.css @@ -9,6 +9,24 @@ width: 10%; object-fit: contain; } + + + .pokemoncontainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} +.allcontainer { + margin-left: 25px; + margin-right: 25; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; +} + + /* .cat { height:300px; width: 300px; -- GitLab