Skip to content

Commit 15bc9d8

Browse files
committed
chore(sample): added scheme persistence
1 parent 609508b commit 15bc9d8

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

sample/src/hooks/useAppearance.tsx

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import AsyncStorage from '@react-native-async-storage/async-storage';
12
import React, { createContext, useContext, useState } from 'react';
23
import { Appearance } from 'react-native';
34

4-
import { NOOP } from '@sendbird/uikit-utils';
5+
import { NOOP, useAsyncLayoutEffect } from '@sendbird/uikit-utils';
56

67
const DEFAULT_APPEARANCE = 'light';
78

@@ -10,16 +11,44 @@ const AppearanceContext = createContext<{ scheme: 'light' | 'dark'; setScheme: (
1011
setScheme: NOOP,
1112
});
1213

14+
const SchemeManager = {
15+
KEY: 'sendbird@scheme',
16+
async get() {
17+
return ((await AsyncStorage.getItem(SchemeManager.KEY)) ?? Appearance.getColorScheme() ?? DEFAULT_APPEARANCE) as
18+
| 'light'
19+
| 'dark';
20+
},
21+
async set(scheme: 'light' | 'dark') {
22+
await AsyncStorage.setItem(SchemeManager.KEY, scheme);
23+
},
24+
};
25+
1326
export const AppearanceProvider = ({ children }: React.PropsWithChildren) => {
1427
const [scheme, setScheme] = useState<'light' | 'dark'>(Appearance.getColorScheme() ?? DEFAULT_APPEARANCE);
1528

29+
useAsyncLayoutEffect(async () => {
30+
setScheme(await SchemeManager.get());
31+
}, []);
32+
1633
// Handle scheme from Settings screen.
1734
// useEffect(() => {
1835
// const unsubscribe = Appearance.addChangeListener(({ colorScheme }) => setScheme(colorScheme ?? DEFAULT_APPEARANCE));
1936
// return () => unsubscribe.remove();
2037
// }, []);
2138

22-
return <AppearanceContext.Provider value={{ scheme, setScheme }}>{children}</AppearanceContext.Provider>;
39+
return (
40+
<AppearanceContext.Provider
41+
value={{
42+
scheme,
43+
setScheme: async (value) => {
44+
setScheme(value);
45+
await SchemeManager.set(value);
46+
},
47+
}}
48+
>
49+
{children}
50+
</AppearanceContext.Provider>
51+
);
2352
};
2453

2554
const useAppearance = () => {

0 commit comments

Comments
 (0)