import React, { useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, ButtonSet, Form, Row } from '@carbon/react'; import { ExtensionSlot, useLayoutType, type Workspace2DefinitionProps, type Visit } from '@openmrs/esm-framework'; import { useMutateQueueEntries } from '../../hooks/useQueueEntries'; import QueueFields from '../queue-fields/queue-fields.component'; import styles from './existing-visit-form.scss'; interface ExistingVisitFormProps { closeWorkspace: Workspace2DefinitionProps['closeWorkspace']; visit: Visit; } /** * This is the form that appears when clicking on a search result in the "Add patient to queue" workspace, * when the patient already has an active visit. */ const ExistingVisitForm: React.FC = ({ visit, closeWorkspace }) => { const { t } = useTranslation(); const isTablet = useLayoutType() === 'tablet'; const [isSubmitting, setIsSubmitting] = useState(false); const { mutateQueueEntries } = useMutateQueueEntries(); const [callback, setCallback] = useState<{ submitQueueEntry: (visit: Visit) => Promise; } | null>(null); const handleSubmit = useCallback( (event: React.FormEvent) => { event.preventDefault(); if (!callback) { return; } setIsSubmitting(true); callback .submitQueueEntry(visit) .then(() => { closeWorkspace({ closeWindow: true, discardUnsavedChanges: true }); mutateQueueEntries(); }) .finally(() => { setIsSubmitting(false); }); }, [closeWorkspace, callback, visit, mutateQueueEntries], ); const handleSetOnSubmit = useCallback((onSubmit: (visit: Visit) => Promise) => { setCallback({ submitQueueEntry: onSubmit }); }, []); if (!visit) { return null; } return ( <> {isTablet && ( )}
); }; export default ExistingVisitForm;