import React, { useRef, useState, useEffect, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { StructuredListSkeleton } from '@carbon/react'; import { usePatientSummary } from '../hooks/usePatientSummary'; import PrintComponent from '../print-layout/print.component'; import PatientSummaryHeader from './patient-summary-header.component'; import PatientSummaryBody from './patient-summary-body.component'; import styles from './patient-summary.scss'; interface PatientSummaryProps { patientUuid: string; } const PatientSummary: React.FC = ({ patientUuid }) => { const { t } = useTranslation(); const { data, error, isLoading } = usePatientSummary(patientUuid); const printRef = useRef(null); const [showPrintComponent, setShowPrintComponent] = useState(false); const handlePrint = useCallback(async () => { try { // TODO: use backend to generate the print content if (printRef.current) { const printWindow = window.open('', '_blank'); if (printWindow) { const printContent = printRef.current.innerHTML; printWindow.document.documentElement.innerHTML = printContent; printWindow.focus(); printWindow.print(); printWindow.close(); } } } catch (error) { console.error('Print error:', error); // Fallback to browser print window.print(); } }, []); const onPrintClick = () => { setShowPrintComponent(true); }; useEffect(() => { if (showPrintComponent && printRef.current) { // Use setTimeout to ensure the component is fully rendered setTimeout(() => { handlePrint(); setShowPrintComponent(false); }, 100); } }, [showPrintComponent, handlePrint]); if (isLoading) { return ; } if (error) { return {t('errorPatientSummary', 'Error loading patient summary')}; } if (!data || Object.keys(data).length === 0) { return {t('noPatientSummary', 'No patient summary available')}; } return ( <> {showPrintComponent && (
)}
); }; export default PatientSummary;