Skip to content

Commit dff1276

Browse files
codecommander03: Added RandomJoke
1 parent 24d374b commit dff1276

File tree

3 files changed

+195
-0
lines changed

3 files changed

+195
-0
lines changed

src/data/content.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {FortuneCard} from "../pages/activities/FotuneCard";
77
import {SearchWord} from "../pages/activities/getDefinition";
88
import {Jitter} from "../pages/games/Jitter";
99
import {RandomMeme} from "../pages/activities/RandomMemes";
10+
import { RandomJoke } from "../pages/activities/RandomJoke";
1011
import meme from "../assets/activities/meme.jpg"
1112
import numberblocs from "../assets/numberblocks.png"
1213
import wordleicon from "../assets/games/Wordle/wordlejpg.png"
@@ -40,6 +41,13 @@ export const activities = [
4041
icon: "https://www.i2symbol.com/pictures/emojis/f/2/0/4/f2042fedcbc0cdaee2967c4449b62845.png" ,
4142
urlTerm: "search-any-word",
4243
element: <SearchWord />
44+
},
45+
{
46+
title: "Random Jokes",
47+
description: "Get random jokes",
48+
icon: "https://www.troublefreepool.com/media/joke-png.127455/full",
49+
urlTerm: "random-jokes",
50+
element: <RandomJoke />
4351
}
4452
];
4553

src/pages/activities/RandomJoke.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import { useEffect, useState } from "react";
2+
import axios from "axios";
3+
import "../../styles/pages/activities/RandomJoke.css";
4+
5+
export const RandomJoke = () => {
6+
7+
const [joke, setJoke] = useState(null);
8+
const [error, setError] = useState(null);
9+
10+
const generateJoke = () => {
11+
setJoke(null);
12+
axios({
13+
method: "GET",
14+
url: "https://v2.jokeapi.dev/joke/Any",
15+
})
16+
.then((res) => setJoke(res.data))
17+
.catch((error) => setError(error));
18+
};
19+
20+
useEffect(() => {
21+
generateJoke();
22+
}, []);
23+
24+
return (
25+
<div className="root">
26+
<h1 class="header">Random Joke Generator</h1>
27+
<div class="description">
28+
Generate any random joke to get some laugh!
29+
</div>
30+
{joke && (
31+
32+
<div className="content">
33+
{joke.type === "single" ? (
34+
<div>{joke.joke}</div>
35+
) : (
36+
<div>
37+
<div>{joke.setup}</div>
38+
<div>{joke.delivery}</div>
39+
</div>
40+
)}
41+
</div>
42+
43+
)}
44+
{error && (
45+
<div className="content error">{error.message}</div>
46+
)}
47+
{!joke && !error && (
48+
<div className="spinner-wrapper">
49+
<div className="spinner"></div>
50+
</div>
51+
)}
52+
<button className="button" onClick={generateJoke}>
53+
Generate Joke
54+
</button>
55+
</div>
56+
);
57+
};
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
.root {
2+
margin-top: 25px;
3+
font-family: "Fira Code Light";
4+
}
5+
.header {
6+
font-size: 2rem;
7+
margin-bottom: 5px;
8+
}
9+
.description {
10+
font-size: 1.2rem;
11+
font-weight: 300;
12+
font-style: italic;
13+
}
14+
15+
.content {
16+
font-style: italic;
17+
padding: 15px 10px;
18+
background: white;
19+
margin: auto;
20+
border: 1px solid #4b4b4b;
21+
width: 80vw;
22+
max-width: 800px;
23+
margin-top: 50px;
24+
margin-bottom: 20px;
25+
border-radius: 15px;
26+
box-shadow: 2px 2px 5px #4b4b4b;
27+
padding-left: 20px;
28+
animation: quote-appeared 0.5s ease;
29+
}
30+
31+
32+
@keyframes quote-appeared {
33+
0% {
34+
opacity: 0.5;
35+
}
36+
100% {
37+
opacity: 1;
38+
}
39+
}
40+
41+
content:hover {
42+
background: #f1f1f1;
43+
}
44+
45+
.joke {
46+
margin: 10px;
47+
text-align: left;
48+
font-size: 1.8rem;
49+
line-height: 2.2rem;
50+
font-style: normal;
51+
animation: fade 0.3s ease;
52+
}
53+
54+
@keyframes fade {
55+
0% {
56+
opacity: 0.5;
57+
}
58+
100% {
59+
opacity: 1;
60+
}
61+
}
62+
63+
.error{
64+
color: red;
65+
font-size: 1.8rem;
66+
padding: 40px 0;
67+
font-style: oblique;
68+
}
69+
70+
71+
@keyframes slide-left {
72+
0% {
73+
transform: translateX(4%);
74+
opacity: 20%;
75+
}
76+
100% {
77+
transform: translateX(0%);
78+
opacity: 100%;
79+
}
80+
}
81+
82+
.button {
83+
font-size: 1.2rem;
84+
background: white;
85+
border-radius: 5px;
86+
padding: 20px;
87+
border: 1px solid #4b4b4b;
88+
box-shadow: 1px 1px 3px #4b4b4b;
89+
margin: 10px auto;
90+
margin-top: 30px;
91+
transition-duration: 300ms;
92+
}
93+
94+
.button:hover {
95+
cursor: pointer;
96+
background: black;
97+
color: white;
98+
transform: scale(1.1);
99+
}
100+
101+
.spinner-wrapper {
102+
margin: auto;
103+
width: 100px;
104+
display: flex;
105+
align-items: center;
106+
justify-content: center;
107+
max-height: 200px;
108+
height: 200px;
109+
margin-top: 10px;
110+
margin-bottom: 10px;
111+
}
112+
113+
.spinner {
114+
border: 6px solid #f3f3f3;
115+
border-top: 6px solid #3498db;
116+
border-radius: 50%;
117+
width: 50px;
118+
height: 50px;
119+
margin: auto;
120+
animation: spin 2s linear infinite;
121+
}
122+
123+
@keyframes spin {
124+
0% {
125+
transform: rotate(0deg);
126+
}
127+
100% {
128+
transform: rotate(360deg);
129+
}
130+
}

0 commit comments

Comments
 (0)