diff --git a/frontend/src/assets/img/report-header-bg.svg b/frontend/src/assets/img/report-header-bg.svg new file mode 100644 index 00000000..48481325 --- /dev/null +++ b/frontend/src/assets/img/report-header-bg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/src/common/components/Router/TabNavigation.tsx b/frontend/src/common/components/Router/TabNavigation.tsx index ab860177..e6b4eea1 100644 --- a/frontend/src/common/components/Router/TabNavigation.tsx +++ b/frontend/src/common/components/Router/TabNavigation.tsx @@ -18,7 +18,7 @@ import DiagnosticsPage from 'pages/Account/components/Diagnostics/DiagnosticsPag import ChatPage from 'pages/Chat/ChatPage'; import UploadPage from 'pages/Upload/UploadPage'; import ReportsListPage from 'pages/Reports/ReportsListPage'; -import ReportDetailPage from 'pages/Reports/ReportDetailPage'; +import ReportDetailPage from 'pages/ReportDetail/ReportDetailPage'; import ProcessingPage from 'pages/Processing/ProcessingPage'; // Import SVG icons diff --git a/frontend/src/common/components/Router/__tests__/TabNavigation.test.tsx b/frontend/src/common/components/Router/__tests__/TabNavigation.test.tsx index 90667db9..301545a5 100644 --- a/frontend/src/common/components/Router/__tests__/TabNavigation.test.tsx +++ b/frontend/src/common/components/Router/__tests__/TabNavigation.test.tsx @@ -3,22 +3,38 @@ import { render as defaultRender, screen } from '@testing-library/react'; import TabNavigation from '../TabNavigation'; import '@testing-library/jest-dom'; -// Create a mock i18n instance - MOVED UP before any uses -const mockI18n = { - t: (key: string, options?: Record) => options?.defaultValue || key, - language: 'en', - languages: ['en'], - use: () => mockI18n, // Return itself for chaining - init: () => mockI18n, // Return itself for chaining - changeLanguage: vi.fn(), - exists: vi.fn(() => true), - addResourceBundle: vi.fn(), -}; +// vi.mock calls must come before any variable they reference +// All mocks are hoisted to the top, so we need to define them before they're used // Mock i18next -vi.mock('i18next', () => ({ - default: mockI18n, -})); +vi.mock('i18next', () => { + return { + default: { + t: (key: string, options?: Record) => options?.defaultValue || key, + language: 'en', + languages: ['en'], + use: () => ({ + t: (key: string, options?: Record) => options?.defaultValue || key, + language: 'en', + languages: ['en'], + changeLanguage: vi.fn(), + exists: vi.fn(() => true), + addResourceBundle: vi.fn(), + }), + init: () => ({ + t: (key: string, options?: Record) => options?.defaultValue || key, + language: 'en', + languages: ['en'], + changeLanguage: vi.fn(), + exists: vi.fn(() => true), + addResourceBundle: vi.fn(), + }), + changeLanguage: vi.fn(), + exists: vi.fn(() => true), + addResourceBundle: vi.fn(), + }, + }; +}); // Mock i18next-browser-languagedetector vi.mock('i18next-browser-languagedetector', () => ({ @@ -36,9 +52,18 @@ vi.mock('react-i18next', () => ({ I18nextProvider: ({ children }: { children: React.ReactNode }) => <>{children}, })); -// Mock common/utils/i18n +// Mock common/utils/i18n using factory function that doesn't depend on mockI18n vi.mock('common/utils/i18n', () => ({ - default: mockI18n, + default: { + t: (key: string, options?: Record) => options?.defaultValue || key, + language: 'en', + languages: ['en'], + use: vi.fn().mockReturnThis(), + init: vi.fn().mockReturnThis(), + changeLanguage: vi.fn(), + exists: vi.fn(() => true), + addResourceBundle: vi.fn(), + }, })); // Mock the window object for Ionic diff --git a/frontend/src/pages/Reports/ReportDetailPage.scss b/frontend/src/pages/ReportDetail/ReportDetailPage.scss similarity index 99% rename from frontend/src/pages/Reports/ReportDetailPage.scss rename to frontend/src/pages/ReportDetail/ReportDetailPage.scss index cda07a95..35d2f94b 100644 --- a/frontend/src/pages/Reports/ReportDetailPage.scss +++ b/frontend/src/pages/ReportDetail/ReportDetailPage.scss @@ -8,6 +8,7 @@ &__header { padding: 20px var(--padding-horizontal) 16px; position: relative; + background-image: url('../../assets/img/report-header-bg.svg'); } &__title-container { diff --git a/frontend/src/pages/Reports/ReportDetailPage.tsx b/frontend/src/pages/ReportDetail/ReportDetailPage.tsx similarity index 100% rename from frontend/src/pages/Reports/ReportDetailPage.tsx rename to frontend/src/pages/ReportDetail/ReportDetailPage.tsx diff --git a/frontend/src/pages/Reports/components/ActionButtons.tsx b/frontend/src/pages/ReportDetail/components/ActionButtons.tsx similarity index 100% rename from frontend/src/pages/Reports/components/ActionButtons.tsx rename to frontend/src/pages/ReportDetail/components/ActionButtons.tsx diff --git a/frontend/src/pages/Reports/components/AiAnalysisTab.tsx b/frontend/src/pages/ReportDetail/components/AiAnalysisTab.tsx similarity index 94% rename from frontend/src/pages/Reports/components/AiAnalysisTab.tsx rename to frontend/src/pages/ReportDetail/components/AiAnalysisTab.tsx index fe6217cc..fbf5085d 100644 --- a/frontend/src/pages/Reports/components/AiAnalysisTab.tsx +++ b/frontend/src/pages/ReportDetail/components/AiAnalysisTab.tsx @@ -27,9 +27,7 @@ const AiAnalysisTab: React.FC = ({ const flaggedValues: LabValue[] = reportData.labValues.filter( (value) => value.status !== 'normal', ); - const normalValues: LabValue[] = reportData.labValues.filter( - (value) => value.status === 'normal', - ); + const normalValues: LabValue[] = []; // Format confidence score for display const confidenceScore = reportData.confidence; diff --git a/frontend/src/pages/Reports/components/AiAssistantNotice.scss b/frontend/src/pages/ReportDetail/components/AiAssistantNotice.scss similarity index 100% rename from frontend/src/pages/Reports/components/AiAssistantNotice.scss rename to frontend/src/pages/ReportDetail/components/AiAssistantNotice.scss diff --git a/frontend/src/pages/Reports/components/AiAssistantNotice.tsx b/frontend/src/pages/ReportDetail/components/AiAssistantNotice.tsx similarity index 100% rename from frontend/src/pages/Reports/components/AiAssistantNotice.tsx rename to frontend/src/pages/ReportDetail/components/AiAssistantNotice.tsx diff --git a/frontend/src/pages/Reports/components/EmergencyAlert.tsx b/frontend/src/pages/ReportDetail/components/EmergencyAlert.tsx similarity index 100% rename from frontend/src/pages/Reports/components/EmergencyAlert.tsx rename to frontend/src/pages/ReportDetail/components/EmergencyAlert.tsx diff --git a/frontend/src/pages/Reports/components/FlaggedValuesSection.tsx b/frontend/src/pages/ReportDetail/components/FlaggedValuesSection.tsx similarity index 100% rename from frontend/src/pages/Reports/components/FlaggedValuesSection.tsx rename to frontend/src/pages/ReportDetail/components/FlaggedValuesSection.tsx diff --git a/frontend/src/pages/Reports/components/InfoCard.scss b/frontend/src/pages/ReportDetail/components/InfoCard.scss similarity index 95% rename from frontend/src/pages/Reports/components/InfoCard.scss rename to frontend/src/pages/ReportDetail/components/InfoCard.scss index 081a819a..43e4034b 100644 --- a/frontend/src/pages/Reports/components/InfoCard.scss +++ b/frontend/src/pages/ReportDetail/components/InfoCard.scss @@ -27,7 +27,7 @@ } // Media Queries for larger screens -@media (min-width: 768px) { +@media (width >= 768px) { .info-card { max-width: 600px; margin-left: auto; diff --git a/frontend/src/pages/Reports/components/InfoCard.tsx b/frontend/src/pages/ReportDetail/components/InfoCard.tsx similarity index 100% rename from frontend/src/pages/Reports/components/InfoCard.tsx rename to frontend/src/pages/ReportDetail/components/InfoCard.tsx diff --git a/frontend/src/pages/Reports/components/LabValueItem.tsx b/frontend/src/pages/ReportDetail/components/LabValueItem.tsx similarity index 100% rename from frontend/src/pages/Reports/components/LabValueItem.tsx rename to frontend/src/pages/ReportDetail/components/LabValueItem.tsx diff --git a/frontend/src/pages/Reports/components/LowConfidenceNotice.tsx b/frontend/src/pages/ReportDetail/components/LowConfidenceNotice.tsx similarity index 100% rename from frontend/src/pages/Reports/components/LowConfidenceNotice.tsx rename to frontend/src/pages/ReportDetail/components/LowConfidenceNotice.tsx diff --git a/frontend/src/pages/Reports/components/NormalValuesSection.tsx b/frontend/src/pages/ReportDetail/components/NormalValuesSection.tsx similarity index 100% rename from frontend/src/pages/Reports/components/NormalValuesSection.tsx rename to frontend/src/pages/ReportDetail/components/NormalValuesSection.tsx diff --git a/frontend/src/pages/Reports/components/OriginalReportTab.tsx b/frontend/src/pages/ReportDetail/components/OriginalReportTab.tsx similarity index 100% rename from frontend/src/pages/Reports/components/OriginalReportTab.tsx rename to frontend/src/pages/ReportDetail/components/OriginalReportTab.tsx diff --git a/frontend/src/pages/Reports/components/ReportHeader.tsx b/frontend/src/pages/ReportDetail/components/ReportHeader.tsx similarity index 100% rename from frontend/src/pages/Reports/components/ReportHeader.tsx rename to frontend/src/pages/ReportDetail/components/ReportHeader.tsx diff --git a/frontend/src/pages/Reports/components/ReportTabs.tsx b/frontend/src/pages/ReportDetail/components/ReportTabs.tsx similarity index 100% rename from frontend/src/pages/Reports/components/ReportTabs.tsx rename to frontend/src/pages/ReportDetail/components/ReportTabs.tsx