ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
956 lines • 45.2 kB
JavaScript
import _typeof from "@babel/runtime/helpers/esm/typeof";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import { resolveDirective as _resolveDirective, Fragment as _Fragment, createVNode as _createVNode } from "vue";
import PickerTrigger from './PickerTrigger';
import PickerPanel from './PickerPanel';
import usePickerInput from './hooks/usePickerInput';
import getDataOrAriaProps, { toArray, getValue, updateValues } from './utils/miscUtil';
import { getDefaultFormat, getInputSize, elementsContains } from './utils/uiUtil';
import { useProvidePanel } from './PanelContext';
import { isEqual, getClosingViewDate, isSameDate, isSameWeek, isSameQuarter, formatValue, parseValue } from './utils/dateUtil';
import useValueTexts from './hooks/useValueTexts';
import useTextValueMapping from './hooks/useTextValueMapping';
import { RangeContextProvider } from './RangeContext';
import useRangeDisabled from './hooks/useRangeDisabled';
import getExtraFooter from './utils/getExtraFooter';
import getRanges from './utils/getRanges';
import useRangeViewDates from './hooks/useRangeViewDates';
import useHoverValue from './hooks/useHoverValue';
import { computed, defineComponent, ref, toRef, watch, watchEffect } from 'vue';
import useMergedState from '../_util/hooks/useMergedState';
import { warning } from '../vc-util/warning';
import useState from '../_util/hooks/useState';
import classNames from '../_util/classNames';
import { useProviderTrigger } from '../vc-trigger/context';
import { legacyPropsWarning } from './utils/warnUtil';
import { useElementSize } from '../_util/hooks/_vueuse/useElementSize';
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;
}
function RangerPicker() {
return defineComponent({
name: 'RangerPicker',
inheritAttrs: false,
props: ['prefixCls', 'id', 'popupStyle', 'dropdownClassName', 'transitionName', 'dropdownAlign', 'getPopupContainer', 'generateConfig', 'locale', 'placeholder', 'autofocus', 'disabled', 'format', 'picker', 'showTime', 'showNow', 'showHour', 'showMinute', 'showSecond', 'use12Hours', 'separator', 'value', 'defaultValue', 'defaultPickerValue', 'open', 'defaultOpen', 'disabledDate', 'disabledTime', 'dateRender', 'panelRender', 'ranges', 'allowEmpty', 'allowClear', 'suffixIcon', 'clearIcon', 'pickerRef', 'inputReadOnly', 'mode', 'renderExtraFooter', 'onChange', 'onOpenChange', 'onPanelChange', 'onCalendarChange', 'onFocus', 'onBlur', 'onMousedown', 'onMouseup', 'onMouseenter', 'onMouseleave', 'onClick', 'onOk', 'onKeydown', 'components', 'order', 'direction', 'activePickerIndex', 'autocomplete', 'minuteStep', 'hourStep', 'secondStep', 'hideDisabledOptions', 'disabledMinutes'],
setup: function setup(props, _ref) {
var attrs = _ref.attrs,
expose = _ref.expose;
var needConfirmButton = computed(function () {
return props.picker === 'date' && !!props.showTime || props.picker === 'time';
});
var getPortal = useProviderTrigger();
// We record opened status here in case repeat open with picker
var openRecordsRef = ref({});
var containerRef = ref(null);
var panelDivRef = ref(null);
var startInputDivRef = ref(null);
var endInputDivRef = ref(null);
var separatorRef = ref(null);
var startInputRef = ref(null);
var endInputRef = ref(null);
var arrowRef = ref(null);
// ============================ Warning ============================
if (process.env.NODE_ENV !== 'production') {
legacyPropsWarning(props);
}
// ============================= Misc ==============================
var formatList = computed(function () {
return toArray(getDefaultFormat(props.format, props.picker, props.showTime, props.use12Hours));
});
// Active picker
var _useMergedState = useMergedState(0, {
value: toRef(props, 'activePickerIndex')
}),
_useMergedState2 = _slicedToArray(_useMergedState, 2),
mergedActivePickerIndex = _useMergedState2[0],
setMergedActivePickerIndex = _useMergedState2[1];
// Operation ref
var operationRef = ref(null);
var mergedDisabled = computed(function () {
var disabled = props.disabled;
if (Array.isArray(disabled)) {
return disabled;
}
return [disabled || false, disabled || false];
});
// ============================= Value =============================
var _useMergedState3 = useMergedState(null, {
value: toRef(props, 'value'),
defaultValue: props.defaultValue,
postState: function postState(values) {
return props.picker === 'time' && !props.order ? values : reorderValues(values, props.generateConfig);
}
}),
_useMergedState4 = _slicedToArray(_useMergedState3, 2),
mergedValue = _useMergedState4[0],
setInnerValue = _useMergedState4[1];
// =========================== View Date ===========================
// Config view panel
var _useRangeViewDates = useRangeViewDates({
values: mergedValue,
picker: toRef(props, 'picker'),
defaultDates: props.defaultPickerValue,
generateConfig: toRef(props, 'generateConfig')
}),
_useRangeViewDates2 = _slicedToArray(_useRangeViewDates, 3),
startViewDate = _useRangeViewDates2[0],
endViewDate = _useRangeViewDates2[1],
setViewDate = _useRangeViewDates2[2];
// ========================= Select Values =========================
var _useMergedState5 = useMergedState(mergedValue.value, {
postState: function postState(values) {
var postValues = values;
if (mergedDisabled.value[0] && mergedDisabled.value[1]) {
return postValues;
}
// Fill disabled unit
for (var i = 0; i < 2; i += 1) {
if (mergedDisabled.value[i] && !getValue(postValues, i) && !getValue(props.allowEmpty, i)) {
postValues = updateValues(postValues, props.generateConfig.getNow(), i);
}
}
return postValues;
}
}),
_useMergedState6 = _slicedToArray(_useMergedState5, 2),
selectedValue = _useMergedState6[0],
setSelectedValue = _useMergedState6[1];
// ============================= Modes =============================
var _useMergedState7 = useMergedState([props.picker, props.picker], {
value: toRef(props, 'mode')
}),
_useMergedState8 = _slicedToArray(_useMergedState7, 2),
mergedModes = _useMergedState8[0],
setInnerModes = _useMergedState8[1];
watch(function () {
return props.picker;
}, function () {
setInnerModes([props.picker, props.picker]);
});
var triggerModesChange = function triggerModesChange(modes, values) {
var _props$onPanelChange;
setInnerModes(modes);
(_props$onPanelChange = props.onPanelChange) === null || _props$onPanelChange === void 0 ? void 0 : _props$onPanelChange.call(props, values, modes);
};
// ========================= Disable Date ==========================
var _useRangeDisabled = useRangeDisabled({
picker: toRef(props, 'picker'),
selectedValue: selectedValue,
locale: toRef(props, 'locale'),
disabled: mergedDisabled,
disabledDate: toRef(props, 'disabledDate'),
generateConfig: toRef(props, 'generateConfig')
}, openRecordsRef),
_useRangeDisabled2 = _slicedToArray(_useRangeDisabled, 2),
disabledStartDate = _useRangeDisabled2[0],
disabledEndDate = _useRangeDisabled2[1];
// ============================= Open ==============================
var _useMergedState9 = useMergedState(false, {
value: toRef(props, 'open'),
defaultValue: props.defaultOpen,
postState: function postState(postOpen) {
return mergedDisabled.value[mergedActivePickerIndex.value] ? false : postOpen;
},
onChange: function onChange(newOpen) {
var _props$onOpenChange;
(_props$onOpenChange = props.onOpenChange) === null || _props$onOpenChange === void 0 ? void 0 : _props$onOpenChange.call(props, newOpen);
if (!newOpen && operationRef.value && operationRef.value.onClose) {
operationRef.value.onClose();
}
}
}),
_useMergedState10 = _slicedToArray(_useMergedState9, 2),
mergedOpen = _useMergedState10[0],
triggerInnerOpen = _useMergedState10[1];
var startOpen = computed(function () {
return mergedOpen.value && mergedActivePickerIndex.value === 0;
});
var endOpen = computed(function () {
return mergedOpen.value && mergedActivePickerIndex.value === 1;
});
var panelLeft = ref(0);
var arrowLeft = ref(0);
// ============================= Popup =============================
// Popup min width
var popupMinWidth = ref(0);
var _useElementSize = useElementSize(containerRef),
containerWidth = _useElementSize.width;
watch([mergedOpen, containerWidth], function () {
if (!mergedOpen.value && containerRef.value) {
popupMinWidth.value = containerWidth.value;
}
});
var _useElementSize2 = useElementSize(panelDivRef),
panelDivWidth = _useElementSize2.width;
var _useElementSize3 = useElementSize(arrowRef),
arrowWidth = _useElementSize3.width;
var _useElementSize4 = useElementSize(startInputDivRef),
startInputDivWidth = _useElementSize4.width;
var _useElementSize5 = useElementSize(separatorRef),
separatorWidth = _useElementSize5.width;
watch([mergedActivePickerIndex, mergedOpen, panelDivWidth, arrowWidth, startInputDivWidth, separatorWidth, function () {
return props.direction;
}], function () {
arrowLeft.value = 0;
if (mergedOpen.value && mergedActivePickerIndex.value) {
if (startInputDivRef.value && separatorRef.value && panelDivRef.value) {
arrowLeft.value = startInputDivWidth.value + separatorWidth.value;
if (panelDivWidth.value && arrowWidth.value && arrowLeft.value > panelDivWidth.value - arrowWidth.value - (props.direction === 'rtl' || arrowRef.value.offsetLeft > arrowLeft.value ? 0 : arrowRef.value.offsetLeft)) {
panelLeft.value = arrowLeft.value;
}
}
} else if (mergedActivePickerIndex.value === 0) {
panelLeft.value = 0;
}
}, {
immediate: true
});
// ============================ Trigger ============================
var triggerRef = ref();
function _triggerOpen(newOpen, index) {
if (newOpen) {
clearTimeout(triggerRef.value);
openRecordsRef.value[index] = true;
setMergedActivePickerIndex(index);
triggerInnerOpen(newOpen);
// Open to reset view date
if (!mergedOpen.value) {
setViewDate(null, index);
}
} else if (mergedActivePickerIndex.value === index) {
triggerInnerOpen(newOpen);
// Clean up async
// This makes ref not quick refresh in case user open another input with blur trigger
var openRecords = openRecordsRef.value;
triggerRef.value = setTimeout(function () {
if (openRecords === openRecordsRef.value) {
openRecordsRef.value = {};
}
});
}
}
function triggerOpenAndFocus(index) {
_triggerOpen(true, index);
// Use setTimeout to make sure panel DOM exists
setTimeout(function () {
var inputRef = [startInputRef, endInputRef][index];
if (inputRef.value) {
inputRef.value.focus();
}
}, 0);
}
function triggerChange(newValue, sourceIndex) {
var values = newValue;
var startValue = getValue(values, 0);
var endValue = getValue(values, 1);
var generateConfig = props.generateConfig,
locale = props.locale,
picker = props.picker,
order = props.order,
onCalendarChange = props.onCalendarChange,
allowEmpty = props.allowEmpty,
onChange = props.onChange,
showTime = props.showTime;
// >>>>> Format start & end values
if (startValue && endValue && generateConfig.isAfter(startValue, endValue)) {
if (
// WeekPicker only compare week
picker === 'week' && !isSameWeek(generateConfig, locale.locale, startValue, endValue) ||
// QuotaPicker only compare week
picker === 'quarter' && !isSameQuarter(generateConfig, startValue, endValue) ||
// Other non-TimePicker compare date
picker !== 'week' && picker !== 'quarter' && picker !== 'time' && !(showTime ? isEqual(generateConfig, startValue, endValue) : 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];
}
// Clean up cache since invalidate
openRecordsRef.value = _defineProperty({}, sourceIndex, true);
} else if (picker !== 'time' || order !== false) {
// Reorder when in same date
values = reorderValues(values, generateConfig);
}
}
setSelectedValue(values);
var startStr = values && values[0] ? formatValue(values[0], {
generateConfig: generateConfig,
locale: locale,
format: formatList.value[0]
}) : '';
var endStr = values && values[1] ? formatValue(values[1], {
generateConfig: generateConfig,
locale: locale,
format: formatList.value[0]
}) : '';
if (onCalendarChange) {
var info = {
range: sourceIndex === 0 ? 'start' : 'end'
};
onCalendarChange(values, [startStr, endStr], info);
}
// >>>>> Trigger `onChange` event
var canStartValueTrigger = canValueTrigger(startValue, 0, mergedDisabled.value, allowEmpty);
var canEndValueTrigger = canValueTrigger(endValue, 1, mergedDisabled.value, allowEmpty);
var canTrigger = values === null || canStartValueTrigger && canEndValueTrigger;
if (canTrigger) {
// Trigger onChange only when value is validate
setInnerValue(values);
if (onChange && (!isEqual(generateConfig, getValue(mergedValue.value, 0), startValue) || !isEqual(generateConfig, getValue(mergedValue.value, 1), endValue))) {
onChange(values, [startStr, endStr]);
}
}
// >>>>> Open picker when
// Always open another picker if possible
var nextOpenIndex = null;
if (sourceIndex === 0 && !mergedDisabled.value[1]) {
nextOpenIndex = 1;
} else if (sourceIndex === 1 && !mergedDisabled.value[0]) {
nextOpenIndex = 0;
}
if (nextOpenIndex !== null && nextOpenIndex !== mergedActivePickerIndex.value && (!openRecordsRef.value[nextOpenIndex] || !getValue(values, nextOpenIndex)) && getValue(values, sourceIndex)) {
// Delay to focus to avoid input blur trigger expired selectedValues
triggerOpenAndFocus(nextOpenIndex);
} else {
_triggerOpen(false, sourceIndex);
}
}
var forwardKeydown = function forwardKeydown(e) {
if (mergedOpen && operationRef.value && operationRef.value.onKeydown) {
// Let popup panel handle keyboard
return operationRef.value.onKeydown(e);
}
/* istanbul ignore next */
/* eslint-disable no-lone-blocks */
{
warning(false, 'Picker not correct forward Keydown operation. Please help to fire issue about this.');
return false;
}
};
// ============================= Text ==============================
var sharedTextHooksProps = {
formatList: formatList,
generateConfig: toRef(props, 'generateConfig'),
locale: toRef(props, 'locale')
};
var _useValueTexts = useValueTexts(computed(function () {
return getValue(selectedValue.value, 0);
}), sharedTextHooksProps),
_useValueTexts2 = _slicedToArray(_useValueTexts, 2),
startValueTexts = _useValueTexts2[0],
firstStartValueText = _useValueTexts2[1];
var _useValueTexts3 = useValueTexts(computed(function () {
return getValue(selectedValue.value, 1);
}), sharedTextHooksProps),
_useValueTexts4 = _slicedToArray(_useValueTexts3, 2),
endValueTexts = _useValueTexts4[0],
firstEndValueText = _useValueTexts4[1];
var _onTextChange = function onTextChange(newText, index) {
var inputDate = parseValue(newText, {
locale: props.locale,
formatList: formatList.value,
generateConfig: props.generateConfig
});
var disabledFunc = index === 0 ? disabledStartDate : disabledEndDate;
if (inputDate && !disabledFunc(inputDate)) {
setSelectedValue(updateValues(selectedValue.value, inputDate, index));
setViewDate(inputDate, index);
}
};
var _useTextValueMapping = useTextValueMapping({
valueTexts: startValueTexts,
onTextChange: function onTextChange(newText) {
return _onTextChange(newText, 0);
}
}),
_useTextValueMapping2 = _slicedToArray(_useTextValueMapping, 3),
startText = _useTextValueMapping2[0],
triggerStartTextChange = _useTextValueMapping2[1],
resetStartText = _useTextValueMapping2[2];
var _useTextValueMapping3 = useTextValueMapping({
valueTexts: endValueTexts,
onTextChange: function onTextChange(newText) {
return _onTextChange(newText, 1);
}
}),
_useTextValueMapping4 = _slicedToArray(_useTextValueMapping3, 3),
endText = _useTextValueMapping4[0],
triggerEndTextChange = _useTextValueMapping4[1],
resetEndText = _useTextValueMapping4[2];
var _useState = useState(null),
_useState2 = _slicedToArray(_useState, 2),
rangeHoverValue = _useState2[0],
setRangeHoverValue = _useState2[1];
// ========================== Hover Range ==========================
var _useState3 = useState(null),
_useState4 = _slicedToArray(_useState3, 2),
hoverRangedValue = _useState4[0],
setHoverRangedValue = _useState4[1];
var _useHoverValue = useHoverValue(startText, sharedTextHooksProps),
_useHoverValue2 = _slicedToArray(_useHoverValue, 3),
startHoverValue = _useHoverValue2[0],
onStartEnter = _useHoverValue2[1],
onStartLeave = _useHoverValue2[2];
var _useHoverValue3 = useHoverValue(endText, sharedTextHooksProps),
_useHoverValue4 = _slicedToArray(_useHoverValue3, 3),
endHoverValue = _useHoverValue4[0],
onEndEnter = _useHoverValue4[1],
onEndLeave = _useHoverValue4[2];
var onDateMouseenter = function onDateMouseenter(date) {
setHoverRangedValue(updateValues(selectedValue.value, date, mergedActivePickerIndex.value));
if (mergedActivePickerIndex.value === 0) {
onStartEnter(date);
} else {
onEndEnter(date);
}
};
var onDateMouseleave = function onDateMouseleave() {
setHoverRangedValue(updateValues(selectedValue.value, null, mergedActivePickerIndex.value));
if (mergedActivePickerIndex.value === 0) {
onStartLeave();
} else {
onEndLeave();
}
};
// ============================= Input =============================
var getSharedInputHookProps = function getSharedInputHookProps(index, resetText) {
return {
forwardKeydown: forwardKeydown,
onBlur: function onBlur(e) {
var _props$onBlur;
(_props$onBlur = props.onBlur) === null || _props$onBlur === void 0 ? void 0 : _props$onBlur.call(props, e);
},
isClickOutside: function isClickOutside(target) {
return !elementsContains([panelDivRef.value, startInputDivRef.value, endInputDivRef.value, containerRef.value], target);
},
onFocus: function onFocus(e) {
var _props$onFocus;
setMergedActivePickerIndex(index);
(_props$onFocus = props.onFocus) === null || _props$onFocus === void 0 ? void 0 : _props$onFocus.call(props, e);
},
triggerOpen: function triggerOpen(newOpen) {
_triggerOpen(newOpen, index);
},
onSubmit: function onSubmit() {
if (
// When user typing disabledDate with keyboard and enter, this value will be empty
!selectedValue.value ||
// Normal disabled check
props.disabledDate && props.disabledDate(selectedValue.value[index])) {
return false;
}
triggerChange(selectedValue.value, index);
resetText();
},
onCancel: function onCancel() {
_triggerOpen(false, index);
setSelectedValue(mergedValue.value);
resetText();
}
};
};
var _usePickerInput = usePickerInput(_objectSpread(_objectSpread({}, getSharedInputHookProps(0, resetStartText)), {}, {
blurToCancel: needConfirmButton,
open: startOpen,
value: startText,
onKeydown: function onKeydown(e, preventDefault) {
var _props$onKeydown;
(_props$onKeydown = props.onKeydown) === null || _props$onKeydown === void 0 ? void 0 : _props$onKeydown.call(props, e, preventDefault);
}
})),
_usePickerInput2 = _slicedToArray(_usePickerInput, 2),
startInputProps = _usePickerInput2[0],
_usePickerInput2$ = _usePickerInput2[1],
startFocused = _usePickerInput2$.focused,
startTyping = _usePickerInput2$.typing;
var _usePickerInput3 = usePickerInput(_objectSpread(_objectSpread({}, getSharedInputHookProps(1, resetEndText)), {}, {
blurToCancel: needConfirmButton,
open: endOpen,
value: endText,
onKeydown: function onKeydown(e, preventDefault) {
var _props$onKeydown2;
(_props$onKeydown2 = props.onKeydown) === null || _props$onKeydown2 === void 0 ? void 0 : _props$onKeydown2.call(props, e, preventDefault);
}
})),
_usePickerInput4 = _slicedToArray(_usePickerInput3, 2),
endInputProps = _usePickerInput4[0],
_usePickerInput4$ = _usePickerInput4[1],
endFocused = _usePickerInput4$.focused,
endTyping = _usePickerInput4$.typing;
// ========================== Click Picker ==========================
var onPickerClick = function onPickerClick(e) {
var _props$onClick;
// When click inside the picker & outside the picker's input elements
// the panel should still be opened
(_props$onClick = props.onClick) === null || _props$onClick === void 0 ? void 0 : _props$onClick.call(props, e);
if (!mergedOpen.value && !startInputRef.value.contains(e.target) && !endInputRef.value.contains(e.target)) {
if (!mergedDisabled.value[0]) {
triggerOpenAndFocus(0);
} else if (!mergedDisabled.value[1]) {
triggerOpenAndFocus(1);
}
}
};
var onPickerMousedown = function onPickerMousedown(e) {
var _props$onMousedown;
// shouldn't affect input elements if picker is active
(_props$onMousedown = props.onMousedown) === null || _props$onMousedown === void 0 ? void 0 : _props$onMousedown.call(props, e);
if (mergedOpen.value && (startFocused.value || endFocused.value) && !startInputRef.value.contains(e.target) && !endInputRef.value.contains(e.target)) {
e.preventDefault();
}
};
// ============================= Sync ==============================
// Close should sync back with text value
var startStr = computed(function () {
var _mergedValue$value;
return (_mergedValue$value = mergedValue.value) !== null && _mergedValue$value !== void 0 && _mergedValue$value[0] ? formatValue(mergedValue.value[0], {
locale: props.locale,
format: 'YYYYMMDDHHmmss',
generateConfig: props.generateConfig
}) : '';
});
var endStr = computed(function () {
var _mergedValue$value2;
return (_mergedValue$value2 = mergedValue.value) !== null && _mergedValue$value2 !== void 0 && _mergedValue$value2[1] ? formatValue(mergedValue.value[1], {
locale: props.locale,
format: 'YYYYMMDDHHmmss',
generateConfig: props.generateConfig
}) : '';
});
watch([mergedOpen, startValueTexts, endValueTexts], function () {
if (!mergedOpen.value) {
setSelectedValue(mergedValue.value);
if (!startValueTexts.value.length || startValueTexts.value[0] === '') {
triggerStartTextChange('');
} else if (firstStartValueText.value !== startText.value) {
resetStartText();
}
if (!endValueTexts.value.length || endValueTexts.value[0] === '') {
triggerEndTextChange('');
} else if (firstEndValueText.value !== endText.value) {
resetEndText();
}
}
});
// Sync innerValue with control mode
watch([startStr, endStr], function () {
setSelectedValue(mergedValue.value);
});
// ============================ Warning ============================
if (process.env.NODE_ENV !== 'production') {
watchEffect(function () {
var value = props.value,
disabled = props.disabled;
if (value && Array.isArray(disabled) && (getValue(disabled, 0) && !getValue(value, 0) || getValue(disabled, 1) && !getValue(value, 1))) {
warning(false, '`disabled` should not set with empty `value`. You should set `allowEmpty` or `value` instead.');
}
});
}
expose({
focus: function focus() {
if (startInputRef.value) {
startInputRef.value.focus();
}
},
blur: function blur() {
if (startInputRef.value) {
startInputRef.value.blur();
}
if (endInputRef.value) {
endInputRef.value.blur();
}
}
});
// ============================ Ranges =============================
var rangeList = computed(function () {
return Object.keys(props.ranges || {}).map(function (label) {
var range = props.ranges[label];
var newValues = typeof range === 'function' ? range() : range;
return {
label: label,
onClick: function onClick() {
triggerChange(newValues, null);
_triggerOpen(false, mergedActivePickerIndex.value);
},
onMouseenter: function onMouseenter() {
setRangeHoverValue(newValues);
},
onMouseleave: function onMouseleave() {
setRangeHoverValue(null);
}
};
});
});
// ============================= Panel =============================
var panelHoverRangedValue = computed(function () {
if (mergedOpen.value && hoverRangedValue.value && hoverRangedValue.value[0] && hoverRangedValue.value[1] && props.generateConfig.isAfter(hoverRangedValue.value[1], hoverRangedValue.value[0])) {
return hoverRangedValue.value;
} else {
return null;
}
});
function renderPanel() {
var panelPosition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var panelProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var generateConfig = props.generateConfig,
showTime = props.showTime,
dateRender = props.dateRender,
direction = props.direction,
_disabledTime = props.disabledTime,
prefixCls = props.prefixCls,
locale = props.locale;
var panelShowTime = showTime;
if (showTime && _typeof(showTime) === 'object' && showTime.defaultValue) {
var timeDefaultValues = showTime.defaultValue;
panelShowTime = _objectSpread(_objectSpread({}, showTime), {}, {
defaultValue: getValue(timeDefaultValues, mergedActivePickerIndex.value) || undefined
});
}
var panelDateRender = null;
if (dateRender) {
panelDateRender = function panelDateRender(_ref2) {
var date = _ref2.current,
today = _ref2.today;
return dateRender({
current: date,
today: today,
info: {
range: mergedActivePickerIndex.value ? 'end' : 'start'
}
});
};
}
return _createVNode(RangeContextProvider, {
"value": {
inRange: true,
panelPosition: panelPosition,
rangedValue: rangeHoverValue.value || selectedValue.value,
hoverRangedValue: panelHoverRangedValue.value
}
}, {
default: function _default() {
return [_createVNode(PickerPanel, _objectSpread(_objectSpread(_objectSpread({}, props), panelProps), {}, {
"dateRender": panelDateRender,
"showTime": panelShowTime,
"mode": mergedModes.value[mergedActivePickerIndex.value],
"generateConfig": generateConfig,
"style": undefined,
"direction": direction,
"disabledDate": mergedActivePickerIndex.value === 0 ? disabledStartDate : disabledEndDate,
"disabledTime": function disabledTime(date) {
if (_disabledTime) {
return _disabledTime(date, mergedActivePickerIndex.value === 0 ? 'start' : 'end');
}
return false;
},
"class": classNames(_defineProperty({}, "".concat(prefixCls, "-panel-focused"), mergedActivePickerIndex.value === 0 ? !startTyping.value : !endTyping.value)),
"value": getValue(selectedValue.value, mergedActivePickerIndex.value),
"locale": locale,
"tabIndex": -1,
"onPanelChange": function onPanelChange(date, newMode) {
// clear hover value when panel change
if (mergedActivePickerIndex.value === 0) {
onStartLeave(true);
}
if (mergedActivePickerIndex.value === 1) {
onEndLeave(true);
}
triggerModesChange(updateValues(mergedModes.value, newMode, mergedActivePickerIndex.value), updateValues(selectedValue.value, date, mergedActivePickerIndex.value));
var viewDate = date;
if (panelPosition === 'right' && mergedModes.value[mergedActivePickerIndex.value] === newMode) {
viewDate = getClosingViewDate(viewDate, newMode, generateConfig, -1);
}
setViewDate(viewDate, mergedActivePickerIndex.value);
},
"onOk": null,
"onSelect": undefined,
"onChange": undefined,
"defaultValue": mergedActivePickerIndex.value === 0 ? getValue(selectedValue.value, 1) : getValue(selectedValue.value, 0)
}), null)];
}
});
}
var onContextSelect = function onContextSelect(date, type) {
var values = updateValues(selectedValue.value, date, mergedActivePickerIndex.value);
if (type === 'submit' || type !== 'key' && !needConfirmButton.value) {
// triggerChange will also update selected values
triggerChange(values, mergedActivePickerIndex.value);
// clear hover value style
if (mergedActivePickerIndex.value === 0) {
onStartLeave();
} else {
onEndLeave();
}
} else {
setSelectedValue(values);
}
};
useProvidePanel({
operationRef: operationRef,
hideHeader: computed(function () {
return props.picker === 'time';
}),
onDateMouseenter: onDateMouseenter,
onDateMouseleave: onDateMouseleave,
hideRanges: computed(function () {
return true;
}),
onSelect: onContextSelect,
open: mergedOpen
});
return function () {
var _classNames2, _classNames3, _classNames4;
var _props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'rc-picker' : _props$prefixCls,
id = props.id,
popupStyle = props.popupStyle,
dropdownClassName = props.dropdownClassName,
transitionName = props.transitionName,
dropdownAlign = props.dropdownAlign,
getPopupContainer = props.getPopupContainer,
generateConfig = props.generateConfig,
locale = props.locale,
placeholder = props.placeholder,
autofocus = props.autofocus,
_props$picker = props.picker,
picker = _props$picker === void 0 ? 'date' : _props$picker,
showTime = props.showTime,
_props$separator = props.separator,
separator = _props$separator === void 0 ? '~' : _props$separator,
disabledDate = props.disabledDate,
panelRender = props.panelRender,
allowClear = props.allowClear,
suffixIcon = props.suffixIcon,
clearIcon = props.clearIcon,
inputReadOnly = props.inputReadOnly,
renderExtraFooter = props.renderExtraFooter,
onMouseenter = props.onMouseenter,
onMouseleave = props.onMouseleave,
onMouseup = props.onMouseup,
_onOk = props.onOk,
components = props.components,
direction = props.direction,
_props$autocomplete = props.autocomplete,
autocomplete = _props$autocomplete === void 0 ? 'off' : _props$autocomplete;
var arrowPositionStyle = direction === 'rtl' ? {
right: "".concat(arrowLeft.value, "px")
} : {
left: "".concat(arrowLeft.value, "px")
};
function renderPanels() {
var panels;
var extraNode = getExtraFooter(prefixCls, mergedModes.value[mergedActivePickerIndex.value], renderExtraFooter);
var rangesNode = getRanges({
prefixCls: prefixCls,
components: components,
needConfirmButton: needConfirmButton.value,
okDisabled: !getValue(selectedValue.value, mergedActivePickerIndex.value) || disabledDate && disabledDate(selectedValue.value[mergedActivePickerIndex.value]),
locale: locale,
rangeList: rangeList.value,
onOk: function onOk() {
if (getValue(selectedValue.value, mergedActivePickerIndex.value)) {
// triggerChangeOld(selectedValue.value);
triggerChange(selectedValue.value, mergedActivePickerIndex.value);
if (_onOk) {
_onOk(selectedValue.value);
}
}
}
});
if (picker !== 'time' && !showTime) {
var viewDate = mergedActivePickerIndex.value === 0 ? startViewDate.value : endViewDate.value;
var nextViewDate = getClosingViewDate(viewDate, picker, generateConfig);
var currentMode = mergedModes.value[mergedActivePickerIndex.value];
var showDoublePanel = currentMode === picker;
var leftPanel = renderPanel(showDoublePanel ? 'left' : false, {
pickerValue: viewDate,
onPickerValueChange: function onPickerValueChange(newViewDate) {
setViewDate(newViewDate, mergedActivePickerIndex.value);
}
});
var rightPanel = renderPanel('right', {
pickerValue: nextViewDate,
onPickerValueChange: function onPickerValueChange(newViewDate) {
setViewDate(getClosingViewDate(newViewDate, picker, generateConfig, -1), mergedActivePickerIndex.value);
}
});
if (direction === 'rtl') {
panels = _createVNode(_Fragment, null, [rightPanel, showDoublePanel && leftPanel]);
} else {
panels = _createVNode(_Fragment, null, [leftPanel, showDoublePanel && rightPanel]);
}
} else {
panels = renderPanel();
}
var mergedNodes = _createVNode(_Fragment, null, [_createVNode("div", {
"class": "".concat(prefixCls, "-panels")
}, [panels]), (extraNode || rangesNode) && _createVNode("div", {
"class": "".concat(prefixCls, "-footer")
}, [extraNode, rangesNode])]);
if (panelRender) {
mergedNodes = panelRender(mergedNodes);
}
return _createVNode("div", {
"class": "".concat(prefixCls, "-panel-container"),
"style": {
marginLeft: "".concat(panelLeft.value, "px")
},
"ref": panelDivRef,
"onMousedown": function onMousedown(e) {
e.preventDefault();
}
}, [mergedNodes]);
}
var rangePanel = _createVNode("div", {
"class": classNames("".concat(prefixCls, "-range-wrapper"), "".concat(prefixCls, "-").concat(picker, "-range-wrapper")),
"style": {
minWidth: "".concat(popupMinWidth.value, "px")
}
}, [_createVNode("div", {
"ref": arrowRef,
"class": "".concat(prefixCls, "-range-arrow"),
"style": arrowPositionStyle
}, null), renderPanels()]);
// ============================= Icons =============================
var suffixNode;
if (suffixIcon) {
suffixNode = _createVNode("span", {
"class": "".concat(prefixCls, "-suffix")
}, [suffixIcon]);
}
var clearNode;
if (allowClear && (getValue(mergedValue.value, 0) && !mergedDisabled.value[0] || getValue(mergedValue.value, 1) && !mergedDisabled.value[1])) {
clearNode = _createVNode("span", {
"onMousedown": function onMousedown(e) {
e.preventDefault();
e.stopPropagation();
},
"onMouseup": function onMouseup(e) {
e.preventDefault();
e.stopPropagation();
var values = mergedValue.value;
if (!mergedDisabled.value[0]) {
values = updateValues(values, null, 0);
}
if (!mergedDisabled.value[1]) {
values = updateValues(values, null, 1);
}
triggerChange(values, null);
_triggerOpen(false, mergedActivePickerIndex.value);
},
"class": "".concat(prefixCls, "-clear")
}, [clearIcon || _createVNode("span", {
"class": "".concat(prefixCls, "-clear-btn")
}, null)]);
}
var inputSharedProps = {
size: getInputSize(picker, formatList.value[0], generateConfig)
};
var activeBarLeft = 0;
var activeBarWidth = 0;
if (startInputDivRef.value && endInputDivRef.value && separatorRef.value) {
if (mergedActivePickerIndex.value === 0) {
activeBarWidth = startInputDivRef.value.offsetWidth;
} else {
activeBarLeft = arrowLeft.value;
activeBarWidth = endInputDivRef.value.offsetWidth;
}
}
var activeBarPositionStyle = direction === 'rtl' ? {
right: "".concat(activeBarLeft, "px")
} : {
left: "".concat(activeBarLeft, "px")
};
// ============================ Return =============================
return _createVNode(PickerTrigger, {
"visible": mergedOpen.value,
"popupStyle": popupStyle,
"prefixCls": prefixCls,
"dropdownClassName": dropdownClassName,
"dropdownAlign": dropdownAlign,
"getPopupContainer": getPopupContainer,
"transitionName": transitionName,
"range": true,
"direction": direction
}, {
default: function _default() {
return [_createVNode("div", _objectSpread({
"ref": containerRef,
"class": classNames(prefixCls, "".concat(prefixCls, "-range"), attrs.class, (_classNames2 = {}, _defineProperty(_classNames2, "".concat(prefixCls, "-disabled"), mergedDisabled.value[0] && mergedDisabled.value[1]), _defineProperty(_classNames2, "".concat(prefixCls, "-focused"), mergedActivePickerIndex.value === 0 ? startFocused.value : endFocused.value), _defineProperty(_classNames2, "".concat(prefixCls, "-rtl"), direction === 'rtl'), _classNames2)),
"style": attrs.style,
"onClick": onPickerClick,
"onMouseenter": onMouseenter,
"onMouseleave": onMouseleave,
"onMousedown": onPickerMousedown,
"onMouseup": onMouseup
}, getDataOrAriaProps(props)), [_createVNode("div", {
"class": classNames("".concat(prefixCls, "-input"), (_classNames3 = {}, _defineProperty(_classNames3, "".concat(prefixCls, "-input-active"), mergedActivePickerIndex.value === 0), _defineProperty(_classNames3, "".concat(prefixCls, "-input-placeholder"), !!startHoverValue.value), _classNames3)),
"ref": startInputDivRef
}, [_createVNode("input", _objectSpread(_objectSpread(_objectSpread({
"id": id,
"disabled": mergedDisabled.value[0],
"readonly": inputReadOnly || typeof formatList.value[0] === 'function' || !startTyping.value,
"value": startHoverValue.value || startText.value,
"onInput": function onInput(e) {
triggerStartTextChange(e.target.value);
},
"autofocus": autofocus,
"placeholder": getValue(placeholder, 0) || '',
"ref": startInputRef
}, startInputProps.value), inputSharedProps), {}, {
"autocomplete": autocomplete
}), null)]), _createVNode("div", {
"class": "".concat(prefixCls, "-range-separator"),
"ref": separatorRef
}, [separator]), _createVNode("div", {
"class": classNames("".concat(prefixCls, "-input"), (_classNames4 = {}, _defineProperty(_classNames4, "".concat(prefixCls, "-input-active"), mergedActivePickerIndex.value === 1), _defineProperty(_classNames4, "".concat(prefixCls, "-input-placeholder"), !!endHoverValue.value), _classNames4)),
"ref": endInputDivRef
}, [_createVNode("input", _objectSpread(_objectSpread(_objectSpread({
"disabled": mergedDisabled.value[1],
"readonly": inputReadOnly || typeof formatList.value[0] === 'function' || !endTyping.value,
"value": endHoverValue.value || endText.value,
"onInput": function onInput(e) {
triggerEndTextChange(e.target.value);
},
"placeholder": getValue(placeholder, 1) || '',
"ref": endInputRef
}, endInputProps.value), inputSharedProps), {}, {
"autocomplete": autocomplete
}), null)]), _createVNode("div", {
"class": "".concat(prefixCls, "-active-bar"),
"style": _objectSpread(_objectSpread({}, activeBarPositionStyle), {}, {
width: "".concat(activeBarWidth, "px"),
position: 'absolute'
})
}, null), suffixNode, clearNode, getPortal()])];
},
popupElement: function popupElement() {
return rangePanel;
}
});
};
}
});
}
var InterRangerPicker = RangerPicker();
export default InterRangerPicker;