diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2024-02-04 20:40:26 -0500 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2024-02-04 20:40:26 -0500 |
| commit | f5efedcaf7ff2ad509304a6f44771d2bac2001fc (patch) | |
| tree | 835c0dfdee4f4f25cbe6c45ee21d5e9b74853f5b /src/components | |
| parent | 8aeaf9ab9884ed6f669633b1ab67c1ae219f7916 (diff) | |
| download | personal-website-f5efedcaf7ff2ad509304a6f44771d2bac2001fc.tar.gz personal-website-f5efedcaf7ff2ad509304a6f44771d2bac2001fc.tar.bz2 personal-website-f5efedcaf7ff2ad509304a6f44771d2bac2001fc.zip | |
Proper error handling and css tweak for guestbooks
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/GuestbookForm.jsx | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/src/components/GuestbookForm.jsx b/src/components/GuestbookForm.jsx index 841902d..26e32b1 100644 --- a/src/components/GuestbookForm.jsx +++ b/src/components/GuestbookForm.jsx @@ -24,19 +24,27 @@ class GuestbookForm extends Component { return; } - const messageHtml = marked(DOMPurify.sanitize(this.state.message)); - await createMessage({ ...this.state, message: messageHtml }); + try { + const messageHtml = marked(DOMPurify.sanitize(this.state.message)); + await createMessage({ ...this.state, message: messageHtml }); - this.setState({ - name: '', - email: '', - website: '', - message: '', - isMessageSent: true, - }); + this.setState({ + name: '', + email: '', + website: '', + message: '', + isMessageSent: true, + errorMessage: '', + }); - if (this.props.onMessageSent) { - this.props.onMessageSent(); + if (this.props.onMessageSent) { + this.props.onMessageSent(); + } + } catch (error) { + this.setState({ + errorMessage: `There was an error submitting your message.<br>Details: ${error}<br>Check the console for more details.`, + isMessageSent: false, + }); } } @@ -45,20 +53,21 @@ class GuestbookForm extends Component { <div class="card"> <form onSubmit={this.handleSubmit}> <h2>Submit Message</h2> - <label>Name</label> + <label for="name">Name</label> <input type="text" name="name" placeholder="John Doe" required value={this.state.name} onChange={this.handleChange}/> - <label>Email Address</label> + <label for="email">Email Address</label> <input type="email" name="email" placeholder="hello@example.com (optional)" value={this.state.email} onChange={this.handleChange}/> - <label>Your Website</label> + <label for="website">Your Website</label> <input type="url" name="website" placeholder="https://example.com (optional)" value={this.state.website} onChange={this.handleChange}/> - <label>Message (Supports Markdown)</label> + <label for="message">Message (Supports Markdown)</label> <textarea name="message" placeholder="This is a **message**. I can *do* this, and __this__." required value={this.state.message} onChange={this.handleChange}></textarea> <button type="submit">Send</button> </form> + {this.state.errorMessage && <p dangerouslySetInnerHTML={{ __html: this.state.errorMessage }} />} {this.state.isMessageSent && <p>Sent successfully!</p>} </div> ); |
