import { h, 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));
await createMessage({ ...this.state, 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 (
Sent successfully!
}