import { Button, Form, Input, Modal, notification, Select } from 'antd'; import { useParams } from 'react-router'; import './RegForm.scss'; import { addVisitor, submitInvitation } from '../api'; import { arrayToString } from './utils'; import { Visitor } from '../model/visitor'; import { FormattedMessage, useIntl } from 'react-intl'; import { useState } from 'react'; import { withRouter } from 'react-router-dom'; const { Option } = Select; interface ParamTypes { id: string; } interface FormValues { visitors: Visitor[]; } const preferences = ['vegan', 'vegetarian', 'everything'].map((preference) => { return ( ); }); const allergies = ['lactose', 'dairy', 'gluten', 'wheat'].map((allergy) => { return ( ); }); const welcomeDrinks = ['alcoholBubbles', 'alcoholFreeBubbles'].map( (welcomeDrink) => { return ( ); } ); const RegForm = ({ history }: any) => { const { id } = useParams(); const intl = useIntl(); const [visitorCount, setVisitorCount] = useState(0); const [isSubmitModalVisible, setIsSubmitModalVisible] = useState(false); const [isDeclineModalVisible, setIsDeclineModalVisible] = useState(false); const [isDeclined, setIsDeclined] = useState(false); var decodedInvitationId = atob(id); const onSubmit = (values: FormValues) => { let responseCode: string = ''; values.visitors = values.visitors ?? []; values.visitors.map((visitor) => { addVisitor({ ...visitor, allergies: visitor.allergies ? arrayToString(visitor.allergies) : '', preferences: visitor.preferences ?? '', welcomeDrink: visitor.welcomeDrink ?? '', invitationId: (visitor.invitationId = decodedInvitationId), }).then((res) => (responseCode = res)); }); submitInvitation(decodedInvitationId).then((res) => (responseCode = res)); responseCode !== 'success' ? showError() : history.push('/confirmation'); }; const onDecline = () => { let responseCode: string = ''; submitInvitation(decodedInvitationId).then((res) => (responseCode = res)); responseCode !== 'success' ? showError() : history.push('/confirmation'); }; const onSubmitOk = () => { form.submit(); setIsSubmitModalVisible(false); }; const onSubmitCancel = () => { setIsSubmitModalVisible(false); }; const onDeclineOk = () => { form.submit(); setIsDeclineModalVisible(false); }; const onDeclineCancel = () => { setIsDeclineModalVisible(false); }; const showError = () => { notification.error({ message: intl.formatMessage({ id: 'registration.error.title' }), description: intl.formatMessage({ id: 'registration.error.text' }), duration: 0, placement: 'bottomLeft', }); }; const [form] = Form.useForm(); return ( <> {(fields, { add, remove }) => ( <> {fields.map((field) => ( {allergies} {preferences} {welcomeDrinks} { remove(field.name); setVisitorCount(visitorCount - 1); }} shape='round' size='large' > ))} { add(); setVisitorCount(visitorCount + 1); }} shape='round' > > )} {visitorCount == 0 ? ( { setIsDeclined(true); setIsDeclineModalVisible(true); }} type='dashed' shape='round' > ) : ( setIsSubmitModalVisible(true)} size='large' shape='round' > )} > ); }; export default withRouter(RegForm);