rsuite 5.60.0 → 5.60.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -2
- package/DatePicker/styles/index.css +1 -0
- package/DatePicker/styles/index.less +1 -0
- package/DateRangePicker/styles/index.css +4 -3
- package/DateRangePicker/styles/index.less +7 -5
- package/LICENSE +1 -1
- package/README.md +70 -89
- package/RangeSlider/styles/index.css +1 -1
- package/Slider/styles/index.css +1 -1
- package/Slider/styles/index.less +1 -1
- package/Toggle/styles/index.css +8 -2
- package/Toggle/styles/index.less +4 -2
- package/cjs/DateInput/DateField.js +3 -1
- package/cjs/DateInput/DateInput.js +17 -16
- package/cjs/DateInput/{useDateInputState.d.ts → hooks/useDateInputState.d.ts} +1 -1
- package/cjs/DateInput/{useDateInputState.js → hooks/useDateInputState.js} +2 -2
- package/cjs/DateInput/hooks/useFieldCursor.d.ts +6 -0
- package/cjs/DateInput/hooks/useFieldCursor.js +56 -0
- package/cjs/DateInput/hooks/useSelectedState.d.ts +14 -0
- package/cjs/DateInput/hooks/useSelectedState.js +23 -0
- package/cjs/DateInput/index.d.ts +5 -3
- package/cjs/DateInput/index.js +11 -5
- package/cjs/DateInput/utils.d.ts +0 -1
- package/cjs/DateInput/utils.js +2 -24
- package/cjs/DateRangeInput/DateRangeInput.js +16 -17
- package/cjs/DateRangePicker/DateRangePicker.js +17 -9
- package/cjs/DateRangePicker/utils.d.ts +2 -2
- package/cjs/DateRangePicker/utils.js +2 -2
- package/dist/rsuite-no-reset-rtl.css +13 -6
- package/dist/rsuite-no-reset-rtl.min.css +1 -1
- package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
- package/dist/rsuite-no-reset.css +13 -6
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +13 -6
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +13 -6
- package/dist/rsuite.js +48 -26
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/DateInput/DateField.js +3 -1
- package/esm/DateInput/DateInput.js +19 -18
- package/esm/DateInput/{useDateInputState.d.ts → hooks/useDateInputState.d.ts} +1 -1
- package/esm/DateInput/{useDateInputState.js → hooks/useDateInputState.js} +2 -2
- package/esm/DateInput/hooks/useFieldCursor.d.ts +6 -0
- package/esm/DateInput/hooks/useFieldCursor.js +49 -0
- package/esm/DateInput/hooks/useSelectedState.d.ts +14 -0
- package/esm/DateInput/hooks/useSelectedState.js +17 -0
- package/esm/DateInput/index.d.ts +5 -3
- package/esm/DateInput/index.js +5 -3
- package/esm/DateInput/utils.d.ts +0 -1
- package/esm/DateInput/utils.js +2 -23
- package/esm/DateRangeInput/DateRangeInput.js +17 -18
- package/esm/DateRangePicker/DateRangePicker.js +17 -9
- package/esm/DateRangePicker/utils.d.ts +2 -2
- package/esm/DateRangePicker/utils.js +2 -2
- package/package.json +2 -2
- package/styles/variables.less +0 -1
- /package/cjs/DateInput/{useIsFocused.d.ts → hooks/useIsFocused.d.ts} +0 -0
- /package/cjs/DateInput/{useIsFocused.js → hooks/useIsFocused.js} +0 -0
- /package/cjs/DateInput/{useKeyboardInputEvent.d.ts → hooks/useKeyboardInputEvent.d.ts} +0 -0
- /package/cjs/DateInput/{useKeyboardInputEvent.js → hooks/useKeyboardInputEvent.js} +0 -0
- /package/esm/DateInput/{useIsFocused.d.ts → hooks/useIsFocused.d.ts} +0 -0
- /package/esm/DateInput/{useIsFocused.js → hooks/useIsFocused.js} +0 -0
- /package/esm/DateInput/{useKeyboardInputEvent.d.ts → hooks/useKeyboardInputEvent.d.ts} +0 -0
- /package/esm/DateInput/{useKeyboardInputEvent.js → hooks/useKeyboardInputEvent.js} +0 -0
|
@@ -126,7 +126,9 @@ export var useDateField = function useDateField(format, localize, date) {
|
|
|
126
126
|
if (typeof value === 'number') {
|
|
127
127
|
value = padNumber(value, pattern.length);
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
if (typeof value !== 'undefined') {
|
|
130
|
+
str = str.replace(pattern, value);
|
|
131
|
+
}
|
|
130
132
|
}
|
|
131
133
|
});
|
|
132
134
|
return str;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
-
import React, {
|
|
4
|
+
import React, { useRef, useMemo } from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import Input from '../Input';
|
|
7
7
|
import { mergeRefs, useCustom, useControlled, useEventCallback } from '../utils';
|
|
8
|
-
import { getInputSelectedState, validateDateTime,
|
|
9
|
-
import useDateInputState from './useDateInputState';
|
|
10
|
-
import useKeyboardInputEvent from './useKeyboardInputEvent';
|
|
11
|
-
import useIsFocused from './useIsFocused';
|
|
8
|
+
import { getInputSelectedState, validateDateTime, useInputSelection } from './utils';
|
|
9
|
+
import useDateInputState from './hooks/useDateInputState';
|
|
10
|
+
import useKeyboardInputEvent from './hooks/useKeyboardInputEvent';
|
|
11
|
+
import useIsFocused from './hooks/useIsFocused';
|
|
12
|
+
import useFieldCursor from './hooks/useFieldCursor';
|
|
13
|
+
import useSelectedState from './hooks/useSelectedState';
|
|
12
14
|
/**
|
|
13
15
|
* The DateInput component lets users select a date with the keyboard.
|
|
14
16
|
* @version 5.58.0
|
|
@@ -26,13 +28,9 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
26
28
|
onFocus = props.onFocus,
|
|
27
29
|
rest = _objectWithoutPropertiesLoose(props, ["format", "value", "defaultValue", "placeholder", "onChange", "onKeyDown", "onBlur", "onFocus"]);
|
|
28
30
|
var inputRef = useRef();
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
selectionEnd: 0
|
|
33
|
-
}),
|
|
34
|
-
selectedState = _useState[0],
|
|
35
|
-
setSelectedState = _useState[1];
|
|
31
|
+
var _useSelectedState = useSelectedState(),
|
|
32
|
+
selectedState = _useSelectedState.selectedState,
|
|
33
|
+
setSelectedState = _useSelectedState.setSelectedState;
|
|
36
34
|
var _useCustom = useCustom('Calendar'),
|
|
37
35
|
locale = _useCustom.locale;
|
|
38
36
|
var dateLocale = locale.dateLocale;
|
|
@@ -52,6 +50,10 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
52
50
|
getDateField = _useDateInputState.getDateField,
|
|
53
51
|
toDateString = _useDateInputState.toDateString,
|
|
54
52
|
isEmptyValue = _useDateInputState.isEmptyValue;
|
|
53
|
+
var _useFieldCursor = useFieldCursor(formatStr, valueProp),
|
|
54
|
+
isMoveCursor = _useFieldCursor.isMoveCursor,
|
|
55
|
+
increment = _useFieldCursor.increment,
|
|
56
|
+
reset = _useFieldCursor.reset;
|
|
55
57
|
var dateString = toDateString();
|
|
56
58
|
var keyPressOptions = useMemo(function () {
|
|
57
59
|
return {
|
|
@@ -74,8 +76,9 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
74
76
|
input: input,
|
|
75
77
|
direction: direction
|
|
76
78
|
}));
|
|
77
|
-
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
78
79
|
setSelectedState(state);
|
|
80
|
+
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
81
|
+
reset();
|
|
79
82
|
});
|
|
80
83
|
var onSegmentValueChange = useEventCallback(function (event) {
|
|
81
84
|
var input = event.target;
|
|
@@ -98,6 +101,7 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
98
101
|
if (!pattern) {
|
|
99
102
|
return;
|
|
100
103
|
}
|
|
104
|
+
increment();
|
|
101
105
|
var field = getDateField(pattern);
|
|
102
106
|
var value = parseInt(key, 10);
|
|
103
107
|
var padValue = parseInt("" + (field.value || '') + key, 10);
|
|
@@ -107,10 +111,6 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
107
111
|
if (validateDateTime(field.name, padValue)) {
|
|
108
112
|
newValue = padValue;
|
|
109
113
|
}
|
|
110
|
-
if (pattern === 'M') {
|
|
111
|
-
// Month cannot be less than 1.
|
|
112
|
-
newValue = Math.max(1, newValue);
|
|
113
|
-
}
|
|
114
114
|
setDateField(pattern, newValue, function (date) {
|
|
115
115
|
return handleChange(date, event);
|
|
116
116
|
});
|
|
@@ -126,7 +126,7 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
126
126
|
setSelectionRange(nextState.selectionStart, nextState.selectionEnd);
|
|
127
127
|
|
|
128
128
|
// If the field is full value, move the cursor to the next field
|
|
129
|
-
if (
|
|
129
|
+
if (isMoveCursor(newValue, pattern) && input.selectionEnd !== input.value.length) {
|
|
130
130
|
onSegmentChange(event, 'right');
|
|
131
131
|
}
|
|
132
132
|
});
|
|
@@ -142,6 +142,7 @@ var DateInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
142
142
|
setDateField(selectedState.selectedPattern, null, function (date) {
|
|
143
143
|
return handleChange(date, event);
|
|
144
144
|
});
|
|
145
|
+
reset();
|
|
145
146
|
}
|
|
146
147
|
});
|
|
147
148
|
var handleClick = useEventCallback(function (event) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import startCase from 'lodash/startCase';
|
|
4
|
-
import { addDays, addMonths, addYears, addHours, addMinutes, addSeconds, format, isLastDayOfMonth, lastDayOfMonth, isValid } from '
|
|
5
|
-
import { useDateField, patternMap } from '
|
|
4
|
+
import { addDays, addMonths, addYears, addHours, addMinutes, addSeconds, format, isLastDayOfMonth, lastDayOfMonth, isValid } from '../../utils/dateUtils';
|
|
5
|
+
import { useDateField, patternMap } from '../DateField';
|
|
6
6
|
export function useDateInputState(_ref) {
|
|
7
7
|
var formatStr = _ref.formatStr,
|
|
8
8
|
locale = _ref.locale,
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useRef } from 'react';
|
|
3
|
+
import { getPatternGroups } from '../utils';
|
|
4
|
+
import useUpdateEffect from '../../utils/useUpdateEffect';
|
|
5
|
+
export function useFieldCursor(format, value) {
|
|
6
|
+
var typeCount = useRef(0);
|
|
7
|
+
var increment = function increment() {
|
|
8
|
+
typeCount.current += 1;
|
|
9
|
+
};
|
|
10
|
+
var reset = function reset() {
|
|
11
|
+
typeCount.current = 0;
|
|
12
|
+
};
|
|
13
|
+
var isMoveCursor = useCallback(function (value, pattern) {
|
|
14
|
+
var patternGroup = getPatternGroups(format, pattern);
|
|
15
|
+
if (value.toString().length === patternGroup.length) {
|
|
16
|
+
return true;
|
|
17
|
+
} else if (pattern === 'y' && typeCount.current === 4) {
|
|
18
|
+
return true;
|
|
19
|
+
} else if (pattern !== 'y' && typeCount.current === 2) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
switch (pattern) {
|
|
23
|
+
case 'M':
|
|
24
|
+
return parseInt(value + "0") > 12;
|
|
25
|
+
case 'd':
|
|
26
|
+
return parseInt(value + "0") > 31;
|
|
27
|
+
case 'H':
|
|
28
|
+
return parseInt(value + "0") > 23;
|
|
29
|
+
case 'h':
|
|
30
|
+
return parseInt(value + "0") > 12;
|
|
31
|
+
case 'm':
|
|
32
|
+
case 's':
|
|
33
|
+
return parseInt(value + "0") > 59;
|
|
34
|
+
default:
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}, [format]);
|
|
38
|
+
useUpdateEffect(function () {
|
|
39
|
+
if (!value) {
|
|
40
|
+
reset();
|
|
41
|
+
}
|
|
42
|
+
}, [value]);
|
|
43
|
+
return {
|
|
44
|
+
increment: increment,
|
|
45
|
+
reset: reset,
|
|
46
|
+
isMoveCursor: isMoveCursor
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export default useFieldCursor;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare function useSelectedState(): {
|
|
3
|
+
selectedState: {
|
|
4
|
+
selectedPattern: string;
|
|
5
|
+
selectionStart: number;
|
|
6
|
+
selectionEnd: number;
|
|
7
|
+
};
|
|
8
|
+
setSelectedState: import("react").Dispatch<import("react").SetStateAction<{
|
|
9
|
+
selectedPattern: string;
|
|
10
|
+
selectionStart: number;
|
|
11
|
+
selectionEnd: number;
|
|
12
|
+
}>>;
|
|
13
|
+
};
|
|
14
|
+
export default useSelectedState;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
var defaultSelectedState = {
|
|
4
|
+
selectedPattern: 'y',
|
|
5
|
+
selectionStart: 0,
|
|
6
|
+
selectionEnd: 0
|
|
7
|
+
};
|
|
8
|
+
export function useSelectedState() {
|
|
9
|
+
var _useState = useState(defaultSelectedState),
|
|
10
|
+
selectedState = _useState[0],
|
|
11
|
+
setSelectedState = _useState[1];
|
|
12
|
+
return {
|
|
13
|
+
selectedState: selectedState,
|
|
14
|
+
setSelectedState: setSelectedState
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export default useSelectedState;
|
package/esm/DateInput/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import DateInput from './DateInput';
|
|
2
|
-
export { useDateInputState } from './useDateInputState';
|
|
3
|
-
export { useKeyboardInputEvent } from './useKeyboardInputEvent';
|
|
4
|
-
export { useIsFocused } from './useIsFocused';
|
|
2
|
+
export { useDateInputState } from './hooks/useDateInputState';
|
|
3
|
+
export { useKeyboardInputEvent } from './hooks/useKeyboardInputEvent';
|
|
4
|
+
export { useIsFocused } from './hooks/useIsFocused';
|
|
5
|
+
export { useSelectedState } from './hooks/useSelectedState';
|
|
6
|
+
export { useFieldCursor } from './hooks/useFieldCursor';
|
|
5
7
|
export * from './utils';
|
|
6
8
|
export type { DateInputProps } from './DateInput';
|
|
7
9
|
export default DateInput;
|
package/esm/DateInput/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import DateInput from './DateInput';
|
|
3
|
-
export { useDateInputState } from './useDateInputState';
|
|
4
|
-
export { useKeyboardInputEvent } from './useKeyboardInputEvent';
|
|
5
|
-
export { useIsFocused } from './useIsFocused';
|
|
3
|
+
export { useDateInputState } from './hooks/useDateInputState';
|
|
4
|
+
export { useKeyboardInputEvent } from './hooks/useKeyboardInputEvent';
|
|
5
|
+
export { useIsFocused } from './hooks/useIsFocused';
|
|
6
|
+
export { useSelectedState } from './hooks/useSelectedState';
|
|
7
|
+
export { useFieldCursor } from './hooks/useFieldCursor';
|
|
6
8
|
export * from './utils';
|
|
7
9
|
export default DateInput;
|
package/esm/DateInput/utils.d.ts
CHANGED
|
@@ -58,6 +58,5 @@ export declare function getInputSelectedState(options: SelectedStateOptions): {
|
|
|
58
58
|
};
|
|
59
59
|
export declare function validateDateTime(type: string, value: number): boolean;
|
|
60
60
|
export declare function modifyDate(date: Date, type: string, value: number): Date;
|
|
61
|
-
export declare function isFieldFullValue(formatStr: string, value: number, pattern: string): boolean;
|
|
62
61
|
export declare function useInputSelection(input: React.RefObject<any>): (selectionStart: number, selectionEnd: number) => void;
|
|
63
62
|
export {};
|
package/esm/DateInput/utils.js
CHANGED
|
@@ -215,31 +215,10 @@ export function modifyDate(date, type, value) {
|
|
|
215
215
|
}
|
|
216
216
|
return date;
|
|
217
217
|
}
|
|
218
|
-
export function isFieldFullValue(formatStr, value, pattern) {
|
|
219
|
-
var patternGroup = getPatternGroups(formatStr, pattern);
|
|
220
|
-
if (value.toString().length === patternGroup.length) {
|
|
221
|
-
return true;
|
|
222
|
-
}
|
|
223
|
-
switch (pattern) {
|
|
224
|
-
case 'M':
|
|
225
|
-
return parseInt(value + "0") > 12;
|
|
226
|
-
case 'd':
|
|
227
|
-
return parseInt(value + "0") > 31;
|
|
228
|
-
case 'H':
|
|
229
|
-
return parseInt(value + "0") > 23;
|
|
230
|
-
case 'h':
|
|
231
|
-
return parseInt(value + "0") > 12;
|
|
232
|
-
case 'm':
|
|
233
|
-
case 's':
|
|
234
|
-
return parseInt(value + "0") > 59;
|
|
235
|
-
default:
|
|
236
|
-
return false;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
var isTestEnvironment = typeof process !== 'undefined' && undefined === 'test';
|
|
240
218
|
export function useInputSelection(input) {
|
|
241
219
|
return function setSelectionRange(selectionStart, selectionEnd) {
|
|
242
|
-
|
|
220
|
+
var isTest = input.current.dataset.test === 'true';
|
|
221
|
+
if (isTest) {
|
|
243
222
|
safeSetSelection(input.current, selectionStart, selectionEnd);
|
|
244
223
|
return;
|
|
245
224
|
}
|
|
@@ -5,7 +5,7 @@ import React, { useState, useRef, useMemo } from 'react';
|
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import Input from '../Input';
|
|
7
7
|
import { mergeRefs, useClassNames, useCustom, useControlled, useEventCallback } from '../utils';
|
|
8
|
-
import { validateDateTime,
|
|
8
|
+
import { validateDateTime, useDateInputState, useInputSelection, useKeyboardInputEvent, useIsFocused, useSelectedState, useFieldCursor } from '../DateInput';
|
|
9
9
|
import { getInputSelectedState, DateType, getDateType, isSwitchDateType } from './utils';
|
|
10
10
|
/**
|
|
11
11
|
* The DateRangeInput component lets users select a date with the keyboard.
|
|
@@ -34,13 +34,9 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
34
34
|
merge = _useClassNames.merge;
|
|
35
35
|
var classes = merge(className, withClassPrefix());
|
|
36
36
|
var inputRef = useRef();
|
|
37
|
-
var
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
selectionEnd: 0
|
|
41
|
-
}),
|
|
42
|
-
selectedState = _useState[0],
|
|
43
|
-
setSelectedState = _useState[1];
|
|
37
|
+
var _useSelectedState = useSelectedState(),
|
|
38
|
+
selectedState = _useSelectedState.selectedState,
|
|
39
|
+
setSelectedState = _useSelectedState.setSelectedState;
|
|
44
40
|
var _useCustom = useCustom('Calendar'),
|
|
45
41
|
locale = _useCustom.locale;
|
|
46
42
|
var rangeFormatStr = "" + formatStr + character + formatStr;
|
|
@@ -49,9 +45,9 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
49
45
|
value = _useControlled[0],
|
|
50
46
|
setValue = _useControlled[1],
|
|
51
47
|
isControlled = _useControlled[2];
|
|
52
|
-
var
|
|
53
|
-
dateType =
|
|
54
|
-
setDateType =
|
|
48
|
+
var _useState = useState(DateType.Start),
|
|
49
|
+
dateType = _useState[0],
|
|
50
|
+
setDateType = _useState[1];
|
|
55
51
|
var dateInputOptions = {
|
|
56
52
|
formatStr: formatStr,
|
|
57
53
|
locale: dateLocale,
|
|
@@ -63,6 +59,10 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
63
59
|
var endDateState = useDateInputState(_extends({}, dateInputOptions, {
|
|
64
60
|
date: (value === null || value === void 0 ? void 0 : value[1]) || null
|
|
65
61
|
}));
|
|
62
|
+
var _useFieldCursor = useFieldCursor(formatStr, valueProp),
|
|
63
|
+
isMoveCursor = _useFieldCursor.isMoveCursor,
|
|
64
|
+
increment = _useFieldCursor.increment,
|
|
65
|
+
reset = _useFieldCursor.reset;
|
|
66
66
|
var getActiveState = function getActiveState(type) {
|
|
67
67
|
if (type === void 0) {
|
|
68
68
|
type = dateType;
|
|
@@ -116,8 +116,9 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
116
116
|
input: input,
|
|
117
117
|
direction: direction
|
|
118
118
|
}));
|
|
119
|
-
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
120
119
|
setSelectedState(state);
|
|
120
|
+
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
121
|
+
reset();
|
|
121
122
|
});
|
|
122
123
|
var onSegmentValueChange = useEventCallback(function (event) {
|
|
123
124
|
var input = event.target;
|
|
@@ -140,6 +141,7 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
140
141
|
if (!pattern) {
|
|
141
142
|
return;
|
|
142
143
|
}
|
|
144
|
+
increment();
|
|
143
145
|
var field = getActiveState().getDateField(pattern);
|
|
144
146
|
var value = parseInt(key, 10);
|
|
145
147
|
var padValue = parseInt("" + (field.value || '') + key, 10);
|
|
@@ -149,10 +151,6 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
149
151
|
if (validateDateTime(field.name, padValue)) {
|
|
150
152
|
newValue = padValue;
|
|
151
153
|
}
|
|
152
|
-
if (pattern === 'M') {
|
|
153
|
-
// Month cannot be less than 1.
|
|
154
|
-
newValue = Math.max(1, newValue);
|
|
155
|
-
}
|
|
156
154
|
getActiveState().setDateField(pattern, newValue, function (date) {
|
|
157
155
|
return handleChange(date, event);
|
|
158
156
|
});
|
|
@@ -168,7 +166,7 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
168
166
|
setSelectionRange(nextState.selectionStart, nextState.selectionEnd);
|
|
169
167
|
|
|
170
168
|
// If the field is full value, move the cursor to the next field
|
|
171
|
-
if (
|
|
169
|
+
if (isMoveCursor(newValue, pattern) && input.selectionEnd !== input.value.length) {
|
|
172
170
|
onSegmentChange(event, 'right');
|
|
173
171
|
}
|
|
174
172
|
});
|
|
@@ -184,6 +182,7 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
184
182
|
getActiveState().setDateField(selectedState.selectedPattern, null, function (date) {
|
|
185
183
|
return handleChange(date, event);
|
|
186
184
|
});
|
|
185
|
+
reset();
|
|
187
186
|
}
|
|
188
187
|
});
|
|
189
188
|
var handleClick = useEventCallback(function (event) {
|
|
@@ -192,7 +191,7 @@ var DateRangeInput = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
192
191
|
return;
|
|
193
192
|
}
|
|
194
193
|
var cursorIndex = input.selectionStart === renderedValue.length ? 0 : input.selectionStart;
|
|
195
|
-
var dateType = getDateType(renderedValue, character, cursorIndex);
|
|
194
|
+
var dateType = getDateType(renderedValue || rangeFormatStr, character, cursorIndex);
|
|
196
195
|
var state = getInputSelectedState(_extends({}, keyPressOptions, {
|
|
197
196
|
dateType: dateType,
|
|
198
197
|
selectedMonth: getActiveState(dateType).dateField.month,
|
|
@@ -102,7 +102,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
102
102
|
prefix = _useClassNames.prefix;
|
|
103
103
|
var _useCustom = useCustom('DateRangePicker', overrideLocale),
|
|
104
104
|
locale = _useCustom.locale,
|
|
105
|
-
formatDate = _useCustom.formatDate;
|
|
105
|
+
formatDate = _useCustom.formatDate; // Default gap between two calendars, if `showOneCalendar` is set, the gap is 0
|
|
106
|
+
var calendarGap = showOneCalendar ? 0 : 1;
|
|
106
107
|
var rangeFormatStr = "" + formatStr + character + formatStr;
|
|
107
108
|
var _useControlled = useControlled(valueProp, defaultValue !== null && defaultValue !== void 0 ? defaultValue : null),
|
|
108
109
|
value = _useControlled[0],
|
|
@@ -129,7 +130,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
129
130
|
var _useState2 = useState((_ref = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue) !== null && _ref !== void 0 ? _ref : []),
|
|
130
131
|
selectedDates = _useState2[0],
|
|
131
132
|
setSelectedDates = _useState2[1]; // The date of the current hover, used to reduce the calculation of `handleMouseMove`
|
|
132
|
-
var _useState3 = useState(
|
|
133
|
+
var _useState3 = useState(value),
|
|
133
134
|
hoverDateRange = _useState3[0],
|
|
134
135
|
setHoverDateRange = _useState3[1]; // The displayed calendar panel is rendered based on this value.
|
|
135
136
|
var _useState4 = useState(getSafeCalendarDate({
|
|
@@ -165,14 +166,14 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
165
166
|
var nextValue = dateRange;
|
|
166
167
|
|
|
167
168
|
// The time should remain the same when the dates in the date range are changed.
|
|
168
|
-
if (shouldRenderTime(formatStr) && dateRange !== null && dateRange !== void 0 && dateRange.length && eventName
|
|
169
|
+
if (shouldRenderTime(formatStr) && dateRange !== null && dateRange !== void 0 && dateRange.length && (eventName === 'changeDate' || eventName === 'changeMonth')) {
|
|
169
170
|
var _startDate = copyTime({
|
|
170
171
|
from: getCalendarDatetime('start'),
|
|
171
172
|
to: dateRange[0]
|
|
172
173
|
});
|
|
173
174
|
var _endDate = copyTime({
|
|
174
175
|
from: getCalendarDatetime('end'),
|
|
175
|
-
to: dateRange.length === 1 ? addMonths(_startDate,
|
|
176
|
+
to: dateRange.length === 1 ? addMonths(_startDate, calendarGap) : dateRange[1]
|
|
176
177
|
});
|
|
177
178
|
nextValue = [_startDate, _endDate];
|
|
178
179
|
} else if (dateRange === null && typeof defaultCalendarValue !== 'undefined') {
|
|
@@ -182,7 +183,9 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
182
183
|
var nextCalendarDate = getSafeCalendarDate({
|
|
183
184
|
value: nextValue,
|
|
184
185
|
calendarKey: calendarKey,
|
|
185
|
-
|
|
186
|
+
// When only the month is displayed and only one calendar is displayed,
|
|
187
|
+
// there is no need to add a month and two calendar panels are allowed to display the same month
|
|
188
|
+
allowSameMonth: onlyShowMonth || showOneCalendar
|
|
186
189
|
});
|
|
187
190
|
setCalendarDate(nextCalendarDate);
|
|
188
191
|
if (onlyShowMonth && eventName === 'changeMonth') {
|
|
@@ -331,6 +334,11 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
331
334
|
} else {
|
|
332
335
|
setHoverDateRange([nextSelectDates[0], nextSelectDates[0]]);
|
|
333
336
|
}
|
|
337
|
+
if (isSelectedIdle) {
|
|
338
|
+
setActiveCalendarKey('end');
|
|
339
|
+
} else {
|
|
340
|
+
setActiveCalendarKey('start');
|
|
341
|
+
}
|
|
334
342
|
setSelectedDates(nextSelectDates);
|
|
335
343
|
setCalendarDateRange({
|
|
336
344
|
dateRange: nextSelectDates,
|
|
@@ -402,7 +410,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
402
410
|
if (value && value.length) {
|
|
403
411
|
var _startDate3 = value[0],
|
|
404
412
|
endData = value[1];
|
|
405
|
-
nextCalendarDate = [_startDate3, isSameMonth(_startDate3, endData) ? addMonths(endData,
|
|
413
|
+
nextCalendarDate = [_startDate3, isSameMonth(_startDate3, endData) ? addMonths(endData, calendarGap) : endData];
|
|
406
414
|
} else {
|
|
407
415
|
// Reset the date on the calendar to the default date
|
|
408
416
|
nextCalendarDate = getSafeCalendarDate({
|
|
@@ -731,11 +739,11 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
731
739
|
format: formatStr,
|
|
732
740
|
placeholder: placeholder ? placeholder : rangeFormatStr,
|
|
733
741
|
disabled: disabled,
|
|
734
|
-
onChange: handleInputChange,
|
|
735
742
|
readOnly: readOnly || !editable || loading,
|
|
736
743
|
plaintext: plaintext,
|
|
737
|
-
|
|
738
|
-
|
|
744
|
+
htmlSize: getInputHtmlSize(),
|
|
745
|
+
onChange: handleInputChange,
|
|
746
|
+
onKeyDown: handleInputKeyDown
|
|
739
747
|
})), /*#__PURE__*/React.createElement(PickerIndicator, {
|
|
740
748
|
loading: loading,
|
|
741
749
|
caretAs: caretAs,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DateRange } from './types';
|
|
2
|
-
export declare function getSafeCalendarDate({ value, calendarKey,
|
|
2
|
+
export declare function getSafeCalendarDate({ value, calendarKey, allowSameMonth }: {
|
|
3
3
|
value: [] | [Date] | [Date, Date] | null;
|
|
4
4
|
calendarKey?: 'start' | 'end';
|
|
5
|
-
|
|
5
|
+
allowSameMonth?: boolean;
|
|
6
6
|
}): DateRange;
|
|
7
7
|
export declare const isSameRange: (source: DateRange | null, dest: DateRange | null, format: string) => boolean;
|
|
8
8
|
export declare const getMonthHoverRange: (date: Date) => DateRange;
|
|
@@ -5,10 +5,10 @@ export function getSafeCalendarDate(_ref) {
|
|
|
5
5
|
var value = _ref.value,
|
|
6
6
|
_ref$calendarKey = _ref.calendarKey,
|
|
7
7
|
calendarKey = _ref$calendarKey === void 0 ? 'start' : _ref$calendarKey,
|
|
8
|
-
|
|
8
|
+
allowSameMonth = _ref.allowSameMonth;
|
|
9
9
|
// Update calendarDate if the value is not null
|
|
10
10
|
value = (_value = value) !== null && _value !== void 0 ? _value : [];
|
|
11
|
-
var gap =
|
|
11
|
+
var gap = allowSameMonth ? 0 : 1;
|
|
12
12
|
if (value[0] && value[1]) {
|
|
13
13
|
var diffMonth = differenceInCalendarMonths(value[1], value[0]);
|
|
14
14
|
if (calendarKey === 'start') {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rsuite",
|
|
3
|
-
"version": "5.60.
|
|
3
|
+
"version": "5.60.2",
|
|
4
4
|
"description": "A suite of react components",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"component",
|
|
18
18
|
"react-component"
|
|
19
19
|
],
|
|
20
|
-
"author": "
|
|
20
|
+
"author": "React Suite Team",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|
package/styles/variables.less
CHANGED
|
@@ -774,7 +774,6 @@
|
|
|
774
774
|
@date-range-picker-header-padding-vertical: 8px;
|
|
775
775
|
@date-range-picker-header-font-size: @font-size-base;
|
|
776
776
|
@date-range-picker-header-line-height: @line-height-base;
|
|
777
|
-
@date-range-picker-calendar-default-width: 255px;
|
|
778
777
|
|
|
779
778
|
// Input Picker
|
|
780
779
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|