react-native-unistyles
Version:
Level up your React Native StyleSheet
28 lines (27 loc) • 1.06 kB
JavaScript
;
import { useEffect, useState } from 'react';
import { useSharedValue } from 'react-native-reanimated';
import { StyleSheet, UnistyleDependency, UnistylesRuntime, UnistylesShadowRegistry } from '../specs';
export const useAnimatedTheme = () => {
const [scopedTheme, setScopedTheme] = useState(() => UnistylesShadowRegistry.getScopedTheme());
const theme = useSharedValue(UnistylesRuntime.getTheme(scopedTheme));
const maybeNewScopedTheme = UnistylesShadowRegistry.getScopedTheme();
if (scopedTheme !== maybeNewScopedTheme) {
setScopedTheme(maybeNewScopedTheme);
theme.set(UnistylesRuntime.getTheme(maybeNewScopedTheme));
}
useEffect(() => {
const dispose = StyleSheet.addChangeListener(changedDependencies => {
if (!changedDependencies.includes(UnistyleDependency.Theme)) {
return;
}
if (scopedTheme) {
return;
}
theme.set(UnistylesRuntime.getTheme());
});
return () => dispose();
}, [scopedTheme]);
return theme;
};
//# sourceMappingURL=useAnimatedTheme.native.js.map