@openmrs/esm-appointments-app 8.5.1-pre.5752 → 8.5.1-pre.5756
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +18 -18
- package/dist/1119.js +1 -1
- package/dist/1197.js +1 -1
- package/dist/1431.js +1 -0
- package/dist/1431.js.map +1 -0
- package/dist/1559.js +2 -0
- package/dist/1559.js.map +1 -0
- package/dist/2146.js +1 -1
- package/dist/2690.js +1 -1
- package/dist/3099.js +1 -1
- package/dist/3379.js +1 -0
- package/dist/3379.js.map +1 -0
- package/dist/3584.js +1 -1
- package/dist/4055.js +1 -1
- package/dist/4132.js +1 -1
- package/dist/4300.js +1 -1
- package/dist/4335.js +1 -1
- package/dist/4599.js +1 -0
- package/dist/4599.js.map +1 -0
- package/dist/4618.js +1 -1
- package/dist/4652.js +1 -1
- package/dist/4863.js +1 -0
- package/dist/4863.js.map +1 -0
- package/dist/4889.js +1 -1
- package/dist/4889.js.map +1 -1
- package/dist/4944.js +1 -1
- package/dist/5160.js +1 -0
- package/dist/5160.js.map +1 -0
- package/dist/5173.js +1 -1
- package/dist/5241.js +1 -1
- package/dist/525.js +1 -0
- package/dist/525.js.map +1 -0
- package/dist/5442.js +1 -1
- package/dist/5449.js +1 -1
- package/dist/5449.js.map +1 -1
- package/dist/5661.js +1 -1
- package/dist/5755.js +1 -0
- package/dist/5755.js.map +1 -0
- package/dist/592.js +1 -1
- package/dist/592.js.map +1 -1
- package/dist/6022.js +1 -1
- package/dist/6467.js +1 -0
- package/dist/6467.js.map +1 -0
- package/dist/6468.js +1 -1
- package/dist/66.js +2 -0
- package/dist/66.js.LICENSE.txt +9 -0
- package/dist/66.js.map +1 -0
- package/dist/6679.js +1 -1
- package/dist/6766.js +2 -0
- package/dist/{7881.js.LICENSE.txt → 6766.js.LICENSE.txt} +0 -10
- package/dist/6766.js.map +1 -0
- package/dist/6840.js +1 -1
- package/dist/6859.js +1 -1
- package/dist/7097.js +1 -1
- package/dist/7159.js +1 -1
- package/dist/723.js +1 -1
- package/dist/7617.js +1 -1
- package/dist/7698.js +1 -1
- package/dist/7698.js.map +1 -1
- package/dist/795.js +1 -1
- package/dist/8163.js +1 -1
- package/dist/8349.js +1 -1
- package/dist/8618.js +1 -1
- package/dist/8784.js +1 -0
- package/dist/8784.js.map +1 -0
- package/dist/890.js +1 -1
- package/dist/9214.js +1 -1
- package/dist/9538.js +1 -1
- package/dist/9569.js +1 -1
- package/dist/986.js +1 -1
- package/dist/9879.js +1 -1
- package/dist/9895.js +1 -1
- package/dist/9900.js +1 -1
- package/dist/9913.js +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/openmrs-esm-appointments-app.js +1 -1
- package/dist/openmrs-esm-appointments-app.js.buildmanifest.json +389 -265
- package/dist/openmrs-esm-appointments-app.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/src/appointments/common-components/appointments-table.component.tsx +1 -0
- package/src/appointments/scheduled/scheduled-appointments.component.tsx +2 -2
- package/src/appointments.component.tsx +7 -12
- package/src/appointments.test.tsx +1 -3
- package/src/calendar/appointments-calendar-view.component.tsx +8 -10
- package/src/calendar/header/calendar-header.component.tsx +2 -2
- package/src/calendar/monthly/monthly-calendar-view.component.tsx +2 -2
- package/src/calendar/monthly/monthly-header.component.tsx +4 -4
- package/src/calendar/monthly/monthly-workload-view.component.tsx +2 -2
- package/src/form/appointments-form.workspace.tsx +2 -2
- package/src/header/appointments-header.component.tsx +12 -18
- package/src/hooks/useAppointmentList.ts +3 -3
- package/src/hooks/useClinicalMetrics.ts +3 -3
- package/src/hooks/usePatientAppointmentHistory.ts +2 -2
- package/src/hooks/useUnscheduledAppointments.ts +2 -2
- package/src/index.ts +15 -0
- package/src/metrics/metrics-cards/highest-volume-service.extension.tsx +26 -0
- package/src/metrics/metrics-cards/metrics-card.component.tsx +47 -0
- package/src/metrics/{metrics-card.scss → metrics-cards/metrics-card.scss} +0 -7
- package/src/metrics/metrics-cards/metrics-error-card.component.tsx +30 -0
- package/src/metrics/metrics-cards/metrics-error-card.scss +33 -0
- package/src/metrics/metrics-cards/providers-booked.extension.tsx +21 -0
- package/src/metrics/metrics-cards/scheduled-appointments.extension.tsx +33 -0
- package/src/metrics/metrics-container.component.tsx +19 -0
- package/src/metrics/metrics-container.scss +22 -0
- package/src/metrics/metrics-header.component.tsx +2 -2
- package/src/routes.json +18 -0
- package/src/store.ts +46 -0
- package/src/workload/monthly-view-workload/monthly-view.component.tsx +2 -2
- package/translations/am.json +3 -1
- package/translations/ar.json +3 -1
- package/translations/ar_SY.json +3 -1
- package/translations/bn.json +3 -1
- package/translations/de.json +3 -1
- package/translations/en.json +3 -1
- package/translations/en_US.json +3 -1
- package/translations/es.json +3 -1
- package/translations/es_MX.json +3 -1
- package/translations/fr.json +3 -1
- package/translations/he.json +3 -1
- package/translations/hi.json +3 -1
- package/translations/hi_IN.json +3 -1
- package/translations/id.json +3 -1
- package/translations/it.json +3 -1
- package/translations/ka.json +3 -1
- package/translations/km.json +3 -1
- package/translations/ku.json +3 -1
- package/translations/ky.json +3 -1
- package/translations/lg.json +3 -1
- package/translations/ne.json +3 -1
- package/translations/pl.json +3 -1
- package/translations/pt.json +3 -1
- package/translations/pt_BR.json +4 -2
- package/translations/qu.json +3 -1
- package/translations/ro_RO.json +3 -1
- package/translations/ru_RU.json +3 -1
- package/translations/si.json +3 -1
- package/translations/sw.json +3 -1
- package/translations/sw_KE.json +3 -1
- package/translations/tr.json +3 -1
- package/translations/tr_TR.json +3 -1
- package/translations/uk.json +3 -1
- package/translations/uz.json +3 -1
- package/translations/uz@Latn.json +3 -1
- package/translations/uz_UZ.json +3 -1
- package/translations/vi.json +3 -1
- package/translations/zh.json +3 -1
- package/translations/zh_CN.json +3 -1
- package/dist/1293.js +0 -1
- package/dist/1293.js.map +0 -1
- package/dist/1625.js +0 -1
- package/dist/1625.js.map +0 -1
- package/dist/2164.js +0 -2
- package/dist/2164.js.map +0 -1
- package/dist/2694.js +0 -1
- package/dist/2694.js.map +0 -1
- package/dist/6708.js +0 -1
- package/dist/6708.js.map +0 -1
- package/dist/7881.js +0 -2
- package/dist/7881.js.map +0 -1
- package/dist/8963.js +0 -1
- package/dist/8963.js.map +0 -1
- package/src/hooks/selected-date-context.ts +0 -23
- package/src/metrics/appointments-metrics.component.tsx +0 -72
- package/src/metrics/appointments-metrics.scss +0 -14
- package/src/metrics/appointments-metrics.test.tsx +0 -42
- package/src/metrics/metrics-card.component.tsx +0 -49
- /package/dist/{2164.js.LICENSE.txt → 1559.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import styles from './metrics-error-card.scss';
|
|
4
|
+
|
|
5
|
+
interface MetricsCardProps {
|
|
6
|
+
headerLabel: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const MetricsErrorCard: React.FC<MetricsCardProps> = ({ headerLabel }) => {
|
|
10
|
+
const { t } = useTranslation();
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<article className={styles.container}>
|
|
14
|
+
<div className={styles.tileContainer}>
|
|
15
|
+
<div className={styles.tileHeader}>
|
|
16
|
+
<div className={styles.headerLabelContainer}>
|
|
17
|
+
<span className={styles.errorHeaderLabel}>
|
|
18
|
+
{t('failedToLoadMetrics', 'Failed to load')} {headerLabel}
|
|
19
|
+
</span>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div className={styles.errorMessage}>
|
|
23
|
+
<p>{t('metricLoadErrorMessage', 'Please contact your system administrator if the problem persists.')}</p>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</article>
|
|
27
|
+
);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default MetricsErrorCard;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
@use '@carbon/colors';
|
|
2
|
+
@use '@carbon/layout';
|
|
3
|
+
@use '@carbon/type';
|
|
4
|
+
@use '@openmrs/esm-styleguide/src/vars' as *;
|
|
5
|
+
|
|
6
|
+
.container {
|
|
7
|
+
flex-grow: 1;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.tileContainer {
|
|
11
|
+
border: 1px solid $ui-03;
|
|
12
|
+
height: 7.875rem;
|
|
13
|
+
padding: layout.$spacing-05;
|
|
14
|
+
display: flex;
|
|
15
|
+
justify-content: space-between;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.tileHeader {
|
|
20
|
+
display: flex;
|
|
21
|
+
justify-content: space-between;
|
|
22
|
+
align-items: baseline;
|
|
23
|
+
margin-bottom: layout.$spacing-03;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.errorHeaderLabel {
|
|
27
|
+
@include type.type-style('heading-compact-01');
|
|
28
|
+
color: var(--omrs-color-danger);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.errorMessage {
|
|
32
|
+
@include type.type-style('body-compact-01');
|
|
33
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import MetricsCard from './metrics-card.component';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { useAllAppointmentsByDate } from '../../hooks/useClinicalMetrics';
|
|
5
|
+
import { formatDate, parseDate } from '@openmrs/esm-framework';
|
|
6
|
+
import { useAppointmentsStore } from '../../store';
|
|
7
|
+
|
|
8
|
+
export default function ProvidersBookedExtension() {
|
|
9
|
+
const { t } = useTranslation();
|
|
10
|
+
const { totalProviders } = useAllAppointmentsByDate();
|
|
11
|
+
const { selectedDate } = useAppointmentsStore();
|
|
12
|
+
const formattedStartDate = formatDate(parseDate(selectedDate), { mode: 'standard', time: false });
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<MetricsCard
|
|
16
|
+
headerLabel={t('providersBooked', 'Providers booked: {{time}}', { time: formattedStartDate })}
|
|
17
|
+
label={t('providers', 'Providers')}
|
|
18
|
+
value={totalProviders}
|
|
19
|
+
/>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import MetricsCard from './metrics-card.component';
|
|
4
|
+
import { useScheduledAppointments } from '../../hooks/useClinicalMetrics';
|
|
5
|
+
import { useAppointmentsStore } from '../../store';
|
|
6
|
+
import { useAppointmentList } from '../../hooks/useAppointmentList';
|
|
7
|
+
|
|
8
|
+
export default function ScheduledAppointmentsExtension() {
|
|
9
|
+
const { t } = useTranslation();
|
|
10
|
+
const { appointmentServiceTypes } = useAppointmentsStore();
|
|
11
|
+
|
|
12
|
+
const { appointmentList: arrivedAppointments } = useAppointmentList('CheckedIn');
|
|
13
|
+
const { appointmentList: pendingAppointments } = useAppointmentList('Scheduled');
|
|
14
|
+
|
|
15
|
+
const { totalScheduledAppointments } = useScheduledAppointments(appointmentServiceTypes);
|
|
16
|
+
|
|
17
|
+
const filteredArrivedAppointments = appointmentServiceTypes
|
|
18
|
+
? arrivedAppointments.filter(({ service }) => appointmentServiceTypes.includes(service.uuid))
|
|
19
|
+
: arrivedAppointments;
|
|
20
|
+
|
|
21
|
+
const filteredPendingAppointments = appointmentServiceTypes
|
|
22
|
+
? pendingAppointments.filter(({ service }) => appointmentServiceTypes.includes(service.uuid))
|
|
23
|
+
: pendingAppointments;
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<MetricsCard
|
|
27
|
+
count={{ pendingAppointments: filteredPendingAppointments, arrivedAppointments: filteredArrivedAppointments }}
|
|
28
|
+
headerLabel={t('scheduledAppointments', 'Scheduled appointments')}
|
|
29
|
+
label={t('appointments', 'Appointments')}
|
|
30
|
+
value={totalScheduledAppointments}
|
|
31
|
+
/>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ExtensionSlot } from '@openmrs/esm-framework';
|
|
3
|
+
import MetricsHeader from './metrics-header.component';
|
|
4
|
+
import styles from './metrics-container.scss';
|
|
5
|
+
|
|
6
|
+
interface AppointmentMetricsProps {
|
|
7
|
+
appointmentServiceTypes: Array<string>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const AppointmentsMetrics: React.FC<AppointmentMetricsProps> = ({ appointmentServiceTypes }) => {
|
|
11
|
+
return (
|
|
12
|
+
<>
|
|
13
|
+
<MetricsHeader />
|
|
14
|
+
<ExtensionSlot name="appointments-metrics-slot" className={styles.cardContainer} />
|
|
15
|
+
</>
|
|
16
|
+
);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default AppointmentsMetrics;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
@use '@carbon/layout';
|
|
2
|
+
@use '@openmrs/esm-styleguide/src/vars' as *;
|
|
3
|
+
|
|
4
|
+
.cardContainer {
|
|
5
|
+
background-color: $ui-02;
|
|
6
|
+
display: flex;
|
|
7
|
+
padding: 0 layout.$spacing-05 layout.$spacing-07 layout.$spacing-05;
|
|
8
|
+
flex-flow: row wrap;
|
|
9
|
+
margin-top: -(layout.$spacing-03);
|
|
10
|
+
gap: layout.$spacing-05;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.cardContainer > * {
|
|
14
|
+
flex: 1 0 0%;
|
|
15
|
+
min-width: 18.75rem;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@media (max-width: calc(layout.$spacing-05 * 2 + 18.75rem)) {
|
|
19
|
+
.cardContainer > *:has(:global(.cardWithChildren)) {
|
|
20
|
+
order: 999;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -6,14 +6,14 @@ import { Calendar, Hospital } from '@carbon/react/icons';
|
|
|
6
6
|
import { Button } from '@carbon/react';
|
|
7
7
|
import { ExtensionSlot, isDesktop, launchWorkspace, navigate, useLayoutType } from '@openmrs/esm-framework';
|
|
8
8
|
import { spaHomePage } from '../constants';
|
|
9
|
-
import {
|
|
9
|
+
import { useAppointmentsStore } from '../store';
|
|
10
10
|
import styles from './metrics-header.scss';
|
|
11
11
|
|
|
12
12
|
dayjs.extend(isToday);
|
|
13
13
|
|
|
14
14
|
const MetricsHeader: React.FC = () => {
|
|
15
15
|
const { t } = useTranslation();
|
|
16
|
-
const { selectedDate } =
|
|
16
|
+
const { selectedDate } = useAppointmentsStore();
|
|
17
17
|
const layout = useLayoutType();
|
|
18
18
|
const responsiveSize = isDesktop(layout) ? 'sm' : 'md';
|
|
19
19
|
|
package/src/routes.json
CHANGED
|
@@ -105,6 +105,24 @@
|
|
|
105
105
|
"name": "home-appointments-tile",
|
|
106
106
|
"slot": "home-metrics-tiles-slot",
|
|
107
107
|
"component": "homeAppointmentsTile"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"name": "metrics-card-scheduled-appointments",
|
|
111
|
+
"component": "metricsCardScheduledAppointments",
|
|
112
|
+
"slot": "appointments-metrics-slot",
|
|
113
|
+
"order": 1
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"name": "metrics-card-highest-volume-service",
|
|
117
|
+
"component": "metricsCardHighestVolumeService",
|
|
118
|
+
"slot": "appointments-metrics-slot",
|
|
119
|
+
"order": 2
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"name": "metrics-card-providers-booked",
|
|
123
|
+
"component": "metricsCardProvidersBooked",
|
|
124
|
+
"slot": "appointments-metrics-slot",
|
|
125
|
+
"order": 3
|
|
108
126
|
}
|
|
109
127
|
],
|
|
110
128
|
"modals": [
|
package/src/store.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createGlobalStore, isOmrsDateStrict, useStore } from '@openmrs/esm-framework';
|
|
2
|
+
import dayjs from 'dayjs';
|
|
3
|
+
import { omrsDateFormat } from './constants';
|
|
4
|
+
|
|
5
|
+
export const appointmentsStore = createGlobalStore('appointments-app', {
|
|
6
|
+
appointmentServiceTypes: getFromLocalStorage('openmrs:appointments:serviceTypes') || [],
|
|
7
|
+
selectedDate: dayjs().startOf('day').format(omrsDateFormat),
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export function useAppointmentsStore() {
|
|
11
|
+
return useStore(appointmentsStore);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function setAppointmentServiceTypes(serviceTypes: Array<string>) {
|
|
15
|
+
appointmentsStore.setState({ appointmentServiceTypes: serviceTypes });
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function setSelectedDate(date: string) {
|
|
19
|
+
if (!isOmrsDateStrict(date)) {
|
|
20
|
+
console.warn(
|
|
21
|
+
'esm-appointments-app: setSelectedDate called with incorrectly formatted date. Should be omrsDateFormat string. Received:',
|
|
22
|
+
date,
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
appointmentsStore.setState({ selectedDate: date });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Set up localStorage serialization */
|
|
29
|
+
|
|
30
|
+
let lastValueOfAppointmentServiceTypes = getFromLocalStorage('openmrs:appointments:serviceTypes');
|
|
31
|
+
|
|
32
|
+
function getFromLocalStorage(key: string) {
|
|
33
|
+
const value = localStorage.getItem(key);
|
|
34
|
+
return value ? JSON.parse(value) : undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function setInLocalStorage(key: string, value: any) {
|
|
38
|
+
localStorage.setItem(key, JSON.stringify(value));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
appointmentsStore.subscribe(({ appointmentServiceTypes }) => {
|
|
42
|
+
if (lastValueOfAppointmentServiceTypes !== appointmentServiceTypes) {
|
|
43
|
+
setInLocalStorage('openmrs:appointments:serviceTypes', appointmentServiceTypes);
|
|
44
|
+
lastValueOfAppointmentServiceTypes = appointmentServiceTypes;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import dayjs from 'dayjs';
|
|
3
3
|
import { useTranslation } from 'react-i18next';
|
|
4
4
|
import { monthDays } from '../../helpers';
|
|
5
|
-
import {
|
|
5
|
+
import { useAppointmentsStore } from '../../store';
|
|
6
6
|
import DaysOfWeekCard from '../../calendar/monthly/days-of-week.component';
|
|
7
7
|
import MonthlyWorkloadCard from './monthlyWorkCard';
|
|
8
8
|
import styles from './monthly-workload.scss';
|
|
@@ -20,7 +20,7 @@ const MonthlyCalendarView: React.FC<MonthlyCalendarViewProps> = ({
|
|
|
20
20
|
}) => {
|
|
21
21
|
const monthFormat = 'MMMM, YYYY';
|
|
22
22
|
const { t } = useTranslation();
|
|
23
|
-
const { selectedDate } =
|
|
23
|
+
const { selectedDate } = useAppointmentsStore();
|
|
24
24
|
const daysInWeek = ['SUN', 'MON', 'TUE', 'WED', 'THUR', 'FRI', 'SAT'];
|
|
25
25
|
const monthViewDate = dateToDisplay === '' ? selectedDate : dateToDisplay;
|
|
26
26
|
const daysInWeeks = daysInWeek.map((day) => t(day));
|
package/translations/am.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error scheduling appointment",
|
|
20
20
|
"appointmentHistory": "Appointment History",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Write an additional note",
|
|
24
23
|
"appointmentNotePlaceholder": "Write any additional points here",
|
|
25
24
|
"appointmentNotes": "Appointment Notes",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "Gender",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifier",
|
|
88
89
|
"invalidNumber": "Number is not valid",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Loading",
|
|
92
93
|
"location": "Location",
|
|
93
94
|
"medications": "Medications",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Missed",
|
|
95
97
|
"next": "Next",
|
|
96
98
|
"nextMonth": "Next month",
|
package/translations/ar.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "خطأ في جدولة الموعد",
|
|
20
20
|
"appointmentHistory": "تاريخ الموعد",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "كتابة ملاحظة اضافية",
|
|
24
23
|
"appointmentNotePlaceholder": "اضف نقاط اضافية هنا",
|
|
25
24
|
"appointmentNotes": "ملاحظات الموعد",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "الجنس",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "معرف",
|
|
88
89
|
"invalidNumber": "Number is not valid",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Loading",
|
|
92
93
|
"location": "الموقع",
|
|
93
94
|
"medications": "الأدوية",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "فائت",
|
|
95
97
|
"next": "Next",
|
|
96
98
|
"nextMonth": "Next month",
|
package/translations/ar_SY.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error scheduling appointment",
|
|
20
20
|
"appointmentHistory": "Appointment History",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Write an additional note",
|
|
24
23
|
"appointmentNotePlaceholder": "Write any additional points here",
|
|
25
24
|
"appointmentNotes": "Appointment Notes",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "Gender",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifier",
|
|
88
89
|
"invalidNumber": "Number is not valid",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Loading",
|
|
92
93
|
"location": "Location",
|
|
93
94
|
"medications": "Medications",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Missed",
|
|
95
97
|
"next": "Next",
|
|
96
98
|
"nextMonth": "Next month",
|
package/translations/bn.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error scheduling appointment",
|
|
20
20
|
"appointmentHistory": "সাক্ষাতের ইতিহাস",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "অতিরিক্ত নোট যুক্ত করুন",
|
|
24
23
|
"appointmentNotePlaceholder": "Write any additional points here",
|
|
25
24
|
"appointmentNotes": "Appointment Notes",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "লিঙ্গ",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifier",
|
|
88
89
|
"invalidNumber": "নম্বরটি ভ্যলিড নয়",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "লোড হচ্ছে",
|
|
92
93
|
"location": "Location",
|
|
93
94
|
"medications": "Medications",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Missed",
|
|
95
97
|
"next": "পরবর্তী",
|
|
96
98
|
"nextMonth": "পরবর্তী মাস",
|
package/translations/de.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error scheduling appointment",
|
|
20
20
|
"appointmentHistory": "Appointment History",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Write an additional note",
|
|
24
23
|
"appointmentNotePlaceholder": "Write any additional points here",
|
|
25
24
|
"appointmentNotes": "Appointment Notes",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "Gender",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifier",
|
|
88
89
|
"invalidNumber": "Number is not valid",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Loading",
|
|
92
93
|
"location": "Location",
|
|
93
94
|
"medications": "Medications",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Missed",
|
|
95
97
|
"next": "Next",
|
|
96
98
|
"nextMonth": "Next month",
|
package/translations/en.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error scheduling appointment",
|
|
20
20
|
"appointmentHistory": "Appointment History",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Write an additional note",
|
|
24
23
|
"appointmentNotePlaceholder": "Write any additional points here",
|
|
25
24
|
"appointmentNotes": "Appointment Notes",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "Gender",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifier",
|
|
88
89
|
"invalidNumber": "Number is not valid",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Loading",
|
|
92
93
|
"location": "Location",
|
|
93
94
|
"medications": "Medications",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Missed",
|
|
95
97
|
"next": "Next",
|
|
96
98
|
"nextMonth": "Next month",
|
package/translations/en_US.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error scheduling appointment",
|
|
20
20
|
"appointmentHistory": "Appointment History",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Write an additional note",
|
|
24
23
|
"appointmentNotePlaceholder": "Write any additional points here",
|
|
25
24
|
"appointmentNotes": "Appointment Notes",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "Gender",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifier",
|
|
88
89
|
"invalidNumber": "Number is not valid",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Loading",
|
|
92
93
|
"location": "Location",
|
|
93
94
|
"medications": "Medications",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Missed",
|
|
95
97
|
"next": "Next",
|
|
96
98
|
"nextMonth": "Next month",
|
package/translations/es.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error al programar la cita",
|
|
20
20
|
"appointmentHistory": "Historial de Citas",
|
|
21
21
|
"appointmentMarkedChecked": "Llegada a la Cita marcada como Registrada",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Escriba una nota adicional",
|
|
24
23
|
"appointmentNotePlaceholder": "Escriba cualquier punto adicional aquí",
|
|
25
24
|
"appointmentNotes": "Notas de la Cita",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Registrar la salida del paciente marcará la cita como completada.",
|
|
80
79
|
"endDate": "Fecha de finalización",
|
|
81
80
|
"expected": "Esperado",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filtrar Citas",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filtrar citas por tipo de servicio",
|
|
84
84
|
"filterTable": "Filtrar tabla",
|
|
85
85
|
"gender": "Género",
|
|
86
86
|
"highestServiceVolume": "Servicio de mayor volumen: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identificador",
|
|
88
89
|
"invalidNumber": "El número no es válido",
|
|
89
90
|
"isRecurringAppointment": "¿Esta es una cita recurrente?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Cargando",
|
|
92
93
|
"location": "Ubicación",
|
|
93
94
|
"medications": "Medicamentos",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Perdida",
|
|
95
97
|
"next": "Siguiente",
|
|
96
98
|
"nextMonth": "Siguiente mes",
|
package/translations/es_MX.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error scheduling appointment",
|
|
20
20
|
"appointmentHistory": "Appointment History",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Write an additional note",
|
|
24
23
|
"appointmentNotePlaceholder": "Write any additional points here",
|
|
25
24
|
"appointmentNotes": "Appointment Notes",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "Gender",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifier",
|
|
88
89
|
"invalidNumber": "Number is not valid",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Loading",
|
|
92
93
|
"location": "Location",
|
|
93
94
|
"medications": "Medications",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Missed",
|
|
95
97
|
"next": "Next",
|
|
96
98
|
"nextMonth": "Next month",
|
package/translations/fr.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Erreur lors de la planification du rendez-vous",
|
|
20
20
|
"appointmentHistory": "Historique de Rendez-vous",
|
|
21
21
|
"appointmentMarkedChecked": "Rendez-vous marqué comme honoré",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Écrire une note additionnelle",
|
|
24
23
|
"appointmentNotePlaceholder": "Écrire une note additionnelle ici",
|
|
25
24
|
"appointmentNotes": "Notes de Rendez-vous",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": " La sortie du patient marquera le rendez-vous comme terminé.",
|
|
80
79
|
"endDate": "Date de fin",
|
|
81
80
|
"expected": "Prévus:",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filtrer les rendez-vous",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filtrer les rendez-vous par type de service",
|
|
84
84
|
"filterTable": "Filtrer le tableau",
|
|
85
85
|
"gender": "Genre",
|
|
86
86
|
"highestServiceVolume": "Service le plus utilisé: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifiant",
|
|
88
89
|
"invalidNumber": "Le numéro n'est pas valide",
|
|
89
90
|
"isRecurringAppointment": "S'agit-il d'un rendez-vous récurrent?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "En cours de chargement",
|
|
92
93
|
"location": "Emplacement",
|
|
93
94
|
"medications": "Médicaments",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Manqué",
|
|
95
97
|
"next": "Suivant",
|
|
96
98
|
"nextMonth": "Le mois suivant",
|
package/translations/he.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "שגיאה בתזמון התור",
|
|
20
20
|
"appointmentHistory": "היסטוריית התורים",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "הצגת הערה נוספ",
|
|
24
23
|
"appointmentNotePlaceholder": "כאן ניתן לכתוב נקודות נוספות",
|
|
25
24
|
"appointmentNotes": "הערות לתור",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "תאריך סיום",
|
|
81
80
|
"expected": "צפוי",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "סינון הטבלה",
|
|
85
85
|
"gender": "מגדר",
|
|
86
86
|
"highestServiceVolume": "השירות הכי עמוס: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "מזהה",
|
|
88
89
|
"invalidNumber": "המספר שגוי",
|
|
89
90
|
"isRecurringAppointment": "זה תור חוזר?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "בטעינה",
|
|
92
93
|
"location": "מקום",
|
|
93
94
|
"medications": "תרופות",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "הוחמץ",
|
|
95
97
|
"next": "הבא",
|
|
96
98
|
"nextMonth": "חודש הבא",
|
package/translations/hi.json
CHANGED
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"appointmentFormError": "Error scheduling appointment",
|
|
20
20
|
"appointmentHistory": "Appointment History",
|
|
21
21
|
"appointmentMarkedChecked": "Appointment marked as Checked In",
|
|
22
|
-
"appointmentMetricsLoadError": "",
|
|
23
22
|
"appointmentNoteLabel": "Write an additional note",
|
|
24
23
|
"appointmentNotePlaceholder": "Write any additional points here",
|
|
25
24
|
"appointmentNotes": "Appointment Notes",
|
|
@@ -79,11 +78,13 @@
|
|
|
79
78
|
"endAppointmentConfirmationMessage": "Checking the patient out will mark the appointment as complete.",
|
|
80
79
|
"endDate": "End date",
|
|
81
80
|
"expected": "Expected",
|
|
81
|
+
"failedToLoadMetrics": "Failed to load",
|
|
82
82
|
"filterAppointments": "Filter appointments",
|
|
83
83
|
"filterAppointmentsByServiceType": "Filter appointments by service type",
|
|
84
84
|
"filterTable": "Filter table",
|
|
85
85
|
"gender": "Gender",
|
|
86
86
|
"highestServiceVolume": "Highest volume service: {{time}}",
|
|
87
|
+
"highestServiceVolumeCardTitle": "Highest volume service",
|
|
87
88
|
"identifier": "Identifier",
|
|
88
89
|
"invalidNumber": "Number is not valid",
|
|
89
90
|
"isRecurringAppointment": "Is this a recurring appointment?",
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
"loading": "Loading",
|
|
92
93
|
"location": "Location",
|
|
93
94
|
"medications": "Medications",
|
|
95
|
+
"metricLoadErrorMessage": "Please contact your system administrator if the problem persists.",
|
|
94
96
|
"missed": "Missed",
|
|
95
97
|
"next": "Next",
|
|
96
98
|
"nextMonth": "Next month",
|