@livelike/react-native
Version:
LiveLike React Native package
57 lines (51 loc) • 1.51 kB
text/typescript
import { useEffect, useMemo, useState } from 'react';
import { Animated } from 'react-native';
import { useWidgetRewards } from './useWidgetRewards';
export type UseWidgetRewardsEffectArg = {
widgetId: string;
};
export const useWidgetRewardsEffect = ({
widgetId,
}: UseWidgetRewardsEffectArg) => {
const widgetRewards = useWidgetRewards({ widgetId });
const [posYs, setPosys] = useState([]);
useEffect(() => {
if (widgetRewards && widgetRewards?.length > 1) {
const animations = [];
const posYs = widgetRewards.map(() => {
const posY = new Animated.Value(0);
const rewardAnimation = Animated.timing(posY, {
toValue: 10,
duration: 2000,
useNativeDriver: true,
});
animations.push(rewardAnimation);
return posY;
});
const rewardAnimation = Animated.loop(Animated.sequence(animations));
rewardAnimation.start();
setPosys(posYs);
return () => {
rewardAnimation.reset();
};
}
}, [widgetRewards]);
const slideInOutStyles = useMemo(() => {
if (
!widgetRewards?.length ||
!posYs.length ||
widgetRewards.length !== posYs.length
) {
return [];
}
return widgetRewards.map((reward, i) => {
return {
translateY: posYs[i].interpolate({
inputRange: [0, 1, 9, 10],
outputRange: [20, 0, 0, -20],
}),
};
});
}, [posYs, widgetRewards?.length]);
return { slideInOutStyles };
};