UNPKG

@livelike/react-native

Version:

LiveLike React Native package

57 lines (51 loc) 1.51 kB
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 }; };