Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | 20x 22x 11x 11x 11x 11x 4x 1x 3x 4x 3x 11x | import { nanoid } from '@reduxjs/toolkit'
import { Form, Formik } from 'formik'
import { ObjectSchema, object, string } from 'yup'
import { useAppDispatch, useAppSelector } from '../../../../store/hooks'
import { addOrganisationHeir, sendLastWillState, updateOrganisationHeir } from '../../../../store/lastwill/lastwill'
import { Organisation, OrganisationFormPayload } from '../../../../types/lastWill'
import { Button } from '../../../ButtonsAndLinks/Button/Button'
import { TextInput } from '../../../Form/TextInput/TextInput'
import { Headline } from '../../../Headline/Headline'
import { Modal } from '../../ModalBase/Modal'
import { NAME_REQUIRED_ERROR } from '../../../../../content/validation'
type HeirsOrganisationModalProps = {
/** Modal Open/Close State. */
isOpenModal: boolean
/** Function that gets called when close Modal. Should reset editPerson and update modal state. */
onClose: () => void
/** When defined we are in edit mode. */
editOrganisation: Organisation | null
}
export const HeirsOrganisationModal: React.FC<HeirsOrganisationModalProps> = ({
isOpenModal,
onClose,
editOrganisation,
}) => {
const isLoading = useAppSelector((state) => state.lastWill.isLoading)
const dispatch = useAppDispatch()
const initialFormValues: OrganisationFormPayload = {
id: editOrganisation?.id ?? nanoid(),
name: editOrganisation?.name ?? '',
street: editOrganisation?.address?.street ?? '',
houseNumber: editOrganisation?.address?.houseNumber ?? '',
zipCode: editOrganisation?.address?.zipCode ?? '',
city: editOrganisation?.address?.city ?? '',
}
const validationSchema: ObjectSchema<OrganisationFormPayload> = object({
id: string().required(),
name: string().required(NAME_REQUIRED_ERROR),
street: string(),
houseNumber: string(),
zipCode: string(),
city: string(),
})
const onSubmit = async (values: OrganisationFormPayload) => {
if (editOrganisation) {
dispatch(updateOrganisationHeir(values))
} else {
dispatch(addOrganisationHeir(values))
}
await dispatch(sendLastWillState())
// Close and reset Modal
onClose()
}
return (
<Modal open={isOpenModal} headline="Organisation hinzufügen" onClose={onClose}>
<Formik initialValues={initialFormValues} validationSchema={validationSchema} onSubmit={onSubmit}>
<Form className="mt-2 md:mt-3">
{/* Persönliche Daten */}
<div className="mb-2 md:mb-4">
{/* Name */}
<div className="mb-4">
<TextInput name="name" inputRequired labelText="Name" placeholder="Name" />
</div>
{/* Adress */}
<Headline level={3} size="text-base">
Adresse
</Headline>
<div className="flex gap-x-3">
<div className="w-2/3">
<TextInput name="street" labelText="Straße" placeholder="Straße" autoComplete="street-address" />
</div>
<div className="w-1/3">
<TextInput name="houseNumber" labelText="Hausnummer" placeholder="Hausnummer" />
</div>
</div>
<div className="flex gap-x-3">
<div className="w-1/3">
<TextInput
name="zipCode"
labelText="Postleitzahl"
placeholder="Postleitzahl"
autoComplete="postal-code"
/>
</div>
<div className="w-2/3">
<TextInput name="city" labelText="Stadt" placeholder="Stadt" />
</div>
</div>
</div>
{/* Buttons */}
<div className="flex flex-col items-center justify-between md:flex-row">
{/* Cancel Button */}
<Button
datacy="button-cancel"
type="button"
onClick={onClose}
className="order-1 md:order-none"
kind="tertiary"
>
Abbrechen
</Button>
{/* Submit Button */}
<Button datacy="button-submit" type="submit" loading={isLoading} className="mb-4 md:mb-0" icon="check">
Speichern
</Button>
</div>
</Form>
</Formik>
</Modal>
)
}
|