more work to add multiple datasets to home page

This commit is contained in:
StevanFreeborn
2022-07-19 12:38:58 -05:00
parent 85025970ba
commit ace3d0bd7e
5 changed files with 120 additions and 28 deletions
+6 -1
View File
@@ -2,8 +2,13 @@ import React from 'react';
export default function DataButton(props) {
const label = props.label;
return (
<button>
<button
value={label.toLowerCase()}
onClick={(e) => props.handleClick(e.target.value)}
>
{props.label}
</button>
);
+21
View File
@@ -0,0 +1,21 @@
import React from 'react';
import Card from 'react-bootstrap/Card';
export default function QuoteCard(props) {
const text = props.quote.text;
const source = props.quote.source
return (
<Card style={{ width: '22rem' }} className='p-1 m-3'>
<Card.Body>
<Card.Text>{text}</Card.Text>
<Card.Text>{source}</Card.Text>
</Card.Body>
</Card>
);
}
+60 -13
View File
@@ -5,41 +5,72 @@ import CardHolder from '../components/cardHolder';
import CharacterCard from '../components/characterCard';
import Loading from '../components/loading';
import LoadingError from '../components/loadingError';
import CharacterService from '../services/characterService';
import DataButtonHolder from '../components/dataButtonHolder';
import DataButton from '../components/dataButton';
import CharacterService from '../services/characterService';
import QuoteService from '../services/quoteService';
import QuoteCard from '../components/quoteCard';
const characterService = new CharacterService();
const quoteService = new QuoteService();
export default function Home() {
const models = [{name: 'Characters'}, {name: 'Quotes'}, {name: 'Episodes'}, {name: 'Seasons'}];
const [characters, setCharacters] = useState([]);
const [currentData, setCurrentData] = useState('characters');
const [data, setData] = useState([]);
const [errorMessage, setErrorMessage] = useState(null);
const getCharacters = async () => {
setData([]);
setCurrentData('characters');
const res = await characterService.getCharacters();
if (!res.ok) {
return setErrorMessage('Failed to load characters.');
return setErrorMessage(`Failed to load characters`);
}
const characters = await res.json();
return setCharacters(characters);
return setData(characters);
}
const getQuotes = async () => {
setData([]);
setCurrentData('quotes');
const res = await quoteService.getQuotes();
if (!res.ok) {
return setErrorMessage(`Failed to load quotes`);
}
const quotes = await res.json();
return setData(quotes.slice(0,20));
}
const getEpisodes = () => {console.log('episodes')}
const getSeasons = () => {console.log('seasons')}
useEffect(() => {
getCharacters();
}, []);
const models = [{ id: 1, name: 'Characters', handleClick: getCharacters},
{ id: 2, name: 'Quotes', handleClick: getQuotes },
{ id: 3, name: 'Episodes', handleClick: getEpisodes },
{ id: 4, name: 'Seasons', handleClick: getSeasons }];
const getDataButtons = () => {
return models.map(model => {
@@ -47,6 +78,8 @@ export default function Home() {
return (
<DataButton
label={model.name}
handleClick={model.handleClick}
key={model.id}
/>
);
@@ -54,9 +87,25 @@ export default function Home() {
}
const getCharacterCards = () => {
const getCards = () => {
return characters.map(character => {
if (currentData === 'quotes') {
return data.map(quote => {
return (
<QuoteCard
quote={quote}
key={quote.id}
/>
);
});
}
return data.map(character => {
return (
@@ -75,8 +124,6 @@ export default function Home() {
setErrorMessage(null);
if (errorMessage === 'Failed to load characters.') return await getCharacters();
}
return (
@@ -87,11 +134,11 @@ export default function Home() {
{getDataButtons()}
</DataButtonHolder>
{characters.length > 0 ?
{data.length > 0 ?
<CardHolder>
{getCharacterCards()}
{getCards()}
</CardHolder>
+19
View File
@@ -0,0 +1,19 @@
import { baseUrl, versionHeader, versionHeaderValue } from '../constants';
class QuoteService {
getQuotes = async () => {
const res = await fetch(`${baseUrl}/api/quotes`, {
headers: {
[versionHeader]: versionHeaderValue
}
});
return res;
}
}
export default QuoteService;