aboutsummaryrefslogtreecommitdiff
path: root/src/components/Guestbook.jsx
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2024-06-28 20:31:02 -0400
committerAndrew Lee <alee14498@protonmail.com>2024-06-28 20:31:02 -0400
commit64cd7fc83d43a0ad7db1b51214291736bd245b44 (patch)
treeda8f9e47d50583932e144fa6b21585d5dd70bd21 /src/components/Guestbook.jsx
parent8edeebb44d9b3636268d95c30d462593d9a074d8 (diff)
downloadpersonal-website-64cd7fc83d43a0ad7db1b51214291736bd245b44.tar.gz
personal-website-64cd7fc83d43a0ad7db1b51214291736bd245b44.tar.bz2
personal-website-64cd7fc83d43a0ad7db1b51214291736bd245b44.zip
Guestbook overhaul; Comments; New post; Updated packages
Diffstat (limited to 'src/components/Guestbook.jsx')
-rw-r--r--src/components/Guestbook.jsx61
1 files changed, 33 insertions, 28 deletions
diff --git a/src/components/Guestbook.jsx b/src/components/Guestbook.jsx
index 584a4eb..e3238f9 100644
--- a/src/components/Guestbook.jsx
+++ b/src/components/Guestbook.jsx
@@ -1,5 +1,4 @@
import { Component } from 'preact';
-import { supabase } from '../services/supabase';
import { formatDate } from "../util";
import sanitizeHtml from 'sanitize-html';
import GuestbookForm from "./GuestbookForm.jsx";
@@ -12,23 +11,27 @@ class Guestbook extends Component {
};
fetchMessages = async (page) => {
- const perPage = 10;
- const start = (page - 1) * perPage;
- const end = start + perPage - 1;
+ try {
+ const response = await fetch(`${import.meta.env.PUBLIC_API_URL}/guestbook?page=${page}`);
+
+ if (!response.ok) {
+ const errorData = await response.json();
+ this.setState({ error: `Failed to fetch data: ${errorData.message}` });
+ console.error('Failed to fetch data:', errorData.message);
+ return;
+ }
+
+ const { messages, totalPages } = await response.json();
- let { data: messages, error, count } = await supabase
- .from('guestbook')
- .select('*', { count: 'exact' })
- .range(start, end)
- .order('created_at', { ascending: false });
- if (error) {
- this.setState({ error: `Failed to fetch data: ${error.message}` });
- console.error('Failed to fetch data:', error);
- } else {
this.setState({
message: messages,
- totalPages: Math.ceil(count / perPage)
+ totalPages: totalPages,
+ error: null // clear any previous error
});
+
+ } catch (error) {
+ this.setState({ error: `Failed to fetch data: ${error.message}` });
+ console.error('Failed to fetch data:', error);
}
}
@@ -63,22 +66,24 @@ class Guestbook extends Component {
<GuestbookForm onMessageSent={this.refresh} />
{error ? (
<p>{error}</p>
- ) : !message ? (
- <p>Loading messages...</p>
- ) : (
- <div class="grid">
- {message.map((g) => (
- <article class="card">
- <h1>Message from: {g.name}</h1>
- <small>{formatDate(g.created_at)}</small>
- <div dangerouslySetInnerHTML={{__html: sanitizeHtml(g.message)}}/>
- {g.website && <a href={g.website} target="_blank">My Website</a>}
- </article>
- ))}
+ ) : message ? (
+ <div>
+ <div className="grid">
+ {message.map((g) => (
+ <article className="card">
+ <h1>Message from: {g.name}</h1>
+ <small>{formatDate(g.created_at)}</small>
+ <div dangerouslySetInnerHTML={{__html: sanitizeHtml(g.message)}}/>
+ {g.website && <a href={g.website} target="_blank">My Website</a>}
+ </article>
+ ))}
+ </div>
+ {page > 1 && <button class="button margin" onClick={this.handlePrevious}>Previous</button>}
+ {page < totalPages && <button class="button margin" onClick={this.handleNext}>Next</button>}
</div>
+ ) : (
+ <p>Loading messages...</p>
)}
- {page > 1 && <button class="button margin" onClick={this.handlePrevious}>Previous</button>}
- {page < totalPages && <button class="button margin" onClick={this.handleNext}>Next</button>}
</div>
);
}