UNPKG

@quidone/react-native-wheel-picker

Version:

Picker is a UI component for selecting an item from a list of options.

54 lines 1.58 kB
import { useEffect, useRef } from 'react'; import { useStableCallback } from '@rozhkov/react-useful-hooks'; import { getPageIndex } from '../../../utils/scrolling'; const useValueEventsEffect = (_ref, _ref2) => { let { valueIndex, data, itemHeight, offsetYAv } = _ref; let { onValueChanging, onValueChanged } = _ref2; const activeIndexRef = useRef(valueIndex); const getIndex = useStableCallback(offset => getPageIndex(offset, { maxIndex: data.length - 1, pageLength: itemHeight })); useEffect(() => { const id = offsetYAv.addListener(_ref3 => { let { value: offset } = _ref3; const index = getIndex(offset); const activeIndex = activeIndexRef.current; if (index !== activeIndex) { activeIndexRef.current = index; onValueChanging === null || onValueChanging === void 0 ? void 0 : onValueChanging({ item: data[index], index }); } }); return () => { offsetYAv.removeListener(id); }; }, [data, getIndex, itemHeight, offsetYAv, onValueChanging]); const onStableValueChanged = useStableCallback(() => { const activeIndex = activeIndexRef.current; if (activeIndex !== valueIndex) { onValueChanged === null || onValueChanged === void 0 ? void 0 : onValueChanged({ index: activeIndex, item: data[activeIndex] }); } }); return { onScrollEnd: onStableValueChanged, activeIndexRef }; }; export default useValueEventsEffect; //# sourceMappingURL=useValueEventsEffect.js.map