@hoddy-ui/core
Version:
Core rich react native components written in typescript
53 lines (46 loc) • 1.14 kB
text/typescript
import { useEffect } from "react";
import { Platform } from "react-native";
import {
useAnimatedStyle,
useSharedValue,
withDelay,
withTiming,
} from "react-native-reanimated";
import useAppState from "./useAppState";
interface UseFadeAnimationProps {
duration?: number;
delay?: number;
closeAfter?: number | null;
}
export const useFadeAnimation = ({
duration = 1000,
delay = 0,
closeAfter = null,
}: UseFadeAnimationProps = {}) => {
const opacity = useSharedValue(0);
const { isActive } = useAppState();
const animatedStyle = useAnimatedStyle(() => {
return {
opacity: opacity.value,
};
});
useEffect(() => {
if (!isActive && Platform.OS === "ios") {
opacity.value = 0;
return;
}
// Fade-in animation
opacity.value = withDelay(
delay,
withTiming(1, { duration }, () => {
if (closeAfter) {
// Schedule fade-out after closeAfter duration
opacity.value = withDelay(closeAfter, withTiming(0, { duration }));
}
})
);
}, [opacity, duration, delay, closeAfter, isActive]);
return {
animatedStyle,
};
};