Skip to content

Commit 3402818

Browse files
committed
refactor initial theme handling
1 parent 58ac6f8 commit 3402818

File tree

2 files changed

+6
-23
lines changed

2 files changed

+6
-23
lines changed

apps/debugger-extension/entrypoints/devtools-panel/components/Header.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type HeaderProps = {
1515
};
1616

1717
export function Header({ ref, filters, onFiltersChange, reset, onHardReload }: HeaderProps) {
18-
const { setTheme, theme, getSystemTheme } = useTheme();
18+
const { setTheme, theme } = useTheme();
1919
const handleFilterChange = (filter: Filters[number] | undefined) => {
2020
if (!filter) {
2121
onFiltersChange([]);
@@ -59,10 +59,7 @@ export function Header({ ref, filters, onFiltersChange, reset, onHardReload }: H
5959
<div className="ml-5 flex select-none items-center gap-1">
6060
<Badge
6161
variant="outline"
62-
className={cn(
63-
filters.length === 0 ? badgeColor : badgeHoverColor,
64-
'cursor-pointer'
65-
)}
62+
className={cn(filters.length === 0 ? badgeColor : badgeHoverColor, 'cursor-pointer')}
6663
onClick={() => handleFilterChange(undefined)}
6764
>
6865
<svg
@@ -130,10 +127,6 @@ export function Header({ ref, filters, onFiltersChange, reset, onHardReload }: H
130127
size="icon"
131128
className="ml-auto mr-1 h-5 w-5"
132129
onClick={() => {
133-
if (theme === 'system') {
134-
setTheme(getSystemTheme() === 'light' ? 'dark' : 'light');
135-
return;
136-
}
137130
setTheme(theme === 'light' ? 'dark' : 'light');
138131
}}
139132
>

apps/debugger-extension/entrypoints/devtools-panel/contexts/ThemeContext.tsx

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { createContext, useContext, useEffect, useState } from 'react';
1+
import { createContext, useContext, useLayoutEffect, useState } from 'react';
22

3-
type Theme = 'dark' | 'light' | 'system';
3+
type Theme = 'dark' | 'light';
44

55
type ThemeProviderProps = {
66
children: React.ReactNode;
@@ -11,7 +11,6 @@ type ThemeProviderProps = {
1111
type ThemeProviderState = {
1212
theme: Theme;
1313
setTheme: (theme: Theme) => void;
14-
getSystemTheme: () => Exclude<Theme, 'system'>;
1514
};
1615

1716
const ThemeProviderContext = createContext<ThemeProviderState>(
@@ -23,26 +22,18 @@ const getSystemTheme = () =>
2322

2423
export function ThemeProvider({
2524
children,
26-
defaultTheme = 'system',
2725
storageKey = 'vite-ui-theme',
2826
...props
2927
}: ThemeProviderProps) {
3028
const [theme, setTheme] = useState<Theme>(
31-
() => (localStorage.getItem(storageKey) as Theme) || defaultTheme
29+
() => (localStorage.getItem(storageKey) as Theme) || getSystemTheme()
3230
);
3331

34-
useEffect(() => {
32+
useLayoutEffect(() => {
3533
const root = window.document.documentElement;
3634

3735
root.classList.remove('light', 'dark');
3836

39-
if (theme === 'system') {
40-
const systemTheme = getSystemTheme();
41-
42-
root.classList.add(systemTheme);
43-
return;
44-
}
45-
4637
root.classList.add(theme);
4738
}, [theme]);
4839

@@ -52,7 +43,6 @@ export function ThemeProvider({
5243
localStorage.setItem(storageKey, theme);
5344
setTheme(theme);
5445
},
55-
getSystemTheme,
5646
};
5747

5848
return (

0 commit comments

Comments
 (0)