amis-rpc-design/node_modules/rc-picker/lib/RangePicker.js

991 lines
42 KiB
JavaScript
Raw Normal View History

2023-10-07 19:42:30 +08:00
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof3 = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _classnames = _interopRequireDefault(require("classnames"));
var _useMergedState7 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
var _warning = _interopRequireDefault(require("rc-util/lib/warning"));
var _pickAttrs = _interopRequireDefault(require("rc-util/lib/pickAttrs"));
var React = _interopRequireWildcard(require("react"));
var _useCellRender = require("./hooks/useCellRender");
var _useHoverValue5 = _interopRequireDefault(require("./hooks/useHoverValue"));
var _usePickerInput5 = _interopRequireDefault(require("./hooks/usePickerInput"));
var _usePresets = _interopRequireDefault(require("./hooks/usePresets"));
var _useRangeDisabled3 = _interopRequireDefault(require("./hooks/useRangeDisabled"));
var _useRangeOpen3 = _interopRequireDefault(require("./hooks/useRangeOpen"));
var _useRangeViewDates3 = _interopRequireDefault(require("./hooks/useRangeViewDates"));
var _useTextValueMapping5 = _interopRequireDefault(require("./hooks/useTextValueMapping"));
var _useValueTexts5 = _interopRequireDefault(require("./hooks/useValueTexts"));
var _PanelContext = _interopRequireDefault(require("./PanelContext"));
var _PickerPanel = _interopRequireDefault(require("./PickerPanel"));
var _PickerTrigger = _interopRequireDefault(require("./PickerTrigger"));
var _PresetPanel = _interopRequireDefault(require("./PresetPanel"));
var _RangeContext = _interopRequireDefault(require("./RangeContext"));
var _dateUtil = require("./utils/dateUtil");
var _getExtraFooter = _interopRequireDefault(require("./utils/getExtraFooter"));
var _getRanges = _interopRequireDefault(require("./utils/getRanges"));
var _miscUtil = require("./utils/miscUtil");
var _uiUtil = require("./utils/uiUtil");
var _warnUtil = require("./utils/warnUtil");
var _getClearIcon = require("./utils/getClearIcon");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function reorderValues(values, generateConfig) {
if (values && values[0] && values[1] && generateConfig.isAfter(values[0], values[1])) {
return [values[1], values[0]];
}
return values;
}
function canValueTrigger(value, index, disabled, allowEmpty) {
if (value) {
return true;
}
if (allowEmpty && allowEmpty[index]) {
return true;
}
if (disabled[(index + 1) % 2]) {
return true;
}
return false;
}
// TMP type to fit for ts 3.9.2
function InnerRangePicker(props) {
var _classNames2, _classNames3, _classNames4;
var _ref = props,
_ref$prefixCls = _ref.prefixCls,
prefixCls = _ref$prefixCls === void 0 ? 'rc-picker' : _ref$prefixCls,
id = _ref.id,
style = _ref.style,
className = _ref.className,
popupStyle = _ref.popupStyle,
dropdownClassName = _ref.dropdownClassName,
transitionName = _ref.transitionName,
dropdownAlign = _ref.dropdownAlign,
getPopupContainer = _ref.getPopupContainer,
generateConfig = _ref.generateConfig,
locale = _ref.locale,
placeholder = _ref.placeholder,
autoFocus = _ref.autoFocus,
disabled = _ref.disabled,
format = _ref.format,
_ref$picker = _ref.picker,
picker = _ref$picker === void 0 ? 'date' : _ref$picker,
showTime = _ref.showTime,
use12Hours = _ref.use12Hours,
_ref$separator = _ref.separator,
separator = _ref$separator === void 0 ? '~' : _ref$separator,
value = _ref.value,
defaultValue = _ref.defaultValue,
defaultPickerValue = _ref.defaultPickerValue,
open = _ref.open,
defaultOpen = _ref.defaultOpen,
disabledDate = _ref.disabledDate,
_disabledTime = _ref.disabledTime,
dateRender = _ref.dateRender,
monthCellRender = _ref.monthCellRender,
cellRender = _ref.cellRender,
panelRender = _ref.panelRender,
presets = _ref.presets,
ranges = _ref.ranges,
allowEmpty = _ref.allowEmpty,
allowClear = _ref.allowClear,
suffixIcon = _ref.suffixIcon,
clearIcon = _ref.clearIcon,
pickerRef = _ref.pickerRef,
inputReadOnly = _ref.inputReadOnly,
mode = _ref.mode,
renderExtraFooter = _ref.renderExtraFooter,
onChange = _ref.onChange,
onOpenChange = _ref.onOpenChange,
onPanelChange = _ref.onPanelChange,
onCalendarChange = _ref.onCalendarChange,
_onFocus = _ref.onFocus,
onBlur = _ref.onBlur,
onMouseDown = _ref.onMouseDown,
onMouseUp = _ref.onMouseUp,
onMouseEnter = _ref.onMouseEnter,
onMouseLeave = _ref.onMouseLeave,
onClick = _ref.onClick,
_onOk = _ref.onOk,
_onKeyDown = _ref.onKeyDown,
components = _ref.components,
order = _ref.order,
direction = _ref.direction,
activePickerIndex = _ref.activePickerIndex,
_ref$autoComplete = _ref.autoComplete,
autoComplete = _ref$autoComplete === void 0 ? 'off' : _ref$autoComplete,
changeOnBlur = _ref.changeOnBlur;
var needConfirmButton = picker === 'date' && !!showTime || picker === 'time';
var containerRef = (0, React.useRef)(null);
var panelDivRef = (0, React.useRef)(null);
var startInputDivRef = (0, React.useRef)(null);
var endInputDivRef = (0, React.useRef)(null);
var separatorRef = (0, React.useRef)(null);
var startInputRef = (0, React.useRef)(null);
var endInputRef = (0, React.useRef)(null);
var arrowRef = (0, React.useRef)(null);
// ============================ Warning ============================
if (process.env.NODE_ENV !== 'production') {
(0, _warnUtil.legacyPropsWarning)(props);
}
// ============================= Misc ==============================
var formatList = (0, _miscUtil.toArray)((0, _uiUtil.getDefaultFormat)(format, picker, showTime, use12Hours));
var formatDateValue = function formatDateValue(values, index) {
return values && values[index] ? (0, _dateUtil.formatValue)(values[index], {
generateConfig: generateConfig,
locale: locale,
format: formatList[0]
}) : '';
};
// Operation ref
var operationRef = (0, React.useRef)(null);
var mergedDisabled = React.useMemo(function () {
if (Array.isArray(disabled)) {
return disabled;
}
return [disabled || false, disabled || false];
}, [disabled]);
// ============================= Value =============================
var _useMergedState = (0, _useMergedState7.default)(null, {
value: value,
defaultValue: defaultValue,
postState: function postState(values) {
return picker === 'time' && !order ? values : reorderValues(values, generateConfig);
}
}),
_useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
mergedValue = _useMergedState2[0],
setInnerValue = _useMergedState2[1];
// =========================== View Date ===========================
// Config view panel
var _useRangeViewDates = (0, _useRangeViewDates3.default)({
values: mergedValue,
picker: picker,
defaultDates: defaultPickerValue,
generateConfig: generateConfig
}),
_useRangeViewDates2 = (0, _slicedToArray2.default)(_useRangeViewDates, 2),
getViewDate = _useRangeViewDates2[0],
setViewDate = _useRangeViewDates2[1];
// ========================= Select Values =========================
var _useMergedState3 = (0, _useMergedState7.default)(mergedValue, {
postState: function postState(values) {
var postValues = values;
if (mergedDisabled[0] && mergedDisabled[1]) {
return postValues;
}
// Fill disabled unit
for (var i = 0; i < 2; i += 1) {
if (mergedDisabled[i] && !postValues && !(0, _miscUtil.getValue)(postValues, i) && !(0, _miscUtil.getValue)(allowEmpty, i)) {
postValues = (0, _miscUtil.updateValues)(postValues, generateConfig.getNow(), i);
}
}
return postValues;
}
}),
_useMergedState4 = (0, _slicedToArray2.default)(_useMergedState3, 2),
selectedValue = _useMergedState4[0],
setSelectedValue = _useMergedState4[1];
// ============================= Modes =============================
var _useMergedState5 = (0, _useMergedState7.default)([picker, picker], {
value: mode
}),
_useMergedState6 = (0, _slicedToArray2.default)(_useMergedState5, 2),
mergedModes = _useMergedState6[0],
setInnerModes = _useMergedState6[1];
(0, React.useEffect)(function () {
setInnerModes([picker, picker]);
}, [picker]);
var triggerModesChange = function triggerModesChange(modes, values) {
setInnerModes(modes);
if (onPanelChange) {
onPanelChange(values, modes);
}
};
// ============================= Open ==============================
var _useRangeOpen = (0, _useRangeOpen3.default)(defaultOpen, open, activePickerIndex, changeOnBlur, needConfirmButton, startInputRef, endInputRef, (0, _miscUtil.getValue)(selectedValue, 0), (0, _miscUtil.getValue)(selectedValue, 1), mergedDisabled, onOpenChange),
_useRangeOpen2 = (0, _slicedToArray2.default)(_useRangeOpen, 4),
mergedOpen = _useRangeOpen2[0],
mergedActivePickerIndex = _useRangeOpen2[1],
firstTimeOpen = _useRangeOpen2[2],
_triggerOpen = _useRangeOpen2[3];
var startOpen = mergedOpen && mergedActivePickerIndex === 0;
var endOpen = mergedOpen && mergedActivePickerIndex === 1;
// ========================= Disable Date ==========================
var _useRangeDisabled = (0, _useRangeDisabled3.default)({
picker: picker,
selectedValue: selectedValue,
locale: locale,
disabled: mergedDisabled,
disabledDate: disabledDate,
generateConfig: generateConfig
}, !mergedOpen || firstTimeOpen),
_useRangeDisabled2 = (0, _slicedToArray2.default)(_useRangeDisabled, 2),
disabledStartDate = _useRangeDisabled2[0],
disabledEndDate = _useRangeDisabled2[1];
// ============================= Popup =============================
// Popup min width
var _useState = (0, React.useState)(0),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
popupMinWidth = _useState2[0],
setPopupMinWidth = _useState2[1];
(0, React.useEffect)(function () {
if (!mergedOpen && containerRef.current) {
setPopupMinWidth(containerRef.current.offsetWidth);
}
}, [mergedOpen]);
// ============================ Trigger ============================
function triggerOpenAndFocus(index) {
_triggerOpen(true, index, 'open');
// Use setTimeout to make sure panel DOM exists
(0, _raf.default)(function () {
var _inputRef$current;
var inputRef = [startInputRef, endInputRef][index];
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
}, 0);
}
function triggerChange(newValue, sourceIndex, triggerCalendarChangeOnly) {
var values = newValue;
var startValue = (0, _miscUtil.getValue)(values, 0);
var endValue = (0, _miscUtil.getValue)(values, 1);
// >>>>> Format start & end values
if (startValue && endValue && generateConfig.isAfter(startValue, endValue)) {
if (
// WeekPicker only compare week
picker === 'week' && !(0, _dateUtil.isSameWeek)(generateConfig, locale.locale, startValue, endValue) ||
// QuotaPicker only compare week
picker === 'quarter' && !(0, _dateUtil.isSameQuarter)(generateConfig, startValue, endValue) ||
// Other non-TimePicker compare date
picker !== 'week' && picker !== 'quarter' && picker !== 'time' && !(0, _dateUtil.isSameDate)(generateConfig, startValue, endValue)) {
// Clean up end date when start date is after end date
if (sourceIndex === 0) {
values = [startValue, null];
endValue = null;
} else {
startValue = null;
values = [null, endValue];
}
} else if (picker !== 'time' || order !== false) {
// Reorder when in same date
values = reorderValues(values, generateConfig);
}
}
setSelectedValue(values);
var startStr = formatDateValue(values, 0);
var endStr = formatDateValue(values, 1);
if (onCalendarChange) {
var _info = {
range: sourceIndex === 0 ? 'start' : 'end'
};
onCalendarChange(values, [startStr, endStr], _info);
}
if (!triggerCalendarChangeOnly) {
// >>>>> Trigger `onChange` event
var canStartValueTrigger = canValueTrigger(startValue, 0, mergedDisabled, allowEmpty);
var canEndValueTrigger = canValueTrigger(endValue, 1, mergedDisabled, allowEmpty);
var canTrigger = values === null || canStartValueTrigger && canEndValueTrigger;
if (canTrigger) {
// Trigger onChange only when value is validate
setInnerValue(values);
if (onChange && (!(0, _dateUtil.isEqual)(generateConfig, (0, _miscUtil.getValue)(mergedValue, 0), startValue) || !(0, _dateUtil.isEqual)(generateConfig, (0, _miscUtil.getValue)(mergedValue, 1), endValue))) {
onChange(values, [startStr, endStr]);
}
}
}
}
var forwardKeyDown = function forwardKeyDown(e) {
if (mergedOpen && operationRef.current && operationRef.current.onKeyDown) {
// Let popup panel handle keyboard
return operationRef.current.onKeyDown(e);
}
/* istanbul ignore next */
/* eslint-disable no-lone-blocks */
{
(0, _warning.default)(false, 'Picker not correct forward KeyDown operation. Please help to fire issue about this.');
return false;
}
};
// ============================= Text ==============================
var sharedTextHooksProps = {
formatList: formatList,
generateConfig: generateConfig,
locale: locale
};
var _useValueTexts = (0, _useValueTexts5.default)((0, _miscUtil.getValue)(selectedValue, 0), sharedTextHooksProps),
_useValueTexts2 = (0, _slicedToArray2.default)(_useValueTexts, 2),
startValueTexts = _useValueTexts2[0],
firstStartValueText = _useValueTexts2[1];
var _useValueTexts3 = (0, _useValueTexts5.default)((0, _miscUtil.getValue)(selectedValue, 1), sharedTextHooksProps),
_useValueTexts4 = (0, _slicedToArray2.default)(_useValueTexts3, 2),
endValueTexts = _useValueTexts4[0],
firstEndValueText = _useValueTexts4[1];
var _onTextChange = function onTextChange(newText, index) {
var inputDate = (0, _dateUtil.parseValue)(newText, {
locale: locale,
formatList: formatList,
generateConfig: generateConfig
});
var disabledFunc = index === 0 ? disabledStartDate : disabledEndDate;
if (inputDate && !disabledFunc(inputDate)) {
setSelectedValue((0, _miscUtil.updateValues)(selectedValue, inputDate, index));
setViewDate(inputDate, index);
}
};
var _useTextValueMapping = (0, _useTextValueMapping5.default)({
valueTexts: startValueTexts,
onTextChange: function onTextChange(newText) {
return _onTextChange(newText, 0);
}
}),
_useTextValueMapping2 = (0, _slicedToArray2.default)(_useTextValueMapping, 3),
startText = _useTextValueMapping2[0],
triggerStartTextChange = _useTextValueMapping2[1],
resetStartText = _useTextValueMapping2[2];
var _useTextValueMapping3 = (0, _useTextValueMapping5.default)({
valueTexts: endValueTexts,
onTextChange: function onTextChange(newText) {
return _onTextChange(newText, 1);
}
}),
_useTextValueMapping4 = (0, _slicedToArray2.default)(_useTextValueMapping3, 3),
endText = _useTextValueMapping4[0],
triggerEndTextChange = _useTextValueMapping4[1],
resetEndText = _useTextValueMapping4[2];
var _useState3 = (0, React.useState)(null),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
rangeHoverValue = _useState4[0],
setRangeHoverValue = _useState4[1];
// ========================== Hover Range ==========================
var _useState5 = (0, React.useState)(null),
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
hoverRangedValue = _useState6[0],
setHoverRangedValue = _useState6[1];
var _useHoverValue = (0, _useHoverValue5.default)(startText, {
formatList: formatList,
generateConfig: generateConfig,
locale: locale
}),
_useHoverValue2 = (0, _slicedToArray2.default)(_useHoverValue, 3),
startHoverValue = _useHoverValue2[0],
onStartEnter = _useHoverValue2[1],
onStartLeave = _useHoverValue2[2];
var _useHoverValue3 = (0, _useHoverValue5.default)(endText, {
formatList: formatList,
generateConfig: generateConfig,
locale: locale
}),
_useHoverValue4 = (0, _slicedToArray2.default)(_useHoverValue3, 3),
endHoverValue = _useHoverValue4[0],
onEndEnter = _useHoverValue4[1],
onEndLeave = _useHoverValue4[2];
var onDateMouseEnter = function onDateMouseEnter(date) {
setHoverRangedValue((0, _miscUtil.updateValues)(selectedValue, date, mergedActivePickerIndex));
if (mergedActivePickerIndex === 0) {
onStartEnter(date);
} else {
onEndEnter(date);
}
};
var onDateMouseLeave = function onDateMouseLeave() {
setHoverRangedValue((0, _miscUtil.updateValues)(selectedValue, null, mergedActivePickerIndex));
if (mergedActivePickerIndex === 0) {
onStartLeave();
} else {
onEndLeave();
}
};
// ============================= Input =============================
// We call effect to update `delayOpen` here since
// when popup closed and input focused, should not trigger change when click another input
var _React$useState = React.useState(mergedOpen),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
delayOpen = _React$useState2[0],
setDelayOpen = _React$useState2[1];
React.useEffect(function () {
setDelayOpen(mergedOpen);
}, [mergedOpen]);
var onInternalBlur = function onInternalBlur(e) {
if (delayOpen) {
if (needConfirmButton) {
// when in dateTime mode, switching between two date input fields will trigger onCalendarChange.
// when onBlur is triggered, the input field has already switched,
// so it's necessary to obtain the value of the previous input field here.
var needTriggerIndex = mergedActivePickerIndex ? 0 : 1;
var selectedIndexValue = (0, _miscUtil.getValue)(selectedValue, needTriggerIndex);
if (selectedIndexValue) {
triggerChange(selectedValue, needTriggerIndex, true);
}
} else if (changeOnBlur) {
var _selectedIndexValue = (0, _miscUtil.getValue)(selectedValue, mergedActivePickerIndex);
if (_selectedIndexValue) {
triggerChange(selectedValue, mergedActivePickerIndex);
}
}
}
return onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
};
var getSharedInputHookProps = function getSharedInputHookProps(index, resetText) {
return {
blurToCancel: !changeOnBlur && needConfirmButton,
changeOnBlur: changeOnBlur,
forwardKeyDown: forwardKeyDown,
onBlur: onInternalBlur,
isClickOutside: function isClickOutside(target) {
var elementsRefs = [startInputDivRef.current, endInputDivRef.current, containerRef.current];
return !(0, _uiUtil.elementsContains)([].concat((0, _toConsumableArray2.default)(needConfirmButton ? [elementsRefs[mergedActivePickerIndex]] : elementsRefs), [panelDivRef.current]), target);
},
onFocus: function onFocus(e) {
if (_onFocus) {
_onFocus(e);
}
},
triggerOpen: function triggerOpen(newOpen) {
if (newOpen) {
_triggerOpen(newOpen, index, 'open');
} else {
_triggerOpen(newOpen,
// Close directly if no selected value provided
(0, _miscUtil.getValue)(selectedValue, index) ? index : false, 'blur');
}
},
onSubmit: function onSubmit() {
if (
// When user typing disabledDate with keyboard and enter, this value will be empty
!selectedValue ||
// Normal disabled check
disabledDate && disabledDate(selectedValue[index])) {
return false;
}
triggerChange(selectedValue, index);
resetText();
// Switch
_triggerOpen(false, mergedActivePickerIndex, 'confirm');
},
onCancel: function onCancel() {
_triggerOpen(false, index, 'cancel');
setSelectedValue(mergedValue);
resetText();
}
};
};
var sharedPickerInput = {
onKeyDown: function onKeyDown(e, preventDefault) {
_onKeyDown === null || _onKeyDown === void 0 ? void 0 : _onKeyDown(e, preventDefault);
}
};
var _usePickerInput = (0, _usePickerInput5.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, getSharedInputHookProps(0, resetStartText)), {}, {
open: startOpen,
value: startText
}, sharedPickerInput)),
_usePickerInput2 = (0, _slicedToArray2.default)(_usePickerInput, 2),
startInputProps = _usePickerInput2[0],
_usePickerInput2$ = _usePickerInput2[1],
startFocused = _usePickerInput2$.focused,
startTyping = _usePickerInput2$.typing;
var _usePickerInput3 = (0, _usePickerInput5.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, getSharedInputHookProps(1, resetEndText)), {}, {
open: endOpen,
value: endText
}, sharedPickerInput)),
_usePickerInput4 = (0, _slicedToArray2.default)(_usePickerInput3, 2),
endInputProps = _usePickerInput4[0],
_usePickerInput4$ = _usePickerInput4[1],
endFocused = _usePickerInput4$.focused,
endTyping = _usePickerInput4$.typing;
// ========================== Click Picker ==========================
var onPickerClick = function onPickerClick(e) {
// When click inside the picker & outside the picker's input elements
// the panel should still be opened
if (onClick) {
onClick(e);
}
if (!mergedOpen && !startInputRef.current.contains(e.target) && !endInputRef.current.contains(e.target)) {
if (!mergedDisabled[0]) {
triggerOpenAndFocus(0);
} else if (!mergedDisabled[1]) {
triggerOpenAndFocus(1);
}
}
};
var onPickerMouseDown = function onPickerMouseDown(e) {
// shouldn't affect input elements if picker is active
if (onMouseDown) {
onMouseDown(e);
}
if (mergedOpen && (startFocused || endFocused) && !startInputRef.current.contains(e.target) && !endInputRef.current.contains(e.target)) {
e.preventDefault();
}
};
// ============================= Sync ==============================
// Close should sync back with text value
var startStr = mergedValue && mergedValue[0] ? (0, _dateUtil.formatValue)(mergedValue[0], {
locale: locale,
format: 'YYYYMMDDHHmmss',
generateConfig: generateConfig
}) : '';
var endStr = mergedValue && mergedValue[1] ? (0, _dateUtil.formatValue)(mergedValue[1], {
locale: locale,
format: 'YYYYMMDDHHmmss',
generateConfig: generateConfig
}) : '';
(0, React.useEffect)(function () {
if (!mergedOpen) {
setSelectedValue(mergedValue);
if (!startValueTexts.length || startValueTexts[0] === '') {
triggerStartTextChange('');
} else if (firstStartValueText !== startText) {
resetStartText();
}
if (!endValueTexts.length || endValueTexts[0] === '') {
triggerEndTextChange('');
} else if (firstEndValueText !== endText) {
resetEndText();
}
}
}, [mergedOpen, startValueTexts, endValueTexts]);
// Sync innerValue with control mode
(0, React.useEffect)(function () {
setSelectedValue(mergedValue);
}, [startStr, endStr]);
var mergedCellRender = (0, _useCellRender.useCellRender)({
cellRender: cellRender,
monthCellRender: monthCellRender,
dateRender: dateRender
});
var panelDateRender = React.useMemo(function () {
if (!mergedCellRender) return undefined;
return function (date, info) {
return mergedCellRender(date, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, info), {}, {
range: mergedActivePickerIndex ? 'end' : 'start'
}));
};
}, [mergedActivePickerIndex, mergedCellRender]);
// ============================ Warning ============================
if (process.env.NODE_ENV !== 'production') {
if (value && Array.isArray(disabled) && ((0, _miscUtil.getValue)(disabled, 0) && !(0, _miscUtil.getValue)(value, 0) || (0, _miscUtil.getValue)(disabled, 1) && !(0, _miscUtil.getValue)(value, 1))) {
(0, _warning.default)(false, '`disabled` should not set with empty `value`. You should set `allowEmpty` or `value` instead.');
}
(0, _warning.default)(!dateRender, "'dateRender' is deprecated. Please use 'cellRender' instead.");
(0, _warning.default)(!monthCellRender, "'monthCellRender' is deprecated. Please use 'cellRender' instead.");
(0, _warning.default)(!clearIcon, '`clearIcon` will be removed in future. Please use `allowClear` instead.');
}
// ============================ Private ============================
if (pickerRef) {
pickerRef.current = {
focus: function focus() {
if (startInputRef.current) {
startInputRef.current.focus();
}
},
blur: function blur() {
if (startInputRef.current) {
startInputRef.current.blur();
}
if (endInputRef.current) {
endInputRef.current.blur();
}
}
};
}
// ============================ Ranges =============================
var presetList = (0, _usePresets.default)(presets, ranges);
// ============================= Panel =============================
function renderPanel() {
var panelPosition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var panelProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var panelHoverRangedValue = null;
if (mergedOpen && hoverRangedValue && hoverRangedValue[0] && hoverRangedValue[1] && generateConfig.isAfter(hoverRangedValue[1], hoverRangedValue[0])) {
panelHoverRangedValue = hoverRangedValue;
}
var panelShowTime = showTime;
if (showTime && (0, _typeof2.default)(showTime) === 'object' && showTime.defaultValue) {
var timeDefaultValues = showTime.defaultValue;
panelShowTime = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, showTime), {}, {
defaultValue: (0, _miscUtil.getValue)(timeDefaultValues, mergedActivePickerIndex) || undefined
});
}
return /*#__PURE__*/React.createElement(_RangeContext.default.Provider, {
value: {
inRange: true,
panelPosition: panelPosition,
rangedValue: rangeHoverValue || selectedValue,
hoverRangedValue: panelHoverRangedValue
}
}, /*#__PURE__*/React.createElement(_PickerPanel.default, (0, _extends2.default)({}, props, panelProps, {
cellRender: panelDateRender,
showTime: panelShowTime,
mode: mergedModes[mergedActivePickerIndex],
generateConfig: generateConfig,
style: undefined,
direction: direction,
disabledDate: mergedActivePickerIndex === 0 ? disabledStartDate : disabledEndDate,
disabledTime: function disabledTime(date) {
if (_disabledTime) {
return _disabledTime(date, mergedActivePickerIndex === 0 ? 'start' : 'end');
}
return false;
},
className: (0, _classnames.default)((0, _defineProperty2.default)({}, "".concat(prefixCls, "-panel-focused"), mergedActivePickerIndex === 0 ? !startTyping : !endTyping)),
value: (0, _miscUtil.getValue)(selectedValue, mergedActivePickerIndex),
locale: locale,
tabIndex: -1,
onPanelChange: function onPanelChange(date, newMode) {
// clear hover value when panel change
if (mergedActivePickerIndex === 0) {
onStartLeave(true);
}
if (mergedActivePickerIndex === 1) {
onEndLeave(true);
}
triggerModesChange((0, _miscUtil.updateValues)(mergedModes, newMode, mergedActivePickerIndex), (0, _miscUtil.updateValues)(selectedValue, date, mergedActivePickerIndex));
var viewDate = date;
if (panelPosition === 'right' && mergedModes[mergedActivePickerIndex] === newMode) {
viewDate = (0, _dateUtil.getClosingViewDate)(viewDate, newMode, generateConfig, -1);
}
setViewDate(viewDate, mergedActivePickerIndex);
},
onOk: null,
onSelect: undefined,
onChange: undefined,
defaultValue: mergedActivePickerIndex === 0 ? (0, _miscUtil.getValue)(selectedValue, 1) : (0, _miscUtil.getValue)(selectedValue, 0)
// defaultPickerValue={undefined}
})));
}
var arrowLeft = 0;
var panelLeft = 0;
if (mergedActivePickerIndex && startInputDivRef.current && separatorRef.current && panelDivRef.current && arrowRef.current) {
// Arrow offset
arrowLeft = startInputDivRef.current.offsetWidth + separatorRef.current.offsetWidth;
// If panelWidth - arrowWidth - arrowMarginLeft < arrowLeft, panel should move to right side.
// If arrowOffsetLeft > arrowLeft, arrowMarginLeft = arrowOffsetLeft - arrowLeft
var arrowMarginLeft = arrowRef.current.offsetLeft > arrowLeft ? arrowRef.current.offsetLeft - arrowLeft : arrowRef.current.offsetLeft;
var panelWidth = panelDivRef.current.offsetWidth;
var arrowWidth = arrowRef.current.offsetWidth;
if (panelWidth && arrowWidth && arrowLeft > panelWidth - arrowWidth - (direction === 'rtl' ? 0 : arrowMarginLeft)) {
panelLeft = arrowLeft;
}
}
var arrowPositionStyle = direction === 'rtl' ? {
right: arrowLeft
} : {
left: arrowLeft
};
function renderPanels() {
var panels;
var extraNode = (0, _getExtraFooter.default)(prefixCls, mergedModes[mergedActivePickerIndex], renderExtraFooter);
var rangesNode = (0, _getRanges.default)({
prefixCls: prefixCls,
components: components,
needConfirmButton: needConfirmButton,
okDisabled: !(0, _miscUtil.getValue)(selectedValue, mergedActivePickerIndex) || disabledDate && disabledDate(selectedValue[mergedActivePickerIndex]),
locale: locale,
// rangeList,
onOk: function onOk() {
var selectedIndexValue = (0, _miscUtil.getValue)(selectedValue, mergedActivePickerIndex);
if (selectedIndexValue) {
triggerChange(selectedValue, mergedActivePickerIndex);
_onOk === null || _onOk === void 0 ? void 0 : _onOk(selectedValue);
// Switch
_triggerOpen(false, mergedActivePickerIndex, 'confirm');
}
}
});
if (picker !== 'time' && !showTime) {
var viewDate = getViewDate(mergedActivePickerIndex);
var nextViewDate = (0, _dateUtil.getClosingViewDate)(viewDate, picker, generateConfig);
var currentMode = mergedModes[mergedActivePickerIndex];
var showDoublePanel = currentMode === picker;
var leftPanel = renderPanel(showDoublePanel ? 'left' : false, {
pickerValue: viewDate,
onPickerValueChange: function onPickerValueChange(newViewDate) {
setViewDate(newViewDate, mergedActivePickerIndex);
}
});
var rightPanel = renderPanel('right', {
pickerValue: nextViewDate,
onPickerValueChange: function onPickerValueChange(newViewDate) {
setViewDate((0, _dateUtil.getClosingViewDate)(newViewDate, picker, generateConfig, -1), mergedActivePickerIndex);
}
});
if (direction === 'rtl') {
panels = /*#__PURE__*/React.createElement(React.Fragment, null, rightPanel, showDoublePanel && leftPanel);
} else {
panels = /*#__PURE__*/React.createElement(React.Fragment, null, leftPanel, showDoublePanel && rightPanel);
}
} else {
panels = renderPanel();
}
var mergedNodes = /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-panel-layout")
}, /*#__PURE__*/React.createElement(_PresetPanel.default, {
prefixCls: prefixCls,
presets: presetList,
onClick: function onClick(nextValue) {
triggerChange(nextValue, null);
_triggerOpen(false, mergedActivePickerIndex, 'preset');
},
onHover: function onHover(hoverValue) {
setRangeHoverValue(hoverValue);
}
}), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-panels")
}, panels), (extraNode || rangesNode) && /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-footer")
}, extraNode, rangesNode)));
if (panelRender) {
mergedNodes = panelRender(mergedNodes);
}
return /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-panel-container"),
style: {
marginLeft: panelLeft
},
ref: panelDivRef,
onMouseDown: function onMouseDown(e) {
e.preventDefault();
}
}, mergedNodes);
}
var rangePanel = /*#__PURE__*/React.createElement("div", {
className: (0, _classnames.default)("".concat(prefixCls, "-range-wrapper"), "".concat(prefixCls, "-").concat(picker, "-range-wrapper")),
style: {
minWidth: popupMinWidth
}
}, /*#__PURE__*/React.createElement("div", {
ref: arrowRef,
className: "".concat(prefixCls, "-range-arrow"),
style: arrowPositionStyle
}), renderPanels());
// ============================= Icons =============================
var suffixNode;
if (suffixIcon) {
suffixNode = /*#__PURE__*/React.createElement("span", {
className: "".concat(prefixCls, "-suffix"),
onMouseDown: function onMouseDown(e) {
// Not lost focus
e.preventDefault();
}
}, suffixIcon);
}
var mergedClearIcon = (0, _getClearIcon.getClearIcon)(prefixCls, allowClear, clearIcon);
var clearNode = /*#__PURE__*/React.createElement("span", {
onMouseDown: function onMouseDown(e) {
e.preventDefault();
e.stopPropagation();
},
onMouseUp: function onMouseUp(e) {
e.preventDefault();
e.stopPropagation();
var values = mergedValue;
if (!mergedDisabled[0]) {
values = (0, _miscUtil.updateValues)(values, null, 0);
}
if (!mergedDisabled[1]) {
values = (0, _miscUtil.updateValues)(values, null, 1);
}
triggerChange(values, null);
_triggerOpen(false, mergedActivePickerIndex, 'clear');
},
className: "".concat(prefixCls, "-clear"),
role: "button"
}, mergedClearIcon);
var mergedAllowClear = allowClear && ((0, _miscUtil.getValue)(mergedValue, 0) && !mergedDisabled[0] || (0, _miscUtil.getValue)(mergedValue, 1) && !mergedDisabled[1]);
var inputSharedProps = {
size: (0, _uiUtil.getInputSize)(picker, formatList[0], generateConfig)
};
var activeBarLeft = 0;
var activeBarWidth = 0;
if (startInputDivRef.current && endInputDivRef.current && separatorRef.current) {
if (mergedActivePickerIndex === 0) {
activeBarWidth = startInputDivRef.current.offsetWidth;
} else {
activeBarLeft = arrowLeft;
activeBarWidth = endInputDivRef.current.offsetWidth;
}
}
var activeBarPositionStyle = direction === 'rtl' ? {
right: activeBarLeft
} : {
left: activeBarLeft
};
// ============================ Return =============================
var onContextSelect = function onContextSelect(date, type) {
var values = (0, _miscUtil.updateValues)(selectedValue, date, mergedActivePickerIndex);
if (type === 'submit' || type !== 'key' && !needConfirmButton) {
// triggerChange will also update selected values
triggerChange(values, mergedActivePickerIndex);
// clear hover value style
if (mergedActivePickerIndex === 0) {
onStartLeave();
} else {
onEndLeave();
}
// Switch
var nextActivePickerIndex = mergedActivePickerIndex === 0 ? 1 : 0;
if (mergedDisabled[nextActivePickerIndex]) {
_triggerOpen(false, false, 'confirm');
} else {
_triggerOpen(false, mergedActivePickerIndex, 'confirm');
}
} else {
setSelectedValue(values);
}
};
return /*#__PURE__*/React.createElement(_PanelContext.default.Provider, {
value: {
operationRef: operationRef,
hideHeader: picker === 'time',
onDateMouseEnter: onDateMouseEnter,
onDateMouseLeave: onDateMouseLeave,
hideRanges: true,
onSelect: onContextSelect,
open: mergedOpen
}
}, /*#__PURE__*/React.createElement(_PickerTrigger.default, {
visible: mergedOpen,
popupElement: rangePanel,
popupStyle: popupStyle,
prefixCls: prefixCls,
dropdownClassName: dropdownClassName,
dropdownAlign: dropdownAlign,
getPopupContainer: getPopupContainer,
transitionName: transitionName,
range: true,
direction: direction
}, /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
ref: containerRef,
className: (0, _classnames.default)(prefixCls, "".concat(prefixCls, "-range"), className, (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, "".concat(prefixCls, "-disabled"), mergedDisabled[0] && mergedDisabled[1]), (0, _defineProperty2.default)(_classNames2, "".concat(prefixCls, "-focused"), mergedActivePickerIndex === 0 ? startFocused : endFocused), (0, _defineProperty2.default)(_classNames2, "".concat(prefixCls, "-rtl"), direction === 'rtl'), _classNames2)),
style: style,
onClick: onPickerClick,
onMouseEnter: onMouseEnter,
onMouseLeave: onMouseLeave,
onMouseDown: onPickerMouseDown,
onMouseUp: onMouseUp
}, (0, _pickAttrs.default)(props, {
aria: true,
data: true
})), /*#__PURE__*/React.createElement("div", {
className: (0, _classnames.default)("".concat(prefixCls, "-input"), (_classNames3 = {}, (0, _defineProperty2.default)(_classNames3, "".concat(prefixCls, "-input-active"), mergedActivePickerIndex === 0), (0, _defineProperty2.default)(_classNames3, "".concat(prefixCls, "-input-placeholder"), !!startHoverValue), _classNames3)),
ref: startInputDivRef
}, /*#__PURE__*/React.createElement("input", (0, _extends2.default)({
id: id,
disabled: mergedDisabled[0],
readOnly: inputReadOnly || typeof formatList[0] === 'function' || !startTyping,
value: startHoverValue || startText,
onChange: function onChange(e) {
triggerStartTextChange(e.target.value);
},
autoFocus: autoFocus,
placeholder: (0, _miscUtil.getValue)(placeholder, 0) || '',
ref: startInputRef
}, startInputProps, inputSharedProps, {
autoComplete: autoComplete
}))), /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-range-separator"),
ref: separatorRef
}, separator), /*#__PURE__*/React.createElement("div", {
className: (0, _classnames.default)("".concat(prefixCls, "-input"), (_classNames4 = {}, (0, _defineProperty2.default)(_classNames4, "".concat(prefixCls, "-input-active"), mergedActivePickerIndex === 1), (0, _defineProperty2.default)(_classNames4, "".concat(prefixCls, "-input-placeholder"), !!endHoverValue), _classNames4)),
ref: endInputDivRef
}, /*#__PURE__*/React.createElement("input", (0, _extends2.default)({
disabled: mergedDisabled[1],
readOnly: inputReadOnly || typeof formatList[0] === 'function' || !endTyping,
value: endHoverValue || endText,
onChange: function onChange(e) {
triggerEndTextChange(e.target.value);
},
placeholder: (0, _miscUtil.getValue)(placeholder, 1) || '',
ref: endInputRef
}, endInputProps, inputSharedProps, {
autoComplete: autoComplete
}))), /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-active-bar"),
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, activeBarPositionStyle), {}, {
width: activeBarWidth,
position: 'absolute'
})
}), suffixNode, mergedAllowClear && clearNode)));
}
// Wrap with class component to enable pass generic with instance method
var RangePicker = /*#__PURE__*/function (_React$Component) {
(0, _inherits2.default)(RangePicker, _React$Component);
var _super = (0, _createSuper2.default)(RangePicker);
function RangePicker() {
var _this;
(0, _classCallCheck2.default)(this, RangePicker);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "pickerRef", /*#__PURE__*/React.createRef());
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "focus", function () {
if (_this.pickerRef.current) {
_this.pickerRef.current.focus();
}
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "blur", function () {
if (_this.pickerRef.current) {
_this.pickerRef.current.blur();
}
});
return _this;
}
(0, _createClass2.default)(RangePicker, [{
key: "render",
value: function render() {
return /*#__PURE__*/React.createElement(InnerRangePicker, (0, _extends2.default)({}, this.props, {
pickerRef: this.pickerRef
}));
}
}]);
return RangePicker;
}(React.Component);
var _default = RangePicker;
exports.default = _default;