UNPKG

@livelike/react-native

Version:

LiveLike React Native package

61 lines (54 loc) 1.51 kB
import { useCallback, useEffect, useState } from 'react'; export type UseEmojiSliderArg = { thumbImages: { min: number; imageUrl: string }[]; onSlidingComplete: (value: number) => void; onValueChange?: (value: number) => void; value: number; initialValue?: number; }; /** * @description useEmojiSlider hook provides state logic and effects for LLEmojiSlider component */ export const useEmojiSlider = ({ thumbImages, onValueChange, onSlidingComplete, initialValue, value, }: UseEmojiSliderArg) => { const [sliderInput, setSliderInput] = useState(value); const [thumbImg, setThumbImg] = useState(''); const onValueChangeHandler = useCallback( ([value]) => { for (let i = 0; i < thumbImages.length; i++) { const min = thumbImages[i].min; const max = thumbImages[i + 1]?.min ?? 1; if ( value >= min && value <= max && thumbImages[i].imageUrl !== thumbImg ) { setThumbImg(thumbImages[i].imageUrl); return setSliderInput(value); } } onValueChange?.(value); }, [thumbImages, thumbImg] ); const onSlidingCompleteHandler = useCallback(([value]) => { setSliderInput(value); onSlidingComplete(value); }, []); useEffect(() => { if (!thumbImg && initialValue) { onValueChangeHandler([initialValue]); } }, [initialValue, thumbImg]); return { sliderInput, thumbImg, onSlidingCompleteHandler, onValueChangeHandler, }; };