UNPKG

@fruits-chain/react-native-xiaoshu

Version:
126 lines (125 loc) • 3.37 kB
"use strict"; import React, { useState, useRef, useEffect, memo } from 'react'; import { View } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { callInterceptor } from "../helpers/index.js"; import { usePersistFn } from "../hooks/index.js"; import { varCreator as varCreatorPicker } from "../picker/style.js"; import Popup from "../popup/index.js"; import Theme from "../theme/index.js"; import DatePickerRangeView from "./date-picker-range-view.js"; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const DatePickerRangeMethod = ({ title, onCancel, onPressOverlay, beforeClose, // DatePickerRangeView mode, defaultValue, confirmButtonText, resetButtonText, placeholder, onConfirm, max, min, renderLabel, onClear, clearable, clearButtonText, ...restProps }) => { const TOKENS = Theme.useThemeTokens(); const CV_PICKER = Theme.createVar(TOKENS, varCreatorPicker); const insets = useSafeAreaInsets(); const [visible, setVisible] = useState(false); const [loading, setLoading] = useState(false); const Values = useRef(defaultValue && defaultValue.length === 2 ? defaultValue : [null, null]); useEffect(() => { setVisible(true); }, []); const onChangeRangeView = usePersistFn(d => { Values.current = d; }); const doAction = usePersistFn(action => { setLoading(true); callInterceptor(beforeClose, { args: [action, Values.current], done: () => { switch (action) { case 'cancel': onCancel?.(Values.current); break; case 'confirm': onConfirm?.(Values.current); break; case 'overlay': onPressOverlay?.(Values.current); break; case 'clear': onClear?.(Values.current); break; default: break; } setLoading(false); setVisible(false); }, canceled: () => { setLoading(false); } }); }); const onPressPopupOverlay = usePersistFn(() => { doAction('overlay'); }); const onPressClose = usePersistFn(() => { doAction('cancel'); }); const onPressConfirm = usePersistFn(() => { doAction('confirm'); }); const onPressClear = usePersistFn(() => { doAction('clear'); }); const onRequestClose = usePersistFn(() => { doAction('overlay'); return true; }); const rangeProps = { mode, defaultValue: Values.current, confirmButtonText, resetButtonText, placeholder, onConfirm: onPressConfirm, max, min, renderLabel, clearable, clearButtonText, onClear: onPressClear }; return /*#__PURE__*/_jsxs(Popup, { ...restProps, onRequestClose: onRequestClose, visible: visible, onPressOverlay: onPressPopupOverlay, position: "bottom", round: true, children: [/*#__PURE__*/_jsx(Popup.Header, { title: title, onClose: onPressClose }), /*#__PURE__*/_jsx(DatePickerRangeView, { ...rangeProps, onChange: onChangeRangeView, loading: loading }), /*#__PURE__*/_jsx(View, { style: { height: insets.bottom + CV_PICKER.picker_bottom_gap } })] }); }; export default /*#__PURE__*/memo(DatePickerRangeMethod); //# sourceMappingURL=date-picker-range-method.js.map