@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
126 lines (125 loc) • 3.37 kB
JavaScript
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
;