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 24x 12x 12x 12x 12x 4x 1x 3x 4x 4x 12x | 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>
	)
}
  |