From 71a16388548b7d6c70acc1d9c2464869349c6612 Mon Sep 17 00:00:00 2001 From: CynthiaKamau Date: Tue, 5 Mar 2024 09:56:00 +0300 Subject: [PATCH] O3-2857 Add visit actions extension in visits (#1692) * O3-2857 Add visit actions extension in visits * code review --------- Co-authored-by: Jamie Arodi <51090527+arodidev@users.noreply.github.com> --- packages/esm-patient-chart-app/src/index.ts | 5 + .../esm-patient-chart-app/src/routes.json | 8 + .../active-visit-buttons.scss | 7 + .../active-visit-buttons.tsx | 170 ++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 packages/esm-patient-chart-app/src/visit/visits-widget/active-visit-buttons/active-visit-buttons.scss create mode 100644 packages/esm-patient-chart-app/src/visit/visits-widget/active-visit-buttons/active-visit-buttons.tsx diff --git a/packages/esm-patient-chart-app/src/index.ts b/packages/esm-patient-chart-app/src/index.ts index 9b51c345a7..e9a9adaf59 100644 --- a/packages/esm-patient-chart-app/src/index.ts +++ b/packages/esm-patient-chart-app/src/index.ts @@ -263,3 +263,8 @@ export const deleteVisitActionButton = getAsyncLifecycle( () => import('./visit/visit-action-items/delete-visit-action-item.component'), { featureName: 'delete-visit', moduleName }, ); + +export const activeVisitActionsComponent = getAsyncLifecycle( + () => import('./visit/visits-widget/active-visit-buttons/active-visit-buttons'), + { featureName: 'active-visit-actions', moduleName }, +); diff --git a/packages/esm-patient-chart-app/src/routes.json b/packages/esm-patient-chart-app/src/routes.json index a48b7bdca1..09501949d1 100644 --- a/packages/esm-patient-chart-app/src/routes.json +++ b/packages/esm-patient-chart-app/src/routes.json @@ -234,6 +234,14 @@ "online": true, "offline": true, "order": 1 + }, + { + "name": "active-visit-action-button", + "slot": "active-visit-actions", + "component": "activeVisitActionsComponent", + "online": true, + "offline": true, + "order": 1 } ], "pages": [ diff --git a/packages/esm-patient-chart-app/src/visit/visits-widget/active-visit-buttons/active-visit-buttons.scss b/packages/esm-patient-chart-app/src/visit/visits-widget/active-visit-buttons/active-visit-buttons.scss new file mode 100644 index 0000000000..b8e356ebc0 --- /dev/null +++ b/packages/esm-patient-chart-app/src/visit/visits-widget/active-visit-buttons/active-visit-buttons.scss @@ -0,0 +1,7 @@ +@use '@carbon/styles/scss/spacing'; + +.buttonsContainer { + display: flex; + gap: spacing.$spacing-02; + margin: spacing.$spacing-02; +} \ No newline at end of file diff --git a/packages/esm-patient-chart-app/src/visit/visits-widget/active-visit-buttons/active-visit-buttons.tsx b/packages/esm-patient-chart-app/src/visit/visits-widget/active-visit-buttons/active-visit-buttons.tsx new file mode 100644 index 0000000000..a22570bef4 --- /dev/null +++ b/packages/esm-patient-chart-app/src/visit/visits-widget/active-visit-buttons/active-visit-buttons.tsx @@ -0,0 +1,170 @@ +import { launchPatientWorkspace, useLaunchWorkspaceRequiringVisit } from '@openmrs/esm-patient-common-lib'; +import React, { useCallback } from 'react'; +import styles from './active-visit-buttons.scss'; +import { useTranslation } from 'react-i18next'; +import { Button, MenuButton, MenuItem } from '@carbon/react'; +import { Add } from '@carbon/react/icons'; +import type { Visit } from '@openmrs/esm-framework'; +import { showModal, useLayoutType } from '@openmrs/esm-framework'; + +export interface ActiveVisitActionsInterface { + visit: Visit; + patientUuid: string; +} +const ActiveVisitActions: React.FC = ({ visit, patientUuid }) => { + const { t } = useTranslation(); + const layout = useLayoutType(); + const isTablet = layout === 'tablet'; + const isMobile = layout === 'phone'; + + return ( +
+ {isTablet || isMobile ? ( +
+ + + + + + + + + + + +
+ ) : ( +
+ + + + + + + + + + + + +
+ )} +
+ ); +}; + +export default ActiveVisitActions; + +interface VisitActionsProps { + patientUuid: string; +} +const VisitActionsComponent: React.FC = ({ patientUuid }) => { + const { t } = useTranslation(); + + const openModal = useCallback( + (modalName) => { + const dispose = showModal(modalName, { + closeModal: () => dispose(), + patientUuid, + }); + }, + [patientUuid], + ); + + return ( + + openModal('end-visit-dialog')} + renderIcon={Add} + /> + openModal('cancel-visit-dialog')} + renderIcon={Add} + /> + openModal('delete-visit-dialog')} + renderIcon={Add} + /> + + ); +};