diff --git a/src/images/DisplayRandomPicture.tsx b/src/images/DisplayRandomPicture.tsx new file mode 100644 index 0000000..97a5837 --- /dev/null +++ b/src/images/DisplayRandomPicture.tsx @@ -0,0 +1,46 @@ +import React, { useState, useEffect } from 'react'; +import { fetchRandomAPI } from '../utils/fetchData'; + +interface RandomPicture { + date: string, + explanation: string, + hdurl: string, + title: string, + url: string +} + +export const DisplayRandomPicture = () => { + const [myPictureData, setMyPictureData] = useState | null>(null); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + + const FetchPicture = async () => { + + try { + setIsLoading(true); + + const pictureData = await fetchRandomAPI("https://api.nasa.gov/planetary/apod?api_key="); + + setMyPictureData(pictureData); + setIsLoading(false); + + } catch (err: unknown) { + if (err instanceof Error) { + setError(err); // Set the actual Error object + } else { + setError(new Error('An unknown error occurred')); // Provide a default Error object + } + + setIsLoading(false); + } + } + useEffect(() => { + FetchPicture(); + }, []) + + if (isLoading) return (
Is Loading...
); + if (error) return (
{error.message}
); + if (!myPictureData) return (
EMPTY
); + + return myPictureData; +}; \ No newline at end of file diff --git a/src/utils/fetchData.ts b/src/utils/fetchData.ts index 9b6b0ac..cda5b80 100644 --- a/src/utils/fetchData.ts +++ b/src/utils/fetchData.ts @@ -1,7 +1,6 @@ // 1. .env has to be created in root // 2. inside .env, it should be REACT_APP_NASA_API_KEY="" - const year = new Date().getFullYear() const month = (new Date().getMonth()) + 1 const date = new Date().getDate() @@ -11,6 +10,24 @@ export async function fetchAPI(apiUrl: string, date = todaysDate) { const apiKey = process.env.REACT_APP_NASA_API_KEY; const link = `${apiUrl}${apiKey}&date=${date}`; + try { + const response = await fetch(link); + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + const pictureData = await response.json(); + console.log(pictureData); + return pictureData; + } catch (err) { + throw err; + } +} + +export async function fetchRandomAPI(apiUrl: string) { + const apiKey = process.env.REACT_APP_NASA_API_KEY; + const link = `${apiUrl}${apiKey}&count=1`; + try { const response = await fetch(link); if (!response.ok) {