From f5de90ba89146008af78c16e798e216efccf0c50 Mon Sep 17 00:00:00 2001
From: Andrew Lee <andrew@alee14.me>
Date: Sat, 11 Jan 2025 11:55:18 -0500
Subject: Ability to add quotes, web interface, pending quotes

---
 web/src/components/Quotes.jsx | 86 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 86 insertions(+)
 create mode 100644 web/src/components/Quotes.jsx

(limited to 'web/src/components/Quotes.jsx')

diff --git a/web/src/components/Quotes.jsx b/web/src/components/Quotes.jsx
new file mode 100644
index 0000000..1d563e7
--- /dev/null
+++ b/web/src/components/Quotes.jsx
@@ -0,0 +1,86 @@
+import { useState, useEffect } from 'react';
+import '../styles/Quote.css'
+
+export function PendingQuotes() {
+    const [quotes, setQuotes] = useState([]);
+
+    const fetchQuotes = async () => {
+        try {
+            const response = await fetch('http://localhost:3000/api/pending-quotes');
+            const data = await response.json();
+            setQuotes(data);
+        } catch (error) {
+            console.error('Failed to fetch quotes:', error);
+        }
+    };
+
+    useEffect(() => {
+        fetchQuotes();
+    }, []);
+
+    const approveQuote = async (id) => {
+        try {
+            const response = await fetch('http://localhost:3000/api/approve-quote', {
+                method: 'POST',
+                headers: {
+                    'Content-Type': 'application/json',
+                },
+                body: JSON.stringify({ id }),
+            });
+
+            if (response.ok) {
+                fetchQuotes(); // Refresh the listing after approving the quote
+            } else {
+                console.error('Failed to approve quote');
+            }
+        } catch (error) {
+            console.error('Error approving quote:', error);
+        }
+    };
+
+    const rejectQuote = async (id) => {
+        try {
+            const response = await fetch('http://localhost:3000/api/reject-quote', {
+                method: 'POST',
+                headers: {
+                    'Content-Type': 'application/json',
+                },
+                body: JSON.stringify({ id }),
+            });
+
+            if (response.ok) {
+                fetchQuotes(); // Refresh the listing after approving the quote
+            } else {
+                console.error('Failed to reject quote');
+            }
+        } catch (error) {
+            console.error('Error rejecting quote:', error);
+        }
+    };
+
+    return (
+        <div>
+            <h1>Pending Quotes</h1>
+            {quotes.length > 0 ? (
+                <ul className="quoteList">
+                    {quotes.map((quote) => (
+                        <li key={quote.id} className="quoteList">
+                            <div className="quote">
+                                <div className="author">
+                                    <img src={quote.authorImage} alt="No Profile" width="50" height="50"/>
+                                    <h1 className="quoteAuthor">{quote.author}</h1>
+                                </div>
+                                <p className="quoteText">{quote.quote}</p>
+                                <small>- {quote.year}</small>
+                            </div>
+                            <button onClick={() => approveQuote(quote.id)}>Approve</button>
+                            <button onClick={() => rejectQuote(quote.id)}>Reject</button>
+                        </li>
+                    ))}
+                </ul>
+            ) : (
+                <p>No pending quotes available.</p>
+            )}
+        </div>
+    );
+}
-- 
cgit v1.2.3

