diff --git a/packages/esm-report-app/src/api/api.ts b/packages/esm-report-app/src/api/api.ts
index eb5fb6c9..9eedf948 100644
--- a/packages/esm-report-app/src/api/api.ts
+++ b/packages/esm-report-app/src/api/api.ts
@@ -36,8 +36,8 @@ async function postData(url: string, ac = new AbortController()) {
return response.data;
}
-export const generateMOH362Reports = () => {
- const { data, error, isLoading, isValidating } = useSWR(`${BASE_URL}/view`, fetcher);
+export const generateMOH362Reports = (id) => {
+ const { data, error, isLoading, isValidating } = useSWR(`${BASE_URL}/view?id=${id}`, fetcher);
const mohData = data ? (data as any)?.results : [];
return {
@@ -84,6 +84,13 @@ export const fetchReportLogsByLocationAndId = async (
return results.data;
};
+export const generateReportData = async (reportId: number, ac = new AbortController()) => {
+ const results = await openmrsFetch(`${BASE_URL}/view?id=${reportId}`, {
+ signal: ac.signal,
+ });
+ return results.data;
+};
+
export const getFacilityLocations = () => {
const { data, error, isLoading, isValidating } = useSWR(`${url}/location?v=default`, async () => {
const response = await openmrsFetch(`${url}/location?v=default`, {
diff --git a/packages/esm-report-app/src/registers/MOH-362/moh-362a/MOH_362A_component.tsx b/packages/esm-report-app/src/registers/MOH-362/moh-362a/MOH_362A_component.tsx
index ca373676..155ef40c 100644
--- a/packages/esm-report-app/src/registers/MOH-362/moh-362a/MOH_362A_component.tsx
+++ b/packages/esm-report-app/src/registers/MOH-362/moh-362a/MOH_362A_component.tsx
@@ -1,14 +1,8 @@
import React from 'react';
-import { generateMOH362Reports } from '../../../api/api';
import styles from '../MOH-362.scss';
import { TableContainer, TableHead, TableRow, TableHeader, Table, TableBody, TableCell } from '@carbon/react';
-const RenderMOH362a: React.FC = () => {
- const { mohData: moh362a, isLoading, error } = generateMOH362Reports();
-
- if (isLoading) return
Loading...
;
- if (error) return Error loading data
;
-
+const RenderMOH362a: React.FC<{ reportData: any }> = ({ reportData }) => {
return (
@@ -154,15 +148,15 @@ const RenderMOH362a: React.FC = () => {
- {moh362a && moh362a.length > 0 ? (
- moh362a.map((item, i) => (
+ {reportData && reportData.length > 0 ? (
+ reportData.map((item, i) => (
- {item.patient_id}
+ {i}
{item.patient_id}
- {item.patient_id}
+ {item.visit_date}
{item.patient_id}
{item.patient_id}
{item.patient_id}
diff --git a/packages/esm-report-app/src/registers/MOH-362/moh-362b/MOH_362B_component.tsx b/packages/esm-report-app/src/registers/MOH-362/moh-362b/MOH_362B_component.tsx
index b520de8c..02414401 100644
--- a/packages/esm-report-app/src/registers/MOH-362/moh-362b/MOH_362B_component.tsx
+++ b/packages/esm-report-app/src/registers/MOH-362/moh-362b/MOH_362B_component.tsx
@@ -1,16 +1,7 @@
import React from 'react';
-import { TableContainer, TableHead, TableRow, TableHeader } from '@carbon/react';
-import { Table } from '@carbon/react';
-import { TableBody } from '@carbon/react';
-import { TableCell } from '@carbon/react';
-import { generateMOH362Reports } from '../../../api/api';
+import { TableContainer, TableHead, TableRow, TableHeader, Table, TableCell, TableBody } from '@carbon/react';
import styles from '../MOH-362.scss';
-const RenderMOH362b: React.FC = () => {
- const { mohData: moh362b, isLoading, error } = generateMOH362Reports();
-
- if (isLoading) return Loading...
;
- if (error) return Error loading data
;
-
+const RenderMOH362b: React.FC<{ reportData: any }> = ({ reportData }) => {
return (
@@ -67,8 +58,8 @@ const RenderMOH362b: React.FC = () => {
- {moh362b && moh362b.length > 0 ? (
- moh362b.map((item, i) => (
+ {reportData && reportData.length > 0 ? (
+ reportData.map((item, i) => (
{item.patient_id}
diff --git a/packages/esm-report-app/src/registers/MOH-405/MOH_405_component.tsx b/packages/esm-report-app/src/registers/MOH-405/MOH_405_component.tsx
index 10bae6c1..fc8d6f83 100644
--- a/packages/esm-report-app/src/registers/MOH-405/MOH_405_component.tsx
+++ b/packages/esm-report-app/src/registers/MOH-405/MOH_405_component.tsx
@@ -1,11 +1,8 @@
import React from 'react';
import styles from './MOH-405.scss';
-import { TableContainer, TableHead, TableRow, TableHeader } from '@carbon/react';
-import { Table } from '@carbon/react';
-import { TableBody } from '@carbon/react';
-import { TableCell } from '@carbon/react';
+import { TableContainer, TableHead, TableRow, Table, TableBody, TableCell, TableHeader } from '@carbon/react';
-const RenderMOH405: React.FC = () => (
+const RenderMOH405: React.FC<{ reportData: any }> = ({ reportData }) => (
diff --git a/packages/esm-report-app/src/registers/MOH-406/MOH_406_component.tsx b/packages/esm-report-app/src/registers/MOH-406/MOH_406_component.tsx
index 9beb2b9e..6c641c83 100644
--- a/packages/esm-report-app/src/registers/MOH-406/MOH_406_component.tsx
+++ b/packages/esm-report-app/src/registers/MOH-406/MOH_406_component.tsx
@@ -1,12 +1,9 @@
import React from 'react';
import styles from './MOH_406.scss';
-import { TableContainer, TableHead, TableRow, TableHeader } from '@carbon/react';
-import { Table } from '@carbon/react';
-import { TableBody } from '@carbon/react';
-import { TableCell } from '@carbon/react';
+import { TableContainer, TableHead, TableRow, TableHeader, Table, TableBody, TableCell } from '@carbon/react';
-const RenderMOH406: React.FC = () => (
+const RenderMOH406: React.FC<{ reportData: any }> = ({ reportData }) => (
diff --git a/packages/esm-report-app/src/registers/MOH-407/clientFollowUp/ClientFollowUp_component.tsx b/packages/esm-report-app/src/registers/MOH-407/clientFollowUp/ClientFollowUp_component.tsx
index 235b8a41..3d1a1795 100644
--- a/packages/esm-report-app/src/registers/MOH-407/clientFollowUp/ClientFollowUp_component.tsx
+++ b/packages/esm-report-app/src/registers/MOH-407/clientFollowUp/ClientFollowUp_component.tsx
@@ -1,11 +1,8 @@
import React from 'react';
import styles from '../nutrition.scss';
-import { TableContainer, TableHead, TableRow, TableHeader } from '@carbon/react';
-import { Table } from '@carbon/react';
-import { TableBody } from '@carbon/react';
-import { TableCell } from '@carbon/react';
+import { TableContainer, TableHead, TableRow, TableHeader, Table, TableBody, TableCell } from '@carbon/react';
-const ClientFollowUpRegister: React.FC = () => (
+const ClientFollowUpRegister: React.FC<{ reportData: any }> = ({ reportData }) => (
diff --git a/packages/esm-report-app/src/registers/MOH-407/nutrition/Nutrition_component.tsx b/packages/esm-report-app/src/registers/MOH-407/nutrition/Nutrition_component.tsx
index 96ca581d..8d88e959 100644
--- a/packages/esm-report-app/src/registers/MOH-407/nutrition/Nutrition_component.tsx
+++ b/packages/esm-report-app/src/registers/MOH-407/nutrition/Nutrition_component.tsx
@@ -1,11 +1,8 @@
import React from 'react';
import styles from '../nutrition.scss';
-import { TableContainer, TableHead, TableRow, TableHeader } from '@carbon/react';
-import { Table } from '@carbon/react';
-import { TableBody } from '@carbon/react';
-import { TableCell } from '@carbon/react';
+import { TableContainer, TableHead, TableRow, TableHeader, Table, TableBody, TableCell } from '@carbon/react';
-const NutritionRegister: React.FC = () => (
+const NutritionRegister: React.FC<{ reportData: any }> = ({ reportData }) => (
diff --git a/packages/esm-report-app/src/registers/MOH-408/MOH-408-component.tsx b/packages/esm-report-app/src/registers/MOH-408/MOH-408-component.tsx
index 45991df8..83d4ecfa 100644
--- a/packages/esm-report-app/src/registers/MOH-408/MOH-408-component.tsx
+++ b/packages/esm-report-app/src/registers/MOH-408/MOH-408-component.tsx
@@ -1,10 +1,7 @@
import React from 'react';
import styles from './MOH-408.scss';
-import { TableContainer, TableHead, TableRow, TableHeader } from '@carbon/react';
-import { Table } from '@carbon/react';
-import { TableBody } from '@carbon/react';
-import { TableCell } from '@carbon/react';
-const RenderMOH408: React.FC = () => {
+import { TableContainer, TableHead, TableRow, TableHeader, Table, TableBody, TableCell } from '@carbon/react';
+const RenderMOH408: React.FC<{ reportData: any }> = ({ reportData }) => {
return (
diff --git a/packages/esm-report-app/src/reports-dashboard/report-loader/dynamic-report-loader-component.tsx b/packages/esm-report-app/src/reports-dashboard/report-loader/dynamic-report-loader-component.tsx
index e1b33ab5..86e0bec5 100644
--- a/packages/esm-report-app/src/reports-dashboard/report-loader/dynamic-report-loader-component.tsx
+++ b/packages/esm-report-app/src/reports-dashboard/report-loader/dynamic-report-loader-component.tsx
@@ -10,42 +10,43 @@ import PrepRegister from '../../registers/MOH-267/prep-activity-register.compone
import MOH731 from '../../registers/MOH-731/MOH_731';
import CareAndTreatment from '../../registers/CARE_AND_TREATMENT/Care_and_Treatment';
import MOH333 from '../../registers/MOH_333_MATERNITY/MOH_333_component';
-import { useParams } from 'react-router-dom';
+import { useLocation, useParams } from 'react-router-dom';
import styles from './dynamic-report-loader.scss';
import RenderMOH408 from '../../registers/MOH-408/MOH-408-component';
import UseBreadcrumb from '../breadcrumb/bread-crumb';
import html2canvas from 'html2canvas';
import { PDFDocument } from 'pdf-lib';
+import reportMapping from './reportMapping.json';
-const reportComponentMapping = {
- 'MOH 405 - AnteNatal(ANC) Register': RenderMOH405,
- 'MOH 406 A PNC REGISTER': RenderMOH406,
- 'MOH 362 A - HTS LABS REGISTER': RenderMOH362A,
- 'MOH 362 B - HTS LABS REGISTER': RenderMOH362B,
- 'MOH 407 Nutrition Service Register': NutritionRegisters,
- 'ClientFollowUp Service Register MOH 407': ClientFollowUpRegister,
- 'PrEP DAR': PrepRegister,
- 'MOH 408 HEI REGISTER': RenderMOH408,
- 'MOH 731': MOH731,
- 'Care & Treatment': CareAndTreatment,
- 'MOH 333 Maternity Register': MOH333,
+const componentMap = {
+ RenderMOH405,
+ RenderMOH406,
+ RenderMOH362A,
+ RenderMOH362B,
+ NutritionRegisters,
+ ClientFollowUpRegister,
+ PrepRegister,
+ RenderMOH408,
+ MOH333,
+ CareAndTreatment,
+ MOH731,
};
const DynamicReportLoader: React.FC = () => {
const { reportUuid } = useParams<{ reportUuid: string }>();
- const ReportComponent = reportComponentMapping[reportUuid];
+ const location = useLocation();
+ const { reportData } = location.state || {};
+
+ const reportMappingEntry = reportMapping.find((entry) => entry.report_uuid === reportUuid);
+ const ReportComponent = reportMappingEntry ? componentMap[reportMappingEntry.component] : null;
+
const downloadPDF = async () => {
const element = document.getElementById('report-content');
if (element) {
- // Capture the element as an image using html2canvas
const canvas = await html2canvas(element);
const imgData = canvas.toDataURL('image/png');
-
- // Create a new PDF document
const pdfDoc = await PDFDocument.create();
const page = pdfDoc.addPage([canvas.width, canvas.height]);
-
- // Draw the captured image in the PDF
const pngImage = await pdfDoc.embedPng(imgData);
page.drawImage(pngImage, {
x: 0,
@@ -53,8 +54,6 @@ const DynamicReportLoader: React.FC = () => {
width: canvas.width,
height: canvas.height,
});
-
- // Save and open the PDF
const pdfBytes = await pdfDoc.save();
const blob = new Blob([pdfBytes], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
@@ -82,11 +81,11 @@ const DynamicReportLoader: React.FC = () => {
Download PDF
-
+
>
) : (
diff --git a/packages/esm-report-app/src/reports-dashboard/report-loader/reportMapping.json b/packages/esm-report-app/src/reports-dashboard/report-loader/reportMapping.json
index 5c5396e3..44fbb6ff 100644
--- a/packages/esm-report-app/src/reports-dashboard/report-loader/reportMapping.json
+++ b/packages/esm-report-app/src/reports-dashboard/report-loader/reportMapping.json
@@ -1,12 +1,57 @@
-{
- "MOH 405 - AnteNatal(ANC) Register": "MOH_405_component",
- "MOH 406 A PNC REGISTER": "MOH_406_component",
- "MOH 362 A - HTS LABS REGISTER": "MOH_362A_component",
- "MOH 362 B - HTS LABS REGISTER": "MOH_362B_component",
- "MOH 407 Nutrition Service Register": "Nutrition_component",
- "ClientFollowUp Service Register MOH 407": "ClientFollowUp_component",
- "uuid-for-prep-register": "prep-activity-register.component",
- "MOH 408 HEI REGISTER": "MOH-408-component"
+[
+ {
+ "report_name": "MOH 405 - AnteNatal(ANC) Register",
+ "report_uuid": "9b3a8ae4-ad09-4806-a824-3807b41ba370",
+ "component": "RenderMOH405"
+ },
+ {
+ "report_name": "MOH 406 A PNC REGISTER",
+ "report_uuid": "fa94e87a-fc49-4e8e-bbec-aee08da51add",
+ "component": "RenderMOH406"
+ },
+ {
+ "report_name": "MOH 362 A - HTS LABS REGISTER",
+ "report_uuid": "7daf4258-eceb-47c3-81ba-8ae6ddea41d9",
+ "component": "RenderMOH362A"
+ },
+ {
+ "report_name": "MOH 362 B - HTS LABS REGISTER",
+ "report_uuid": "9b55b530-908a-44b2-8974-8328b2c952dd",
+ "component": "RenderMOH362B"
+ },
+ {
+ "report_name": "MOH 407 Nutrition Service Register",
+ "report_uuid": "43ca0b4f-7767-4beb-b122-f11500602470",
+ "component": "NutritionRegisters"
+ },
+ {
+ "report_name": "ClientFollowUp Service Register MOH 407",
+ "report_uuid": "43ca0b4f-7767-4beb-b122-f11500602470",
+ "component": "ClientFollowUpRegister"
+ },
+ {
+ "report_name": "PrEP DAR",
+ "report_uuid": "d611bd51-8cec-4069-87d6-d59a205bee05",
+ "component": "PrepRegister"
+ },
+ {
+ "report_name": "MOH 408 HEI REGISTER",
+ "report_uuid": "d611bd51-8cec-4069-87d6-d59a205bee05",
+ "component": "RenderMOH408"
+ },
+ {
+ "report_name": "MOH 731",
+ "report_uuid": "f3650738-5830-4159-ac8d-e68a15852cc4",
+ "component": "MOH731"
+ },
+ {
+ "report_name": "Care & Treatment",
+ "report_uuid": "b8dcd336-d8fa-405e-95fe-fd23783db908",
+ "component": "CareAndTreatment"
+ },
+ {
+ "report_name": "MOH 333 Maternity Register",
+ "report_uuid": "e6f9b821-e087-4a6e-b7ee-1a17dcd6f9b3",
+ "component": "MOH333"
}
-
-
\ No newline at end of file
+]
\ No newline at end of file
diff --git a/packages/esm-report-app/src/reports-dashboard/report-summary/ReportSummary.tsx b/packages/esm-report-app/src/reports-dashboard/report-summary/ReportSummary.tsx
index 6aa3c5ca..7baad0c1 100644
--- a/packages/esm-report-app/src/reports-dashboard/report-summary/ReportSummary.tsx
+++ b/packages/esm-report-app/src/reports-dashboard/report-summary/ReportSummary.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useState } from 'react';
import {
DataTable,
TableContainer,
@@ -10,13 +10,16 @@ import {
TableCell,
TableSelectAll,
TableSelectRow,
- Button,
- Pagination,
+ Loading,
} from '@carbon/react';
-import { Link } from 'react-router-dom';
+import { useNavigate } from 'react-router-dom';
import styles from './ReportSummary.css';
+import reportMapping from '../report-loader/reportMapping.json';
+import { generateReportData } from '../../api/api';
const ReportSummary: React.FC = ({ rows }) => {
+ const [loading, setLoading] = useState(false);
+
const headers = [
{ key: 'status', header: 'Status' },
{ key: 'start_date', header: 'Start Date' },
@@ -27,19 +30,40 @@ const ReportSummary: React.FC = ({ rows }) => {
{ key: 'download', header: 'Download' },
];
- // Add view and download buttons to rows data
- const rowsWithButtons = rows.map((row) => ({
- ...row,
- view: (
-
-
-
- ),
- download: ,
- }));
+ const navigate = useNavigate();
+
+ const handleViewClick = async (report_uuid, report_id) => {
+ setLoading(true);
+ try {
+ const response = await generateReportData(report_id);
+ const data = response.results;
+
+ navigate(`/reports/${report_uuid}`, { state: { reportData: data } });
+ } catch (error) {
+ console.error('Error fetching report data:', error);
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ const rowsWithButtons = rows.map((row) => {
+ const reportMappingEntry = reportMapping.find((entry) => entry.report_uuid === row.uuid);
+ return {
+ ...row,
+ view: reportMappingEntry ? (
+
+ ) : null,
+ download: ,
+ };
+ });
return (
+ {loading &&
}
= ({ onRowClick, rows }) => {
const headers = [{ key: 'report_name', header: 'Name' }];
const locationUuid = useSession()?.sessionLocation?.uuid;
-
- function extractNumber(str) {
- const match = str.match(/^\d+/);
- return match ? match[0] : null;
- }
+ const [loading, setLoading] = useState(false);
const handleRowClick = async (row: any) => {
try {
+ setLoading(true);
const reportId = Number(row.id);
const foundItem = rows.find((item) => item.id === row.id);
const uuid = foundItem ? foundItem.uuid : undefined;
@@ -38,6 +35,8 @@ const ReportTable: React.FC = ({ onRowClick, rows }) => {
onRowClick(response, row.id, uuid);
} catch (error) {
console.error('Error fetching report logs', error);
+ } finally {
+ setLoading(false);
}
};
@@ -78,8 +77,8 @@ const ReportTable: React.FC = ({ onRowClick, rows }) => {
)}
/>
- {/* {}} /> */}
+ {loading &&
}
>
);
};