diff --git a/src/components/Form.js b/src/components/Form.js index 78ef1628..084a28c1 100644 --- a/src/components/Form.js +++ b/src/components/Form.js @@ -1,11 +1,18 @@ -import React, { useState } from "react"; +import React, { useContext, useState } from "react"; +import { PhotoContext } from "../context/PhotoContext"; +import Spinner from "./Spinner"; const Form = ({ handleSubmit, history }) => { + const{loading}=useContext(PhotoContext) const [searchEntry, setSearchEntry] = useState(""); // update search text state const updateSearchInput = e => { setSearchEntry(e.target.value); }; + + + + return (
{ className={`search-button ${searchEntry.trim() ? "active" : null}`} disabled={!searchEntry.trim()} > - + {searchEntry&&loading?: - + }
); diff --git a/src/components/Spinner.js b/src/components/Spinner.js new file mode 100644 index 00000000..22b39ce0 --- /dev/null +++ b/src/components/Spinner.js @@ -0,0 +1,10 @@ +import React from 'react'; + +const Spinner = () => { + return ( +
+
+ ); +} + +export default Spinner; diff --git a/src/context/PhotoContext.js b/src/context/PhotoContext.js index 406b6f0a..608f9a70 100644 --- a/src/context/PhotoContext.js +++ b/src/context/PhotoContext.js @@ -7,6 +7,7 @@ const PhotoContextProvider = props => { const [images, setImages] = useState([]); const [loading, setLoading] = useState(true); const runSearch = query => { + setLoading(true) axios .get( `https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=${apiKey}&tags=${query}&per_page=24&format=json&nojsoncallback=1` @@ -16,6 +17,7 @@ const PhotoContextProvider = props => { setLoading(false); }) .catch(error => { + setLoading(false) console.log( "Encountered an error with fetching and parsing data", error diff --git a/src/index.css b/src/index.css index 3067afe8..879d1beb 100644 --- a/src/index.css +++ b/src/index.css @@ -162,6 +162,18 @@ input { margin-left: auto; margin-right: auto; } +.spinner { + border: 6px solid #f3f3f3; + /* Light grey */ + border-top: 6px solid black; + /* Blue */ + border-radius: 50%; + width: 15px; + height: 15px; + animation: spin 2s linear infinite; + margin-left: auto; + margin-right: auto; +} @keyframes spin { 0% {