Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 20 additions & 13 deletions src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { useEffect, useState } from "react";
import ContentContainer from "./ContentContainer";
import { Trending, getTrending } from "./api";
import TrendingList from "./TrendingList";

export type Name = {first: string, last: string}

Expand All @@ -9,33 +10,39 @@ function App() {
first: "",
last: "",
});
const [trendingRecipes, setTrendingRecipes] = useState<Trending>()
const [trendingRecipes, setTrendingRecipes] = useState<Trending[]>()
const [errorMessage, setErrorMessage] = useState<string | null>(null)

const handleNameUpdate=(field: keyof typeof name, newName: string) => {
setName((prevState) => {
prevState[field] = newName
return prevState
})
setName(prevState => ({
...prevState,
[field]: newName
}))
}

useEffect(() => {
const fetchTrending = async () => {
const trending = await getTrending()
setTrendingRecipes(trending)
try {
const trending = await getTrending()
setTrendingRecipes(trending)
setErrorMessage(null)
} catch (error) {
console.error('Error in fetching trending data: ', error)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A potential error message on this console could be "Error in fetching trending data: Error in fetching trending data: ...status" since you have the error message format set up already in the api function try catch.

setErrorMessage('Failed to fetch trending data')
}
}
fetchTrending()
}, [])
}, [])

return (
<div className="container">
<h5>App</h5>
<ContentContainer handleNameUpdate={handleNameUpdate} name={name} />
{/* Render a component here that renders a list of trending items from the getTrending api function.
Display the title and userRatingsCount (Default the userRatingsCount to 0 if the field is null or missing in the api response)
*/}
{errorMessage && <p>{errorMessage}</p>}
{trendingRecipes && <TrendingList trendingRecipes={trendingRecipes}/>}
</div>

);
}

export default App;
export default App;
11 changes: 5 additions & 6 deletions src/ContentContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,24 @@ import { Name } from "./App";
import DisplayContainer from "./DisplayContainer";
import FormContainer from "./FormContainer";
import primeFactorize from "./utils";
import { useMemo } from "react";

export type Field = "first" | "last"


const ContentContainer = ({name, handleNameUpdate}: { name: Name, handleNameUpdate:(field: Field , newName: string) => void }) => {

const numOfFactors =() => {
// This takes a long time to run
const numOfFactors = useMemo(() => {
return primeFactorize().length
}

}, [])

return (
<div className="container">
<h5>{`Important Number: ${numOfFactors()}`}</h5>
<h5>Important Number: {numOfFactors}</h5>
<FormContainer handleNameUpdate={handleNameUpdate} name={name} />
<DisplayContainer name={name} />
</div>
);
};

export default ContentContainer
export default ContentContainer
2 changes: 1 addition & 1 deletion src/DisplayContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ const DisplayContainer = ({name}: {name: Name}) => {
}


export default DisplayContainer
export default DisplayContainer
22 changes: 22 additions & 0 deletions src/TrendingList.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { Trending } from "./api";

interface TrendingListProps {
trendingRecipes: Trending[];
}

const TrendingList: React.FC<TrendingListProps> = ({ trendingRecipes }) => {
return (
<ul>
{trendingRecipes.map((trendingRecipe) => {
return(
<li key={trendingRecipe.document_id}>
<p>Title: {trendingRecipe.title}</p>
<p>User Rating: {trendingRecipe.rating.attributes.userRatingsCount ?? 0}</p>
</li>
)
})}
</ul>
)
}

export default TrendingList;
20 changes: 15 additions & 5 deletions src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,19 @@ type CompleteRating = {
}


export const getTrending = async (): Promise<Trending> => {
const response = await fetch('https://speak-easy-staging.herokuapp.com/api/analytics/trending/atk')
const trending = await response.json()
return trending

export const getTrending = async (): Promise<Trending[]> => {
try {
const response = await fetch('https://speak-easy-staging.herokuapp.com/api/analytics/trending/atk')

if(!response.ok) {
const errorMessage = `${response.status} (${response.statusText})`
const error = new Error(errorMessage)
throw(error)
}
const trending = await response.json()
return trending
} catch (error) {
console.error('Error in fetching trending data:', error)
throw(error)
}
}
2 changes: 1 addition & 1 deletion src/main.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
<React.StrictMode>
<App />
</React.StrictMode>
)
)
Loading