Skip to content

Commit f73d0c6

Browse files
fix 🐛 theme revert and status bar behavior with ignoreSystemMode off (#8)
### Status Ready ### Description - Fixed theme issue where it now reverts to the system default when ignoreSystemMode is turned off. - Make the statubar unchanged when ignoreSystemMode is turned off
1 parent cc38ed0 commit f73d0c6

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

features/theme/index.tsx

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ export interface CreateThemeOptions {
3636
componentDefaults?: Record<ModifiableComponent, Record<string, any>>;
3737
}
3838

39+
function setColorScheme(scheme: 'light' | 'dark', ignoreSystemMode: boolean) {
40+
if (ignoreSystemMode) {
41+
Colors.setScheme(scheme as SchemeType);
42+
} else {
43+
const systemScheme = Appearance.getColorScheme() as 'light' | 'dark' | null;
44+
Colors.setScheme(systemScheme || 'default');
45+
}
46+
}
47+
3948
export function createTheme({
4049
ignoreSystemMode,
4150
supportDarkMode,
@@ -85,13 +94,7 @@ export function createTheme({
8594
return (scheme: 'light' | 'dark') => {
8695
setTheme((prev) => {
8796
const next = { ...prev, scheme };
88-
89-
if (next.ignoreSystemMode) {
90-
Colors.setScheme(scheme as SchemeType);
91-
} else {
92-
Colors.setScheme('default');
93-
}
94-
97+
setColorScheme(scheme, next.ignoreSystemMode);
9598
return next;
9699
});
97100
};
@@ -102,15 +105,18 @@ export function createTheme({
102105
const [state, setState] = React.useState<'light' | 'dark'>(scheme);
103106

104107
React.useEffect(() => {
105-
const systemScheme = Appearance.getColorScheme() as 'light' | 'dark' | null;
106-
const initialScheme = ignoreSystemMode ? scheme : systemScheme ?? scheme;
107-
Colors.setScheme(initialScheme as SchemeType);
108-
setState(initialScheme);
108+
setColorScheme(scheme, ignoreSystemMode);
109+
setState(scheme);
109110
}, [scheme, ignoreSystemMode]);
110111

111112
return state;
112113
}
113114

115+
function useIgnoreSystemMode() {
116+
const { ignoreSystemMode } = useAtomValue(atom);
117+
return ignoreSystemMode
118+
}
119+
114120
function ThemeProviderComponent({ children }: { children: React.ReactNode }) {
115121
const { scheme, ignoreSystemMode } = useAtomValue(atom);
116122
const [navThemeState, setNavThemeState] = React.useState(
@@ -121,7 +127,7 @@ export function createTheme({
121127
);
122128

123129
React.useEffect(() => {
124-
Colors.setScheme(scheme as SchemeType);
130+
setColorScheme(scheme, ignoreSystemMode);
125131
setNavThemeState(
126132
createReactNavigationTheme(
127133
availableSchemes[scheme],
@@ -130,7 +136,9 @@ export function createTheme({
130136
);
131137
}, [scheme, ignoreSystemMode]);
132138

133-
return <ThemeProvider value={navThemeState}>{children}</ThemeProvider>;
139+
return (
140+
<ThemeProvider value={navThemeState}>{children}</ThemeProvider>
141+
);
134142
}
135143

136144
function ThemeSettings() {
@@ -141,13 +149,7 @@ export function createTheme({
141149
const dispatch = () => {
142150
setState((prev) => {
143151
const next = { ...prev, ignoreSystemMode: !ignoreSystemMode };
144-
145-
if (next.ignoreSystemMode) {
146-
Colors.setScheme(prev.scheme || defaultScheme);
147-
} else {
148-
Colors.setScheme('default');
149-
}
150-
152+
setColorScheme(prev.scheme || defaultScheme, next.ignoreSystemMode);
151153
return next;
152154
});
153155
};
@@ -178,6 +180,7 @@ export function createTheme({
178180
return {
179181
useChangeTheme: useChangeScheme,
180182
useThemeScheme,
183+
useIgnoreSystemMode,
181184
ThemeProvider: ThemeProviderComponent,
182185
ThemeSettings,
183186
};

0 commit comments

Comments
 (0)