From 3b0f264d81d5b5bf92139a7c4f84bc90bafcbd91 Mon Sep 17 00:00:00 2001 From: murtuza Date: Mon, 18 Apr 2022 15:10:59 +0530 Subject: [PATCH 1/4] add a new play - [random meme generator] --- public/index.html | 1 + src/meta/play-meta.js | 13 ++++ src/plays/index.js | 1 + .../RandomMemeGenerator.jsx | 73 +++++++++++++++++++ .../random-meme-generator.css | 51 +++++++++++++ 5 files changed, 139 insertions(+) create mode 100644 src/plays/random-meme-generator/RandomMemeGenerator.jsx create mode 100644 src/plays/random-meme-generator/random-meme-generator.css diff --git a/public/index.html b/public/index.html index fe326fff7f..2e1b0e799d 100644 --- a/public/index.html +++ b/public/index.html @@ -43,6 +43,7 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> + diff --git a/src/meta/play-meta.js b/src/meta/play-meta.js index 8167644dfe..3bf42bffe1 100644 --- a/src/meta/play-meta.js +++ b/src/meta/play-meta.js @@ -6,6 +6,7 @@ import { WhyReact, CounterApp, SocialCard, +RandomMemeGenerator, //import play here } from "plays"; @@ -88,6 +89,18 @@ export const plays = [ cover: '', blog: 'https://blog.greenroots.info/how-to-create-react-form-with-a-single-change-event-handler', video: '' + }, { + id: 'pl-random-meme-generator', + name: 'Random Meme Generator', + description: 'A project to demonstrate the use of API to fetch random memes! It also demonstrates how you can do event handling!', + component: () => {return }, + path: '/plays/random-meme-generator', + level: 'Beginner', + tags: 'JSX,Hooks,API,EventHandling', + github: 'murtuzaalisurti', + cover: '', + blog: '', + video: '' }, //replace new play item here ]; diff --git a/src/plays/index.js b/src/plays/index.js index 03dc2a3696..989b5898c0 100644 --- a/src/plays/index.js +++ b/src/plays/index.js @@ -7,4 +7,5 @@ export { default as MovieContainer } from 'plays/movies/MovieContainer'; export { default as WhyReact } from 'plays/why-react/WhyReact'; export { default as CounterApp } from 'plays/counter/CounterApp'; export { default as SocialCard } from 'plays/social-card/SocialCard'; +export { default as RandomMemeGenerator } from 'plays/random-meme-generator/RandomMemeGenerator'; //add export here diff --git a/src/plays/random-meme-generator/RandomMemeGenerator.jsx b/src/plays/random-meme-generator/RandomMemeGenerator.jsx new file mode 100644 index 0000000000..9d3badafa3 --- /dev/null +++ b/src/plays/random-meme-generator/RandomMemeGenerator.jsx @@ -0,0 +1,73 @@ + +import { useLocation } from 'react-router-dom'; +import { getPlayById } from 'meta/play-meta-util'; +import { useState, useEffect } from 'react'; + +import PlayHeader from 'common/playlists/PlayHeader'; +import './random-meme-generator.css'; + +function RandomMemeGenerator() { + // Do not remove the below lines. + // The following code is to fetch the current play from the URL + const location = useLocation(); + const { id } = location.state; + const play = getPlayById(id); + + // Your Code Start below. + + const [meme, setMeme] = useState({}); + + const [isLoading, setIsLoading] = useState(false); + + function getMeme() { + setIsLoading(true); + fetch('https://meme-api.herokuapp.com/gimme').then((res) => { + return res.json(); + }).then((data) => { + setIsLoading(false) + if(data.nsfw) { + getMeme(); + } else { + console.log(data); + setMeme((prev) => { + return data; + }) + } + }).catch((err) => { + console.error(err); + }) + } + + useEffect(() => { + getMeme(); + }, []) + + function handleClick(e) { + e.target.classList.contains('generate-btn') && getMeme(); + } + + return ( + <> +
+ +
+ {/* Your Code Starts Here */} +
+ Meme Generator +
+ +
+ {meme.url === null || meme.url === undefined ? : meme} +
+ +
+ +
+ {/* Your Code Ends Here */} +
+
+ + ); +} + +export default RandomMemeGenerator; \ No newline at end of file diff --git a/src/plays/random-meme-generator/random-meme-generator.css b/src/plays/random-meme-generator/random-meme-generator.css new file mode 100644 index 0000000000..325decb6e4 --- /dev/null +++ b/src/plays/random-meme-generator/random-meme-generator.css @@ -0,0 +1,51 @@ +.meme-container { + width: 100%; + display: flex; + justify-content: center; +} + +.meme { + width: 80%; + max-width: 20rem; + height: auto; +} + +.meme-generator-title { + font-family: 'Quicksand', sans-serif; + font-size: 2rem; + display: flex; + justify-content: center; + margin: 2rem 0; +} + +.generate { + width: 100%; + display: flex; + justify-content: center; + margin: 2rem 0; +} + +.generate-btn { + padding: 0.7rem 1.2rem; + font-family: 'Quicksand', sans-serif; + outline: none; + background-color: #61DBFB; + color: black; + border: none; + border-radius: 0.5rem; + cursor: pointer; +} + +.loading { + animation: rotate 0.5s ease-in-out infinite both; +} + +@keyframes rotate { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file From 1de50820907e5fab3b91fb61d0bac5ce415fadd2 Mon Sep 17 00:00:00 2001 From: murtuza Date: Mon, 18 Apr 2022 15:41:40 +0530 Subject: [PATCH 2/4] =?UTF-8?q?added=20a=20readme=20=E2=9C=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plays/random-meme-generator/readme.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/plays/random-meme-generator/readme.md diff --git a/src/plays/random-meme-generator/readme.md b/src/plays/random-meme-generator/readme.md new file mode 100644 index 0000000000..2416e1e353 --- /dev/null +++ b/src/plays/random-meme-generator/readme.md @@ -0,0 +1,17 @@ + +# Random Meme Generator + +This project demonstrates the use of API in order to fetch random memes! + +## What will you learn? + +- How to use APIs in React. +- Importance of `useEffect` hook. +- Event handling for user interaction. +- State management + +The file `RandomMemeGenerator.jsx` has all the code required to build a meme generator! So, if you want to get a grasp of it, try implementing it on your own! + +I have used [Meme_Api](https://github.com/D3vd/Meme_Api) to generate memes but you can use any api of your choice! + +Keep Learning! From 585607b758697a32ea8d939a2295e8b0fc3d8382 Mon Sep 17 00:00:00 2001 From: murtuza Date: Mon, 18 Apr 2022 16:08:02 +0530 Subject: [PATCH 3/4] =?UTF-8?q?added=20cover=20image=20=E2=9A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plays/random-meme-generator/cover.png | Bin 0 -> 25357 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/plays/random-meme-generator/cover.png diff --git a/src/plays/random-meme-generator/cover.png b/src/plays/random-meme-generator/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..973df338c3fdef3cf3a18b768fe215e0c7663fac GIT binary patch literal 25357 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 literal 0 HcmV?d00001 From a3d6d1bc9972364db82a1c7af1f111a73658a558 Mon Sep 17 00:00:00 2001 From: murtuza Date: Mon, 18 Apr 2022 21:37:59 +0530 Subject: [PATCH 4/4] =?UTF-8?q?improved=20=E2=9C=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 1 - src/plays/random-meme-generator/RandomMemeGenerator.jsx | 9 +++------ .../random-meme-generator/random-meme-generator.css | 6 ++++++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/public/index.html b/public/index.html index 2e1b0e799d..fe326fff7f 100644 --- a/public/index.html +++ b/public/index.html @@ -43,7 +43,6 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> - diff --git a/src/plays/random-meme-generator/RandomMemeGenerator.jsx b/src/plays/random-meme-generator/RandomMemeGenerator.jsx index 9d3badafa3..c3e7e44c13 100644 --- a/src/plays/random-meme-generator/RandomMemeGenerator.jsx +++ b/src/plays/random-meme-generator/RandomMemeGenerator.jsx @@ -2,6 +2,7 @@ import { useLocation } from 'react-router-dom'; import { getPlayById } from 'meta/play-meta-util'; import { useState, useEffect } from 'react'; +import { FaSyncAlt } from 'react-icons/fa'; import PlayHeader from 'common/playlists/PlayHeader'; import './random-meme-generator.css'; @@ -42,10 +43,6 @@ function RandomMemeGenerator() { getMeme(); }, []) - function handleClick(e) { - e.target.classList.contains('generate-btn') && getMeme(); - } - return ( <>
@@ -57,11 +54,11 @@ function RandomMemeGenerator() {
- {meme.url === null || meme.url === undefined ? : meme} + {meme.url === null || meme.url === undefined ? : meme}
- +
{/* Your Code Ends Here */} diff --git a/src/plays/random-meme-generator/random-meme-generator.css b/src/plays/random-meme-generator/random-meme-generator.css index 325decb6e4..9821fc48e8 100644 --- a/src/plays/random-meme-generator/random-meme-generator.css +++ b/src/plays/random-meme-generator/random-meme-generator.css @@ -26,6 +26,8 @@ } .generate-btn { + display: flex; + align-items: center; padding: 0.7rem 1.2rem; font-family: 'Quicksand', sans-serif; outline: none; @@ -36,6 +38,10 @@ cursor: pointer; } +.generate-btn svg { + margin-left: 0.5rem; +} + .loading { animation: rotate 0.5s ease-in-out infinite both; }