import React, { FC } from 'react'; import styles from './care-programs.scss'; import { Button, ButtonSet, Column, DatePicker, DatePickerInput, FormLabel, InlineLoading, Stack, TextInput, } from '@carbon/react'; import { Controller, useForm } from 'react-hook-form'; import { DefaultWorkspaceProps, ErrorState, LocationPicker, showSnackbar, useSession } from '@openmrs/esm-framework'; import { zodResolver } from '@hookform/resolvers/zod'; import { useTranslation } from 'react-i18next'; import { createProgramEnrollment, Enrollement, ProgramFormData, ProgramFormSchema, updateProgramEnrollment, useProgramDetail, } from './care-program.resource'; type ProgramFormProps = DefaultWorkspaceProps & { enrollment?: Enrollement; patientUuid: string; programUuid: string; onSubmitSuccess?: () => void; }; const ProgramForm: FC = ({ patientUuid, programUuid, enrollment, closeWorkspace, onSubmitSuccess, }) => { const getLocationUuid = () => { if (!enrollment?.location?.uuid && session?.sessionLocation?.uuid) { return session?.sessionLocation?.uuid; } return enrollment?.location?.uuid ?? null; }; const session = useSession(); const { t } = useTranslation(); const { isLoading: isLoadingProgram, error: programError, program } = useProgramDetail(programUuid); const form = useForm({ resolver: zodResolver(ProgramFormSchema), values: { dateEnrolled: new Date(), location: getLocationUuid() ?? '', dateCompleted: enrollment?.dateCompleted ? new Date(enrollment.dateCompleted) : undefined, }, }); const onSubmit = async (data: ProgramFormData) => { const abortController = new AbortController(); try { if (enrollment) { await updateProgramEnrollment(enrollment.uuid, data, abortController); } else { await createProgramEnrollment(program, patientUuid, data, abortController); } showSnackbar({ kind: 'success', title: 'Success', subtitle: t('programEnrollmentSuccessful', 'Program enrollment successful'), }); closeWorkspace(); onSubmitSuccess?.(); } catch (e) { showSnackbar({ kind: 'error', title: 'Error', subtitle: e?.message }); console.error(e); } }; if (isLoadingProgram) { return ; } if (programError) { return ; } return (
( field.onChange(dates?.[0] ?? undefined)} invalid={!!error?.message} invalidText={error?.message}> )} /> ( field.onChange(dates?.[0] ?? undefined)} invalid={!!error?.message} invalidText={error?.message}> )} /> ( {t('enrollmentLocation', 'Enrollment location')} onChange(locationUuid)} /> )} />
); }; export default ProgramForm;