import Button from '@components/atoms/buttons/button'; import Form from '@components/atoms/forms/form'; import Spinner from '@components/atoms/loaders/spinner'; import LabelledField from '@components/molecules/forms/labelled-field'; import { FC, ReactNode, useState } from 'react'; import { useIntl } from 'react-intl'; import styles from './contact-form.module.scss'; export type ContactFormProps = { /** * Set additional classnames to the form wrapper. */ className?: string; /** * Pass a component to print a success/error message. */ Notice?: ReactNode; /** * A callback function to send mail. It takes a function as parameter to * reset the form. */ sendMail: (reset: () => void) => void; }; /** * ContactForm component * * Render a contact form. */ const ContactForm: FC = ({ className = '', Notice, sendMail, }) => { const intl = useIntl(); const [name, setName] = useState(''); const [email, setEmail] = useState(''); const [object, setObject] = useState(''); const [message, setMessage] = useState(''); const [isSubmitting, setIsSubmitting] = useState(false); /** * Reset all the form fields. */ const resetForm = () => { setName(''); setEmail(''); setObject(''); setMessage(''); setIsSubmitting(false); }; const formName = intl.formatMessage({ defaultMessage: 'Contact form', description: 'ContactForm: form accessible name', id: 'HFdzae', }); const nameLabel = intl.formatMessage({ defaultMessage: 'Name:', description: 'ContactForm: name label', id: '1dCuCx', }); const emailLabel = intl.formatMessage({ defaultMessage: 'Email:', description: 'ContactForm: email label', id: 'w4B5PA', }); const objectLabel = intl.formatMessage({ defaultMessage: 'Object:', description: 'ContactForm: object label', id: 's8/tyz', }); const messageLabel = intl.formatMessage({ defaultMessage: 'Message:', description: 'ContactForm: message label', id: 'yN5P+m', }); const submitHandler = () => { setIsSubmitting(true); sendMail(resetForm); }; return (
{isSubmitting && ( )} {Notice} ); }; export default ContactForm;