From 71093a4c88ed41bd51a3387f1e91c7ee05f2203c Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 4 Feb 2024 12:30:02 -0500 Subject: Almost finished implementing guestbook; More consistency in cards --- src/components/Guestbook.jsx | 49 +++++++++++++++++++++++++++++++++++ src/components/GuestbookForm.jsx | 56 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 src/components/Guestbook.jsx create mode 100644 src/components/GuestbookForm.jsx (limited to 'src/components') diff --git a/src/components/Guestbook.jsx b/src/components/Guestbook.jsx new file mode 100644 index 0000000..91e2a0f --- /dev/null +++ b/src/components/Guestbook.jsx @@ -0,0 +1,49 @@ +import { h, Component } from 'preact'; +import { pb } from '../services/pocketbase'; +import { formatDate } from "../util"; + +class Guestbook extends Component { + state = { + message: null, + error: null + }; + + async componentDidMount() { + try { + const message = await pb.collection('guestbook').getFullList({ + sort: '-created', + }); + this.setState({ message }); + } catch (error) { + this.setState({ error: `Failed to fetch data: ${error.message}` }); + console.error('Failed to fetch data:', error); + } + } + + render() { + const { message, error } = this.state; + + if (error) { + return

{error}

; + } + + if (!message) { + return

Loading messages...

; + } + + return ( +
+ {message.map((g) => ( +
+

Message from: {g.name}

+ {formatDate(g.created)} +

{g.message}

+ {g.website && Website} +
+ ))} +
+ ); + } +} + +export default Guestbook; diff --git a/src/components/GuestbookForm.jsx b/src/components/GuestbookForm.jsx new file mode 100644 index 0000000..aae5e10 --- /dev/null +++ b/src/components/GuestbookForm.jsx @@ -0,0 +1,56 @@ +import { h, Component } from 'preact'; +import { createMessage } from '../services/GuestbookService'; + +class GuestbookForm extends Component { + state = { + name: '', + email: '', + website: '', + message: '' + }; + + handleChange = (e) => { + this.setState({ [e.target.name]: e.target.value }); + } + + handleSubmit = async (e) => { + e.preventDefault(); + await createMessage(this.state); + this.setState({ + name: '', + email: '', + website: '', + message: '' + }); + } + + render() { + return ( +
+

Submit Message

+ +
+ +
+ +
+ + +
+ ); + } +} + +export default GuestbookForm; -- cgit v1.2.3