From d6b08544282a9ce2414e2465ff8c95646d47b02b Mon Sep 17 00:00:00 2001
From: Masimbon3 <108567779+Masimbon3@users.noreply.github.com>
Date: Sat, 28 Feb 2026 00:13:39 +0200
Subject: [PATCH] chore(branding): replace HospitalRun with Open Health
---
README.md | 4 +-
public/index.html | 4 +-
.../shared/components/navbar/Navbar.test.tsx | 6 +-
src/dashboard/Dashboard.tsx | 81 ++++++++++++++++++-
src/shared/components/navbar/Navbar.tsx | 2 +-
.../ar/translations/dashboard/index.ts | 12 +++
.../de/translations/dashboard/index.ts | 12 +++
.../enUs/translations/dashboard/index.ts | 12 +++
.../es/translations/dashboard/index.ts | 12 +++
.../fr/translations/dashboard/index.ts | 12 +++
.../id/translations/dashboard/index.ts | 12 +++
.../it/translations/dashboard/index.ts | 12 +++
.../ja/translations/dashboard/index.ts | 12 +++
.../ptBr/translations/dashboard/index.ts | 12 +++
.../ru/translations/dashboard/index.ts | 12 +++
.../tr/translations/dashboard/index.ts | 12 +++
.../zhCN/translations/dashboard/index.ts | 12 +++
src/user/user-slice.ts | 6 +-
18 files changed, 234 insertions(+), 13 deletions(-)
diff --git a/README.md b/README.md
index 4a1bee2db..d9d15b8a9 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# HospitalRun Frontend
+# Open Health Frontend
@@ -9,7 +9,7 @@
-React frontend for [HospitalRun](http://hospitalrun.io/): free software for developing world hospitals.
+React frontend for Open Health: free software for healthcare delivery teams.
---
diff --git a/public/index.html b/public/index.html
index d9d7dd210..42162d788 100644
--- a/public/index.html
+++ b/public/index.html
@@ -7,7 +7,7 @@
- HospitalRun
+ Open Health
diff --git a/src/__tests__/shared/components/navbar/Navbar.test.tsx b/src/__tests__/shared/components/navbar/Navbar.test.tsx
index 0712ed3c4..fa50c33d8 100644
--- a/src/__tests__/shared/components/navbar/Navbar.test.tsx
+++ b/src/__tests__/shared/components/navbar/Navbar.test.tsx
@@ -89,10 +89,10 @@ describe('Navbar', () => {
})
describe('header', () => {
- it('should render a HospitalRun Navbar', () => {
+ it('should render an Open Health Navbar', () => {
setup(allPermissions)
- expect(screen.getByText(/hospitalrun/i)).toBeInTheDocument()
+ expect(screen.getByText(/open health/i)).toBeInTheDocument()
expect(screen.getByRole('button', { hidden: false })).toBeInTheDocument()
})
@@ -101,7 +101,7 @@ describe('Navbar', () => {
history.location.pathname = '/enterprise-1701'
expect(history.location.pathname).not.toEqual('/')
- userEvent.click(screen.getByText(/hospitalrun/i))
+ userEvent.click(screen.getByText(/open health/i))
expect(history.location.pathname).toEqual('/')
})
diff --git a/src/dashboard/Dashboard.tsx b/src/dashboard/Dashboard.tsx
index a03655338..ae7a97084 100644
--- a/src/dashboard/Dashboard.tsx
+++ b/src/dashboard/Dashboard.tsx
@@ -1,15 +1,92 @@
import React, { useEffect } from 'react'
+import { Alert, Card, Col, Container, Row, Spinner } from 'react-bootstrap'
+import { useQuery } from 'react-query'
import { useUpdateTitle } from '../page-header/title/TitleContext'
+import AppointmentRepository from '../shared/db/AppointmentRepository'
+import ImagingRepository from '../shared/db/ImagingRepository'
+import IncidentRepository from '../shared/db/IncidentRepository'
+import LabRepository from '../shared/db/LabRepository'
+import MedicationRepository from '../shared/db/MedicationRepository'
+import PatientRepository from '../shared/db/PatientRepository'
import useTranslator from '../shared/hooks/useTranslator'
+type DataDomain = 'patients' | 'appointments' | 'labs' | 'medications' | 'imagings' | 'incidents'
+
+type DataMetric = {
+ domain: DataDomain
+ value: number
+}
+
+const fetchPlatformMetrics = async (): Promise => {
+ const [patients, appointments, labs, medications, imagings, incidents] = await Promise.all([
+ PatientRepository.count(),
+ AppointmentRepository.count(),
+ LabRepository.count(),
+ MedicationRepository.count(),
+ ImagingRepository.count(),
+ IncidentRepository.count(),
+ ])
+
+ return [
+ { domain: 'patients', value: patients },
+ { domain: 'appointments', value: appointments },
+ { domain: 'labs', value: labs },
+ { domain: 'medications', value: medications },
+ { domain: 'imagings', value: imagings },
+ { domain: 'incidents', value: incidents },
+ ]
+}
+
const Dashboard: React.FC = () => {
const { t } = useTranslator()
const updateTitle = useUpdateTitle()
+ const { data: metrics = [], isLoading, isError } = useQuery('dashboard-metrics', fetchPlatformMetrics)
+
useEffect(() => {
updateTitle(t('dashboard.label'))
- })
- return Example
+ }, [t, updateTitle])
+
+ const totalRecords = metrics.reduce((runningTotal, metric) => runningTotal + metric.value, 0)
+
+ return (
+
+
+
+ {t('dashboard.centralHubTitle')}
+ {t('dashboard.centralHubDescription')}
+
+
+ {isError && {t('dashboard.metricsLoadError')}}
+ {isLoading && }
+ {!isLoading && !isError && (
+ <>
+
+
+
+
+ {t('dashboard.totalRecordsLabel')}
+ {totalRecords}
+
+
+
+
+
+ {metrics.map((metric) => (
+
+
+
+ {t(`dashboard.metrics.${metric.domain}`)}
+ {metric.value}
+
+
+
+ ))}
+
+ >
+ )}
+
+ )
}
export default Dashboard
diff --git a/src/shared/components/navbar/Navbar.tsx b/src/shared/components/navbar/Navbar.tsx
index 6096259f2..4c7fdd017 100644
--- a/src/shared/components/navbar/Navbar.tsx
+++ b/src/shared/components/navbar/Navbar.tsx
@@ -78,7 +78,7 @@ const Navbar = () => {
},
{
type: 'header',
- label: 'HospitalRun',
+ label: 'Open Health',
onClick: () => {
navigateTo('/')
},
diff --git a/src/shared/locales/ar/translations/dashboard/index.ts b/src/shared/locales/ar/translations/dashboard/index.ts
index 75e1d4d0f..bd266a1ca 100644
--- a/src/shared/locales/ar/translations/dashboard/index.ts
+++ b/src/shared/locales/ar/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'لوحة القيادة',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/de/translations/dashboard/index.ts b/src/shared/locales/de/translations/dashboard/index.ts
index feaad5f3e..eeee1fcca 100644
--- a/src/shared/locales/de/translations/dashboard/index.ts
+++ b/src/shared/locales/de/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Dashboard',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/enUs/translations/dashboard/index.ts b/src/shared/locales/enUs/translations/dashboard/index.ts
index feaad5f3e..eeee1fcca 100644
--- a/src/shared/locales/enUs/translations/dashboard/index.ts
+++ b/src/shared/locales/enUs/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Dashboard',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/es/translations/dashboard/index.ts b/src/shared/locales/es/translations/dashboard/index.ts
index 2ef79d635..e7a9096f2 100644
--- a/src/shared/locales/es/translations/dashboard/index.ts
+++ b/src/shared/locales/es/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Panel',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/fr/translations/dashboard/index.ts b/src/shared/locales/fr/translations/dashboard/index.ts
index 6741623a6..546242050 100644
--- a/src/shared/locales/fr/translations/dashboard/index.ts
+++ b/src/shared/locales/fr/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Tableau de bord',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/id/translations/dashboard/index.ts b/src/shared/locales/id/translations/dashboard/index.ts
index f0f1d382f..56654029f 100644
--- a/src/shared/locales/id/translations/dashboard/index.ts
+++ b/src/shared/locales/id/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Dasbor',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/it/translations/dashboard/index.ts b/src/shared/locales/it/translations/dashboard/index.ts
index feaad5f3e..eeee1fcca 100644
--- a/src/shared/locales/it/translations/dashboard/index.ts
+++ b/src/shared/locales/it/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Dashboard',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/ja/translations/dashboard/index.ts b/src/shared/locales/ja/translations/dashboard/index.ts
index fb15f11b7..a2123216b 100644
--- a/src/shared/locales/ja/translations/dashboard/index.ts
+++ b/src/shared/locales/ja/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'ダッシュボード',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/ptBr/translations/dashboard/index.ts b/src/shared/locales/ptBr/translations/dashboard/index.ts
index 58656ab06..3be07233c 100644
--- a/src/shared/locales/ptBr/translations/dashboard/index.ts
+++ b/src/shared/locales/ptBr/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Painel de controle',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/ru/translations/dashboard/index.ts b/src/shared/locales/ru/translations/dashboard/index.ts
index 1c4b9618c..86bcd74ef 100644
--- a/src/shared/locales/ru/translations/dashboard/index.ts
+++ b/src/shared/locales/ru/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Панель приборов',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/tr/translations/dashboard/index.ts b/src/shared/locales/tr/translations/dashboard/index.ts
index 2ef79d635..e7a9096f2 100644
--- a/src/shared/locales/tr/translations/dashboard/index.ts
+++ b/src/shared/locales/tr/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: 'Panel',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/shared/locales/zhCN/translations/dashboard/index.ts b/src/shared/locales/zhCN/translations/dashboard/index.ts
index 26862ff74..c4592c7ba 100644
--- a/src/shared/locales/zhCN/translations/dashboard/index.ts
+++ b/src/shared/locales/zhCN/translations/dashboard/index.ts
@@ -1,5 +1,17 @@
export default {
dashboard: {
label: '仪表板',
+ centralHubTitle: 'Digital Health Command Center',
+ centralHubDescription: 'Centralize your care data across patients, appointments, labs, medications, imaging, and incidents.',
+ totalRecordsLabel: 'Total clinical records',
+ metricsLoadError: 'Unable to load centralized healthcare metrics. Please try again.',
+ metrics: {
+ patients: 'Patients',
+ appointments: 'Appointments',
+ labs: 'Lab requests',
+ medications: 'Medication requests',
+ imagings: 'Imaging requests',
+ incidents: 'Incidents',
+ },
},
}
diff --git a/src/user/user-slice.ts b/src/user/user-slice.ts
index 58d04df23..cb217e5ec 100644
--- a/src/user/user-slice.ts
+++ b/src/user/user-slice.ts
@@ -20,10 +20,10 @@ export interface UserState {
const initialState: UserState = {
user: {
- givenName: 'HospitalRun',
+ givenName: 'Open Health',
familyName: 'Test',
- fullName: 'HospitalRun Test',
- id: 'test-hospitalrun',
+ fullName: 'Open Health Test',
+ id: 'test-open-health',
},
permissions: [
Permissions.ReadPatients,