diff --git a/frontend/src/pages/Admin/OrdersPage.jsx b/frontend/src/pages/Admin/OrdersPage.jsx
index a65ad9a..f77b1f3 100644
--- a/frontend/src/pages/Admin/OrdersPage.jsx
+++ b/frontend/src/pages/Admin/OrdersPage.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, useEffect } from 'react';
import {
Box,
Typography,
@@ -60,6 +60,7 @@ const AdminOrdersPage = () => {
const queryClient = useQueryClient();
+
// Fetch orders
const {
data: orders,
@@ -88,6 +89,11 @@ const AdminOrdersPage = () => {
},
enabled: false // Only run when manually triggered
});
+ useEffect(() => {
+ if(selectedOrder){
+ fetchOrderDetails();
+ }
+ }, [selectedOrder])
// Update order status mutation
const updateOrderStatus = useMutation({
@@ -149,7 +155,6 @@ const AdminOrdersPage = () => {
const handleViewOrder = async (order) => {
setSelectedOrder(order);
setViewDialogOpen(true);
- await fetchOrderDetails();
};
// Close view dialog
diff --git a/frontend/src/theme/ThemeProvider.jsx b/frontend/src/theme/ThemeProvider.jsx
index 5706524..1a2add6 100644
--- a/frontend/src/theme/ThemeProvider.jsx
+++ b/frontend/src/theme/ThemeProvider.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useEffect } from 'react';
+import React, { useState, useEffect, useMemo } from 'react';
import { ThemeProvider as MuiThemeProvider } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';
import { createTheme } from '@mui/material/styles';
@@ -8,14 +8,8 @@ import apiClient from '@services/api';
import { useDarkMode } from '@hooks/reduxHooks';
import useBrandingSettings from '@hooks/brandingHooks';
-/**
- * Custom ThemeProvider that uses branding settings for white labeling
- */
const ThemeProvider = ({ children }) => {
- const [darkMode, _, setDarkMode] = useDarkMode();
- const [theme, setTheme] = useState(null);
-
- // Fetch branding settings
+ const [darkMode, toggleDarkMode, setDarkMode] = useDarkMode();
const { data: brandingSettings } = useBrandingSettings();
// Default colors
@@ -38,43 +32,38 @@ const ThemeProvider = ({ children }) => {
}
};
-
+ // Set initial dark mode from branding settings
useEffect(() => {
- // Only pull from default if user specified style hasn't been set
- if(brandingSettings){
- let isDarkMode = darkMode;
- if(localStorage.getItem("darkMode") == null){
- isDarkMode = brandingSettings?.default_mode === 'dark' ? true : darkMode;
- setDarkMode(isDarkMode);
+ if (brandingSettings && localStorage.getItem("darkMode") === null) {
+ const shouldUseDarkMode = brandingSettings.default_mode === 'dark';
+ if (shouldUseDarkMode !== darkMode) {
+ setDarkMode(shouldUseDarkMode);
}
- handleDarkMode(isDarkMode)
}
- }, [brandingSettings, darkMode]);
- function handleDarkMode(darkMode){
- let isDarkMode = darkMode;
-
- // Get colors based on mode
- const mode = isDarkMode ? 'dark' : 'light';
+ }, [brandingSettings]); // Remove darkMode and setDarkMode from dependencies
+
+ // Create theme based on current settings
+ const theme = useMemo(() => {
+ const mode = darkMode ? 'dark' : 'light';
const colors = {
- primary: isDarkMode
+ primary: darkMode
? (brandingSettings?.dark_primary_color || defaultColors.dark.primary)
: (brandingSettings?.light_primary_color || defaultColors.light.primary),
- secondary: isDarkMode
+ secondary: darkMode
? (brandingSettings?.dark_secondary_color || defaultColors.dark.secondary)
: (brandingSettings?.light_secondary_color || defaultColors.light.secondary),
- background: isDarkMode
+ background: darkMode
? (brandingSettings?.dark_background_color || defaultColors.dark.background)
: (brandingSettings?.light_background_color || defaultColors.light.background),
- paper: isDarkMode
+ paper: darkMode
? (brandingSettings?.dark_surface_color || defaultColors.dark.paper)
: (brandingSettings?.light_surface_color || defaultColors.light.paper),
- text: isDarkMode
+ text: darkMode
? (brandingSettings?.dark_text_color || defaultColors.dark.text)
: (brandingSettings?.light_text_color || defaultColors.light.text)
};
- // Create theme
- const newTheme = createTheme({
+ return createTheme({
palette: {
mode,
primary: {
@@ -92,7 +81,7 @@ const ThemeProvider = ({ children }) => {
},
text: {
primary: colors.text,
- secondary: isDarkMode
+ secondary: darkMode
? 'rgba(255, 255, 255, 0.7)'
: 'rgba(0, 0, 0, 0.6)',
},
@@ -106,30 +95,6 @@ const ThemeProvider = ({ children }) => {
'Arial',
'sans-serif',
].join(','),
- h1: {
- fontSize: '2.5rem',
- fontWeight: 500,
- },
- h2: {
- fontSize: '2rem',
- fontWeight: 500,
- },
- h3: {
- fontSize: '1.75rem',
- fontWeight: 500,
- },
- h4: {
- fontSize: '1.5rem',
- fontWeight: 500,
- },
- h5: {
- fontSize: '1.25rem',
- fontWeight: 500,
- },
- h6: {
- fontSize: '1rem',
- fontWeight: 500,
- },
},
components: {
MuiButton: {
@@ -144,7 +109,7 @@ const ThemeProvider = ({ children }) => {
styleOverrides: {
root: {
borderRadius: 8,
- boxShadow: isDarkMode
+ boxShadow: darkMode
? '0 4px 20px rgba(0, 0, 0, 0.5)'
: '0 4px 20px rgba(0, 0, 0, 0.1)',
},
@@ -153,7 +118,7 @@ const ThemeProvider = ({ children }) => {
MuiAppBar: {
styleOverrides: {
root: {
- boxShadow: isDarkMode
+ boxShadow: darkMode
? '0 4px 20px rgba(0, 0, 0, 0.5)'
: '0 2px 10px rgba(0, 0, 0, 0.05)',
},
@@ -161,30 +126,7 @@ const ThemeProvider = ({ children }) => {
},
},
});
-
- setTheme(newTheme);
- }
- // Use a default theme while loading
- if (!theme) {
- const defaultTheme = createTheme({
- palette: {
- mode: darkMode ? 'dark' : 'light',
- primary: {
- main: darkMode ? defaultColors.dark.primary : defaultColors.light.primary,
- },
- secondary: {
- main: darkMode ? defaultColors.dark.secondary : defaultColors.light.secondary,
- },
- },
- });
-
- return (
-
-
- {children}
-
- );
- }
+ }, [darkMode, brandingSettings, defaultColors]);
return (