From b317d1d2ed02471f0f594481b4d974003ed24184 Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Wed, 15 Jan 2025 17:18:02 +0300 Subject: [PATCH 1/9] renamed labels in claims form --- .../src/claims/dashboard/form/claims-form.component.tsx | 3 +-- .../esm-billing-app/src/claims/metrics/metrics.component.tsx | 4 ++-- packages/esm-billing-app/translations/en.json | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/esm-billing-app/src/claims/dashboard/form/claims-form.component.tsx b/packages/esm-billing-app/src/claims/dashboard/form/claims-form.component.tsx index 43b8dbe67..326f1a8cf 100644 --- a/packages/esm-billing-app/src/claims/dashboard/form/claims-form.component.tsx +++ b/packages/esm-billing-app/src/claims/dashboard/form/claims-form.component.tsx @@ -200,7 +200,6 @@ const ClaimsForm: React.FC = ({ bill, selectedLineItems }) => { ); } - return (
@@ -333,7 +332,7 @@ const ClaimsForm: React.FC = ({ bill, selectedLineItems }) => { invalid={form.formState.errors[field.name]?.message} invalidText={form.formState.errors[field.name]?.message} id="diagnoses" - titleText={t('diagnosis', 'Diagnosis')} + titleText={t('finalDiagnosis', 'Final Diagnosis')} selectedItems={field.value} label="Choose option" items={diagnoses.map((r) => r.id)} diff --git a/packages/esm-billing-app/src/claims/metrics/metrics.component.tsx b/packages/esm-billing-app/src/claims/metrics/metrics.component.tsx index 8ed32de17..b0556c40c 100644 --- a/packages/esm-billing-app/src/claims/metrics/metrics.component.tsx +++ b/packages/esm-billing-app/src/claims/metrics/metrics.component.tsx @@ -35,9 +35,9 @@ const MainMetrics: React.FC = ({ selectedLineItems, bill }) => headerLabel={t('claimsItems', 'Claims Items')} /> diff --git a/packages/esm-billing-app/translations/en.json b/packages/esm-billing-app/translations/en.json index dec4a7e96..1744a06fb 100644 --- a/packages/esm-billing-app/translations/en.json +++ b/packages/esm-billing-app/translations/en.json @@ -76,7 +76,7 @@ "createClaimError": "Create Claim error", "created": "Created", "creating": "Creating", - "date": "Date of Claimed", + "date": "Date of Claim", "dateCreated": "Date Created", "delete": "Delete", "deleteBill": "Delete Bill", From 5c62c268850a0e4aaa078673ae73c08ebd1806e5 Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Wed, 15 Jan 2025 19:20:50 +0300 Subject: [PATCH 2/9] Added facility setup page --- .../facility-info.component.tsx | 82 +++++++++++++++++ .../facility-setup/facility-info.scss | 42 +++++++++ .../facility-setup.component.tsx | 40 +++++++++ .../facility-setup/facility-setup.scss | 38 ++++++++ .../facility-setup-header.component.tsx | 42 +++++++++ .../header/facility-setup-header.scss | 90 +++++++++++++++++++ .../components/hook/useFrontendModules.tsx | 13 +++ .../src/components/hook/useSystemSetting.tsx | 34 +++++++ .../operation-log-table.component.tsx | 2 +- packages/esm-admin-app/src/index.ts | 4 + packages/esm-admin-app/src/root.component.tsx | 2 + packages/esm-admin-app/src/routes.json | 5 ++ packages/esm-admin-app/src/types/index.ts | 12 +++ packages/esm-billing-app/translations/en.json | 3 +- 14 files changed, 406 insertions(+), 3 deletions(-) create mode 100644 packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx create mode 100644 packages/esm-admin-app/src/components/facility-setup/facility-info.scss create mode 100644 packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx create mode 100644 packages/esm-admin-app/src/components/facility-setup/facility-setup.scss create mode 100644 packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.component.tsx create mode 100644 packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.scss create mode 100644 packages/esm-admin-app/src/components/hook/useFrontendModules.tsx create mode 100644 packages/esm-admin-app/src/components/hook/useSystemSetting.tsx diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx new file mode 100644 index 000000000..02c4a44b6 --- /dev/null +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx @@ -0,0 +1,82 @@ +import React from 'react'; +import { + StructuredListWrapper, + StructuredListHead, + StructuredListRow, + StructuredListCell, + StructuredListBody, +} from '@carbon/react'; +import { useFrontendModules } from '../hook/useFrontendModules'; +import { useDefaultFacility, useSystemSetting } from '../hook/useSystemSetting'; +import styles from './facility-info.scss'; + +const FacilityInfo: React.FC = () => { + const installedModules = useFrontendModules(); + const { defaultFacility, error, isLoading: defaultFacilityLoading } = useDefaultFacility(); + const { mflCodeResource } = useSystemSetting('facility.mflcode'); + const mflCode = mflCodeResource ? `(${mflCodeResource?.value ?? ''})` : ''; + let facilityData = { + mflCode: mflCode || 'N/A', + shaStatus: 'N/A', + name: defaultFacility?.display || 'N/A', + kephLevel: 'N/A', + operationalStatus: defaultFacility?.operationalStatus || 'N/A', + shaContracted: defaultFacility?.shaContracted || 'N/A', + expiryDate: defaultFacility?.shaFacilityExpiryDate || 'N/A', + location1: 'N/A', + location2: 'N/A', + }; + return ( +
+ + + + Property + Value + + + + + + Facility Name + {facilityData.name || 'N/A'} + + + Facility KMHFR Code + {facilityData.mflCode || 'N/A'} + + + Keph Level + {facilityData.kephLevel || 'N/A'} + + + Operational Status + {facilityData.operationalStatus || 'N/A'} + + + SHA Status + {facilityData.shaStatus || 'N/A'} + + + SHA Contracted + {facilityData.shaContracted || 'N/A'} + + + SHA Expiry Date + {facilityData.expiryDate || 'N/A'} + + + Location 1 + {facilityData.location1 || 'N/A'} + + + Location 2 + {facilityData.location2 || 'N/A'} + + + +
+ ); +}; + +export default FacilityInfo; diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss new file mode 100644 index 000000000..caa326fc4 --- /dev/null +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss @@ -0,0 +1,42 @@ +@use '@carbon/layout'; +@use '@carbon/type'; +@use '@carbon/colors'; + +.omrs-main-content { + background-color: white; +} + +.bottomBorder{ + margin-bottom: layout.$spacing-05; +} + +.btnLayer { + display: flex; + padding-top: layout.$spacing-05; + padding-right: layout.$spacing-05; + padding-bottom: layout.$spacing-05; + margin-top: layout.$spacing-05; + flex-direction: row; + justify-content: flex-end; + background-color: white; + width: 100%; +} + +.tableLayer { + padding-left: layout.$spacing-05; + padding-right: layout.$spacing-05; + background: white; + padding-top: layout.$spacing-01; +} + +.loading { + display: flex; + padding-top: layout.$spacing-05; + padding-right: layout.$spacing-05; + padding-bottom: layout.$spacing-05; + margin-top: layout.$spacing-05; + flex-direction: row; + justify-content: flex-end; + background-color: white; + width: 100%; +} diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx b/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx new file mode 100644 index 000000000..ee5d00b6b --- /dev/null +++ b/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx @@ -0,0 +1,40 @@ +import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Layer, Button, MenuItem, InlineLoading } from '@carbon/react'; +import styles from './facility-setup.scss'; +import { showModal, showSnackbar } from '@openmrs/esm-framework'; +import FacilitySetupHeader from './header/facility-setup-header.component'; +import FrontendModule from './facility-info.component'; + +const FacilitySetup: React.FC = () => { + const { t } = useTranslation(); + const [isLoading, setIsLoading] = useState(false); + const [logData, setLogData] = useState>([]); + const [isRefreshing, setIsRefreshing] = useState(false); + + return ( +
+ + + {isLoading ? ( + + ) : ( + + )} + + + {/* */} + + +
+ ); +}; + +export default FacilitySetup; diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-setup.scss b/packages/esm-admin-app/src/components/facility-setup/facility-setup.scss new file mode 100644 index 000000000..4407b7dd4 --- /dev/null +++ b/packages/esm-admin-app/src/components/facility-setup/facility-setup.scss @@ -0,0 +1,38 @@ +@use '@carbon/layout'; +@use '@carbon/type'; +@use '@carbon/colors'; + +.omrs-main-content { + background-color: white; +} + +.btnLayer { + display: flex; + padding-top: layout.$spacing-05; + padding-right: layout.$spacing-05; + padding-bottom: layout.$spacing-05; + margin-top: layout.$spacing-05; + flex-direction: row; + justify-content: flex-end; + background-color: white; + width: 100%; +} + +.tableLayer { + padding-left: layout.$spacing-05; + padding-right: layout.$spacing-05; + background: white; + padding-top: layout.$spacing-01; +} + +.loading { + display: flex; + padding-top: layout.$spacing-05; + padding-right: layout.$spacing-05; + padding-bottom: layout.$spacing-05; + margin-top: layout.$spacing-05; + flex-direction: row; + justify-content: flex-end; + background-color: white; + width: 100%; +} diff --git a/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.component.tsx b/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.component.tsx new file mode 100644 index 000000000..d35d03f41 --- /dev/null +++ b/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.component.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Calendar, Location, UserFollow } from '@carbon/react/icons'; +import { formatDate, useSession, PageHeader, ServiceQueuesPictogram } from '@openmrs/esm-framework'; +import styles from './facility-setup-header.scss'; + +interface HeaderProps { + title: string; +} + +const FacilitySetupHeader: React.FC = ({ title }) => { + const { t } = useTranslation(); + const session = useSession(); + const location = session?.sessionLocation?.display; + + return ( +
+
+ +
+

{t('facility', 'Facility')}

+

{title}

+
+
+
+
+

{session?.user?.person?.display}

+ +
+
+ + {location} + · + + {formatDate(new Date(), { mode: 'standard' })} +
+
+
+ ); +}; + +export default FacilitySetupHeader; diff --git a/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.scss b/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.scss new file mode 100644 index 000000000..7fe6873f5 --- /dev/null +++ b/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.scss @@ -0,0 +1,90 @@ +@use '@carbon/layout'; +@use '@carbon/type'; +@use '@openmrs/esm-styleguide/src/vars' as *; + +.header { + @include type.type-style('body-compact-02'); + color: $text-02; + height: layout.$spacing-12; + background-color: $ui-02; + border-bottom: 1px solid $ui-03; + display: flex; + justify-content: space-between; + padding: layout.$spacing-05; +} + +.leftJustifiedItems { + display: flex; + flex-direction: row; + align-items: center; + cursor: pointer; + align-items: center; +} + +.rightJustifiedItems { + @include type.type-style('body-compact-02'); + color: $text-02; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.pageName { + @include type.type-style('heading-04'); +} + +.pageLabels { + margin: layout.$spacing-05; + + p:first-of-type { + margin-bottom: layout.$spacing-02; + } +} + +.dateAndLocation { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.userContainer { + display: flex; + justify-content: flex-end; + gap: layout.$spacing-05; +} + +.value { + margin-left: layout.$spacing-02; +} + +.middot { + margin: 0 layout.$spacing-03; +} + +.view { + @include type.type-style('label-01'); +} + +// Overriding styles for RTL support +html[dir='rtl'] { + .date-and-location { + & > svg { + order: -1; + } + & > span:nth-child(2) { + order: -2; + } + } +} + +.userIcon { + fill: $ui-05; + margin: layout.$spacing-01; +} + +.svgContainer svg { + width: layout.$spacing-10; + height: layout.$spacing-10; + margin-right: layout.$spacing-06; + fill: var(--brand-03); +} diff --git a/packages/esm-admin-app/src/components/hook/useFrontendModules.tsx b/packages/esm-admin-app/src/components/hook/useFrontendModules.tsx new file mode 100644 index 000000000..c95ef4285 --- /dev/null +++ b/packages/esm-admin-app/src/components/hook/useFrontendModules.tsx @@ -0,0 +1,13 @@ +import { useMemo } from 'react'; +import { FrontendModule } from '../../types'; + +export function useFrontendModules() { + return useMemo>(() => { + return (window.installedModules ?? []) + .filter((module) => Boolean(module) && Boolean(module[1])) + .map((module) => ({ + version: module[1].version, + name: module[0].substring(module[0].indexOf('/') + 1), + })); + }, [window.installedModules]); +} diff --git a/packages/esm-admin-app/src/components/hook/useSystemSetting.tsx b/packages/esm-admin-app/src/components/hook/useSystemSetting.tsx new file mode 100644 index 000000000..48ff8ee4f --- /dev/null +++ b/packages/esm-admin-app/src/components/hook/useSystemSetting.tsx @@ -0,0 +1,34 @@ +import { FetchResponse, OpenmrsResource, openmrsFetch, restBaseUrl, useSession } from '@openmrs/esm-framework'; +import useSWRImmutable from 'swr/immutable'; +import useSWR from 'swr'; +import { DefaultFacility } from '../../types'; + +export function useSystemSetting(key: string) { + const { data, isLoading } = useSWRImmutable<{ data: { results: Array } }>( + `/ws/rest/v1/systemsetting?q=${key}&v=full`, + openmrsFetch, + { + revalidateOnFocus: false, + revalidateOnReconnect: false, + }, + ); + + const mflCodeResource = data?.data?.results?.find((resource) => resource.property === 'facility.mflcode'); + + return { mflCodeResource, isLoading }; +} + +export function useDefaultFacility() { + const { authenticated } = useSession(); + const url = `${restBaseUrl}/kenyaemr/default-facility`; + const { data, isLoading, error } = useSWR>( + authenticated ? url : null, + openmrsFetch, + {}, + ); + return { + isLoading, + defaultFacility: data?.data, + error, + }; +} diff --git a/packages/esm-admin-app/src/components/logs-table/operation-log-table.component.tsx b/packages/esm-admin-app/src/components/logs-table/operation-log-table.component.tsx index f572b80e0..33e1fb5fe 100644 --- a/packages/esm-admin-app/src/components/logs-table/operation-log-table.component.tsx +++ b/packages/esm-admin-app/src/components/logs-table/operation-log-table.component.tsx @@ -49,7 +49,7 @@ const LogTable: React.FC = ({ logData, isLoading }) => { return (
- +
{isLoading && logData.length === 0 ? ( { const spaBasePath = window.spaBase; @@ -26,6 +27,7 @@ const Root: React.FC = () => { } /> } /> } /> + } /> diff --git a/packages/esm-admin-app/src/routes.json b/packages/esm-admin-app/src/routes.json index ac04a8b03..64b48e9a0 100755 --- a/packages/esm-admin-app/src/routes.json +++ b/packages/esm-admin-app/src/routes.json @@ -18,6 +18,11 @@ "component": "etlAdministrationLeftPannelLink", "name": "etl-administration-left-panel-link", "slot": "admin-left-panel-slot" + }, + { + "component": "facilitySetupLeftPanelLink", + "name": "facility-setup-left-panel-link", + "slot": "admin-left-panel-slot" } ], "workspaces": [ diff --git a/packages/esm-admin-app/src/types/index.ts b/packages/esm-admin-app/src/types/index.ts index ac81cd6dd..a96cc1147 100644 --- a/packages/esm-admin-app/src/types/index.ts +++ b/packages/esm-admin-app/src/types/index.ts @@ -10,3 +10,15 @@ export interface DashboardConfig { slot: string; title: string; } +export interface FrontendModule { + name: string; + version?: string; +} +export interface DefaultFacility { + locationId: number; + uuid: string; + display: string; + operationalStatus: string; + shaContracted: string; + shaFacilityExpiryDate: string; +} diff --git a/packages/esm-billing-app/translations/en.json b/packages/esm-billing-app/translations/en.json index 1744a06fb..ef6aee765 100644 --- a/packages/esm-billing-app/translations/en.json +++ b/packages/esm-billing-app/translations/en.json @@ -82,7 +82,6 @@ "deleteBill": "Delete Bill", "description": "Description", "diagnoses": "Diagnoses", - "diagnosis": "Diagnosis", "discard": "Discard", "discardClaim": "Discard Claim", "discount": "Discount", @@ -120,13 +119,13 @@ "errorOnLine": "Error on line", "errorRetrievingHIESubscription": "Error retrieving HIE subscription", "exemptionCategory": "Exemption category", - "exemptionSchema": "Exemption Schema", "facility": "Facility", "failedBillPayment": "Bill payment failed", "failure": "Error loading intervensions", "filterBy": "Filter by", "filterByTimesheet": "Filter by timesheet", "filterTable": "Filter table", + "finalDiagnosis": "Final Diagnosis", "formTitle": "Fill in the form details", "generatedMessage": "The invoice has been electronically generated and is a valid document. It was created by {{userName}} on {{date}} at {{time}}", "guaranteeId": "Guarantee Id", From 0d45907e3ee3bc2dafe71b2975389f3a1a709382 Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Thu, 16 Jan 2025 17:30:20 +0300 Subject: [PATCH 3/9] (fix) completed frontend work for facility setup page --- .../facility-info.component.tsx | 167 ++++++++++-------- .../facility-setup/facility-info.scss | 42 ++++- .../facility-setup.component.tsx | 49 ++--- .../facility-setup-header.component.tsx | 42 ----- .../header/facility-setup-header.scss | 90 ---------- .../header/header.component.tsx | 23 +++ .../facility-setup/header/header.scss | 19 ++ .../src/components/hook/useFacilityInfo.tsx | 21 +++ .../src/components/hook/useSystemSetting.tsx | 34 ---- packages/esm-admin-app/src/types/index.ts | 10 ++ packages/esm-admin-app/translations/en.json | 6 +- 11 files changed, 242 insertions(+), 261 deletions(-) delete mode 100644 packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.component.tsx delete mode 100644 packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.scss create mode 100644 packages/esm-admin-app/src/components/facility-setup/header/header.component.tsx create mode 100644 packages/esm-admin-app/src/components/facility-setup/header/header.scss create mode 100644 packages/esm-admin-app/src/components/hook/useFacilityInfo.tsx delete mode 100644 packages/esm-admin-app/src/components/hook/useSystemSetting.tsx diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx index 02c4a44b6..51e3e6527 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx @@ -1,80 +1,103 @@ -import React from 'react'; -import { - StructuredListWrapper, - StructuredListHead, - StructuredListRow, - StructuredListCell, - StructuredListBody, -} from '@carbon/react'; -import { useFrontendModules } from '../hook/useFrontendModules'; -import { useDefaultFacility, useSystemSetting } from '../hook/useSystemSetting'; +import React, { useEffect, useState } from 'react'; +import { Tile, Grid, Column, Layer, InlineLoading, Button } from '@carbon/react'; +import { useFacilityInfo } from '../hook/useFacilityInfo'; import styles from './facility-info.scss'; - +import { useTranslation } from 'react-i18next'; +import { showSnackbar } from '@openmrs/esm-framework'; +import { FacilityData } from '../../types'; const FacilityInfo: React.FC = () => { - const installedModules = useFrontendModules(); - const { defaultFacility, error, isLoading: defaultFacilityLoading } = useDefaultFacility(); - const { mflCodeResource } = useSystemSetting('facility.mflcode'); - const mflCode = mflCodeResource ? `(${mflCodeResource?.value ?? ''})` : ''; - let facilityData = { - mflCode: mflCode || 'N/A', - shaStatus: 'N/A', - name: defaultFacility?.display || 'N/A', - kephLevel: 'N/A', - operationalStatus: defaultFacility?.operationalStatus || 'N/A', - shaContracted: defaultFacility?.shaContracted || 'N/A', - expiryDate: defaultFacility?.shaFacilityExpiryDate || 'N/A', - location1: 'N/A', - location2: 'N/A', + const { t } = useTranslation(); + const { defaultFacility, isLoading: defaultFacilityLoading, error, refetch } = useFacilityInfo(); + + const [facilityData, setFacilityData] = useState(defaultFacility); + useEffect(() => { + setFacilityData(defaultFacility); + }, [defaultFacility]); + + const synchronizeFacilityData = async () => { + try { + // Trigger manual refetch + await refetch(); + showSnackbar({ + title: t('syncingHieSuccess', 'Synchronization Complete'), + kind: 'success', + isLowContrast: true, + }); + } catch (error) { + const errorMessage = error?.responseBody?.error?.message ?? 'An error occurred while synchronizing with HIE'; + showSnackbar({ + title: t('syncingHieError', 'Syncing with HIE Failed'), + subtitle: errorMessage, + kind: 'error', + isLowContrast: true, + }); + } }; + return ( -
- - - - Property - Value - - +
+
+ + {defaultFacilityLoading ? ( + + ) : ( + + )} + +
+ + + {/* General Info Column */} + + +

General Information

+
+
+

+ Facility Name: {facilityData?.display || 'N/A'} +

+

+ Facility KMHFR Code: {facilityData?.mflCode} +

+

+ Keph Level: {facilityData?.shaKephLevel} +

+

+ Operational Status: {facilityData?.operationalStatus} +

+
+
+
- - - Facility Name - {facilityData.name || 'N/A'} - - - Facility KMHFR Code - {facilityData.mflCode || 'N/A'} - - - Keph Level - {facilityData.kephLevel || 'N/A'} - - - Operational Status - {facilityData.operationalStatus || 'N/A'} - - - SHA Status - {facilityData.shaStatus || 'N/A'} - - - SHA Contracted - {facilityData.shaContracted || 'N/A'} - - - SHA Expiry Date - {facilityData.expiryDate || 'N/A'} - - - Location 1 - {facilityData.location1 || 'N/A'} - - - Location 2 - {facilityData.location2 || 'N/A'} - - - + {/* SHA Info Column */} + + + +

SHA Information

+
+
+

+ SHA Status: {facilityData?.shaStatus} +

+

+ SHA Contracted: {facilityData?.shaContracted} +

+

+ SHA Expiry Date: {facilityData?.shaFacilityExpiryDate} +

+
+
+
+
+
+
); }; diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss index caa326fc4..a465ddd74 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss @@ -6,7 +6,7 @@ background-color: white; } -.bottomBorder{ +.bottomBorder { margin-bottom: layout.$spacing-05; } @@ -40,3 +40,43 @@ background-color: white; width: 100%; } + +.facilityInfoContainer { + margin: layout.$spacing-05; +} + +.card { + padding: 1rem; + background-color: #f5f4f4; + border: 1px solid #e0e0e0; + border-radius: 2px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.cardTitle { + margin-bottom: 1rem; + font-size: 1.25rem; + font-weight: 600; +} + +.cardDivider { + border: none; + border-top: 1px solid #e0e0e0; + margin: 0.5rem 0; +} +.cardContent { + font-size: 1rem; + line-height: 1.8; +} + +.cardContent p { + display: flex; + justify-content: space-between; + margin-bottom: 0.5rem; +} + +.cardContent strong { + min-width: 150px; + display: inline-block; + color: #393939; +} diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx b/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx index ee5d00b6b..79be61579 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx +++ b/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx @@ -2,39 +2,46 @@ import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Layer, Button, MenuItem, InlineLoading } from '@carbon/react'; import styles from './facility-setup.scss'; -import { showModal, showSnackbar } from '@openmrs/esm-framework'; -import FacilitySetupHeader from './header/facility-setup-header.component'; -import FrontendModule from './facility-info.component'; +import FacilityInfo from './facility-info.component'; +import Header from './header/header.component'; +import { showSnackbar } from '@openmrs/esm-framework'; const FacilitySetup: React.FC = () => { const { t } = useTranslation(); const [isLoading, setIsLoading] = useState(false); const [logData, setLogData] = useState>([]); const [isRefreshing, setIsRefreshing] = useState(false); - + const synchronize = async () => { + try { + } catch (e) { + showSnackbar({ title: 'Synchronizing Error', kind: 'error', subtitle: e }); + } + }; return (
- - - {isLoading ? ( - - ) : ( - - )} - +
+ - {/* */} - +
); }; export default FacilitySetup; + +// const syncResponse = useDefaultFacility(); +// if (syncResponse?.defaultFacility) { +// showSnackbar({ +// title: t('syncedWithHie', 'Synced with HIE Successfully'), +// kind: 'success', +// isLowContrast: true, +// }); +// } else { +// showSnackbar({ +// title: t('syncingWithHieFailed', 'Syncing with HIE Failed'), +// subtitle: hieresponse.error, +// kind: 'error', +// isLowContrast: true, +// }); +// } diff --git a/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.component.tsx b/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.component.tsx deleted file mode 100644 index d35d03f41..000000000 --- a/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.component.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { Calendar, Location, UserFollow } from '@carbon/react/icons'; -import { formatDate, useSession, PageHeader, ServiceQueuesPictogram } from '@openmrs/esm-framework'; -import styles from './facility-setup-header.scss'; - -interface HeaderProps { - title: string; -} - -const FacilitySetupHeader: React.FC = ({ title }) => { - const { t } = useTranslation(); - const session = useSession(); - const location = session?.sessionLocation?.display; - - return ( -
-
- -
-

{t('facility', 'Facility')}

-

{title}

-
-
-
-
-

{session?.user?.person?.display}

- -
-
- - {location} - · - - {formatDate(new Date(), { mode: 'standard' })} -
-
-
- ); -}; - -export default FacilitySetupHeader; diff --git a/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.scss b/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.scss deleted file mode 100644 index 7fe6873f5..000000000 --- a/packages/esm-admin-app/src/components/facility-setup/header/facility-setup-header.scss +++ /dev/null @@ -1,90 +0,0 @@ -@use '@carbon/layout'; -@use '@carbon/type'; -@use '@openmrs/esm-styleguide/src/vars' as *; - -.header { - @include type.type-style('body-compact-02'); - color: $text-02; - height: layout.$spacing-12; - background-color: $ui-02; - border-bottom: 1px solid $ui-03; - display: flex; - justify-content: space-between; - padding: layout.$spacing-05; -} - -.leftJustifiedItems { - display: flex; - flex-direction: row; - align-items: center; - cursor: pointer; - align-items: center; -} - -.rightJustifiedItems { - @include type.type-style('body-compact-02'); - color: $text-02; - display: flex; - flex-direction: column; - justify-content: space-between; -} - -.pageName { - @include type.type-style('heading-04'); -} - -.pageLabels { - margin: layout.$spacing-05; - - p:first-of-type { - margin-bottom: layout.$spacing-02; - } -} - -.dateAndLocation { - display: flex; - justify-content: flex-end; - align-items: center; -} - -.userContainer { - display: flex; - justify-content: flex-end; - gap: layout.$spacing-05; -} - -.value { - margin-left: layout.$spacing-02; -} - -.middot { - margin: 0 layout.$spacing-03; -} - -.view { - @include type.type-style('label-01'); -} - -// Overriding styles for RTL support -html[dir='rtl'] { - .date-and-location { - & > svg { - order: -1; - } - & > span:nth-child(2) { - order: -2; - } - } -} - -.userIcon { - fill: $ui-05; - margin: layout.$spacing-01; -} - -.svgContainer svg { - width: layout.$spacing-10; - height: layout.$spacing-10; - margin-right: layout.$spacing-06; - fill: var(--brand-03); -} diff --git a/packages/esm-admin-app/src/components/facility-setup/header/header.component.tsx b/packages/esm-admin-app/src/components/facility-setup/header/header.component.tsx new file mode 100644 index 000000000..a757fa552 --- /dev/null +++ b/packages/esm-admin-app/src/components/facility-setup/header/header.component.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { Development } from '@carbon/react/icons'; +import { formatDate, useSession, PageHeader } from '@openmrs/esm-framework'; +import styles from './header.scss'; + +interface HeaderProps { + title: string; +} + +const Header: React.FC = ({ title }) => { + const { t } = useTranslation(); + const session = useSession(); + const location = session?.sessionLocation?.display; + + return ( +
+ } className={styles.header} /> +
+ ); +}; + +export default Header; diff --git a/packages/esm-admin-app/src/components/facility-setup/header/header.scss b/packages/esm-admin-app/src/components/facility-setup/header/header.scss new file mode 100644 index 000000000..907b58f6b --- /dev/null +++ b/packages/esm-admin-app/src/components/facility-setup/header/header.scss @@ -0,0 +1,19 @@ +@use '@carbon/layout'; +@use '@carbon/type'; +@use '@carbon/colors'; + +.header { + @include type.type-style('body-compact-02'); + height: layout.$spacing-12; + display: flex; + justify-content: space-between; + padding: layout.$spacing-05; + background: white; + border: 1px solid colors.$gray-20; +} +.svgContainer svg { + width: layout.$spacing-10; + height: layout.$spacing-10; + margin-right: layout.$spacing-06; + fill: var(--brand-03); +} diff --git a/packages/esm-admin-app/src/components/hook/useFacilityInfo.tsx b/packages/esm-admin-app/src/components/hook/useFacilityInfo.tsx new file mode 100644 index 000000000..61f9e91cc --- /dev/null +++ b/packages/esm-admin-app/src/components/hook/useFacilityInfo.tsx @@ -0,0 +1,21 @@ +import { FetchResponse, openmrsFetch, restBaseUrl, useSession } from '@openmrs/esm-framework'; +import useSWR from 'swr'; +import { FacilityData } from '../../types'; + +export function useFacilityInfo() { + const { authenticated } = useSession(); + const url = `${restBaseUrl}/kenyaemr/default-facility`; + + const { data, isLoading, error, mutate } = useSWR>( + authenticated ? url : null, + openmrsFetch, + {}, + ); + + return { + isLoading, + defaultFacility: data?.data, + error, + refetch: mutate, // Expose mutate as refetch + }; +} diff --git a/packages/esm-admin-app/src/components/hook/useSystemSetting.tsx b/packages/esm-admin-app/src/components/hook/useSystemSetting.tsx deleted file mode 100644 index 48ff8ee4f..000000000 --- a/packages/esm-admin-app/src/components/hook/useSystemSetting.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { FetchResponse, OpenmrsResource, openmrsFetch, restBaseUrl, useSession } from '@openmrs/esm-framework'; -import useSWRImmutable from 'swr/immutable'; -import useSWR from 'swr'; -import { DefaultFacility } from '../../types'; - -export function useSystemSetting(key: string) { - const { data, isLoading } = useSWRImmutable<{ data: { results: Array } }>( - `/ws/rest/v1/systemsetting?q=${key}&v=full`, - openmrsFetch, - { - revalidateOnFocus: false, - revalidateOnReconnect: false, - }, - ); - - const mflCodeResource = data?.data?.results?.find((resource) => resource.property === 'facility.mflcode'); - - return { mflCodeResource, isLoading }; -} - -export function useDefaultFacility() { - const { authenticated } = useSession(); - const url = `${restBaseUrl}/kenyaemr/default-facility`; - const { data, isLoading, error } = useSWR>( - authenticated ? url : null, - openmrsFetch, - {}, - ); - return { - isLoading, - defaultFacility: data?.data, - error, - }; -} diff --git a/packages/esm-admin-app/src/types/index.ts b/packages/esm-admin-app/src/types/index.ts index a96cc1147..921e67c8d 100644 --- a/packages/esm-admin-app/src/types/index.ts +++ b/packages/esm-admin-app/src/types/index.ts @@ -22,3 +22,13 @@ export interface DefaultFacility { shaContracted: string; shaFacilityExpiryDate: string; } + +export interface FacilityData { + shaKephLevel?: string; + mflCode?: string; + display?: string; + operationalStatus?: string; + shaStatus?: string; + shaContracted?: string; + shaFacilityExpiryDate?: string; +} diff --git a/packages/esm-admin-app/translations/en.json b/packages/esm-admin-app/translations/en.json index 67db1700e..f314b43d2 100644 --- a/packages/esm-admin-app/translations/en.json +++ b/packages/esm-admin-app/translations/en.json @@ -10,8 +10,10 @@ "endTime": "End time", "etlAdministration": "ETL Admin", "etlOperation": "ETL operations", - "etlOperationLog": "ETL Operations Log", "etlsOperationsLoading": "Please wait {{currentOperation}} is in progress...", + "facility": "Facility", + "facilityInfo": "Facility Info", + "facilitySetupTitle": "Facility Setup", "familyName": "Family Name", "given": "Given", "home": "Home", @@ -35,6 +37,8 @@ "searchLabel": "Search", "searchUser": "Search user table", "startTime": "Start time", + "synchronizeInfo": "Synchronize Info", + "synchronizingFacilityData": "Please wait, Synchronizing Info.", "systemId": "System ID", "userManagement": "User Management", "username": "Username", From 5029228306fc4e46e58b67316d671064af2d0254 Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Thu, 16 Jan 2025 17:47:13 +0300 Subject: [PATCH 4/9] removed unused files and codes --- .../facility-setup/facility-info.scss | 10 ++++---- .../facility-setup.component.tsx | 25 ------------------- .../header/header.component.tsx | 2 +- .../components/hook/useFrontendModules.tsx | 13 ---------- packages/esm-admin-app/translations/en.json | 8 +++--- 5 files changed, 11 insertions(+), 47 deletions(-) delete mode 100644 packages/esm-admin-app/src/components/hook/useFrontendModules.tsx diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss index a465ddd74..73a2c1fae 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss @@ -61,22 +61,22 @@ .cardDivider { border: none; - border-top: 1px solid #e0e0e0; - margin: 0.5rem 0; + border-top: 1px solid #e0e0e0; + margin: 0.5rem 0; } .cardContent { font-size: 1rem; - line-height: 1.8; + line-height: 1.8; } .cardContent p { display: flex; justify-content: space-between; - margin-bottom: 0.5rem; + margin-bottom: 0.5rem; } .cardContent strong { min-width: 150px; display: inline-block; - color: #393939; + color: #393939; } diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx b/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx index 79be61579..467262137 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx +++ b/packages/esm-admin-app/src/components/facility-setup/facility-setup.component.tsx @@ -8,15 +8,6 @@ import { showSnackbar } from '@openmrs/esm-framework'; const FacilitySetup: React.FC = () => { const { t } = useTranslation(); - const [isLoading, setIsLoading] = useState(false); - const [logData, setLogData] = useState>([]); - const [isRefreshing, setIsRefreshing] = useState(false); - const synchronize = async () => { - try { - } catch (e) { - showSnackbar({ title: 'Synchronizing Error', kind: 'error', subtitle: e }); - } - }; return (
@@ -29,19 +20,3 @@ const FacilitySetup: React.FC = () => { }; export default FacilitySetup; - -// const syncResponse = useDefaultFacility(); -// if (syncResponse?.defaultFacility) { -// showSnackbar({ -// title: t('syncedWithHie', 'Synced with HIE Successfully'), -// kind: 'success', -// isLowContrast: true, -// }); -// } else { -// showSnackbar({ -// title: t('syncingWithHieFailed', 'Syncing with HIE Failed'), -// subtitle: hieresponse.error, -// kind: 'error', -// isLowContrast: true, -// }); -// } diff --git a/packages/esm-admin-app/src/components/facility-setup/header/header.component.tsx b/packages/esm-admin-app/src/components/facility-setup/header/header.component.tsx index a757fa552..ae276726c 100644 --- a/packages/esm-admin-app/src/components/facility-setup/header/header.component.tsx +++ b/packages/esm-admin-app/src/components/facility-setup/header/header.component.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import { Development } from '@carbon/react/icons'; -import { formatDate, useSession, PageHeader } from '@openmrs/esm-framework'; +import { useSession, PageHeader } from '@openmrs/esm-framework'; import styles from './header.scss'; interface HeaderProps { diff --git a/packages/esm-admin-app/src/components/hook/useFrontendModules.tsx b/packages/esm-admin-app/src/components/hook/useFrontendModules.tsx deleted file mode 100644 index c95ef4285..000000000 --- a/packages/esm-admin-app/src/components/hook/useFrontendModules.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { useMemo } from 'react'; -import { FrontendModule } from '../../types'; - -export function useFrontendModules() { - return useMemo>(() => { - return (window.installedModules ?? []) - .filter((module) => Boolean(module) && Boolean(module[1])) - .map((module) => ({ - version: module[1].version, - name: module[0].substring(module[0].indexOf('/') + 1), - })); - }, [window.installedModules]); -} diff --git a/packages/esm-admin-app/translations/en.json b/packages/esm-admin-app/translations/en.json index f314b43d2..cca2e999d 100644 --- a/packages/esm-admin-app/translations/en.json +++ b/packages/esm-admin-app/translations/en.json @@ -11,9 +11,7 @@ "etlAdministration": "ETL Admin", "etlOperation": "ETL operations", "etlsOperationsLoading": "Please wait {{currentOperation}} is in progress...", - "facility": "Facility", "facilityInfo": "Facility Info", - "facilitySetupTitle": "Facility Setup", "familyName": "Family Name", "given": "Given", "home": "Home", @@ -37,8 +35,12 @@ "searchLabel": "Search", "searchUser": "Search user table", "startTime": "Start time", - "synchronizeInfo": "Synchronize Info", + "syncedWithHie": "Synced with HIE Successfully", + "synchronizeWithHie": "Synchronize with HIE", "synchronizingFacilityData": "Please wait, Synchronizing Info.", + "syncingHieError": "Syncing with HIE Failed", + "syncingHieSuccess": "Synchronization Complete", + "syncingWithHieFailed": "Syncing with HIE Failed", "systemId": "System ID", "userManagement": "User Management", "username": "Username", From a90c39341d3a12d45aff5104dc8bf6efc5b95c16 Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Thu, 16 Jan 2025 23:03:38 +0300 Subject: [PATCH 5/9] removed facility data from system info page --- .../facility-info.component.tsx | 5 ++- packages/esm-admin-app/translations/en.json | 2 -- .../src/about/about.component.tsx | 33 ------------------ .../src/hooks/useSystemSetting.tsx | 34 ------------------- 4 files changed, 4 insertions(+), 70 deletions(-) delete mode 100644 packages/esm-version-app/src/hooks/useSystemSetting.tsx diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx index 51e3e6527..070b7f766 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx @@ -3,7 +3,7 @@ import { Tile, Grid, Column, Layer, InlineLoading, Button } from '@carbon/react' import { useFacilityInfo } from '../hook/useFacilityInfo'; import styles from './facility-info.scss'; import { useTranslation } from 'react-i18next'; -import { showSnackbar } from '@openmrs/esm-framework'; +import { showNotification, showSnackbar } from '@openmrs/esm-framework'; import { FacilityData } from '../../types'; const FacilityInfo: React.FC = () => { const { t } = useTranslation(); @@ -12,6 +12,9 @@ const FacilityInfo: React.FC = () => { const [facilityData, setFacilityData] = useState(defaultFacility); useEffect(() => { setFacilityData(defaultFacility); + if (defaultFacility?.operationalStatus !== 'Operational') { + showNotification({ kind: 'error', title: 'Error', description: 'The facility SHA status is is not operational' }); + } }, [defaultFacility]); const synchronizeFacilityData = async () => { diff --git a/packages/esm-admin-app/translations/en.json b/packages/esm-admin-app/translations/en.json index cca2e999d..5352f9795 100644 --- a/packages/esm-admin-app/translations/en.json +++ b/packages/esm-admin-app/translations/en.json @@ -35,12 +35,10 @@ "searchLabel": "Search", "searchUser": "Search user table", "startTime": "Start time", - "syncedWithHie": "Synced with HIE Successfully", "synchronizeWithHie": "Synchronize with HIE", "synchronizingFacilityData": "Please wait, Synchronizing Info.", "syncingHieError": "Syncing with HIE Failed", "syncingHieSuccess": "Synchronization Complete", - "syncingWithHieFailed": "Syncing with HIE Failed", "systemId": "System ID", "userManagement": "User Management", "username": "Username", diff --git a/packages/esm-version-app/src/about/about.component.tsx b/packages/esm-version-app/src/about/about.component.tsx index 6f68ef9bc..8ad96f1fc 100644 --- a/packages/esm-version-app/src/about/about.component.tsx +++ b/packages/esm-version-app/src/about/about.component.tsx @@ -1,11 +1,8 @@ import React, { useEffect } from 'react'; import styles from './about.scss'; import { useModules } from '../hooks/useModules'; -import { useDefaultFacility, useSystemSetting } from '../hooks/useSystemSetting'; import { formatDate, formatDatetime, showNotification } from '@openmrs/esm-framework'; import FrontendModule from '../frontend-modules/frontend-modules.component'; -import { SkeletonText } from '@carbon/react'; -import dayjs from 'dayjs'; const packageInfo = require('../release-version.js'); interface AboutProps {} @@ -13,28 +10,8 @@ interface AboutProps {} const About: React.FC = () => { const { modules, isLoading } = useModules(); const kenyaEMR = modules.find(({ uuid }) => uuid === 'kenyaemr'); - const { mflCodeResource } = useSystemSetting('facility.mflcode'); - const mflCode = mflCodeResource ? `(${mflCodeResource?.value ?? ''})` : ''; const { title, container, aboutBody, aboutPage } = styles; const { VERSION } = packageInfo; - const { defaultFacility, error, isLoading: defaultFacilityLoading } = useDefaultFacility(); - - useEffect(() => { - if (!defaultFacility) { - return; - } - // Uncomment when dates are availed - /*if (!dayjs(defaultFacility?.shaFacilityExpiryDate).isValid()) { - showNotification({ kind: 'error', title: 'Error', description: 'Invalid SHA accreditation expiry date' }); - return; - } - if (dayjs(defaultFacility?.shaFacilityExpiryDate).isBefore(dayjs())) { - showNotification({ kind: 'error', title: 'Error', description: 'SHA accreditation Licence has expired' }); - }*/ - if (defaultFacility?.operationalStatus !== 'Operational') { - showNotification({ kind: 'error', title: 'Error', description: 'The facility SHA status is is not operational' }); - } - }, [defaultFacility]); return (
@@ -59,16 +36,6 @@ const About: React.FC = () => {

{`v${VERSION.version}`}

Build date time

{formatDatetime(new Date(VERSION.buildDate), { mode: 'standard' })}

-

Facility code

-

{mflCode ?? '--'}

-

Facility Name

- {defaultFacilityLoading ? :

{defaultFacility?.display ?? '--'}

} -

Operational status

- {defaultFacilityLoading ? :

{defaultFacility?.operationalStatus ?? '--'}

} -

Sha Contracted

- {defaultFacilityLoading ? :

--

} -

Expiry Date

- {defaultFacilityLoading ? :

{defaultFacility?.shaFacilityExpiryDate ?? '--'}

}
diff --git a/packages/esm-version-app/src/hooks/useSystemSetting.tsx b/packages/esm-version-app/src/hooks/useSystemSetting.tsx deleted file mode 100644 index 465d97a4e..000000000 --- a/packages/esm-version-app/src/hooks/useSystemSetting.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { FetchResponse, OpenmrsResource, openmrsFetch, restBaseUrl, useSession } from '@openmrs/esm-framework'; -import useSWRImmutable from 'swr/immutable'; -import useSWR from 'swr'; -import { DefaultFacility } from '../types'; - -export function useSystemSetting(key: string) { - const { data, isLoading } = useSWRImmutable<{ data: { results: Array } }>( - `/ws/rest/v1/systemsetting?q=${key}&v=full`, - openmrsFetch, - { - revalidateOnFocus: false, - revalidateOnReconnect: false, - }, - ); - - const mflCodeResource = data?.data?.results?.find((resource) => resource.property === 'facility.mflcode'); - - return { mflCodeResource, isLoading }; -} - -export function useDefaultFacility() { - const { authenticated } = useSession(); - const url = `${restBaseUrl}/kenyaemr/default-facility`; - const { data, isLoading, error } = useSWR>( - authenticated ? url : null, - openmrsFetch, - {}, - ); - return { - isLoading, - defaultFacility: data?.data, - error, - }; -} From 8ac746a9766a0f05d94d00b9c46058999d21748d Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Thu, 16 Jan 2025 23:43:34 +0300 Subject: [PATCH 6/9] color renaming --- .../src/components/facility-setup/facility-info.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss index 73a2c1fae..f917833af 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss @@ -3,7 +3,7 @@ @use '@carbon/colors'; .omrs-main-content { - background-color: white; + background-color: colors.$white; } .bottomBorder { @@ -47,7 +47,7 @@ .card { padding: 1rem; - background-color: #f5f4f4; + background-color: colors.$gray-10; border: 1px solid #e0e0e0; border-radius: 2px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); From 4a482be6ca66616135b34aa8281e1b9b86989208 Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Fri, 17 Jan 2025 11:53:39 +0300 Subject: [PATCH 7/9] added missing attributes --- .../facility-setup/facility-info.component.tsx | 14 +++++++++----- packages/esm-admin-app/src/types/index.ts | 3 ++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx index 070b7f766..a99453c50 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx @@ -72,9 +72,8 @@ const FacilityInfo: React.FC = () => {

Keph Level: {facilityData?.shaKephLevel}

-

- Operational Status: {facilityData?.operationalStatus} -

+
+
@@ -87,7 +86,13 @@ const FacilityInfo: React.FC = () => {

- SHA Status: {facilityData?.shaStatus} + Facility Registry Code: {facilityData?.shaFacilityId} +

+

+ SHA License Number: {facilityData?.shaFacilityLicenseNumber} +

+

+ SHA Status: {facilityData?.operationalStatus}

SHA Contracted: {facilityData?.shaContracted} @@ -95,7 +100,6 @@ const FacilityInfo: React.FC = () => {

SHA Expiry Date: {facilityData?.shaFacilityExpiryDate}

-
diff --git a/packages/esm-admin-app/src/types/index.ts b/packages/esm-admin-app/src/types/index.ts index 921e67c8d..0bb3426ca 100644 --- a/packages/esm-admin-app/src/types/index.ts +++ b/packages/esm-admin-app/src/types/index.ts @@ -28,7 +28,8 @@ export interface FacilityData { mflCode?: string; display?: string; operationalStatus?: string; - shaStatus?: string; shaContracted?: string; + shaFacilityId?: string; + shaFacilityLicenseNumber?: string; shaFacilityExpiryDate?: string; } From e46809710f5034906a238934208bb59a2a2924d1 Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Fri, 17 Jan 2025 12:09:49 +0300 Subject: [PATCH 8/9] styled content --- .../src/components/facility-setup/facility-info.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss index f917833af..27fc2f244 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-info.scss +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.scss @@ -74,6 +74,11 @@ justify-content: space-between; margin-bottom: 0.5rem; } +.cardContent br { + display: flex; + justify-content: space-between; + margin-bottom: 0.5rem; +} .cardContent strong { min-width: 150px; From cb069e2a0db38f421b4dd09f52d9f9ab31a67f2d Mon Sep 17 00:00:00 2001 From: Felix Kiprotich Date: Fri, 17 Jan 2025 12:53:01 +0300 Subject: [PATCH 9/9] added synchronize parameter --- .../components/facility-setup/facility-info.component.tsx | 6 ++++-- .../esm-admin-app/src/components/hook/useFacilityInfo.tsx | 4 ++-- packages/esm-billing-app/translations/en.json | 6 +++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx index a99453c50..e13e621a6 100644 --- a/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx +++ b/packages/esm-admin-app/src/components/facility-setup/facility-info.component.tsx @@ -5,9 +5,11 @@ import styles from './facility-info.scss'; import { useTranslation } from 'react-i18next'; import { showNotification, showSnackbar } from '@openmrs/esm-framework'; import { FacilityData } from '../../types'; + const FacilityInfo: React.FC = () => { const { t } = useTranslation(); - const { defaultFacility, isLoading: defaultFacilityLoading, error, refetch } = useFacilityInfo(); + const [shouldSynchronize, setshouldSynchronize] = useState(false); + const { defaultFacility, isLoading: defaultFacilityLoading, error, refetch } = useFacilityInfo(shouldSynchronize); const [facilityData, setFacilityData] = useState(defaultFacility); useEffect(() => { @@ -19,7 +21,7 @@ const FacilityInfo: React.FC = () => { const synchronizeFacilityData = async () => { try { - // Trigger manual refetch + setshouldSynchronize(true); await refetch(); showSnackbar({ title: t('syncingHieSuccess', 'Synchronization Complete'), diff --git a/packages/esm-admin-app/src/components/hook/useFacilityInfo.tsx b/packages/esm-admin-app/src/components/hook/useFacilityInfo.tsx index 61f9e91cc..a3c60a681 100644 --- a/packages/esm-admin-app/src/components/hook/useFacilityInfo.tsx +++ b/packages/esm-admin-app/src/components/hook/useFacilityInfo.tsx @@ -2,9 +2,9 @@ import { FetchResponse, openmrsFetch, restBaseUrl, useSession } from '@openmrs/e import useSWR from 'swr'; import { FacilityData } from '../../types'; -export function useFacilityInfo() { +export function useFacilityInfo(shouldSynchronize: boolean = false) { const { authenticated } = useSession(); - const url = `${restBaseUrl}/kenyaemr/default-facility`; + const url = `${restBaseUrl}/kenyaemr/default-facility?synchronize=${shouldSynchronize}`; const { data, isLoading, error, mutate } = useSWR>( authenticated ? url : null, diff --git a/packages/esm-billing-app/translations/en.json b/packages/esm-billing-app/translations/en.json index 19a44396e..9ac8559b2 100644 --- a/packages/esm-billing-app/translations/en.json +++ b/packages/esm-billing-app/translations/en.json @@ -78,7 +78,6 @@ "delete": "Delete", "deleteBill": "Delete Bill", "description": "Description", - "diagnoses": "Diagnoses", "discard": "Discard", "discardClaim": "Discard Claim", "discount": "Discount", @@ -109,6 +108,7 @@ "enterRegExp": "Enter regular expression", "error": "Error", "errored": "Errored", + "errorEndingVisit": "Error ending visit", "errorFetchingPackages": "Error fetching packeges", "errorLoadingBillServices": "Error loading bill services", "errorLoadingPaymentModes": "Payment modes error", @@ -201,7 +201,6 @@ "payments": "Payments", "paymentType": "Payment Type", "pendingHIEVerification": "Pending HIE verification", - "pendingVerificationReason": "", "Phone Number": "Phone Number", "pickLabRequest": "Pick Lab Request", "policyNumber": "Policy number", @@ -282,8 +281,9 @@ "unsettledBill": "Unsettled bill", "updateRegistration": "Update registration", "valuated": "Valuated", - "verify": "Verify", "verifyingBillStatus": "Verifying bill status...", + "visitEnded": "Visit ended", + "visitEndSuccessfully": "", "visitTime": "Visit time", "visittype": "Visit Type", "waiveBill": "Waive Bill",