@quidone/react-native-wheel-picker
Version:
Picker is a UI component for selecting an item from a list of options.
60 lines (59 loc) • 2.06 kB
JavaScript
;
import React, { forwardRef, memo } from 'react';
import { useStableCallback } from '@rozhkov/react-useful-hooks';
import { usePickerControlSubscriber } from './usePickerControlSubscriber';
import { useValueIndex } from '../base';
import { jsx as _jsx } from "react/jsx-runtime";
export const withPickerControl = PickerComponent => {
const WrappedPicker = ({
pickerName,
control,
data,
value,
// extraValues TODO pass to props
onValueChanging: onValueChangingProp,
onValueChanged: onValueChangedProp,
_onScrollStart: onScrollStartProp,
_onScrollEnd: onScrollEndProp,
...restProps
}, forwardedRef) => {
const valueIndex = useValueIndex(data, value);
const currentItem = data[valueIndex];
const subscriber = usePickerControlSubscriber({
control,
pickerName,
currentItem
});
const onValueChangingStable = useStableCallback(event => {
subscriber.emitOnValueChanging(event);
onValueChangingProp?.(event);
});
const onValueChangedStable = useStableCallback(event => {
subscriber.emitOnValueChanged(event);
onValueChangedProp?.(event);
});
const onScrollStartStable = useStableCallback(() => {
subscriber.onScrollStart();
onScrollStartProp?.();
});
const onScrollEndStable = useStableCallback(() => {
subscriber.onScrollEnd();
onScrollEndProp?.();
});
return /*#__PURE__*/_jsx(PickerComponent, {
...restProps,
ref: forwardedRef,
data: data,
value: value,
extraValues: subscriber.extraValues,
onValueChanging: onValueChangingStable,
onValueChanged: onValueChangedStable,
_enableSyncScrollAfterScrollEnd: subscriber.enableSyncScrollAfterScrollEnd,
_onScrollStart: onScrollStartStable,
_onScrollEnd: onScrollEndStable
});
};
WrappedPicker.displayName = `withPickerControl(${PickerComponent.displayName})`;
return /*#__PURE__*/memo(/*#__PURE__*/forwardRef(WrappedPicker));
};
//# sourceMappingURL=withPickerControl.js.map