UNPKG

@fruits-chain/react-native-xiaoshu

Version:
117 lines (110 loc) • 4.24 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 omit from 'lodash/omit'; import pick from 'lodash/pick'; import React, { useState, useEffect, useRef, useCallback, memo } from 'react'; import { Text, View } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import DatePickerView from '../date-picker-view'; import { callInterceptor } from '../helpers'; import { usePersistFn } from '../hooks'; import Locale from '../locale'; import { varCreator as varCreatorPicker, styleCreator as styleCreatorPicker } from '../picker/style'; import Popup from '../popup'; import Theme from '../theme'; const DATE_PICKER_VIEW_PROPS_KEYS = ['defaultValue', 'mode', 'min', 'max', 'renderLabel']; const DatePickerSingleMethod = _ref => { let { title, confirmButtonText, cancelButtonText, onCancel, onConfirm, onPressOverlay, beforeClose, ...restProps } = _ref; const locale = Locale.useLocale().DatePickerSingleMethod; const TOKENS = Theme.useThemeTokens(); const CV_PICKER = Theme.createVar(TOKENS, varCreatorPicker); const STYLES_PICKER = Theme.createStyle(CV_PICKER, styleCreatorPicker); const insets = useSafeAreaInsets(); const [visible, setVisible] = useState(false); const [loading, setLoading] = useState(false); const Value = useRef(restProps.defaultValue || new Date()); useEffect(() => { setVisible(true); }, []); const onChange = useCallback(v => { Value.current = v; }, []); const doAction = usePersistFn(action => { setLoading(true); callInterceptor(beforeClose, { args: [action, Value.current], done: () => { switch (action) { case 'cancel': onCancel === null || onCancel === void 0 ? void 0 : onCancel(Value.current); break; case 'confirm': onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm(Value.current); break; case 'overlay': onPressOverlay === null || onPressOverlay === void 0 ? void 0 : onPressOverlay(Value.current); 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]); const dataPickerViewProps = pick(restProps, DATE_PICKER_VIEW_PROPS_KEYS); const popupProps = omit(restProps, DATE_PICKER_VIEW_PROPS_KEYS); return /*#__PURE__*/React.createElement(Popup, _extends({}, popupProps, { onRequestClose: onRequestClose, visible: visible, onPressOverlay: onPressPopupOverlay, position: "bottom", round: true }), /*#__PURE__*/React.createElement(Popup.Header, { showClose: false, title: title, leftExtra: /*#__PURE__*/React.createElement(Text, { suppressHighlighting: true, style: STYLES_PICKER.cancel_text, onPress: loading ? undefined : onPressCancel }, cancelButtonText || locale.cancelButtonText), rightExtra: /*#__PURE__*/React.createElement(Text, { suppressHighlighting: true, style: STYLES_PICKER.confirm_text, onPress: loading ? undefined : onPressConfirm }, confirmButtonText || locale.confirmButtonText) }), /*#__PURE__*/React.createElement(DatePickerView, _extends({}, dataPickerViewProps, { loading: loading, onChange: onChange })), /*#__PURE__*/React.createElement(View, { style: { height: insets.bottom + CV_PICKER.picker_bottom_gap } })); }; export default /*#__PURE__*/memo(DatePickerSingleMethod); //# sourceMappingURL=date-picker-single-method.js.map