Files
chat-gpz/components/DynamicThemeProvider.tsx
Zacharias-Brohn f5197d92f7 changes
2026-01-14 20:02:17 +01:00

51 lines
1.3 KiB
TypeScript

'use client';
import { createContext, useContext, useEffect, useState } from 'react';
import { createTheme, MantineProvider } from '@mantine/core';
interface ThemeContextType {
primaryColor: string;
setPrimaryColor: (color: string) => void;
}
const ThemeContext = createContext<ThemeContextType>({
primaryColor: 'blue',
setPrimaryColor: () => {},
});
export const useThemeContext = () => useContext(ThemeContext);
export function DynamicThemeProvider({ children }: { children: React.ReactNode }) {
const [primaryColor, setPrimaryColor] = useState('blue');
// Load user's accent color preference on mount
useEffect(() => {
const fetchUserAccentColor = async () => {
try {
const res = await fetch('/api/auth/me');
const data = await res.json();
if (data.user?.accentColor) {
setPrimaryColor(data.user.accentColor);
}
} catch (error) {
// Silently fail - use default color
console.error('Failed to fetch user accent color:', error);
}
};
fetchUserAccentColor();
}, []);
const theme = createTheme({
primaryColor,
});
return (
<ThemeContext.Provider value={{ primaryColor, setPrimaryColor }}>
<MantineProvider theme={theme} defaultColorScheme="auto">
{children}
</MantineProvider>
</ThemeContext.Provider>
);
}