|
1 | 1 | import { useEffect, useState } from "react"; |
2 | 2 | import axios from "axios"; |
3 | | -import "../../styles/pages/activities/RandomQuote.css"; // Reuse your styles |
| 3 | +import "../../styles/pages/activities/RandomQuote.css"; |
4 | 4 |
|
5 | 5 | export const RandomQuote = () => { |
6 | | - const [joke, setJoke] = useState(null); |
| 6 | + const [quote, setQuote] = useState(null); |
7 | 7 | const [error, setError] = useState(null); |
8 | 8 |
|
9 | | - const generateJoke = () => { |
10 | | - setJoke(null); |
| 9 | + const generateQuote = () => { |
| 10 | + setQuote(null); |
11 | 11 | setError(null); |
12 | 12 |
|
| 13 | + const url = "https://zenquotes.io/api/random"; |
| 14 | + const proxyUrl = `https://api.allorigins.win/get?url=${encodeURIComponent( |
| 15 | + `${url}?t=${Date.now()}` |
| 16 | + )}`; |
| 17 | + |
13 | 18 | axios |
14 | | - .get("https://official-joke-api.appspot.com/random_joke") |
15 | | - .then((res) => setJoke(res.data)) |
16 | | - .catch((err) => setError(err)); |
| 19 | + .get(proxyUrl) |
| 20 | + .then((res) => { |
| 21 | + const data = JSON.parse(res.data.contents); |
| 22 | + const q = data[0]; |
| 23 | + setQuote({ q: q.q, a: q.a }); |
| 24 | + }) |
| 25 | + .catch((err) => { |
| 26 | + setError(err); |
| 27 | + }); |
17 | 28 | }; |
18 | 29 |
|
19 | 30 | useEffect(() => { |
20 | | - generateJoke(); |
| 31 | + generateQuote(); |
21 | 32 | }, []); |
22 | 33 |
|
23 | 34 | return ( |
24 | 35 | <div className="rquote-root"> |
25 | | - <h1 className="header">Random Joke Generator</h1> |
| 36 | + <h1 className="header">Random Quote Generator</h1> |
26 | 37 | <div className="description"> |
27 | | - Get a random joke to brighten your day 😄 |
| 38 | + Get a random quote to inspire your day 💡 |
28 | 39 | </div> |
29 | 40 |
|
30 | | - {joke && ( |
| 41 | + {quote && ( |
31 | 42 | <div className="rquote-content"> |
32 | | - <div className="rquote-quote">{joke.setup}</div> |
33 | | - <div className="rquote-author">{joke.punchline}</div> |
| 43 | + <div className="rquote-quote">“{quote.q}”</div> |
| 44 | + <div className="rquote-author">— {quote.a || "Unknown"} </div> |
34 | 45 | </div> |
35 | 46 | )} |
36 | 47 |
|
37 | 48 | {error && ( |
38 | 49 | <div className="rquote-content error">{error.message}</div> |
39 | 50 | )} |
40 | 51 |
|
41 | | - {!joke && !error && ( |
| 52 | + {!quote && !error && ( |
42 | 53 | <div className="spinner-wrapper"> |
43 | 54 | <div className="spinner"></div> |
44 | 55 | </div> |
45 | 56 | )} |
46 | 57 |
|
47 | | - <button className="rquote-button" onClick={generateJoke}> |
48 | | - Generate Joke |
| 58 | + <button className="rquote-button" onClick={generateQuote}> |
| 59 | + Generate Quote |
49 | 60 | </button> |
50 | 61 | </div> |
51 | 62 | ); |
|
0 commit comments