MCPcopy Create free account
hub / github.com/adobe/react-spectrum / useSettingsState

Function useSettingsState

packages/dev/s2-docs/src/SettingsProvider.tsx:28–61  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

26}
27
28export function useSettingsState() {
29 // Store the "override" color scheme ('light', 'dark', or 'system')
30 let [storedColorScheme, setStoredColorScheme] = useLocalStorage('colorScheme', 'system');
31 let systemColorScheme = useSyncExternalStore(
32 subscribeToColorScheme,
33 getSystemColorScheme,
34 getServerSnapshot
35 );
36
37 // Resolve the actual color scheme being used
38 let colorScheme: ColorScheme =
39 storedColorScheme === 'system' ? systemColorScheme : (storedColorScheme as ColorScheme);
40
41 // Toggle between system preference and the "other" one
42 let toggleColorScheme = useCallback(() => {
43 if (storedColorScheme === 'system') {
44 // Currently following system, switch to the opposite of system preference
45 setStoredColorScheme(systemColorScheme === 'dark' ? 'light' : 'dark');
46 } else {
47 // Currently overriding, go back to system
48 setStoredColorScheme('system');
49 }
50 }, [storedColorScheme, systemColorScheme, setStoredColorScheme]);
51
52 let providerColorScheme: ColorScheme | undefined =
53 storedColorScheme === 'system' ? undefined : (storedColorScheme as ColorScheme);
54
55 return {
56 colorScheme,
57 toggleColorScheme,
58 systemColorScheme,
59 providerColorScheme
60 };
61}
62
63export function SettingsContextProvider({children, elementType, locale}: SettingsProviderProps) {
64 let {colorScheme, toggleColorScheme, systemColorScheme, providerColorScheme} = useSettingsState();

Callers 2

SettingsContextProviderFunction · 0.85
SettingsProviderFunction · 0.85

Calls 2

useLocalStorageFunction · 0.90
useSyncExternalStoreFunction · 0.90

Tested by

no test coverage detected