react-native-unistyles
Version:
Level up your React Native StyleSheet
28 lines (27 loc) • 1.02 kB
JavaScript
;
import { useEffect, useState } from 'react';
import { useSharedValue } from 'react-native-reanimated';
import { UnistyleDependency, UnistylesRuntime, UnistylesShadowRegistry } from '../specs';
import { services } from '../web/services';
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 = services.listener.addListeners([UnistyleDependency.Theme], () => {
if (scopedTheme) {
return;
}
theme.set(UnistylesRuntime.getTheme());
});
return () => {
dispose();
};
}, [scopedTheme]);
return theme;
};
//# sourceMappingURL=useAnimatedTheme.js.map