From 67ea28de6ee3480fcaaaab6912779806b99b378e Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 11:44:23 +0930 Subject: [PATCH 01/22] Remove unused imports from login page --- client/src/components/authentication/LoginForm.js | 9 +++------ client/src/routes/public/Login.js | 3 +-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/client/src/components/authentication/LoginForm.js b/client/src/components/authentication/LoginForm.js index 4a2e187b..6699f1f1 100644 --- a/client/src/components/authentication/LoginForm.js +++ b/client/src/components/authentication/LoginForm.js @@ -1,20 +1,17 @@ -import { useNavigate, useLocation, Link as RouterLink } from "react-router-dom"; -import { useContext, useState } from "react"; import { Alert, - Box, Button, - Container, Card, CardContent, Divider, - Link, Stack, Typography, } from "@mui/material"; +import { useContext, useState } from "react"; +import { Link as RouterLink, useLocation, useNavigate } from "react-router-dom"; +import { UserContext } from "../../utils/UserContext"; import EmailInputField from "../authentication/EmailInputField"; import PasswordInputField from "../authentication/PasswordInputField"; -import { UserContext } from "../../utils/UserContext"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/routes/public/Login.js b/client/src/routes/public/Login.js index bde537d5..1f3ed332 100644 --- a/client/src/routes/public/Login.js +++ b/client/src/routes/public/Login.js @@ -1,6 +1,5 @@ -import { Box, Container, Stack, Typography } from "@mui/material"; +import { Box, Stack } from "@mui/material"; import LoginForm from "../../components/authentication/LoginForm"; -import Logo from "../../assets/WellAiLogoTR.png"; import WelcomePanel from "../../components/WelcomePanel"; /** From fe434fb12e8e5fd1487a40741e217567ad240cc8 Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 11:51:42 +0930 Subject: [PATCH 02/22] Remove unused imports from all pages --- .../administrator/AccountApprovalTable.js | 4 +-- .../administrator/AuditLogSearchBar.js | 2 +- .../components/administrator/AuditLogTable.js | 14 ++++---- .../administrator/UserManagementTable.js | 14 ++------ .../components/administrator/UserSearchBar.js | 4 +-- .../components/administrator/UserToolBar.js | 2 +- .../analytics/ActiveMerchantsAnalytics.js | 10 +----- .../analytics/ActiveUsersAnalytics.js | 10 +----- .../analytics/AverageRiskSeriesAnalytics.js | 15 ++++---- .../analytics/LoginActivityAnalytics.js | 13 ++----- .../analytics/PendingMerchantsAnalytics.js | 12 ++----- .../RecentReportsGeneratedAnalytics.js | 10 +----- .../analytics/UnvalidatedAccountAnalytics.js | 10 +----- .../analytics/UserAccountAnalytics.js | 11 +----- .../authentication/CreatePatientForm.js | 20 +++++------ .../authentication/EmailInputField.js | 2 +- .../authentication/ForgotPasswordForm.js | 10 +++--- .../authentication/PhoneInputField.js | 6 ++-- .../authentication/RegistrationForm.js | 14 ++++---- .../authentication/ResetPasswordForm.js | 8 ++--- .../src/components/dialog/DisclaimerPolicy.js | 6 ++-- client/src/components/dialog/PrivacyNotice.js | 6 ++-- .../components/dialog/confirmationDialog.js | 2 +- .../src/routes/admin/AdministratorApproval.js | 2 +- .../routes/admin/AdministratorDashboard.js | 4 --- client/src/routes/admin/AdministratorLogs.js | 3 +- client/src/routes/admin/AdministratorUsers.js | 2 +- .../routes/merchant/MerchantGenerateReport.js | 4 +-- client/src/routes/merchant/MerchantLanding.js | 3 +- client/src/routes/merchant/MerchantReports.js | 30 +++++++--------- client/src/routes/merchant/PatientDetails.js | 18 ++++++---- .../src/routes/merchant/PatientManagement.js | 18 +++++----- .../routes/merchant/RequestPatientAccess.js | 11 +----- client/src/routes/public/ErrorPage.js | 3 +- .../standardUser/AcceptAccessRequest.js | 10 +----- .../src/routes/standardUser/GenerateReport.js | 2 +- .../routes/standardUser/HealthAnalytics.js | 24 ++++++------- .../src/routes/standardUser/ReportHistory.js | 34 ++++++++++--------- client/src/routes/standardUser/UserLanding.js | 8 ++--- .../src/routes/standardUser/UserSettings.js | 26 +++++++------- client/src/utils/LandingRoute.js | 2 +- client/src/utils/ProtectedRoutes.js | 2 +- client/src/utils/PublicOnlyRoutes.js | 3 +- client/src/utils/UserContext.js | 4 +-- 44 files changed, 165 insertions(+), 253 deletions(-) diff --git a/client/src/components/administrator/AccountApprovalTable.js b/client/src/components/administrator/AccountApprovalTable.js index 9d2ae3b8..efc4df2b 100644 --- a/client/src/components/administrator/AccountApprovalTable.js +++ b/client/src/components/administrator/AccountApprovalTable.js @@ -1,6 +1,6 @@ -import { useState, useEffect } from "react"; -import { Paper, Button, Box } from "@mui/material"; +import { Box, Button, Paper } from "@mui/material"; import { DataGrid } from "@mui/x-data-grid"; +import { useEffect, useState } from "react"; import ConfirmationDialog from "../dialog/confirmationDialog"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/administrator/AuditLogSearchBar.js b/client/src/components/administrator/AuditLogSearchBar.js index b98af4f3..f26e9740 100644 --- a/client/src/components/administrator/AuditLogSearchBar.js +++ b/client/src/components/administrator/AuditLogSearchBar.js @@ -1,5 +1,5 @@ import SearchIcon from "@mui/icons-material/Search"; -import { TextField, InputAdornment, Box } from "@mui/material"; +import { Box, InputAdornment, TextField } from "@mui/material"; import { memo, useEffect, useState } from "react"; /** diff --git a/client/src/components/administrator/AuditLogTable.js b/client/src/components/administrator/AuditLogTable.js index 7e4c241e..68843858 100644 --- a/client/src/components/administrator/AuditLogTable.js +++ b/client/src/components/administrator/AuditLogTable.js @@ -1,14 +1,14 @@ -import { useCallback, useEffect, useState } from "react"; -import { DataGrid } from "@mui/x-data-grid"; import { - Paper, Box, - Select, - MenuItem, - InputLabel, - FormControl, Divider, + FormControl, + InputLabel, + MenuItem, + Paper, + Select, } from "@mui/material"; +import { DataGrid } from "@mui/x-data-grid"; +import { useCallback, useEffect, useState } from "react"; import AuditLogSearchBar from "./AuditLogSearchBar"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/administrator/UserManagementTable.js b/client/src/components/administrator/UserManagementTable.js index 4c28ac26..45e83bcb 100644 --- a/client/src/components/administrator/UserManagementTable.js +++ b/client/src/components/administrator/UserManagementTable.js @@ -1,18 +1,10 @@ -import { - Paper, - Box, - Snackbar, - Alert, - Stack, - Typography, - Divider, -} from "@mui/material"; +import { Alert, Box, Divider, Paper, Snackbar } from "@mui/material"; import { DataGrid } from "@mui/x-data-grid"; -import { useState, useEffect, useCallback } from "react"; +import * as React from "react"; +import { useCallback, useEffect, useState } from "react"; import ConfirmationDialog from "../dialog/confirmationDialog"; import UserSearchBar from "./UserSearchBar"; import UserToolBar from "./UserToolBar"; -import * as React from "react"; /** * A table listing all the user accounts in the system with tools to search diff --git a/client/src/components/administrator/UserSearchBar.js b/client/src/components/administrator/UserSearchBar.js index bc72c3ed..595f84e3 100644 --- a/client/src/components/administrator/UserSearchBar.js +++ b/client/src/components/administrator/UserSearchBar.js @@ -1,7 +1,7 @@ import SearchIcon from "@mui/icons-material/Search"; -import { TextField, Box } from "@mui/material"; +import { Box, TextField } from "@mui/material"; import InputAdornment from "@mui/material/InputAdornment"; -import { useEffect, useState, memo } from "react"; +import { memo, useEffect, useState } from "react"; /** * A search bar that is used as an element in the UserManagementTable to diff --git a/client/src/components/administrator/UserToolBar.js b/client/src/components/administrator/UserToolBar.js index e57404a7..495d0a69 100644 --- a/client/src/components/administrator/UserToolBar.js +++ b/client/src/components/administrator/UserToolBar.js @@ -1,5 +1,5 @@ -import { Box, Select, Button, MenuItem } from "@mui/material"; import DeleteForeverIcon from "@mui/icons-material/DeleteForever"; +import { Box, Button, MenuItem, Select } from "@mui/material"; /** * A tool bar to that provides the controls for modifying and filtering user diff --git a/client/src/components/administrator/analytics/ActiveMerchantsAnalytics.js b/client/src/components/administrator/analytics/ActiveMerchantsAnalytics.js index cec30903..37ba18b6 100644 --- a/client/src/components/administrator/analytics/ActiveMerchantsAnalytics.js +++ b/client/src/components/administrator/analytics/ActiveMerchantsAnalytics.js @@ -1,12 +1,4 @@ -import { - Card, - CardContent, - Container, - Divider, - Paper, - Stack, - Typography, -} from "@mui/material"; +import { Card, CardContent, Stack, Typography } from "@mui/material"; import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/administrator/analytics/ActiveUsersAnalytics.js b/client/src/components/administrator/analytics/ActiveUsersAnalytics.js index 782c02bc..079e8ab5 100644 --- a/client/src/components/administrator/analytics/ActiveUsersAnalytics.js +++ b/client/src/components/administrator/analytics/ActiveUsersAnalytics.js @@ -1,12 +1,4 @@ -import { - Card, - CardContent, - Container, - Divider, - Paper, - Stack, - Typography, -} from "@mui/material"; +import { Card, CardContent, Stack, Typography } from "@mui/material"; import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/administrator/analytics/AverageRiskSeriesAnalytics.js b/client/src/components/administrator/analytics/AverageRiskSeriesAnalytics.js index b2351026..d31c06f4 100644 --- a/client/src/components/administrator/analytics/AverageRiskSeriesAnalytics.js +++ b/client/src/components/administrator/analytics/AverageRiskSeriesAnalytics.js @@ -1,20 +1,17 @@ import { Card, CardContent, - Container, - Paper, - Typography, - Select, - MenuItem, + FormControl, Grid, InputLabel, - FormControl, + MenuItem, + Select, + Typography, } from "@mui/material"; -import { Stack } from "@mui/system"; -import { useEffect, useState } from "react"; -import { LineChart } from "@mui/x-charts/LineChart"; import Divider from "@mui/material/Divider"; +import { LineChart } from "@mui/x-charts/LineChart"; import dayjs from "dayjs"; +import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; const DEFAULT_YEAR = 2026; diff --git a/client/src/components/administrator/analytics/LoginActivityAnalytics.js b/client/src/components/administrator/analytics/LoginActivityAnalytics.js index 32b816a3..8240027a 100644 --- a/client/src/components/administrator/analytics/LoginActivityAnalytics.js +++ b/client/src/components/administrator/analytics/LoginActivityAnalytics.js @@ -1,21 +1,14 @@ -import dayjs from "dayjs"; import { Box, Card, CardContent, - Container, - FormControl, + Divider, Grid, - InputLabel, - MenuItem, - Paper, - Select, - Stack, Typography, - Divider, } from "@mui/material"; -import { useEffect, useState } from "react"; import { BarChart } from "@mui/x-charts"; +import dayjs from "dayjs"; +import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; const TIMESPAN_IN_DAYS = 7; diff --git a/client/src/components/administrator/analytics/PendingMerchantsAnalytics.js b/client/src/components/administrator/analytics/PendingMerchantsAnalytics.js index 0af169c0..8a43387b 100644 --- a/client/src/components/administrator/analytics/PendingMerchantsAnalytics.js +++ b/client/src/components/administrator/analytics/PendingMerchantsAnalytics.js @@ -1,14 +1,6 @@ -import { - Card, - CardContent, - Container, - Divider, - Paper, - Stack, - Typography, -} from "@mui/material"; -import { useEffect, useState } from "react"; import ErrorIcon from "@mui/icons-material/Error"; +import { Card, CardContent, Stack, Typography } from "@mui/material"; +import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/administrator/analytics/RecentReportsGeneratedAnalytics.js b/client/src/components/administrator/analytics/RecentReportsGeneratedAnalytics.js index 8981e19b..8ab2e2d9 100644 --- a/client/src/components/administrator/analytics/RecentReportsGeneratedAnalytics.js +++ b/client/src/components/administrator/analytics/RecentReportsGeneratedAnalytics.js @@ -1,12 +1,4 @@ -import { - Card, - CardContent, - Container, - Divider, - Paper, - Stack, - Typography, -} from "@mui/material"; +import { Card, CardContent, Stack, Typography } from "@mui/material"; import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/administrator/analytics/UnvalidatedAccountAnalytics.js b/client/src/components/administrator/analytics/UnvalidatedAccountAnalytics.js index cc5b4d90..68154c49 100644 --- a/client/src/components/administrator/analytics/UnvalidatedAccountAnalytics.js +++ b/client/src/components/administrator/analytics/UnvalidatedAccountAnalytics.js @@ -1,12 +1,4 @@ -import { - Card, - CardContent, - Container, - Divider, - Paper, - Stack, - Typography, -} from "@mui/material"; +import { Card, CardContent, Stack, Typography } from "@mui/material"; import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/administrator/analytics/UserAccountAnalytics.js b/client/src/components/administrator/analytics/UserAccountAnalytics.js index 48d41840..ac4917e9 100644 --- a/client/src/components/administrator/analytics/UserAccountAnalytics.js +++ b/client/src/components/administrator/analytics/UserAccountAnalytics.js @@ -1,13 +1,4 @@ -import { - Card, - CardContent, - Container, - Divider, - Grid, - Paper, - Stack, - Typography, -} from "@mui/material"; +import { Card, CardContent, Grid, Stack, Typography } from "@mui/material"; import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/authentication/CreatePatientForm.js b/client/src/components/authentication/CreatePatientForm.js index ee30e215..d58c925b 100644 --- a/client/src/components/authentication/CreatePatientForm.js +++ b/client/src/components/authentication/CreatePatientForm.js @@ -1,23 +1,23 @@ -import { useState } from "react"; -import { useNavigate } from "react-router-dom"; import { - Container, - Paper, - Stack, - TextField, - Button, Alert, + Button, + Container, Dialog, - DialogTitle, DialogActions, + DialogTitle, Divider, + FormControl, + FormHelperText, InputLabel, MenuItem, - FormControl, + Paper, Select, - FormHelperText, + Stack, + TextField, Typography, } from "@mui/material"; +import { useState } from "react"; +import { useNavigate } from "react-router-dom"; const FULL_NAME_MAX_LENGTH = 255; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/authentication/EmailInputField.js b/client/src/components/authentication/EmailInputField.js index 6a992aec..509d8aff 100644 --- a/client/src/components/authentication/EmailInputField.js +++ b/client/src/components/authentication/EmailInputField.js @@ -1,5 +1,5 @@ -import { useState } from "react"; import { TextField } from "@mui/material"; +import { useState } from "react"; import validator from "validator"; /** diff --git a/client/src/components/authentication/ForgotPasswordForm.js b/client/src/components/authentication/ForgotPasswordForm.js index a4ca8fa6..35209cf6 100644 --- a/client/src/components/authentication/ForgotPasswordForm.js +++ b/client/src/components/authentication/ForgotPasswordForm.js @@ -1,5 +1,5 @@ -import { useState } from "react"; -import { Link as RouterLink } from "react-router-dom"; +import ForwardToInboxOutlinedIcon from "@mui/icons-material/ForwardToInboxOutlined"; +import PsychologyAltIcon from "@mui/icons-material/PsychologyAlt"; import { Box, Button, @@ -9,10 +9,10 @@ import { Stack, Typography, } from "@mui/material"; -import ForwardToInboxOutlinedIcon from "@mui/icons-material/ForwardToInboxOutlined"; -import PsychologyAltIcon from "@mui/icons-material/PsychologyAlt"; -import EmailInputField from "./EmailInputField"; +import { useState } from "react"; +import { Link as RouterLink } from "react-router-dom"; import Logo from "../../assets/WellAiLogoTR.png"; +import EmailInputField from "./EmailInputField"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/components/authentication/PhoneInputField.js b/client/src/components/authentication/PhoneInputField.js index ce9358ab..31a225c6 100644 --- a/client/src/components/authentication/PhoneInputField.js +++ b/client/src/components/authentication/PhoneInputField.js @@ -1,10 +1,10 @@ -import { useState } from "react"; -import { TextField, FormControl, Grid, Box, Autocomplete } from "@mui/material"; +import { Autocomplete, Box, FormControl, Grid, TextField } from "@mui/material"; import { getCountries, - parsePhoneNumberFromString, getCountryCallingCode, + parsePhoneNumberFromString, } from "libphonenumber-js"; +import { useState } from "react"; /** * An input field that provides basic validation for phone numbers and a diff --git a/client/src/components/authentication/RegistrationForm.js b/client/src/components/authentication/RegistrationForm.js index 748feac8..9a9742c7 100644 --- a/client/src/components/authentication/RegistrationForm.js +++ b/client/src/components/authentication/RegistrationForm.js @@ -1,5 +1,5 @@ -import { useState, useEffect } from "react"; -import { useNavigate, Link as RouterLink } from "react-router-dom"; +import AccountBalanceIcon from "@mui/icons-material/AccountBalance"; +import AccountCircleIcon from "@mui/icons-material/AccountCircle"; import { Alert, Box, @@ -7,9 +7,9 @@ import { Card, CardContent, Dialog, + DialogActions, DialogContent, DialogTitle, - DialogActions, Divider, FormControl, FormHelperText, @@ -20,12 +20,12 @@ import { TextField, Typography, } from "@mui/material"; -import AccountCircleIcon from "@mui/icons-material/AccountCircle"; -import AccountBalanceIcon from "@mui/icons-material/AccountBalance"; -import PasswordInputField from "../authentication/PasswordInputField"; +import { useEffect, useState } from "react"; +import { Link as RouterLink, useNavigate } from "react-router-dom"; +import Logo from "../../assets/WellAiLogoTR.png"; import EmailInputField from "../authentication/EmailInputField"; +import PasswordInputField from "../authentication/PasswordInputField"; import PhoneInputField from "../authentication/PhoneInputField"; -import Logo from "../../assets/WellAiLogoTR.png"; const FULL_NAME_MAX_LENGTH = 255; const ACCOUNT_TYPES = Object.freeze({ diff --git a/client/src/components/authentication/ResetPasswordForm.js b/client/src/components/authentication/ResetPasswordForm.js index 22e84d10..51f19108 100644 --- a/client/src/components/authentication/ResetPasswordForm.js +++ b/client/src/components/authentication/ResetPasswordForm.js @@ -1,4 +1,5 @@ -import { useState } from "react"; +import CheckIcon from "@mui/icons-material/Check"; +import LockResetIcon from "@mui/icons-material/LockReset"; import { Box, Button, @@ -9,9 +10,8 @@ import { TextField, Typography, } from "@mui/material"; -import { useParams, Link as RouterLink } from "react-router-dom"; -import CheckIcon from "@mui/icons-material/Check"; -import LockResetIcon from "@mui/icons-material/LockReset"; +import { useState } from "react"; +import { Link as RouterLink, useParams } from "react-router-dom"; import Logo from "../../assets/WellAiLogoTR.png"; import PasswordInputField from "../authentication/PasswordInputField"; diff --git a/client/src/components/dialog/DisclaimerPolicy.js b/client/src/components/dialog/DisclaimerPolicy.js index e0f3716b..7cd331fa 100644 --- a/client/src/components/dialog/DisclaimerPolicy.js +++ b/client/src/components/dialog/DisclaimerPolicy.js @@ -1,10 +1,10 @@ import { - Typography, + Box, + Button, Dialog, DialogContent, DialogTitle, - Box, - Button, + Typography, } from "@mui/material"; /** diff --git a/client/src/components/dialog/PrivacyNotice.js b/client/src/components/dialog/PrivacyNotice.js index d28f6c2e..36aa251c 100644 --- a/client/src/components/dialog/PrivacyNotice.js +++ b/client/src/components/dialog/PrivacyNotice.js @@ -1,10 +1,10 @@ import { - Typography, + Box, + Button, Dialog, DialogContent, DialogTitle, - Box, - Button, + Typography, } from "@mui/material"; /** diff --git a/client/src/components/dialog/confirmationDialog.js b/client/src/components/dialog/confirmationDialog.js index 4084f58c..af768655 100644 --- a/client/src/components/dialog/confirmationDialog.js +++ b/client/src/components/dialog/confirmationDialog.js @@ -1,10 +1,10 @@ import { + Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, - Button, } from "@mui/material"; /** diff --git a/client/src/routes/admin/AdministratorApproval.js b/client/src/routes/admin/AdministratorApproval.js index e7bf8030..1ef24148 100644 --- a/client/src/routes/admin/AdministratorApproval.js +++ b/client/src/routes/admin/AdministratorApproval.js @@ -1,5 +1,5 @@ +import { Box, Container, Divider, Stack, Typography } from "@mui/material"; import AccountApprovalTable from "../../components/administrator/AccountApprovalTable"; -import { Box, Typography, Divider, Stack, Container } from "@mui/material"; /** * A route that displays the merchant approval table where administrators diff --git a/client/src/routes/admin/AdministratorDashboard.js b/client/src/routes/admin/AdministratorDashboard.js index c2e1c8e4..913569fe 100644 --- a/client/src/routes/admin/AdministratorDashboard.js +++ b/client/src/routes/admin/AdministratorDashboard.js @@ -1,15 +1,11 @@ import { Box, - Card, - CardContent, Container, Divider, Grid, Stack, Typography, } from "@mui/material"; -import { BarChart } from "@mui/x-charts/BarChart"; -import { useEffect, useState } from "react"; import ActiveMerchantsAnalytics from "../../components/administrator/analytics/ActiveMerchantsAnalytics"; import ActiveUsersAnalytics from "../../components/administrator/analytics/ActiveUsersAnalytics"; import AverageRiskSeriesAnalytics from "../../components/administrator/analytics/AverageRiskSeriesAnalytics"; diff --git a/client/src/routes/admin/AdministratorLogs.js b/client/src/routes/admin/AdministratorLogs.js index 2a58ecc7..3d5d68f4 100644 --- a/client/src/routes/admin/AdministratorLogs.js +++ b/client/src/routes/admin/AdministratorLogs.js @@ -1,6 +1,5 @@ +import { Box, Container, Divider, Stack, Typography } from "@mui/material"; import AuditLogTable from "../../components/administrator/AuditLogTable"; -import { Box, Typography, Divider, Stack, Container } from "@mui/material"; -import AdministratorApproval from "./AdministratorApproval"; /** * A route that provides tools to filter through and audit the systems logs. diff --git a/client/src/routes/admin/AdministratorUsers.js b/client/src/routes/admin/AdministratorUsers.js index 45e469e9..bf233254 100644 --- a/client/src/routes/admin/AdministratorUsers.js +++ b/client/src/routes/admin/AdministratorUsers.js @@ -1,5 +1,5 @@ +import { Box, Container, Divider, Stack, Typography } from "@mui/material"; import UserManagementTable from "../../components/administrator/UserManagementTable"; -import { Box, Typography, Divider, Stack, Container } from "@mui/material"; /** * A route that provides tools to manage, filter and search through the users of the diff --git a/client/src/routes/merchant/MerchantGenerateReport.js b/client/src/routes/merchant/MerchantGenerateReport.js index f9dc16a4..9c686619 100644 --- a/client/src/routes/merchant/MerchantGenerateReport.js +++ b/client/src/routes/merchant/MerchantGenerateReport.js @@ -1,6 +1,6 @@ -import { Container, ButtonGroup, Button, Box } from "@mui/material"; -import MerchantReportForm from "../../components/healthReport/MerchantReportForm"; +import { Box } from "@mui/material"; import { useState } from "react"; +import MerchantReportForm from "../../components/healthReport/MerchantReportForm"; /** * A page that provides the health report form for merchants to generate diff --git a/client/src/routes/merchant/MerchantLanding.js b/client/src/routes/merchant/MerchantLanding.js index 045f1584..dd420d4a 100644 --- a/client/src/routes/merchant/MerchantLanding.js +++ b/client/src/routes/merchant/MerchantLanding.js @@ -1,5 +1,4 @@ -import { Box, Typography, Card, CardContent } from "@mui/material"; -import { grid } from "@mui/system"; +import { Box, Card, CardContent, Typography } from "@mui/material"; import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/routes/merchant/MerchantReports.js b/client/src/routes/merchant/MerchantReports.js index c0d7d42e..62220ef0 100644 --- a/client/src/routes/merchant/MerchantReports.js +++ b/client/src/routes/merchant/MerchantReports.js @@ -1,31 +1,27 @@ -import ReportTemplate from "../../components/healthReport/ReportTemplate"; -import DownloadReportButton from "../../components/healthReport/DownloadReportButton"; import CloseIcon from "@mui/icons-material/Close"; -import IconButton from "@mui/material/IconButton"; -import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown"; -import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp"; -import ConfirmationDialog from "../../components/dialog/confirmationDialog"; -import React, { useState, useEffect } from "react"; -import { useLocation } from "react-router-dom"; import { + Autocomplete, Box, - Typography, + Button, + FormControl, + InputLabel, List, ListItem, ListItemText, MenuItem, - FormControl, - InputLabel, + Paper, Select, - Button, - Autocomplete, TextField, - Drawer, - Stack, - useTheme, + Typography, useMediaQuery, - Paper, + useTheme, } from "@mui/material"; +import IconButton from "@mui/material/IconButton"; +import { useEffect, useState } from "react"; +import { useLocation } from "react-router-dom"; +import ConfirmationDialog from "../../components/dialog/confirmationDialog"; +import DownloadReportButton from "../../components/healthReport/DownloadReportButton"; +import ReportTemplate from "../../components/healthReport/ReportTemplate"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/routes/merchant/PatientDetails.js b/client/src/routes/merchant/PatientDetails.js index 4eb54050..4ae741dc 100644 --- a/client/src/routes/merchant/PatientDetails.js +++ b/client/src/routes/merchant/PatientDetails.js @@ -1,15 +1,15 @@ import { Box, - Typography, + Button, Card, CardContent, - Button, - useTheme, + Typography, useMediaQuery, + useTheme, } from "@mui/material"; -import { useState, useEffect } from "react"; -import { useNavigate, useParams } from "react-router-dom"; import { BarChart } from "@mui/x-charts/BarChart"; +import { useEffect, useState } from "react"; +import { useNavigate, useParams } from "react-router-dom"; // AppBar height: 56px toolbar + 2px border on mobile (xs), 64px + 2px on desktop (sm+) const APPBAR_HEIGHT = { xs: "58px", sm: "66px" }; @@ -231,7 +231,13 @@ const PatientDetails = () => { > {key.toUpperCase()} - + {patientData?.risks?.[key]?.[0] ?? 0}% { if (!label) { diff --git a/client/src/routes/standardUser/ReportHistory.js b/client/src/routes/standardUser/ReportHistory.js index 4f925b5b..88faae0b 100644 --- a/client/src/routes/standardUser/ReportHistory.js +++ b/client/src/routes/standardUser/ReportHistory.js @@ -1,28 +1,24 @@ -import ReportTemplate from "../../components/healthReport/ReportTemplate"; -import DownloadReportButton from "../../components/healthReport/DownloadReportButton"; import CloseIcon from "@mui/icons-material/Close"; import IconButton from "@mui/material/IconButton"; -import MenuIcon from "@mui/icons-material/Menu"; +import { useEffect, useState } from "react"; import ConfirmationDialog from "../../components/dialog/confirmationDialog"; -import Stack from "@mui/material/Stack"; -import React, { useState, useEffect } from "react"; -import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown"; -import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp"; +import DownloadReportButton from "../../components/healthReport/DownloadReportButton"; +import ReportTemplate from "../../components/healthReport/ReportTemplate"; import { Box, - Typography, + Button, + FormControl, + InputLabel, List, ListItem, ListItemText, - FormControl, - InputLabel, - Select, MenuItem, - Button, - useTheme, - useMediaQuery, Paper, + Select, + Typography, + useMediaQuery, + useTheme, } from "@mui/material"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; @@ -118,8 +114,14 @@ const AIHealthPrediction = ({}) => { ].sort((a, b) => a - b); const months = [ - ...new Set(reportDates.filter((r) => !selectedYear || new Date(r.date).getFullYear() === selectedYear,) - .map((r) => new Date(r.date).getMonth() + 1),), + ...new Set( + reportDates + .filter( + (r) => + !selectedYear || new Date(r.date).getFullYear() === selectedYear, + ) + .map((r) => new Date(r.date).getMonth() + 1), + ), ].sort((a, b) => a - b); // Filters reports based on selected year and month if any. diff --git a/client/src/routes/standardUser/UserLanding.js b/client/src/routes/standardUser/UserLanding.js index 8a5fccac..35e7cb02 100644 --- a/client/src/routes/standardUser/UserLanding.js +++ b/client/src/routes/standardUser/UserLanding.js @@ -1,15 +1,15 @@ import { + Box, Card, CardContent, - Box, Divider, Typography, - useTheme, useMediaQuery, + useTheme, } from "@mui/material"; -import { useNavigate } from "react-router-dom"; -import { useEffect, useState } from "react"; import { BarChart } from "@mui/x-charts/BarChart"; +import { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; // AppBar height: 56px toolbar + 2px border on mobile (xs), 64px + 2px on desktop (sm+) const APPBAR_HEIGHT = { xs: "58px", sm: "66px" }; diff --git a/client/src/routes/standardUser/UserSettings.js b/client/src/routes/standardUser/UserSettings.js index 866d0f85..2741e2ab 100644 --- a/client/src/routes/standardUser/UserSettings.js +++ b/client/src/routes/standardUser/UserSettings.js @@ -1,27 +1,27 @@ -import React, { useContext, useEffect, useMemo, useState } from "react"; import { + Alert, Box, - Typography, - List, - ListItem, - ListItemText, - TextField, Button, FormControl, InputLabel, - Select, + List, + ListItem, + ListItemText, MenuItem, - Alert, + Select, Stack, - useTheme, - useMediaQuery, - Tabs, Tab, + Tabs, + TextField, + Typography, + useMediaQuery, + useTheme, } from "@mui/material"; -import ConfirmationDialog from "../../components/dialog/confirmationDialog"; +import { useContext, useEffect, useMemo, useState } from "react"; import { useNavigate } from "react-router-dom"; -import { UserContext } from "../../utils/UserContext"; import PhoneInputField from "../../components/authentication/PhoneInputField"; +import ConfirmationDialog from "../../components/dialog/confirmationDialog"; +import { UserContext } from "../../utils/UserContext"; /** * A page that provides the tools for a user to securely update their diff --git a/client/src/utils/LandingRoute.js b/client/src/utils/LandingRoute.js index 388e2b30..7a72b836 100644 --- a/client/src/utils/LandingRoute.js +++ b/client/src/utils/LandingRoute.js @@ -1,5 +1,5 @@ -import { Navigate } from "react-router-dom"; import { useEffect, useState } from "react"; +import { Navigate } from "react-router-dom"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/utils/ProtectedRoutes.js b/client/src/utils/ProtectedRoutes.js index bf1ca4be..9dff833a 100644 --- a/client/src/utils/ProtectedRoutes.js +++ b/client/src/utils/ProtectedRoutes.js @@ -1,5 +1,5 @@ -import { Outlet, Navigate, useLocation } from "react-router-dom"; import { useEffect, useState } from "react"; +import { Navigate, Outlet, useLocation } from "react-router-dom"; import NavBar from "../components/Navbar"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/utils/PublicOnlyRoutes.js b/client/src/utils/PublicOnlyRoutes.js index ef0b560d..852b9c8a 100644 --- a/client/src/utils/PublicOnlyRoutes.js +++ b/client/src/utils/PublicOnlyRoutes.js @@ -1,6 +1,5 @@ -import { Outlet, Navigate } from "react-router-dom"; import { useEffect, useState } from "react"; -import NavBar from "../components/Navbar"; +import { Navigate, Outlet } from "react-router-dom"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; diff --git a/client/src/utils/UserContext.js b/client/src/utils/UserContext.js index 13c738af..66835553 100644 --- a/client/src/utils/UserContext.js +++ b/client/src/utils/UserContext.js @@ -1,9 +1,9 @@ import { createContext, - useState, + useCallback, useEffect, useMemo, - useCallback, + useState, } from "react"; export const UserContext = createContext(null); From 28914a837d2006f26ae0424e059c9a0fbddc87fd Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 11:57:45 +0930 Subject: [PATCH 03/22] Change href navigation to RouterLink in HealthAnalytics.js --- client/src/routes/standardUser/HealthAnalytics.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/src/routes/standardUser/HealthAnalytics.js b/client/src/routes/standardUser/HealthAnalytics.js index f330f17d..51bc8b9f 100644 --- a/client/src/routes/standardUser/HealthAnalytics.js +++ b/client/src/routes/standardUser/HealthAnalytics.js @@ -19,6 +19,7 @@ import { } from "@mui/material"; import { LineChart } from "@mui/x-charts/LineChart"; import { useEffect, useMemo, useState } from "react"; +import { Link as RouterLink } from "react-router-dom"; const formatXAxisLabel = (label, index, total, isMobile) => { if (!label) { @@ -468,7 +469,8 @@ const HealthAnalytics = () => { > @@ -371,7 +362,6 @@ const UserSettings = () => { width: { xs: "min(260px, 100%)", sm: "auto" }, py: { xs: "0.7rem", sm: "0.6rem" }, fontSize: { xs: "0.95rem", sm: "0.875rem" }, - fontWeight: 500, }} > {accountSaving ? "Saving…" : "Save Changes"} @@ -404,8 +394,8 @@ const UserSettings = () => { const Profile = () => ( Profile Settings @@ -420,15 +410,6 @@ const UserSettings = () => { )} - - - {user?.given_names || ""} {user?.family_name || ""} - - - {user?.email || ""} - - - { return ( Change Password From 37bab8874647ff6f8f2f20a94ce5e2c0799529a7 Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 12:26:03 +0930 Subject: [PATCH 06/22] Fix mobile layout for report template --- client/src/components/AppThemeProvider.jsx | 4 ++++ .../src/components/healthReport/ReportTemplate.js | 15 ++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/client/src/components/AppThemeProvider.jsx b/client/src/components/AppThemeProvider.jsx index be1f45f5..ff550784 100644 --- a/client/src/components/AppThemeProvider.jsx +++ b/client/src/components/AppThemeProvider.jsx @@ -137,6 +137,10 @@ export const appTheme = createTheme({ fontWeight: "regular", fontFamily: "'Russo One', 'sans-serif'", }, + h6: { + fontWeight: "regular", + fontFamily: "'Russo One', 'sans-serif'", + }, h7: { fontWeight: "regular", fontFamily: "'Russo One', 'sans-serif'", diff --git a/client/src/components/healthReport/ReportTemplate.js b/client/src/components/healthReport/ReportTemplate.js index c7a7dc2b..8c213cd2 100644 --- a/client/src/components/healthReport/ReportTemplate.js +++ b/client/src/components/healthReport/ReportTemplate.js @@ -154,7 +154,9 @@ const ReportTemplate = ({ report, date }) => { mx: "auto", }} > - Generated on: {new Date(date).toLocaleDateString("en-AU")}{" at "}{`${new Date(date).toLocaleTimeString("en-AU")}`} + Generated on: {new Date(date).toLocaleDateString("en-AU")} + {" at "} + {`${new Date(date).toLocaleTimeString("en-AU")}`} @@ -265,7 +267,7 @@ const ReportTemplate = ({ report, date }) => { }} > { p: 2, }} > - {/* Exercise */} - + Exercise Recommendations @@ -295,7 +296,7 @@ const ReportTemplate = ({ report, date }) => { {/* Diet */} - + Diet Recommendations @@ -305,7 +306,7 @@ const ReportTemplate = ({ report, date }) => { {/* Lifestyle */} - + Lifestyle Recommendations @@ -316,7 +317,7 @@ const ReportTemplate = ({ report, date }) => { {/* Diet to Avoid */} - + Diet to Avoid From ea8cee2d5e13ae0c07b722440cdab1eb2e493dd9 Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 12:35:46 +0930 Subject: [PATCH 07/22] Update mobile UI on Generate Report Form --- .../healthReport/GenerateReportForm.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/client/src/components/healthReport/GenerateReportForm.js b/client/src/components/healthReport/GenerateReportForm.js index 65070815..585739ee 100644 --- a/client/src/components/healthReport/GenerateReportForm.js +++ b/client/src/components/healthReport/GenerateReportForm.js @@ -15,6 +15,8 @@ import { ListItemText, Select, FormHelperText, + useTheme, + useMediaQuery, } from "@mui/material"; import CheckBoxOutlineBlankIcon from "@mui/icons-material/CheckBoxOutlineBlank"; import CheckBoxIcon from "@mui/icons-material/CheckBox"; @@ -30,6 +32,8 @@ const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; */ const GenerateReportForm = () => { const navigate = useNavigate(); + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); // Options for each drop down input. This can be modified as required to change the input for each selection const healthConditions = [ @@ -376,7 +380,7 @@ const GenerateReportForm = () => { }} > { {/* Age & Physique Section */} Age & Physique @@ -490,10 +495,11 @@ const GenerateReportForm = () => { {/* Fitness Section */} Health & Fitness @@ -586,10 +592,11 @@ const GenerateReportForm = () => { /> Life Style @@ -718,7 +725,7 @@ const GenerateReportForm = () => { - + + + @@ -206,7 +213,7 @@ const PatientDetails = () => { sx={{ display: "flex", gap: { xs: 1, sm: 2 }, - flexDirection: "row", + flexDirection: isMobile ? "column" : "row", }} > {["stroke", "diabetes", "cvd"].map((key) => ( @@ -299,7 +306,7 @@ const PatientDetails = () => { height: { xs: "auto", md: "95%" }, }} > - + Latest Recommendations @@ -317,7 +324,10 @@ const PatientDetails = () => { : "none", }} > - + {key.toUpperCase()} From efe375a6b1d6a9cf7828bf03523b139ca9db2772 Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 13:06:28 +0930 Subject: [PATCH 10/22] Fix mobile font size on Merchant landing --- client/src/routes/merchant/MerchantLanding.js | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/client/src/routes/merchant/MerchantLanding.js b/client/src/routes/merchant/MerchantLanding.js index dd420d4a..1d53f170 100644 --- a/client/src/routes/merchant/MerchantLanding.js +++ b/client/src/routes/merchant/MerchantLanding.js @@ -1,4 +1,11 @@ -import { Box, Card, CardContent, Typography } from "@mui/material"; +import { + Box, + Card, + CardContent, + Typography, + useMediaQuery, + useTheme, +} from "@mui/material"; import { useEffect, useState } from "react"; const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; @@ -14,6 +21,9 @@ const MerchantLanding = () => { const [data, setData] = useState({}); const [name, setName] = useState(""); + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + useEffect(() => { fetch(`${API_BASE}/user/me`, { method: "GET", @@ -76,7 +86,9 @@ const MerchantLanding = () => { }} > - Patient Overview + + Patient Overview + {/* Stat cards */} @@ -114,7 +126,10 @@ const MerchantLanding = () => { > {/* Condition risk graph */} - + Risk Distribution {["stroke", "cvd", "diabetes"].map((condition) => { @@ -193,7 +208,10 @@ const MerchantLanding = () => { p: 2, }} > - + Report Activity From 2478d740cec6525cf0bc077abaef24a6411462d7 Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 13:08:17 +0930 Subject: [PATCH 11/22] Fix mobile font size in Patient Management --- client/src/routes/merchant/PatientManagement.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/client/src/routes/merchant/PatientManagement.js b/client/src/routes/merchant/PatientManagement.js index 48c03332..6826f280 100644 --- a/client/src/routes/merchant/PatientManagement.js +++ b/client/src/routes/merchant/PatientManagement.js @@ -8,6 +8,8 @@ import { Stack, TextField, Typography, + useMediaQuery, + useTheme, } from "@mui/material"; import InputAdornment from "@mui/material/InputAdornment"; import { DataGrid } from "@mui/x-data-grid"; @@ -30,6 +32,9 @@ const PatientManagement = () => { const API_BASE = process.env.REACT_APP_API_URL || "http://localhost:8000"; const navigate = useNavigate(); + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + const [patientData, setPatientData] = useState([]); const [paginationModel, setPaginationModel] = useState({ page: 0, @@ -198,10 +203,7 @@ const PatientManagement = () => { }} > - + Patient Management From 87cd72cf53bab6df274d682fc393b730ce1cb899 Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 13:14:19 +0930 Subject: [PATCH 12/22] Update mobile layout on UserLanding --- client/src/routes/standardUser/UserLanding.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/client/src/routes/standardUser/UserLanding.js b/client/src/routes/standardUser/UserLanding.js index 35e7cb02..7ed131b9 100644 --- a/client/src/routes/standardUser/UserLanding.js +++ b/client/src/routes/standardUser/UserLanding.js @@ -118,7 +118,7 @@ const UserLanding = ({}) => { @@ -137,7 +137,7 @@ const UserLanding = ({}) => { sx={{ display: "flex", gap: { xs: 1, sm: 2 }, - flexDirection: "row", + flexDirection: isMobile ? "column" : "row", }} > {["stroke", "diabetes", "cvd"].map((key) => ( @@ -228,7 +228,7 @@ const UserLanding = ({}) => { height: { xs: "auto", md: "95%" }, }} > - + Latest Recommendations @@ -246,7 +246,10 @@ const UserLanding = ({}) => { : "none", }} > - + {key.toUpperCase()} From 610726d1e7b294abf3fb1463cff12dcef581aad9 Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 13:22:15 +0930 Subject: [PATCH 13/22] Update no report screen on report history --- .../src/routes/standardUser/ReportHistory.js | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/client/src/routes/standardUser/ReportHistory.js b/client/src/routes/standardUser/ReportHistory.js index 88faae0b..b74c6c0e 100644 --- a/client/src/routes/standardUser/ReportHistory.js +++ b/client/src/routes/standardUser/ReportHistory.js @@ -4,6 +4,7 @@ import { useEffect, useState } from "react"; import ConfirmationDialog from "../../components/dialog/confirmationDialog"; import DownloadReportButton from "../../components/healthReport/DownloadReportButton"; import ReportTemplate from "../../components/healthReport/ReportTemplate"; +import { Link as RouterLink } from "react-router-dom"; import { Box, @@ -144,15 +145,38 @@ const AIHealthPrediction = ({}) => { - - No Health Prediction Reports Available - + + + No Health Prediction Reports Available + + + ); } else { From f7a1560b58a7cd71e401b0edea41111cee2880ea Mon Sep 17 00:00:00 2001 From: Luke Bradley Date: Sun, 24 May 2026 14:10:22 +0930 Subject: [PATCH 14/22] Fix mobile button alignment --- .../administrator/analytics/AverageRiskSeriesAnalytics.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/src/components/administrator/analytics/AverageRiskSeriesAnalytics.js b/client/src/components/administrator/analytics/AverageRiskSeriesAnalytics.js index d31c06f4..d631fa19 100644 --- a/client/src/components/administrator/analytics/AverageRiskSeriesAnalytics.js +++ b/client/src/components/administrator/analytics/AverageRiskSeriesAnalytics.js @@ -7,6 +7,8 @@ import { MenuItem, Select, Typography, + useMediaQuery, + useTheme, } from "@mui/material"; import Divider from "@mui/material/Divider"; import { LineChart } from "@mui/x-charts/LineChart"; @@ -23,6 +25,9 @@ const DEFAULT_YEAR = 2026; * @returns {@mui.material.Card} */ const AverageRiskSeriesAnalytics = () => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + const [availableYears, setAvailableYears] = useState([]); const [year, setYear] = useState(""); const [xAxisData, setXAxisData] = useState([]); @@ -96,7 +101,7 @@ const AverageRiskSeriesAnalytics = () => { Average Disease Risk (%) - + Year