diff --git a/src/data/content.js b/src/data/content.js
index 469cc84..5b10b96 100644
--- a/src/data/content.js
+++ b/src/data/content.js
@@ -7,6 +7,7 @@ import {FortuneCard} from "../pages/activities/FotuneCard";
import {SearchWord} from "../pages/activities/getDefinition";
import {Jitter} from "../pages/games/Jitter";
import {RandomMeme} from "../pages/activities/RandomMemes";
+import { RandomJoke } from "../pages/activities/RandomJoke";
import meme from "../assets/activities/meme.jpg"
import numberblocs from "../assets/numberblocks.png"
import wordleicon from "../assets/games/Wordle/wordlejpg.png"
@@ -40,6 +41,13 @@ export const activities = [
icon: "https://www.i2symbol.com/pictures/emojis/f/2/0/4/f2042fedcbc0cdaee2967c4449b62845.png" ,
urlTerm: "search-any-word",
element:
+ },
+ {
+ title: "Random Jokes",
+ description: "Get random jokes",
+ icon: "https://www.troublefreepool.com/media/joke-png.127455/full",
+ urlTerm: "random-jokes",
+ element:
}
];
diff --git a/src/pages/activities/RandomJoke.js b/src/pages/activities/RandomJoke.js
new file mode 100644
index 0000000..d778cc4
--- /dev/null
+++ b/src/pages/activities/RandomJoke.js
@@ -0,0 +1,57 @@
+import { useEffect, useState } from "react";
+import axios from "axios";
+import "../../styles/pages/activities/RandomJoke.css";
+
+export const RandomJoke = () => {
+
+ const [joke, setJoke] = useState(null);
+ const [error, setError] = useState(null);
+
+ const generateJoke = () => {
+ setJoke(null);
+ axios({
+ method: "GET",
+ url: "https://v2.jokeapi.dev/joke/Any",
+ })
+ .then((res) => setJoke(res.data))
+ .catch((error) => setError(error));
+ };
+
+ useEffect(() => {
+ generateJoke();
+ }, []);
+
+ return (
+
+
+
+ Generate any random joke to get some laugh!
+
+ {joke && (
+
+
+ {joke.type === "single" ? (
+
{joke.joke}
+ ) : (
+
+
{joke.setup}
+
{joke.delivery}
+
+ )}
+
+
+ )}
+ {error && (
+
{error.message}
+ )}
+ {!joke && !error && (
+
+ )}
+
+
+ );
+};
\ No newline at end of file
diff --git a/src/styles/pages/activities/RandomJoke.css b/src/styles/pages/activities/RandomJoke.css
new file mode 100644
index 0000000..eeb59f3
--- /dev/null
+++ b/src/styles/pages/activities/RandomJoke.css
@@ -0,0 +1,130 @@
+.root {
+ margin-top: 25px;
+ font-family: "Fira Code Light";
+ }
+ .header {
+ font-size: 2rem;
+ margin-bottom: 5px;
+ }
+ .description {
+ font-size: 1.2rem;
+ font-weight: 300;
+ font-style: italic;
+ }
+
+ .content {
+ font-style: italic;
+ padding: 15px 10px;
+ background: white;
+ margin: auto;
+ border: 1px solid #4b4b4b;
+ width: 80vw;
+ max-width: 800px;
+ margin-top: 50px;
+ margin-bottom: 20px;
+ border-radius: 15px;
+ box-shadow: 2px 2px 5px #4b4b4b;
+ padding-left: 20px;
+ animation: quote-appeared 0.5s ease;
+ }
+
+
+ @keyframes quote-appeared {
+ 0% {
+ opacity: 0.5;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+
+ content:hover {
+ background: #f1f1f1;
+ }
+
+ .joke {
+ margin: 10px;
+ text-align: left;
+ font-size: 1.8rem;
+ line-height: 2.2rem;
+ font-style: normal;
+ animation: fade 0.3s ease;
+ }
+
+ @keyframes fade {
+ 0% {
+ opacity: 0.5;
+ }
+ 100% {
+ opacity: 1;
+ }
+ }
+
+ .error{
+ color: red;
+ font-size: 1.8rem;
+ padding: 40px 0;
+ font-style: oblique;
+ }
+
+
+ @keyframes slide-left {
+ 0% {
+ transform: translateX(4%);
+ opacity: 20%;
+ }
+ 100% {
+ transform: translateX(0%);
+ opacity: 100%;
+ }
+ }
+
+ .button {
+ font-size: 1.2rem;
+ background: white;
+ border-radius: 5px;
+ padding: 20px;
+ border: 1px solid #4b4b4b;
+ box-shadow: 1px 1px 3px #4b4b4b;
+ margin: 10px auto;
+ margin-top: 30px;
+ transition-duration: 300ms;
+ }
+
+ .button:hover {
+ cursor: pointer;
+ background: black;
+ color: white;
+ transform: scale(1.1);
+ }
+
+ .spinner-wrapper {
+ margin: auto;
+ width: 100px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ max-height: 200px;
+ height: 200px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+
+ .spinner {
+ border: 6px solid #f3f3f3;
+ border-top: 6px solid #3498db;
+ border-radius: 50%;
+ width: 50px;
+ height: 50px;
+ margin: auto;
+ animation: spin 2s linear infinite;
+ }
+
+ @keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+ }
\ No newline at end of file