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