import z from 'zod'; import styles from './kvp-patient-peer-form.scss'; import { Button, ButtonSet, Column, ComboBox, DatePicker, DatePickerInput, Form, Stack, TextInput, } from '@carbon/react'; import { zodResolver } from '@hookform/resolvers/zod'; import { ConfigObject, DefaultWorkspaceProps, showSnackbar, useConfig } from '@openmrs/esm-framework'; import toUpper from 'lodash/toUpper'; import React, { FC } from 'react'; import { Controller, useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { extractNameString, saveRelationship, usePatientActivePeerEducator, usePeerEducators, usePerson, } from './kvp-program-actions.resource'; export const formSchema = z.object({ personA: z.string().uuid('Invalid person'), personB: z.string().uuid('Invalid person').optional(), relationshipType: z.string().uuid(), startDate: z.date({ coerce: true }), endDate: z.date({ coerce: true }).optional(), }); type FormType = z.infer; type KvpPeerLinkageFormProps = DefaultWorkspaceProps & { patientUuid: string }; const KvpPeerLinkageForm: FC = ({ closeWorkspace, patientUuid }) => { const { data } = usePeerEducators(); const { isLoading, person } = usePerson(patientUuid); const { caseManagerRelationshipType } = useConfig(); const { mutate } = usePatientActivePeerEducator(patientUuid); const { t } = useTranslation(); const caseManagers = data?.data.results.map((manager) => ({ id: manager.person.uuid, text: manager.display, })) || []; const form = useForm({ mode: 'all', defaultValues: { personA: patientUuid, personB: '', relationshipType: caseManagerRelationshipType, }, resolver: zodResolver(formSchema), }); const onSubmit = async (values: FormType) => { try { await saveRelationship(values); showSnackbar({ kind: 'success', title: t('success', 'Success'), subtitle: t('caseSavedSuccesfully', 'Case saved successfully'), isLowContrast: true, }); mutate(); closeWorkspace(); } catch (error) { showSnackbar({ kind: 'error', title: t('error', 'Error'), subtitle: t('errorAddingCase', 'Error Adding patient case'), isLowContrast: true, }); } }; return (
( field.onChange(date)} ref={undefined} invalid={!!error?.message} invalidText={error?.message}> )} /> ( field.onChange(date)} invalid={!!error?.message} invalidText={error?.message}> )} /> { return ( toUpper(extractNameString(item ? item.text : ''))} onChange={(e) => { field.onChange(e.selectedItem?.id); }} selectedItem={caseManagers.find((manager) => manager.id === field.value)} invalid={!!fieldState.error} invalidText={fieldState.error?.message} /> ); }} />
); }; export default KvpPeerLinkageForm;