import { Component } from 'preact'; import { createMessage } from '../services/GuestbookService'; import '../styles/GuestbookForm.css'; import { marked } from "marked"; import DOMPurify from 'dompurify'; class GuestbookForm extends Component { state = { name: '', website: '', message: '', isMessageSent: false, }; handleChange = (e) => { this.setState({ [e.target.name]: e.target.value }); } handleSubmit = async (e) => { e.preventDefault(); if (this.state.isMessageSent) { this.setState({ errorMessage: 'You have already sent a message.', }); return; } const urlRegex = /(https?:\/\/\S+)/g; const imageRegex = /!\[.*]\(.*\)/g; if (urlRegex.test(this.state.message) || imageRegex.test(this.state.message)) { this.setState({ errorMessage: 'Links and images are not allowed.', }); return; } try { const messageHtml = marked(DOMPurify.sanitize(this.state.message)); const { isMessageSent, errorMessage, ...messageData } = this.state; // Exclude isMessageSent from the data await createMessage({ ...messageData, message: messageHtml }); this.setState({ name: '', website: '', message: '', isMessageSent: true, errorMessage: '', }); if (this.props.onMessageSent) { this.props.onMessageSent(); } } catch (error) { this.setState({ errorMessage: `There was an error submitting your message.
Details: ${error}
Check the console for more details.`, isMessageSent: false, }); } } render() { return (

Submit Message

{this.state.errorMessage &&

} {this.state.isMessageSent && !this.state.errorMessage &&

Sent successfully!

}
); } } export default GuestbookForm;