UNPKG

@fruits-chain/react-native-xiaoshu

Version:
94 lines (86 loc) • 3.02 kB
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