fixed hooks

This commit is contained in:
2ManyProjects 2025-05-03 02:23:05 -05:00
parent efdd021712
commit 31e5084ea5
2 changed files with 29 additions and 82 deletions

View file

@ -1,4 +1,4 @@
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
import { import {
Box, Box,
Typography, Typography,
@ -60,6 +60,7 @@ const AdminOrdersPage = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
// Fetch orders // Fetch orders
const { const {
data: orders, data: orders,
@ -88,6 +89,11 @@ const AdminOrdersPage = () => {
}, },
enabled: false // Only run when manually triggered enabled: false // Only run when manually triggered
}); });
useEffect(() => {
if(selectedOrder){
fetchOrderDetails();
}
}, [selectedOrder])
// Update order status mutation // Update order status mutation
const updateOrderStatus = useMutation({ const updateOrderStatus = useMutation({
@ -149,7 +155,6 @@ const AdminOrdersPage = () => {
const handleViewOrder = async (order) => { const handleViewOrder = async (order) => {
setSelectedOrder(order); setSelectedOrder(order);
setViewDialogOpen(true); setViewDialogOpen(true);
await fetchOrderDetails();
}; };
// Close view dialog // Close view dialog

View file

@ -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 { ThemeProvider as MuiThemeProvider } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline'; import CssBaseline from '@mui/material/CssBaseline';
import { createTheme } from '@mui/material/styles'; import { createTheme } from '@mui/material/styles';
@ -8,14 +8,8 @@ import apiClient from '@services/api';
import { useDarkMode } from '@hooks/reduxHooks'; import { useDarkMode } from '@hooks/reduxHooks';
import useBrandingSettings from '@hooks/brandingHooks'; import useBrandingSettings from '@hooks/brandingHooks';
/**
* Custom ThemeProvider that uses branding settings for white labeling
*/
const ThemeProvider = ({ children }) => { const ThemeProvider = ({ children }) => {
const [darkMode, _, setDarkMode] = useDarkMode(); const [darkMode, toggleDarkMode, setDarkMode] = useDarkMode();
const [theme, setTheme] = useState(null);
// Fetch branding settings
const { data: brandingSettings } = useBrandingSettings(); const { data: brandingSettings } = useBrandingSettings();
// Default colors // Default colors
@ -38,43 +32,38 @@ const ThemeProvider = ({ children }) => {
} }
}; };
// Set initial dark mode from branding settings
useEffect(() => { useEffect(() => {
// Only pull from default if user specified style hasn't been set if (brandingSettings && localStorage.getItem("darkMode") === null) {
if(brandingSettings){ const shouldUseDarkMode = brandingSettings.default_mode === 'dark';
let isDarkMode = darkMode; if (shouldUseDarkMode !== darkMode) {
if(localStorage.getItem("darkMode") == null){ setDarkMode(shouldUseDarkMode);
isDarkMode = brandingSettings?.default_mode === 'dark' ? true : darkMode;
setDarkMode(isDarkMode);
} }
handleDarkMode(isDarkMode)
} }
}, [brandingSettings, darkMode]); }, [brandingSettings]); // Remove darkMode and setDarkMode from dependencies
function handleDarkMode(darkMode){
let isDarkMode = darkMode;
// Get colors based on mode // Create theme based on current settings
const mode = isDarkMode ? 'dark' : 'light'; const theme = useMemo(() => {
const mode = darkMode ? 'dark' : 'light';
const colors = { const colors = {
primary: isDarkMode primary: darkMode
? (brandingSettings?.dark_primary_color || defaultColors.dark.primary) ? (brandingSettings?.dark_primary_color || defaultColors.dark.primary)
: (brandingSettings?.light_primary_color || defaultColors.light.primary), : (brandingSettings?.light_primary_color || defaultColors.light.primary),
secondary: isDarkMode secondary: darkMode
? (brandingSettings?.dark_secondary_color || defaultColors.dark.secondary) ? (brandingSettings?.dark_secondary_color || defaultColors.dark.secondary)
: (brandingSettings?.light_secondary_color || defaultColors.light.secondary), : (brandingSettings?.light_secondary_color || defaultColors.light.secondary),
background: isDarkMode background: darkMode
? (brandingSettings?.dark_background_color || defaultColors.dark.background) ? (brandingSettings?.dark_background_color || defaultColors.dark.background)
: (brandingSettings?.light_background_color || defaultColors.light.background), : (brandingSettings?.light_background_color || defaultColors.light.background),
paper: isDarkMode paper: darkMode
? (brandingSettings?.dark_surface_color || defaultColors.dark.paper) ? (brandingSettings?.dark_surface_color || defaultColors.dark.paper)
: (brandingSettings?.light_surface_color || defaultColors.light.paper), : (brandingSettings?.light_surface_color || defaultColors.light.paper),
text: isDarkMode text: darkMode
? (brandingSettings?.dark_text_color || defaultColors.dark.text) ? (brandingSettings?.dark_text_color || defaultColors.dark.text)
: (brandingSettings?.light_text_color || defaultColors.light.text) : (brandingSettings?.light_text_color || defaultColors.light.text)
}; };
// Create theme return createTheme({
const newTheme = createTheme({
palette: { palette: {
mode, mode,
primary: { primary: {
@ -92,7 +81,7 @@ const ThemeProvider = ({ children }) => {
}, },
text: { text: {
primary: colors.text, primary: colors.text,
secondary: isDarkMode secondary: darkMode
? 'rgba(255, 255, 255, 0.7)' ? 'rgba(255, 255, 255, 0.7)'
: 'rgba(0, 0, 0, 0.6)', : 'rgba(0, 0, 0, 0.6)',
}, },
@ -106,30 +95,6 @@ const ThemeProvider = ({ children }) => {
'Arial', 'Arial',
'sans-serif', 'sans-serif',
].join(','), ].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: { components: {
MuiButton: { MuiButton: {
@ -144,7 +109,7 @@ const ThemeProvider = ({ children }) => {
styleOverrides: { styleOverrides: {
root: { root: {
borderRadius: 8, borderRadius: 8,
boxShadow: isDarkMode boxShadow: darkMode
? '0 4px 20px rgba(0, 0, 0, 0.5)' ? '0 4px 20px rgba(0, 0, 0, 0.5)'
: '0 4px 20px rgba(0, 0, 0, 0.1)', : '0 4px 20px rgba(0, 0, 0, 0.1)',
}, },
@ -153,7 +118,7 @@ const ThemeProvider = ({ children }) => {
MuiAppBar: { MuiAppBar: {
styleOverrides: { styleOverrides: {
root: { root: {
boxShadow: isDarkMode boxShadow: darkMode
? '0 4px 20px rgba(0, 0, 0, 0.5)' ? '0 4px 20px rgba(0, 0, 0, 0.5)'
: '0 2px 10px rgba(0, 0, 0, 0.05)', : '0 2px 10px rgba(0, 0, 0, 0.05)',
}, },
@ -161,30 +126,7 @@ const ThemeProvider = ({ children }) => {
}, },
}, },
}); });
}, [darkMode, brandingSettings, defaultColors]);
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 (
<MuiThemeProvider theme={defaultTheme}>
<CssBaseline />
{children}
</MuiThemeProvider>
);
}
return ( return (
<MuiThemeProvider theme={theme}> <MuiThemeProvider theme={theme}>