@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
94 lines (86 loc) • 3.02 kB
JavaScript
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
import React, { useState, useEffect, useCallback, useRef, memo } from 'react';
import { callInterceptor } from '../helpers';
import { usePersistFn } from '../hooks';
import { getDataType, buildOptions, buildSelectedValue } from '../picker-view/helper/picker';
import Picker from './picker';
const buildValue = (values, columns) => {
const dataType = getDataType(columns);
const [options] = buildOptions(dataType, columns, values);
const [v, o] = buildSelectedValue(values, options);
return {
values: v,
columns: o
};
};
const PickerMethod = _ref => {
let {
onCancel,
onConfirm,
onPressOverlay,
beforeClose,
...restProps
} = _ref;
const [visible, setVisible] = useState(false);
const [loading, setLoading] = useState(false);
const Value = useRef(buildValue(restProps.defaultValue || [], restProps.columns));
useEffect(() => {
setVisible(true);
}, []);
const onChange = useCallback((v, c) => {
Value.current = {
values: v,
columns: c
};
}, []);
const doAction = usePersistFn(action => {
setLoading(true);
callInterceptor(beforeClose, {
args: [action, Value.current.values, Value.current.columns],
done: () => {
switch (action) {
case 'cancel':
onCancel === null || onCancel === void 0 ? void 0 : onCancel(Value.current.values, Value.current.columns);
break;
case 'confirm':
onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm(Value.current.values, Value.current.columns);
break;
case 'overlay':
onPressOverlay === null || onPressOverlay === void 0 ? void 0 : onPressOverlay(Value.current.values, Value.current.columns);
break;
default:
break;
}
setLoading(false);
setVisible(false);
},
canceled: () => {
setLoading(false);
}
});
});
const onPressCancel = useCallback(() => {
doAction('cancel');
}, [doAction]);
const onPressConfirm = useCallback(() => {
doAction('confirm');
}, [doAction]);
const onPressPopupOverlay = useCallback(() => {
doAction('overlay');
}, [doAction]);
const onRequestClose = useCallback(() => {
onPressPopupOverlay();
return true;
}, [onPressPopupOverlay]);
return /*#__PURE__*/React.createElement(Picker, _extends({}, restProps, {
visible: visible,
onChange: onChange,
onCancel: onPressCancel,
onConfirm: onPressConfirm,
onPressOverlay: onPressPopupOverlay,
loading: loading,
onRequestClose: onRequestClose
}));
};
export default /*#__PURE__*/memo(PickerMethod);
//# sourceMappingURL=picker-method.js.map