@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
JavaScript
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