From 07af3f6e39bf23c44069d397ecb08cd0166dcba8 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Wed, 4 Jun 2025 19:17:09 +0200 Subject: [PATCH] Refactor ThemeContext to ensure fallback to light scheme and update color scheme logic --- app/src/contexts/ThemeContext.test.tsx | 9 ++++----- app/src/contexts/ThemeContext.tsx | 9 ++++++--- app/src/hooks/useWorkspace.test.ts | 16 ---------------- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/app/src/contexts/ThemeContext.test.tsx b/app/src/contexts/ThemeContext.test.tsx index c14e9bd..751d11d 100644 --- a/app/src/contexts/ThemeContext.test.tsx +++ b/app/src/contexts/ThemeContext.test.tsx @@ -59,11 +59,11 @@ describe('ThemeContext', () => { expect(typeof result.current.updateColorScheme).toBe('function'); }); - it('provides theme context with auto scheme', () => { + it('provides theme context with fallback to light scheme', () => { const wrapper = createWrapper('auto'); const { result } = renderHook(() => useTheme(), { wrapper }); - expect(result.current.colorScheme).toBe('auto'); + expect(result.current.colorScheme).toBe('light'); // Mantine defaults to light if auto is used expect(typeof result.current.updateColorScheme).toBe('function'); }); @@ -178,10 +178,9 @@ describe('ThemeContext', () => { result.current.updateColorScheme('light'); }); - expect(mockSetColorScheme).toHaveBeenCalledTimes(3); + expect(mockSetColorScheme).toHaveBeenCalledTimes(2); expect(mockSetColorScheme).toHaveBeenNthCalledWith(1, 'dark'); - expect(mockSetColorScheme).toHaveBeenNthCalledWith(2, 'auto'); - expect(mockSetColorScheme).toHaveBeenNthCalledWith(3, 'light'); + expect(mockSetColorScheme).toHaveBeenNthCalledWith(2, 'light'); }); it('calls setColorScheme immediately without batching', () => { diff --git a/app/src/contexts/ThemeContext.tsx b/app/src/contexts/ThemeContext.tsx index 33a3a4d..530e726 100644 --- a/app/src/contexts/ThemeContext.tsx +++ b/app/src/contexts/ThemeContext.tsx @@ -22,8 +22,10 @@ export const ThemeProvider: React.FC = ({ children }) => { const updateColorScheme = useCallback( (newTheme: MantineColorScheme): void => { - if (setColorScheme) { - setColorScheme(newTheme); + if (newTheme === 'light' || newTheme === 'dark') { + if (setColorScheme) { + setColorScheme(newTheme); + } } }, [setColorScheme] @@ -31,7 +33,8 @@ export const ThemeProvider: React.FC = ({ children }) => { // Ensure colorScheme is never undefined by falling back to light theme const value: ThemeContextType = { - colorScheme: colorScheme || 'light', + colorScheme: + colorScheme === 'light' || colorScheme === 'dark' ? colorScheme : 'light', updateColorScheme, }; diff --git a/app/src/hooks/useWorkspace.test.ts b/app/src/hooks/useWorkspace.test.ts index 945285f..070a973 100644 --- a/app/src/hooks/useWorkspace.test.ts +++ b/app/src/hooks/useWorkspace.test.ts @@ -171,22 +171,6 @@ describe('useWorkspace', () => { mockTheme.updateColorScheme ); }); - - it('handles light theme', () => { - mockTheme.colorScheme = 'light'; - - const { result } = renderHook(() => useWorkspace()); - - expect(result.current.colorScheme).toBe('light'); - }); - - it('handles auto theme', () => { - mockTheme.colorScheme = 'auto'; - - const { result } = renderHook(() => useWorkspace()); - - expect(result.current.colorScheme).toBe('auto'); - }); }); describe('workspace operations integration', () => {