@kenyaemr/esm-care-panel-app 5.4.2-pre.2180 → 5.4.2-pre.2189
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 +43 -43
- package/dist/346.js +1 -0
- package/dist/346.js.map +1 -0
- package/dist/373.js +1 -1
- package/dist/373.js.map +1 -1
- package/dist/574.js +1 -1
- package/dist/kenyaemr-esm-care-panel-app.js +1 -1
- package/dist/kenyaemr-esm-care-panel-app.js.buildmanifest.json +37 -37
- package/dist/kenyaemr-esm-care-panel-app.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.LICENSE.txt +0 -20
- package/dist/main.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +2 -2
- package/src/patient-summary/patient-summary-body.component.tsx +272 -0
- package/src/patient-summary/patient-summary-header.component.tsx +35 -0
- package/src/patient-summary/patient-summary-row.component.tsx +53 -0
- package/src/patient-summary/patient-summary.component.test.tsx +1 -1
- package/src/patient-summary/patient-summary.component.tsx +36 -654
- package/src/patient-summary/patient-summary.scss +21 -6
- package/src/print-layout/print.component.tsx +12 -7
- package/src/print-layout/print.scss +97 -2
- package/translations/en.json +1 -65
- package/dist/805.js +0 -1
- package/dist/805.js.map +0 -1
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import React, { useRef, useState } from 'react';
|
|
2
|
-
import dayjs from 'dayjs';
|
|
1
|
+
import React, { useRef, useState, useEffect } from 'react';
|
|
3
2
|
import { useTranslation } from 'react-i18next';
|
|
4
|
-
import {
|
|
5
|
-
import { formatDate, useLayoutType, useSession } from '@openmrs/esm-framework';
|
|
3
|
+
import { StructuredListSkeleton } from '@carbon/react';
|
|
6
4
|
import { usePatientSummary } from '../hooks/usePatientSummary';
|
|
7
|
-
import { Printer } from '@carbon/react/icons';
|
|
8
5
|
import { useReactToPrint } from 'react-to-print';
|
|
9
6
|
import PrintComponent from '../print-layout/print.component';
|
|
7
|
+
import PatientSummaryHeader from './patient-summary-header.component';
|
|
8
|
+
import PatientSummaryBody from './patient-summary-body.component';
|
|
10
9
|
import styles from './patient-summary.scss';
|
|
11
10
|
|
|
12
11
|
interface PatientSummaryProps {
|
|
@@ -14,673 +13,56 @@ interface PatientSummaryProps {
|
|
|
14
13
|
}
|
|
15
14
|
|
|
16
15
|
const PatientSummary: React.FC<PatientSummaryProps> = ({ patientUuid }) => {
|
|
16
|
+
const { t } = useTranslation();
|
|
17
17
|
const { data, error, isLoading } = usePatientSummary(patientUuid);
|
|
18
|
-
const currentUserSession = useSession();
|
|
19
|
-
const componentRef = useRef(null);
|
|
20
|
-
const [printMode, setPrintMode] = useState(false);
|
|
21
18
|
|
|
22
|
-
const
|
|
23
|
-
const
|
|
19
|
+
const printRef = useRef<HTMLDivElement>(null);
|
|
20
|
+
const [showPrintComponent, setShowPrintComponent] = useState(false);
|
|
24
21
|
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
onAfterPrint: () =>
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
const handlePrint = useReactToPrint({
|
|
23
|
+
contentRef: printRef,
|
|
24
|
+
documentTitle: 'Patient Summary',
|
|
25
|
+
onAfterPrint: () => {
|
|
26
|
+
setShowPrintComponent(false);
|
|
27
|
+
},
|
|
31
28
|
});
|
|
32
29
|
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
await delay(500);
|
|
36
|
-
printRef();
|
|
30
|
+
const onPrintClick = () => {
|
|
31
|
+
setShowPrintComponent(true);
|
|
37
32
|
};
|
|
38
33
|
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (showPrintComponent && printRef.current) {
|
|
36
|
+
handlePrint?.();
|
|
37
|
+
}
|
|
38
|
+
}, [showPrintComponent, handlePrint]);
|
|
39
|
+
|
|
39
40
|
if (isLoading) {
|
|
40
41
|
return <StructuredListSkeleton role="progressbar" />;
|
|
41
42
|
}
|
|
42
|
-
|
|
43
43
|
if (error) {
|
|
44
44
|
return <span>{t('errorPatientSummary', 'Error loading patient summary')}</span>;
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return;
|
|
46
|
+
if (!data || Object.keys(data).length === 0) {
|
|
47
|
+
return <span>{t('noPatientSummary', 'No patient summary available')}</span>;
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
{
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
{printMode === false && (
|
|
59
|
-
<Button
|
|
60
|
-
size="sm"
|
|
61
|
-
className={styles.btnShow}
|
|
62
|
-
onClick={() => {
|
|
63
|
-
handlePrint(), setPrintMode(true);
|
|
64
|
-
}}
|
|
65
|
-
kind="tertiary"
|
|
66
|
-
renderIcon={(props) => <Printer size={16} {...props} />}
|
|
67
|
-
iconDescription={t('print', 'Print')}>
|
|
68
|
-
{t('print', 'Print')}
|
|
69
|
-
</Button>
|
|
70
|
-
)}
|
|
71
|
-
</div>
|
|
72
|
-
<div className={styles.container}>
|
|
73
|
-
<div className={styles.content}>
|
|
74
|
-
<p className={styles.label}>{t('reportDate', 'Report date')}</p>
|
|
75
|
-
<p>
|
|
76
|
-
<span className={styles.value}>
|
|
77
|
-
{data?.reportDate ? formatDate(new Date(data?.reportDate), { noToday: true }) : '--'}
|
|
78
|
-
</span>
|
|
79
|
-
</p>
|
|
80
|
-
</div>
|
|
81
|
-
<div className={styles.content}>
|
|
82
|
-
<p className={styles.label}>{t('clinicName', 'Clinic name')}</p>
|
|
83
|
-
<p>
|
|
84
|
-
<span className={styles.value}>{data?.clinicName ? data?.clinicName : '--'}</span>
|
|
85
|
-
</p>
|
|
86
|
-
</div>
|
|
87
|
-
<div className={styles.content}>
|
|
88
|
-
<p className={styles.label}>{t('mflCode', 'MFL code')}</p>
|
|
89
|
-
<p>
|
|
90
|
-
<span className={styles.value}>{data?.mflCode}</span>
|
|
91
|
-
</p>
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
|
|
95
|
-
<div className={styles.container}>
|
|
96
|
-
<div className={styles.content}>
|
|
97
|
-
<p className={styles.label}>{t('uniquePatientIdentifier', 'Unique patient identifier')}</p>
|
|
98
|
-
<p>
|
|
99
|
-
<span className={styles.value}>
|
|
100
|
-
{data?.uniquePatientIdentifier ? data?.uniquePatientIdentifier : '--'}
|
|
101
|
-
</span>
|
|
102
|
-
</p>
|
|
103
|
-
</div>
|
|
104
|
-
<div className={styles.content}>
|
|
105
|
-
<p className={styles.label}>
|
|
106
|
-
{t('nationalUniquePatientIdentifier', 'National unique patient identifier')}
|
|
107
|
-
</p>
|
|
108
|
-
<p>
|
|
109
|
-
<span className={styles.value}>
|
|
110
|
-
{data?.nationalUniquePatientIdentifier ? data?.nationalUniquePatientIdentifier : '--'}
|
|
111
|
-
</span>
|
|
112
|
-
</p>
|
|
113
|
-
</div>
|
|
114
|
-
<div className={styles.content}>
|
|
115
|
-
<p className={styles.label}>{t('patientName', 'Patient name')}</p>
|
|
116
|
-
<p>
|
|
117
|
-
<span className={styles.value}>{data?.patientName ? data?.patientName : '--'}</span>
|
|
118
|
-
</p>
|
|
119
|
-
</div>
|
|
120
|
-
</div>
|
|
121
|
-
|
|
122
|
-
<div className={styles.container}>
|
|
123
|
-
<div className={styles.content}>
|
|
124
|
-
<p className={styles.label}>{t('birthDate', 'Birth date')}</p>
|
|
125
|
-
<p>
|
|
126
|
-
<span className={styles.value}>{data?.birthDate ? formatDate(new Date(data?.birthDate)) : '--'}</span>
|
|
127
|
-
</p>
|
|
128
|
-
</div>
|
|
129
|
-
<div className={styles.content}>
|
|
130
|
-
<p className={styles.label}>{t('age', 'Age')}</p>
|
|
131
|
-
<p>
|
|
132
|
-
<span className={styles.value}>{data?.age ? data?.age : '--'}</span>
|
|
133
|
-
</p>
|
|
134
|
-
</div>
|
|
135
|
-
<div className={styles.content}>
|
|
136
|
-
<p className={styles.label}>{t('gender', 'Gender')}</p>
|
|
137
|
-
<p>
|
|
138
|
-
<span className={styles.value}>
|
|
139
|
-
{data?.gender === 'F' ? 'Female' : data?.gender === 'M' ? 'Male' : 'Unknown'}
|
|
140
|
-
</span>
|
|
141
|
-
</p>
|
|
142
|
-
</div>
|
|
143
|
-
</div>
|
|
144
|
-
|
|
145
|
-
<div className={styles.container}>
|
|
146
|
-
<div className={styles.content}>
|
|
147
|
-
<p className={styles.label}>{t('maritalStatus', 'Marital status')}</p>
|
|
148
|
-
<p>
|
|
149
|
-
<span className={styles.value}>{data?.maritalStatus ? data?.maritalStatus : '--'}</span>
|
|
150
|
-
</p>
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
|
|
154
|
-
<hr />
|
|
155
|
-
|
|
156
|
-
<div className={styles.container}>
|
|
157
|
-
<div className={styles.content}>
|
|
158
|
-
<p className={styles.label}>{t('dateConfirmedPositive', 'Date confirmed HIV positive')}</p>
|
|
159
|
-
<p>
|
|
160
|
-
<span className={styles.value}>
|
|
161
|
-
{data?.dateConfirmedHIVPositive ? formatDate(new Date(data?.dateConfirmedHIVPositive)) : '--'}
|
|
162
|
-
</span>
|
|
163
|
-
</p>
|
|
164
|
-
</div>
|
|
165
|
-
<div className={styles.content}>
|
|
166
|
-
<p className={styles.label}>{t('firstCD4', 'First CD4')}</p>
|
|
167
|
-
<p>
|
|
168
|
-
<span className={styles.value}>{data?.firstCd4 ? data?.firstCd4 : '--'}</span>
|
|
169
|
-
</p>
|
|
170
|
-
</div>
|
|
171
|
-
<div className={styles.content}>
|
|
172
|
-
<p className={styles.label}>{t('dateFirstCD4', 'Date first CD4')}</p>
|
|
173
|
-
<p>
|
|
174
|
-
<span className={styles.value}>
|
|
175
|
-
{data?.firstCd4Date === 'N/A' || data?.firstCd4Date === '' ? (
|
|
176
|
-
<span>None</span>
|
|
177
|
-
) : (
|
|
178
|
-
<span>{data?.firstCd4Date ? formatDate(new Date(data?.firstCd4Date)) : '--'}</span>
|
|
179
|
-
)}
|
|
180
|
-
</span>
|
|
181
|
-
</p>
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
|
|
185
|
-
<div className={styles.container}>
|
|
186
|
-
<div className={styles.content}>
|
|
187
|
-
<p className={styles.label}>{t('dateEnrolledToCare', 'Date enrolled into care')}</p>
|
|
188
|
-
<p>
|
|
189
|
-
<span className={styles.value}>
|
|
190
|
-
{data?.dateEnrolledIntoCare ? formatDate(new Date(data?.dateEnrolledIntoCare)) : '--'}
|
|
191
|
-
</span>
|
|
192
|
-
</p>
|
|
193
|
-
</div>
|
|
194
|
-
<div className={styles.content}>
|
|
195
|
-
<p className={styles.label}>{t('whoAtEnrollment', 'WHO stage at enrollment')}</p>
|
|
196
|
-
<p>
|
|
197
|
-
<span className={styles.value}>
|
|
198
|
-
{data?.whoStagingAtEnrollment ? data?.whoStagingAtEnrollment : '--'}
|
|
199
|
-
</span>
|
|
200
|
-
</p>
|
|
201
|
-
</div>
|
|
202
|
-
<div className={styles.content}>
|
|
203
|
-
<p className={styles.label}>{t('transferInDate', 'Transfer in date')}</p>
|
|
204
|
-
<p>
|
|
205
|
-
<span className={styles.value}>
|
|
206
|
-
{data?.transferInDate === 'N/A' || data?.transferInDate === '' ? (
|
|
207
|
-
<span>None</span>
|
|
208
|
-
) : (
|
|
209
|
-
<span>{data?.transferInDate}</span>
|
|
210
|
-
)}
|
|
211
|
-
</span>
|
|
212
|
-
</p>
|
|
213
|
-
</div>
|
|
214
|
-
</div>
|
|
215
|
-
|
|
216
|
-
<div className={styles.container}>
|
|
217
|
-
<div className={styles.content}>
|
|
218
|
-
<p className={styles.label}>{t('entryPoint', 'Entry point')}</p>
|
|
219
|
-
<p>
|
|
220
|
-
<span className={styles.value}>{data?.patientEntryPoint ? data?.patientEntryPoint : '--'}</span>
|
|
221
|
-
</p>
|
|
222
|
-
</div>
|
|
223
|
-
<div className={styles.content}>
|
|
224
|
-
<p className={styles.label}>{t('dateOfEntryPoint', 'Date of entry point')}</p>
|
|
225
|
-
<p>
|
|
226
|
-
<span className={styles.value}>
|
|
227
|
-
{data?.patientEntryPointDate ? formatDate(new Date(data?.patientEntryPointDate)) : '--'}
|
|
228
|
-
</span>
|
|
229
|
-
</p>
|
|
230
|
-
</div>
|
|
231
|
-
<div className={styles.content}>
|
|
232
|
-
<p className={styles.label}>{t('facilityTransferredFrom', 'Facility transferred from')}</p>
|
|
233
|
-
<p>
|
|
234
|
-
<span className={styles.value}>{data?.transferInFacility ? data?.transferInFacility : '--'}</span>
|
|
235
|
-
</p>
|
|
236
|
-
</div>
|
|
237
|
-
</div>
|
|
238
|
-
|
|
239
|
-
<hr />
|
|
240
|
-
|
|
241
|
-
<div className={styles.container}>
|
|
242
|
-
<div className={styles.content}>
|
|
243
|
-
<p className={styles.label}>{t('weight', 'Weight')}</p>
|
|
244
|
-
<p>
|
|
245
|
-
<span className={styles.value}>{data?.weight ? data?.weight : '--'}</span>
|
|
246
|
-
</p>
|
|
247
|
-
</div>
|
|
248
|
-
<div className={styles.content}>
|
|
249
|
-
<p className={styles.label}>{t('height', 'Height')}</p>
|
|
250
|
-
<p>
|
|
251
|
-
<span className={styles.value}>{data?.height ? data?.height : '--'}</span>
|
|
252
|
-
</p>
|
|
253
|
-
</div>
|
|
254
|
-
<div className={styles.content}>
|
|
255
|
-
<p className={styles.label}>{t('bmi', 'BMI')}</p>
|
|
256
|
-
<p>
|
|
257
|
-
<span className={styles.value}>{data?.bmi ? data?.bmi : '--'}</span>
|
|
258
|
-
</p>
|
|
259
|
-
</div>
|
|
260
|
-
</div>
|
|
261
|
-
|
|
262
|
-
<div className={styles.container}>
|
|
263
|
-
<div className={styles.content}>
|
|
264
|
-
<p className={styles.label}>{t('bloodPressure', 'Blood pressure')}</p>
|
|
265
|
-
<p>
|
|
266
|
-
<span className={styles.value}>
|
|
267
|
-
{data?.bloodPressure && data?.bpDiastolic ? `${data?.bloodPressure}/${data?.bpDiastolic}` : '--'}
|
|
268
|
-
</span>
|
|
269
|
-
</p>
|
|
270
|
-
</div>
|
|
271
|
-
<div className={styles.content}>
|
|
272
|
-
<p className={styles.label}>{t('oxygenSaturation', 'Oxygen saturation')}</p>
|
|
273
|
-
<p>
|
|
274
|
-
<span className={styles.value}>{data?.oxygenSaturation ? data?.oxygenSaturation : '--'}</span>
|
|
275
|
-
</p>
|
|
276
|
-
</div>
|
|
277
|
-
<div className={styles.content}>
|
|
278
|
-
<p className={styles.label}>{t('respiratoryRate', 'Respiratory rate')}</p>
|
|
279
|
-
<p>
|
|
280
|
-
<span className={styles.value}>{data?.respiratoryRate ? data?.respiratoryRate : '--'}</span>
|
|
281
|
-
</p>
|
|
282
|
-
</div>
|
|
283
|
-
</div>
|
|
284
|
-
|
|
285
|
-
<div className={styles.container}>
|
|
286
|
-
<div className={styles.content}>
|
|
287
|
-
<p className={styles.label}>{t('pulseRate', 'Pulse rate')}</p>
|
|
288
|
-
<p>
|
|
289
|
-
<span className={styles.value}>{data?.pulseRate ? data?.pulseRate : '--'}</span>
|
|
290
|
-
</p>
|
|
291
|
-
</div>
|
|
292
|
-
<div className={styles.content}>
|
|
293
|
-
<p className={styles.label}>{t('familyProtection', 'FP method')}</p>
|
|
294
|
-
<p>
|
|
295
|
-
<span className={styles.value}>{data?.familyProtection ? data?.familyProtection : '--'}</span>
|
|
296
|
-
</p>
|
|
297
|
-
</div>
|
|
298
|
-
<div className={styles.content}>
|
|
299
|
-
<p className={styles.label}>{t('tbScreeningOutcome', 'TB screening outcome')}</p>
|
|
300
|
-
<p>
|
|
301
|
-
<span className={styles.value}>{data?.tbScreeningOutcome ? data?.tbScreeningOutcome : '--'}</span>
|
|
302
|
-
</p>
|
|
303
|
-
</div>
|
|
304
|
-
</div>
|
|
305
|
-
|
|
306
|
-
<div className={styles.container}>
|
|
307
|
-
<div className={styles.content}>
|
|
308
|
-
<p className={styles.label}>{t('chronicDisease', 'Chronic disease')}</p>
|
|
309
|
-
<p>
|
|
310
|
-
<span className={styles.value}>{data?.chronicDisease ? data?.chronicDisease : '--'}</span>
|
|
311
|
-
</p>
|
|
312
|
-
</div>
|
|
313
|
-
<div className={styles.content}>
|
|
314
|
-
<p className={styles.label}>{t('ioHistory', ' OI history')}</p>
|
|
315
|
-
<p>
|
|
316
|
-
<span className={styles.value}>{data?.iosResults ? data?.iosResults : '--'}</span>
|
|
317
|
-
</p>
|
|
318
|
-
</div>
|
|
319
|
-
<div className={styles.content}>
|
|
320
|
-
<p className={styles.label}>{t('stiScreeningOutcome', 'Sti screening')}</p>
|
|
321
|
-
<p>
|
|
322
|
-
<span className={styles.value}>{data?.stiScreeningOutcome ? data?.stiScreeningOutcome : '--'}</span>
|
|
323
|
-
</p>
|
|
324
|
-
</div>
|
|
325
|
-
</div>
|
|
326
|
-
|
|
327
|
-
<div className={styles.container}>
|
|
328
|
-
{data?.gender === 'F' && (
|
|
329
|
-
<div className={styles.content}>
|
|
330
|
-
<p className={styles.label}>{t('caxcScreeningOutcome', 'Caxc screening')}</p>
|
|
331
|
-
<p>
|
|
332
|
-
<span className={styles.value}>{data?.caxcScreeningOutcome ? data?.caxcScreeningOutcome : '--'}</span>
|
|
333
|
-
</p>
|
|
334
|
-
</div>
|
|
335
|
-
)}
|
|
336
|
-
|
|
337
|
-
<div className={styles.content}>
|
|
338
|
-
<p className={styles.label}>{t('dateEnrolledInTb', 'TPT start date')}</p>
|
|
339
|
-
<p>
|
|
340
|
-
<span className={styles.value}>
|
|
341
|
-
{data?.dateEnrolledInTb === 'None' || data?.dateEnrolledInTb === '' ? (
|
|
342
|
-
<span>None</span>
|
|
343
|
-
) : (
|
|
344
|
-
<span>{data?.dateEnrolledInTb ? formatDate(new Date(data?.dateEnrolledInTb)) : '--'}</span>
|
|
345
|
-
)}
|
|
346
|
-
</span>
|
|
347
|
-
</p>
|
|
348
|
-
</div>
|
|
349
|
-
<div className={styles.content}>
|
|
350
|
-
<p className={styles.label}>{t('dateCompletedInTb', 'TPT completion date')}</p>
|
|
351
|
-
<p>
|
|
352
|
-
<span className={styles.value}>
|
|
353
|
-
{data?.dateCompletedInTb === 'None' || data?.dateCompletedInTb === '' ? (
|
|
354
|
-
<span>None</span>
|
|
355
|
-
) : (
|
|
356
|
-
<span>{data?.dateCompletedInTb ? formatDate(new Date(data?.dateCompletedInTb)) : '--'}</span>
|
|
357
|
-
)}
|
|
358
|
-
</span>
|
|
359
|
-
</p>
|
|
360
|
-
</div>
|
|
361
|
-
{data?.gender === 'F' && (
|
|
362
|
-
<div className={styles.content}>
|
|
363
|
-
<p className={styles.label}>{t('lmp', 'LMP')}</p>
|
|
364
|
-
<p>
|
|
365
|
-
<span className={styles.value}>{data?.lmp ? formatDate(new Date(data?.lmp)) : '--'}</span>
|
|
366
|
-
</p>
|
|
367
|
-
</div>
|
|
368
|
-
)}
|
|
369
|
-
</div>
|
|
370
|
-
|
|
371
|
-
<hr />
|
|
372
|
-
|
|
373
|
-
<div className={styles.container}>
|
|
374
|
-
<div className={styles.content}>
|
|
375
|
-
<p className={styles.label}>{t('treatmentSupporterName', 'Treatment supporter name')}</p>
|
|
376
|
-
<p>
|
|
377
|
-
<span className={styles.value}>
|
|
378
|
-
{data?.nameOfTreatmentSupporter ? data?.nameOfTreatmentSupporter : '--'}
|
|
379
|
-
</span>
|
|
380
|
-
</p>
|
|
381
|
-
</div>
|
|
382
|
-
<div className={styles.content}>
|
|
383
|
-
<p className={styles.label}>{t('treatmentSupporterRelationship', 'Treatment supporter relationship')}</p>
|
|
384
|
-
<p>
|
|
385
|
-
<span className={styles.value}>
|
|
386
|
-
{data?.relationshipToTreatmentSupporter ? data?.relationshipToTreatmentSupporter : '--'}
|
|
387
|
-
</span>
|
|
388
|
-
</p>
|
|
389
|
-
</div>
|
|
390
|
-
<div className={styles.content}>
|
|
391
|
-
<p className={styles.label}>{t('treatmentSupporterContact', 'Treatment Supporter contact')}</p>
|
|
392
|
-
<p>
|
|
393
|
-
<span className={styles.value}>
|
|
394
|
-
{data?.contactOfTreatmentSupporter ? data?.contactOfTreatmentSupporter : '--'}
|
|
395
|
-
</span>
|
|
396
|
-
</p>
|
|
397
|
-
</div>
|
|
398
|
-
</div>
|
|
399
|
-
|
|
400
|
-
<hr />
|
|
401
|
-
|
|
402
|
-
<div className={styles.container}>
|
|
403
|
-
<div className={styles.content}>
|
|
404
|
-
<p className={styles.label}>{t('drugAllergies', 'Drug allergies')}</p>
|
|
405
|
-
<p>
|
|
406
|
-
<span className={styles.value}>{data?.allergies ? data?.allergies : '--'}</span>
|
|
407
|
-
</p>
|
|
408
|
-
</div>
|
|
409
|
-
</div>
|
|
410
|
-
|
|
411
|
-
<hr />
|
|
412
|
-
|
|
413
|
-
<div className={styles.container}>
|
|
414
|
-
<div className={styles.content}>
|
|
415
|
-
<p className={styles.label}>{t('previousART', 'Previous ART')}</p>
|
|
416
|
-
<p>
|
|
417
|
-
<span className={styles.value}>{data?.previousArtStatus ? data?.previousArtStatus : '--'}</span>
|
|
418
|
-
</p>
|
|
419
|
-
</div>
|
|
420
|
-
<div className={styles.content}>
|
|
421
|
-
<p className={styles.label}>{t('dateStartedART', 'Date started ART')}</p>
|
|
422
|
-
<p>
|
|
423
|
-
<span className={styles.value}>
|
|
424
|
-
{data?.dateStartedArt ? formatDate(new Date(data?.dateStartedArt)) : '--'}
|
|
425
|
-
</span>
|
|
426
|
-
</p>
|
|
427
|
-
</div>
|
|
428
|
-
<div className={styles.content}>
|
|
429
|
-
<p className={styles.label}>{t('clinicalStageART', 'Clinical stage at ART')}</p>
|
|
430
|
-
<p>
|
|
431
|
-
<span className={styles.value}>{data?.whoStageAtArtStart ? data?.whoStageAtArtStart : '--'}</span>
|
|
432
|
-
</p>
|
|
433
|
-
</div>
|
|
434
|
-
</div>
|
|
435
|
-
|
|
436
|
-
<div className={styles.container}>
|
|
437
|
-
<div className={styles.content}>
|
|
438
|
-
<p className={styles.label}>{t('purposeDrugs', 'Purpose drugs')}</p>
|
|
439
|
-
<p>
|
|
440
|
-
<span className={styles.value}>{data?.purposeDrugs ? data?.purposeDrugs : 'None'}</span>
|
|
441
|
-
</p>
|
|
442
|
-
</div>
|
|
443
|
-
<div className={styles.content}>
|
|
444
|
-
<p className={styles.label}>{t('purposeDate', 'Purpose drugs date')}</p>
|
|
445
|
-
<p>
|
|
446
|
-
<span className={styles.value}>
|
|
447
|
-
{data?.purposeDate ? formatDate(new Date(data?.purposeDate)) : 'None'}
|
|
448
|
-
</span>
|
|
449
|
-
</p>
|
|
450
|
-
</div>
|
|
451
|
-
<div className={styles.content}>
|
|
452
|
-
<p className={styles.label}>{t('cd4AtArtStart', 'CD4 at ART start')}</p>
|
|
453
|
-
<p>
|
|
454
|
-
<span className={styles.value}>{data?.cd4AtArtStart ? data?.cd4AtArtStart : '--'}</span>
|
|
455
|
-
</p>
|
|
456
|
-
</div>
|
|
457
|
-
</div>
|
|
458
|
-
|
|
459
|
-
<div className={styles.container}>
|
|
460
|
-
<div className={styles.content}>
|
|
461
|
-
<p className={styles.label}>{t('initialRegimen', 'Initial regimen')}</p>
|
|
462
|
-
<p>
|
|
463
|
-
<span className={styles.value}>
|
|
464
|
-
{data?.firstRegimen ? data?.firstRegimen?.regimenShortDisplay : '--'}
|
|
465
|
-
</span>
|
|
466
|
-
</p>
|
|
467
|
-
</div>
|
|
468
|
-
<div className={styles.content}>
|
|
469
|
-
<p className={styles.label}>{t('initialRegimenDate', 'Initial regimen date')}</p>
|
|
470
|
-
<p>
|
|
471
|
-
<span className={styles.value}>{data?.firstRegimen ? data?.firstRegimen?.startDate : '--'}</span>
|
|
472
|
-
</p>
|
|
473
|
-
</div>
|
|
474
|
-
<div className={styles.content}>
|
|
475
|
-
<p className={styles.label}>{t('currentArtRegimen', 'Current Art regimen')}</p>
|
|
476
|
-
<p>
|
|
477
|
-
<span className={styles.value}>
|
|
478
|
-
{data?.currentArtRegimen ? data?.currentArtRegimen?.regimenShortDisplay : '--'}
|
|
479
|
-
</span>
|
|
480
|
-
</p>
|
|
481
|
-
</div>
|
|
482
|
-
<div className={styles.content}>
|
|
483
|
-
<p className={styles.label}>{t('currentArtRegimenDate', 'Current Art regimen date')}</p>
|
|
484
|
-
<p>
|
|
485
|
-
<span className={styles.value}>
|
|
486
|
-
{data?.currentArtRegimen ? formatDate(new Date(data?.currentArtRegimen?.startDate)) : '--'}
|
|
487
|
-
</span>
|
|
488
|
-
</p>
|
|
489
|
-
</div>
|
|
490
|
-
</div>
|
|
491
|
-
|
|
492
|
-
<hr />
|
|
493
|
-
|
|
494
|
-
<div className={styles.container}>
|
|
495
|
-
<div className={styles.content}>
|
|
496
|
-
<p className={styles.label}>{t('artInterruptionReason', 'ART interruptions reason')}</p>
|
|
497
|
-
<p>
|
|
498
|
-
<span className={styles.value}>--</span>
|
|
499
|
-
<span className={styles.label}> </span>
|
|
500
|
-
</p>
|
|
501
|
-
</div>
|
|
502
|
-
<div className={styles.content}>
|
|
503
|
-
<p className={styles.label}>
|
|
504
|
-
{t('substitutionWithin1stLineRegimen', 'Substitution within 1st line regimen')}
|
|
505
|
-
</p>
|
|
506
|
-
<p>
|
|
507
|
-
<span className={styles.value}>--</span>
|
|
508
|
-
<span className={styles.label}> </span>
|
|
509
|
-
</p>
|
|
510
|
-
</div>
|
|
511
|
-
<div className={styles.content}>
|
|
512
|
-
<p className={styles.label}>{t('switchTo2ndLineRegimen', 'Switch to 2nd line regimen')}</p>
|
|
513
|
-
<p>
|
|
514
|
-
<span className={styles.value}>--</span>
|
|
515
|
-
<span className={styles.label}> </span>
|
|
516
|
-
</p>
|
|
517
|
-
</div>
|
|
518
|
-
</div>
|
|
519
|
-
|
|
520
|
-
<div className={styles.container}>
|
|
521
|
-
<div className={styles.content}>
|
|
522
|
-
<p className={styles.label}>{t('Dapsone', 'Dapsone')}</p>
|
|
523
|
-
<p>
|
|
524
|
-
<span className={styles.value}>{data?.dapsone ? data?.dapsone : '--'}</span>
|
|
525
|
-
</p>
|
|
526
|
-
</div>
|
|
527
|
-
<div className={styles.content}>
|
|
528
|
-
<p className={styles.label}>{t('tpt', 'TPT')}</p>
|
|
529
|
-
<p>
|
|
530
|
-
<span className={styles.value}>{data?.onIpt ? data?.onIpt : '--'}</span>
|
|
531
|
-
</p>
|
|
532
|
-
</div>
|
|
533
|
-
<div className={styles.content}>
|
|
534
|
-
<p className={styles.label}>{t('clinicsEnrolled', 'Clinics enrolled')}</p>
|
|
535
|
-
<p>
|
|
536
|
-
<span className={styles.value}>{data?.clinicsEnrolled ? data?.clinicsEnrolled : '--'}</span>
|
|
537
|
-
</p>
|
|
538
|
-
</div>
|
|
539
|
-
</div>
|
|
540
|
-
|
|
541
|
-
<div className={styles.container}>
|
|
542
|
-
<div className={styles.content}>
|
|
543
|
-
<p className={styles.label}>{t('transferOutDate', 'Transfer out date')}</p>
|
|
544
|
-
<p>
|
|
545
|
-
<span className={styles.value}>
|
|
546
|
-
{data?.transferOutDate === 'N/A' || data?.transferOutDate === '' ? (
|
|
547
|
-
<span>None</span>
|
|
548
|
-
) : (
|
|
549
|
-
<span>{data?.transferOutDate ? formatDate(new Date(data?.transferOutDate)) : '--'}</span>
|
|
550
|
-
)}
|
|
551
|
-
</span>
|
|
552
|
-
</p>
|
|
553
|
-
</div>
|
|
554
|
-
<div className={styles.content}>
|
|
555
|
-
<p className={styles.label}>{t('transferOutFacility', 'Transfer out facility')}</p>
|
|
556
|
-
<p>
|
|
557
|
-
<span className={styles.value}>{data?.transferOutFacility ? data?.transferOutFacility : '--'}</span>
|
|
558
|
-
</p>
|
|
559
|
-
</div>
|
|
560
|
-
<div className={styles.content}>
|
|
561
|
-
<p className={styles.label}>{t('deathDate', 'Death date')}</p>
|
|
562
|
-
<p>
|
|
563
|
-
<span className={styles.value}>
|
|
564
|
-
{data?.deathDate === 'N/A' || data?.deathDate === '' ? (
|
|
565
|
-
<span>None</span>
|
|
566
|
-
) : (
|
|
567
|
-
<span>{data?.deathDate ? formatDate(new Date(data?.deathDate)) : '--'}</span>
|
|
568
|
-
)}
|
|
569
|
-
</span>
|
|
570
|
-
</p>
|
|
571
|
-
</div>
|
|
572
|
-
</div>
|
|
573
|
-
|
|
574
|
-
<div className={styles.container}>
|
|
575
|
-
<div className={styles.content}>
|
|
576
|
-
<p className={styles.label}>{t('mostRecentCD4', 'Most recent CD4')}</p>
|
|
577
|
-
<p>
|
|
578
|
-
<span className={styles.value}>{data?.mostRecentCd4 ? data?.mostRecentCd4 : ''}</span>
|
|
579
|
-
<span className={styles.label}>
|
|
580
|
-
{data?.mostRecentCd4Date === 'N/A' || data?.mostRecentCd4Date === '' ? (
|
|
581
|
-
<span>None</span>
|
|
582
|
-
) : (
|
|
583
|
-
<span>{data?.mostRecentCd4Date ? formatDate(new Date(data?.mostRecentCd4Date)) : '--'}</span>
|
|
584
|
-
)}
|
|
585
|
-
</span>
|
|
586
|
-
</p>
|
|
587
|
-
</div>
|
|
588
|
-
<div className={styles.content}>
|
|
589
|
-
<p className={styles.label}>{t('mostRecentVL', 'Most recent VL')}</p>
|
|
590
|
-
<p>
|
|
591
|
-
<span className={styles.value}>{data?.viralLoadValue ? data?.viralLoadValue : '--'}</span>
|
|
592
|
-
<span className={styles.label}>
|
|
593
|
-
{data?.viralLoadDate === 'N/A' || data?.viralLoadDate === '' ? (
|
|
594
|
-
<span>None</span>
|
|
595
|
-
) : (
|
|
596
|
-
<span>{data?.viralLoadDate ? formatDate(new Date(data?.viralLoadDate)) : '--'}</span>
|
|
597
|
-
)}
|
|
598
|
-
</span>
|
|
599
|
-
</p>
|
|
600
|
-
</div>
|
|
601
|
-
<div className={styles.content}>
|
|
602
|
-
<p className={styles.label}>{t('nextAppointmentDate', ' Next appointment')}</p>
|
|
603
|
-
<p>
|
|
604
|
-
<span className={styles.value}>
|
|
605
|
-
{data?.nextAppointmentDate ? formatDate(new Date(data?.nextAppointmentDate)) : 'None'}
|
|
606
|
-
</span>
|
|
607
|
-
</p>
|
|
608
|
-
</div>
|
|
609
|
-
</div>
|
|
610
|
-
|
|
611
|
-
<div className={styles.container}>
|
|
612
|
-
<div className={styles.content}>
|
|
613
|
-
<p className={styles.label}>{t('viralLoadTrends', 'Viral load trends')}</p>
|
|
614
|
-
{data?.allVlResults?.value?.length > 0
|
|
615
|
-
? data?.allVlResults?.value?.map((vl, index) => {
|
|
616
|
-
return (
|
|
617
|
-
<div key={`vl-${index}`}>
|
|
618
|
-
<span className={styles.value}> {vl.vl} </span>
|
|
619
|
-
{vl?.vlDate === 'N/A' || vl?.vlDate === '' ? (
|
|
620
|
-
<span>None</span>
|
|
621
|
-
) : (
|
|
622
|
-
<span>({vl?.vlDate ? vl?.vlDate : '--'})</span>
|
|
623
|
-
)}
|
|
624
|
-
<br />
|
|
625
|
-
</div>
|
|
626
|
-
);
|
|
627
|
-
})
|
|
628
|
-
: '--'}
|
|
629
|
-
</div>
|
|
630
|
-
<div className={styles.content}>
|
|
631
|
-
<p className={styles.label}>{t('cd4Trends', 'CD4 Trends')}</p>
|
|
632
|
-
{data?.allCd4CountResults?.length > 0
|
|
633
|
-
? data?.allCd4CountResults?.map((cd4, index) => {
|
|
634
|
-
return (
|
|
635
|
-
<div key={`cd4Trend-${cd4?.cd4Count}-${index}`}>
|
|
636
|
-
<span className={styles.value}>{cd4?.cd4Count}</span>
|
|
637
|
-
{cd4?.cd4Count === 'N/A' || cd4?.cd4Count === '' ? (
|
|
638
|
-
<span>None</span>
|
|
639
|
-
) : (
|
|
640
|
-
<span>( {cd4?.cd4CountDate ? cd4?.cd4CountDate : '--'})</span>
|
|
641
|
-
)}
|
|
642
|
-
<br />
|
|
643
|
-
</div>
|
|
644
|
-
);
|
|
645
|
-
})
|
|
646
|
-
: '--'}
|
|
647
|
-
</div>
|
|
648
|
-
</div>
|
|
649
|
-
|
|
650
|
-
<hr />
|
|
50
|
+
return (
|
|
51
|
+
<>
|
|
52
|
+
{showPrintComponent && (
|
|
53
|
+
<div style={{ position: 'absolute', left: '-9999px' }}>
|
|
54
|
+
<PrintComponent ref={printRef} data={data} />
|
|
55
|
+
</div>
|
|
56
|
+
)}
|
|
651
57
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
<span className={styles.value}>--</span>
|
|
657
|
-
</p>
|
|
658
|
-
</div>
|
|
659
|
-
<div className={styles.content}>
|
|
660
|
-
<p className={styles.label}>{t('clinicianName', 'Clinician name')}</p>
|
|
661
|
-
<p>
|
|
662
|
-
<span className={styles.value}>
|
|
663
|
-
{currentUserSession?.user?.person?.display
|
|
664
|
-
? currentUserSession?.user?.person?.display
|
|
665
|
-
: t('none', 'None')}
|
|
666
|
-
</span>
|
|
667
|
-
</p>
|
|
668
|
-
</div>
|
|
669
|
-
<div className={styles.content}>
|
|
670
|
-
<p className={styles.label}>{t('clinicianSignature', 'Clinician signature')}</p>
|
|
671
|
-
<p>
|
|
672
|
-
<span className={styles.value}>
|
|
673
|
-
{currentUserSession?.user?.person?.display
|
|
674
|
-
? currentUserSession?.user?.person?.display
|
|
675
|
-
: t('none', 'None')}
|
|
676
|
-
</span>
|
|
677
|
-
</p>
|
|
678
|
-
</div>
|
|
679
|
-
</div>
|
|
58
|
+
<div className={styles.bodyContainer}>
|
|
59
|
+
<div className={styles.card}>
|
|
60
|
+
<PatientSummaryHeader onPrint={onPrintClick} printMode={false} />
|
|
61
|
+
<PatientSummaryBody data={data} />
|
|
680
62
|
</div>
|
|
681
63
|
</div>
|
|
682
|
-
|
|
683
|
-
|
|
64
|
+
</>
|
|
65
|
+
);
|
|
684
66
|
};
|
|
685
67
|
|
|
686
68
|
export default PatientSummary;
|