import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { ContentSwitcher, Switch } from '@carbon/react'; import { useField } from 'formik'; import { ExtensionSlot, useConfig } from '@openmrs/esm-framework'; import { type RegistrationConfig } from '../../../config-schema'; import { usePatientRegistrationContext } from '../../patient-registration-context'; import { Input } from '../../input/basic-input/input/input.component'; import styles from '../field.scss'; export const unidentifiedPatientAttributeTypeUuid = '8b56eac7-5c76-4b9c-8c6f-1deab8d3fc47'; const containsNoNumbers = /^([^0-9]*)$/; function checkNumber(value: string) { if (!containsNoNumbers.test(value)) { return 'numberInNameDubious'; } return undefined; } export const NameField = () => { const { t } = useTranslation(); const { setCapturePhotoProps, currentPhoto, setFieldValue, setFieldTouched } = usePatientRegistrationContext(); const { fieldConfigurations: { name: { displayCapturePhoto, allowUnidentifiedPatients, defaultUnknownGivenName, defaultUnknownFamilyName, displayMiddleName, displayReverseFieldOrder, }, }, } = useConfig(); const [{ value: isPatientUnknownValue }, , { setValue: setUnknownPatient }] = useField( `attributes.${unidentifiedPatientAttributeTypeUuid}`, ); const isPatientUnknown = isPatientUnknownValue === 'true'; const onCapturePhoto = useCallback( (dataUri: string, photoDateTime: string) => { if (setCapturePhotoProps) { setCapturePhotoProps({ imageData: dataUri, dateTime: photoDateTime, }); setFieldTouched('photo', true, false); } }, [setCapturePhotoProps, setFieldTouched], ); const toggleNameKnown = (e) => { if (e.name === 'known') { setFieldValue('givenName', ''); setFieldValue('familyName', ''); setUnknownPatient('false'); } else { setFieldValue('givenName', defaultUnknownGivenName); setFieldValue('familyName', defaultUnknownFamilyName); setUnknownPatient('true'); } setFieldTouched('givenName', true); setFieldTouched('familyName', true); setFieldTouched(`attributes.${unidentifiedPatientAttributeTypeUuid}`, true, false); }; const firstNameField = ( ); const middleNameField = displayMiddleName && ( ); const familyNameField = ( ); return (

{t('fullNameLabelText', 'Full Name')}

{displayCapturePhoto && ( )}
{(allowUnidentifiedPatients || isPatientUnknown) && ( <>
{t('patientNameKnown', "Patient's Name is Known?")}
{t('yes', 'Yes')} {t('no', 'No')} )} {!isPatientUnknown && (!displayReverseFieldOrder ? ( <> {firstNameField} {middleNameField} {familyNameField} ) : ( <> {familyNameField} {middleNameField} {firstNameField} ))}
); };