rsuite 5.48.1 → 5.49.0
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 +14 -0
- package/Cascader/styles/index.less +1 -0
- package/DatePicker/styles/index.less +18 -11
- package/DateRangeInput/package.json +7 -0
- package/DateRangePicker/styles/index.less +10 -0
- package/InputGroup/styles/index.less +1 -0
- package/Picker/styles/index.less +20 -0
- package/README.md +32 -22
- package/Sidenav/styles/index.less +2 -0
- package/cjs/Calendar/CalendarContainer.d.ts +2 -0
- package/cjs/Calendar/CalendarContainer.js +11 -4
- package/cjs/Calendar/CalendarHeader.js +2 -0
- package/cjs/Calendar/MonthDropdown.js +7 -2
- package/cjs/Calendar/MonthDropdownItem.js +2 -2
- package/cjs/Calendar/Table.js +6 -1
- package/cjs/Calendar/TimeDropdown.js +17 -10
- package/cjs/Calendar/types.d.ts +1 -0
- package/cjs/CustomProvider/CustomProvider.d.ts +13 -0
- package/cjs/CustomProvider/CustomProvider.js +2 -2
- package/cjs/DateInput/DateField.d.ts +9 -31
- package/cjs/DateInput/DateField.js +61 -12
- package/cjs/DateInput/DateInput.d.ts +7 -2
- package/cjs/DateInput/DateInput.js +74 -92
- package/cjs/DateInput/index.d.ts +4 -0
- package/cjs/DateInput/index.js +19 -1
- package/cjs/DateInput/useDateInputState.d.ts +7 -31
- package/cjs/DateInput/useDateInputState.js +39 -15
- package/cjs/DateInput/useIsFocused.d.ts +7 -0
- package/cjs/DateInput/useIsFocused.js +28 -0
- package/cjs/DateInput/useKeyboardInputEvent.d.ts +10 -0
- package/cjs/DateInput/useKeyboardInputEvent.js +44 -0
- package/cjs/DateInput/utils.d.ts +23 -1
- package/cjs/DateInput/utils.js +155 -51
- package/cjs/DatePicker/DatePicker.d.ts +20 -7
- package/cjs/DatePicker/DatePicker.js +210 -241
- package/cjs/DatePicker/PickerIndicator.d.ts +10 -0
- package/cjs/DatePicker/PickerIndicator.js +48 -0
- package/cjs/DatePicker/PickerLabel.d.ts +9 -0
- package/cjs/DatePicker/PickerLabel.js +23 -0
- package/cjs/DatePicker/Toolbar.js +3 -21
- package/cjs/DatePicker/utils.d.ts +5 -1
- package/cjs/DatePicker/utils.js +17 -1
- package/cjs/DateRangeInput/DateRangeInput.d.ts +29 -0
- package/cjs/DateRangeInput/DateRangeInput.js +244 -0
- package/cjs/DateRangeInput/index.d.ts +3 -0
- package/cjs/DateRangeInput/index.js +9 -0
- package/cjs/DateRangeInput/utils.d.ts +61 -0
- package/cjs/DateRangeInput/utils.js +146 -0
- package/cjs/DateRangePicker/DateRangePicker.js +12 -2
- package/cjs/Input/Input.d.ts +11 -0
- package/cjs/Input/Input.js +11 -8
- package/cjs/Overlay/OverlayTrigger.d.ts +3 -0
- package/cjs/Overlay/OverlayTrigger.js +5 -0
- package/cjs/Picker/usePickerRef.d.ts +17 -0
- package/cjs/Picker/usePickerRef.js +82 -0
- package/cjs/index.d.ts +2 -0
- package/cjs/index.js +3 -1
- package/cjs/locales/index.d.ts +2 -2
- package/cjs/utils/index.d.ts +2 -0
- package/cjs/utils/index.js +8 -2
- package/cjs/utils/useCustom.js +1 -1
- package/cjs/utils/useIsomorphicLayoutEffect.d.ts +3 -0
- package/cjs/utils/useIsomorphicLayoutEffect.js +9 -0
- package/dist/rsuite-no-reset-rtl.css +51 -141
- 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 +51 -141
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +51 -9
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +51 -9
- package/dist/rsuite.js +4800 -246
- 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/Calendar/CalendarContainer.d.ts +2 -0
- package/esm/Calendar/CalendarContainer.js +12 -5
- package/esm/Calendar/CalendarHeader.js +2 -0
- package/esm/Calendar/MonthDropdown.js +7 -2
- package/esm/Calendar/MonthDropdownItem.js +2 -2
- package/esm/Calendar/Table.js +6 -1
- package/esm/Calendar/TimeDropdown.js +17 -10
- package/esm/Calendar/types.d.ts +1 -0
- package/esm/CustomProvider/CustomProvider.d.ts +13 -0
- package/esm/CustomProvider/CustomProvider.js +3 -3
- package/esm/DateInput/DateField.d.ts +9 -31
- package/esm/DateInput/DateField.js +61 -12
- package/esm/DateInput/DateInput.d.ts +7 -2
- package/esm/DateInput/DateInput.js +77 -95
- package/esm/DateInput/index.d.ts +4 -0
- package/esm/DateInput/index.js +4 -0
- package/esm/DateInput/useDateInputState.d.ts +7 -31
- package/esm/DateInput/useDateInputState.js +41 -18
- package/esm/DateInput/useIsFocused.d.ts +7 -0
- package/esm/DateInput/useIsFocused.js +22 -0
- package/esm/DateInput/useKeyboardInputEvent.d.ts +10 -0
- package/esm/DateInput/useKeyboardInputEvent.js +38 -0
- package/esm/DateInput/utils.d.ts +23 -1
- package/esm/DateInput/utils.js +150 -51
- package/esm/DatePicker/DatePicker.d.ts +20 -7
- package/esm/DatePicker/DatePicker.js +213 -244
- package/esm/DatePicker/PickerIndicator.d.ts +10 -0
- package/esm/DatePicker/PickerIndicator.js +42 -0
- package/esm/DatePicker/PickerLabel.d.ts +9 -0
- package/esm/DatePicker/PickerLabel.js +17 -0
- package/esm/DatePicker/Toolbar.js +3 -21
- package/esm/DatePicker/utils.d.ts +5 -1
- package/esm/DatePicker/utils.js +16 -1
- package/esm/DateRangeInput/DateRangeInput.d.ts +29 -0
- package/esm/DateRangeInput/DateRangeInput.js +237 -0
- package/esm/DateRangeInput/index.d.ts +3 -0
- package/esm/DateRangeInput/index.js +3 -0
- package/esm/DateRangeInput/utils.d.ts +61 -0
- package/esm/DateRangeInput/utils.js +137 -0
- package/esm/DateRangePicker/DateRangePicker.js +12 -2
- package/esm/Input/Input.d.ts +11 -0
- package/esm/Input/Input.js +12 -9
- package/esm/Overlay/OverlayTrigger.d.ts +3 -0
- package/esm/Overlay/OverlayTrigger.js +5 -0
- package/esm/Picker/usePickerRef.d.ts +17 -0
- package/esm/Picker/usePickerRef.js +77 -0
- package/esm/index.d.ts +2 -0
- package/esm/index.js +1 -0
- package/esm/locales/index.d.ts +2 -2
- package/esm/utils/index.d.ts +2 -0
- package/esm/utils/index.js +3 -1
- package/esm/utils/useCustom.js +2 -2
- package/esm/utils/useIsomorphicLayoutEffect.d.ts +3 -0
- package/esm/utils/useIsomorphicLayoutEffect.js +4 -0
- package/package.json +1 -1
- package/styles/color-modes/dark.less +1 -0
- package/styles/color-modes/high-contrast.less +1 -0
- package/styles/color-modes/light.less +1 -0
- package/styles/normalize.less +230 -231
|
@@ -8,6 +8,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
8
8
|
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
|
|
9
9
|
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
10
10
|
var _react = require("react");
|
|
11
|
+
var _isValid = _interopRequireDefault(require("date-fns/isValid"));
|
|
11
12
|
var _utils = require("./utils");
|
|
12
13
|
var patternMap = {
|
|
13
14
|
y: 'year',
|
|
@@ -33,7 +34,6 @@ var DateField = /*#__PURE__*/function (_Object) {
|
|
|
33
34
|
_this.hour = null;
|
|
34
35
|
_this.minute = null;
|
|
35
36
|
_this.second = null;
|
|
36
|
-
_this.meridian = null;
|
|
37
37
|
_this.format = format;
|
|
38
38
|
var formatArray = format.match(new RegExp('([y|d|M|H|h|m|s|a])+', 'ig')) || [];
|
|
39
39
|
_this.patternArray = formatArray.map(function (pattern) {
|
|
@@ -42,14 +42,13 @@ var DateField = /*#__PURE__*/function (_Object) {
|
|
|
42
42
|
key: patternMap[pattern[0]]
|
|
43
43
|
};
|
|
44
44
|
});
|
|
45
|
-
if (value) {
|
|
45
|
+
if (value && (0, _isValid.default)(value)) {
|
|
46
46
|
_this.year = value.getFullYear();
|
|
47
47
|
_this.month = value.getMonth() + 1;
|
|
48
48
|
_this.day = value.getDate();
|
|
49
49
|
_this.hour = value.getHours();
|
|
50
50
|
_this.minute = value.getMinutes();
|
|
51
51
|
_this.second = value.getSeconds();
|
|
52
|
-
_this.meridian = value.getHours() > 12 ? 'PM' : 'AM';
|
|
53
52
|
}
|
|
54
53
|
return _this;
|
|
55
54
|
}
|
|
@@ -97,10 +96,8 @@ var useDateField = function useDateField(format, localize, date) {
|
|
|
97
96
|
return (0, _extends2.default)({}, state, {
|
|
98
97
|
second: action.value
|
|
99
98
|
});
|
|
100
|
-
case '
|
|
101
|
-
return (
|
|
102
|
-
meridian: action.value
|
|
103
|
-
});
|
|
99
|
+
case 'setNewDate':
|
|
100
|
+
return new DateField(format, action.value);
|
|
104
101
|
default:
|
|
105
102
|
return state;
|
|
106
103
|
}
|
|
@@ -112,6 +109,7 @@ var useDateField = function useDateField(format, localize, date) {
|
|
|
112
109
|
dateField.patternArray.forEach(function (item) {
|
|
113
110
|
var key = item.key,
|
|
114
111
|
pattern = item.pattern;
|
|
112
|
+
var hour = dateField.hour;
|
|
115
113
|
var value = dateField[key];
|
|
116
114
|
if (value !== null) {
|
|
117
115
|
if (pattern === 'MMM' && typeof value === 'number') {
|
|
@@ -122,8 +120,12 @@ var useDateField = function useDateField(format, localize, date) {
|
|
|
122
120
|
value = localize === null || localize === void 0 ? void 0 : localize.month(value - 1, {
|
|
123
121
|
width: 'wide'
|
|
124
122
|
});
|
|
125
|
-
} else if (pattern === 'aa'
|
|
126
|
-
|
|
123
|
+
} else if (pattern === 'aa') {
|
|
124
|
+
if (typeof hour === 'number') {
|
|
125
|
+
value = hour > 12 ? 'PM' : 'AM';
|
|
126
|
+
} else {
|
|
127
|
+
value = 'aa';
|
|
128
|
+
}
|
|
127
129
|
} else if (pattern === 'hh' && typeof value === 'number') {
|
|
128
130
|
value = value === 0 ? 12 : value > 12 ? value - 12 : value;
|
|
129
131
|
}
|
|
@@ -135,17 +137,64 @@ var useDateField = function useDateField(format, localize, date) {
|
|
|
135
137
|
});
|
|
136
138
|
return str;
|
|
137
139
|
};
|
|
140
|
+
|
|
141
|
+
// Check if the field value is valid.
|
|
142
|
+
var validFieldValue = function validFieldValue(type, value) {
|
|
143
|
+
var _format$match;
|
|
144
|
+
var isValid = true;
|
|
145
|
+
(_format$match = format.match(new RegExp('([y|d|M|H|h|m|s])+', 'ig'))) === null || _format$match === void 0 ? void 0 : _format$match.forEach(function (pattern) {
|
|
146
|
+
var key = patternMap[pattern[0]];
|
|
147
|
+
var fieldValue = type === key ? value : dateField[key];
|
|
148
|
+
if (fieldValue === null) {
|
|
149
|
+
isValid = false;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
return isValid;
|
|
154
|
+
};
|
|
155
|
+
var isEmptyValue = function isEmptyValue(type, value) {
|
|
156
|
+
var _format$match2;
|
|
157
|
+
var checkValueArray = (_format$match2 = format.match(new RegExp('([y|d|M|H|h|m|s])+', 'ig'))) === null || _format$match2 === void 0 ? void 0 : _format$match2.map(function (pattern) {
|
|
158
|
+
var key = patternMap[pattern[0]];
|
|
159
|
+
var fieldValue = type === key ? value : dateField[key];
|
|
160
|
+
return fieldValue !== null;
|
|
161
|
+
});
|
|
162
|
+
return checkValueArray === null || checkValueArray === void 0 ? void 0 : checkValueArray.every(function (item) {
|
|
163
|
+
return item === false;
|
|
164
|
+
});
|
|
165
|
+
};
|
|
138
166
|
var toDate = function toDate(type, value) {
|
|
139
|
-
|
|
167
|
+
var year = dateField.year,
|
|
168
|
+
month = dateField.month,
|
|
169
|
+
day = dateField.day,
|
|
170
|
+
hour = dateField.hour,
|
|
171
|
+
minute = dateField.minute,
|
|
172
|
+
second = dateField.second;
|
|
173
|
+
var date = new Date(year || 0, typeof month === 'number' ? month - 1 : 0,
|
|
174
|
+
// The default day is 1 when the value is null, otherwise it becomes the last day of the month.
|
|
175
|
+
day || 1, hour || 0, minute || 0, second || 0);
|
|
176
|
+
if (typeof type === 'undefined' || typeof value === 'undefined') {
|
|
177
|
+
return date;
|
|
178
|
+
}
|
|
179
|
+
if (value === null || !validFieldValue(type, value)) {
|
|
180
|
+
if (isEmptyValue(type, value)) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
140
183
|
return new Date('');
|
|
141
184
|
}
|
|
142
|
-
|
|
185
|
+
if (type === 'meridian' && typeof hour === 'number') {
|
|
186
|
+
var newHour = hour > 12 ? hour - 12 : hour + 12;
|
|
187
|
+
type = 'hour';
|
|
188
|
+
value = newHour;
|
|
189
|
+
}
|
|
190
|
+
return (0, _utils.modifyDate)(date, type, value);
|
|
143
191
|
};
|
|
144
192
|
return {
|
|
145
193
|
dateField: dateField,
|
|
146
194
|
dispatch: dispatch,
|
|
147
195
|
toDate: toDate,
|
|
148
|
-
toDateString: toDateString
|
|
196
|
+
toDateString: toDateString,
|
|
197
|
+
isEmptyValue: isEmptyValue
|
|
149
198
|
};
|
|
150
199
|
};
|
|
151
200
|
exports.useDateField = useDateField;
|
|
@@ -3,11 +3,16 @@ import { InputProps } from '../Input';
|
|
|
3
3
|
import { FormControlBaseProps } from '../@types/common';
|
|
4
4
|
export interface DateInputProps extends Omit<InputProps, 'value' | 'onChange' | 'defaultValue'>, FormControlBaseProps<Date | null> {
|
|
5
5
|
/**
|
|
6
|
-
* Format of the date when rendered in the input.
|
|
7
|
-
*
|
|
6
|
+
* Format of the date when rendered in the input. Format of the string is based on Unicode Technical Standard.
|
|
7
|
+
*
|
|
8
|
+
* @see https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
|
|
8
9
|
* @default 'yyyy-MM-dd'
|
|
9
10
|
**/
|
|
10
11
|
format?: string;
|
|
12
|
+
/**
|
|
13
|
+
* The `placeholder` prop defines the text displayed in a form control when the control has no value.
|
|
14
|
+
*/
|
|
15
|
+
placeholder?: string;
|
|
11
16
|
}
|
|
12
17
|
/**
|
|
13
18
|
* The DateInput component lets users select a date with the keyboard.
|
|
@@ -8,11 +8,13 @@ exports.default = void 0;
|
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
12
|
var _Input = _interopRequireDefault(require("../Input"));
|
|
12
13
|
var _utils = require("../utils");
|
|
13
14
|
var _utils2 = require("./utils");
|
|
14
15
|
var _useDateInputState2 = _interopRequireDefault(require("./useDateInputState"));
|
|
15
|
-
var
|
|
16
|
+
var _useKeyboardInputEvent = _interopRequireDefault(require("./useKeyboardInputEvent"));
|
|
17
|
+
var _useIsFocused2 = _interopRequireDefault(require("./useIsFocused"));
|
|
16
18
|
/**
|
|
17
19
|
* The DateInput component lets users select a date with the keyboard.
|
|
18
20
|
* @version 5.58.0
|
|
@@ -23,9 +25,12 @@ var DateInput = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
23
25
|
formatStr = _props$format === void 0 ? 'yyyy-MM-dd' : _props$format,
|
|
24
26
|
valueProp = props.value,
|
|
25
27
|
defaultValue = props.defaultValue,
|
|
28
|
+
placeholder = props.placeholder,
|
|
26
29
|
onChange = props.onChange,
|
|
27
30
|
onKeyDown = props.onKeyDown,
|
|
28
|
-
|
|
31
|
+
onBlur = props.onBlur,
|
|
32
|
+
onFocus = props.onFocus,
|
|
33
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["format", "value", "defaultValue", "placeholder", "onChange", "onKeyDown", "onBlur", "onFocus"]);
|
|
29
34
|
var inputRef = (0, _react.useRef)();
|
|
30
35
|
var _useState = (0, _react.useState)({
|
|
31
36
|
selectedPattern: 'y',
|
|
@@ -36,14 +41,14 @@ var DateInput = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
36
41
|
setSelectedState = _useState[1];
|
|
37
42
|
var _useCustom = (0, _utils.useCustom)('Calendar'),
|
|
38
43
|
locale = _useCustom.locale;
|
|
39
|
-
var
|
|
44
|
+
var dateLocale = locale.dateLocale;
|
|
40
45
|
var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue),
|
|
41
46
|
value = _useControlled[0],
|
|
42
47
|
setValue = _useControlled[1],
|
|
43
48
|
isControlled = _useControlled[2];
|
|
44
49
|
var _useDateInputState = (0, _useDateInputState2.default)({
|
|
45
50
|
formatStr: formatStr,
|
|
46
|
-
|
|
51
|
+
locale: dateLocale,
|
|
47
52
|
date: value,
|
|
48
53
|
isControlledDate: isControlled
|
|
49
54
|
}),
|
|
@@ -51,49 +56,36 @@ var DateInput = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
51
56
|
setDateOffset = _useDateInputState.setDateOffset,
|
|
52
57
|
setDateField = _useDateInputState.setDateField,
|
|
53
58
|
getDateField = _useDateInputState.getDateField,
|
|
54
|
-
toDateString = _useDateInputState.toDateString
|
|
59
|
+
toDateString = _useDateInputState.toDateString,
|
|
60
|
+
isEmptyValue = _useDateInputState.isEmptyValue;
|
|
55
61
|
var dateString = toDateString();
|
|
56
62
|
var keyPressOptions = (0, _react.useMemo)(function () {
|
|
57
63
|
return {
|
|
58
64
|
formatStr: formatStr,
|
|
59
|
-
localize: localize,
|
|
65
|
+
localize: dateLocale.localize,
|
|
60
66
|
selectedMonth: dateField.month,
|
|
61
67
|
dateString: dateString
|
|
62
68
|
};
|
|
63
|
-
}, [dateField, dateString, formatStr,
|
|
64
|
-
var
|
|
65
|
-
if (selectionStart === void 0) {
|
|
66
|
-
selectionStart = selectedState.selectionStart;
|
|
67
|
-
}
|
|
68
|
-
if (selectionEnd === void 0) {
|
|
69
|
-
selectionEnd = selectedState.selectionEnd;
|
|
70
|
-
}
|
|
71
|
-
var input = inputRef === null || inputRef === void 0 ? void 0 : inputRef.current;
|
|
72
|
-
if (isTestEnvironment) {
|
|
73
|
-
(0, _utils.safeSetSelection)(input, selectionStart, selectionEnd);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
requestAnimationFrame(function () {
|
|
77
|
-
(0, _utils.safeSetSelection)(input, selectionStart, selectionEnd);
|
|
78
|
-
});
|
|
79
|
-
}, [selectedState]);
|
|
80
|
-
var handleChange = (0, _react.useCallback)(function (value, event) {
|
|
81
|
-
setValue(value);
|
|
69
|
+
}, [dateField, dateString, formatStr, dateLocale]);
|
|
70
|
+
var handleChange = (0, _utils.useEventCallback)(function (value, event) {
|
|
82
71
|
onChange === null || onChange === void 0 ? void 0 : onChange(value, event);
|
|
83
|
-
|
|
84
|
-
|
|
72
|
+
setValue(value);
|
|
73
|
+
});
|
|
74
|
+
var setSelectionRange = (0, _utils2.useInputSelection)(inputRef);
|
|
75
|
+
var onSegmentChange = (0, _utils.useEventCallback)(function (event, nextDirection) {
|
|
85
76
|
var input = event.target;
|
|
86
|
-
var
|
|
77
|
+
var key = event.key;
|
|
78
|
+
var direction = nextDirection || (key === 'ArrowRight' ? 'right' : 'left');
|
|
87
79
|
var state = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
88
80
|
input: input,
|
|
89
81
|
direction: direction
|
|
90
82
|
}));
|
|
91
83
|
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
92
84
|
setSelectedState(state);
|
|
93
|
-
}
|
|
94
|
-
var
|
|
95
|
-
var key = event.key;
|
|
85
|
+
});
|
|
86
|
+
var onSegmentValueChange = (0, _utils.useEventCallback)(function (event) {
|
|
96
87
|
var input = event.target;
|
|
88
|
+
var key = event.key;
|
|
97
89
|
var offset = key === 'ArrowUp' ? 1 : -1;
|
|
98
90
|
var state = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
99
91
|
input: input,
|
|
@@ -104,31 +96,10 @@ var DateInput = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
104
96
|
return handleChange(date, event);
|
|
105
97
|
});
|
|
106
98
|
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
107
|
-
}
|
|
108
|
-
var
|
|
109
|
-
var patternGroup = (0, _utils2.getPatternGroups)(formatStr, pattern);
|
|
110
|
-
if (value.toString().length === patternGroup.length) {
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
switch (pattern) {
|
|
114
|
-
case 'M':
|
|
115
|
-
return parseInt(value + "0") > 12;
|
|
116
|
-
case 'd':
|
|
117
|
-
return parseInt(value + "0") > 31;
|
|
118
|
-
case 'H':
|
|
119
|
-
return parseInt(value + "0") > 23;
|
|
120
|
-
case 'h':
|
|
121
|
-
return parseInt(value + "0") > 12;
|
|
122
|
-
case 'm':
|
|
123
|
-
case 's':
|
|
124
|
-
return parseInt(value + "0") > 59;
|
|
125
|
-
default:
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
}, [formatStr]);
|
|
129
|
-
var handleChangeFieldValueWithNumericKeys = (0, _react.useCallback)(function (event) {
|
|
130
|
-
var key = event.key;
|
|
99
|
+
});
|
|
100
|
+
var onSegmentValueChangeWithNumericKeys = (0, _utils.useEventCallback)(function (event) {
|
|
131
101
|
var input = event.target;
|
|
102
|
+
var key = event.key;
|
|
132
103
|
var pattern = selectedState.selectedPattern;
|
|
133
104
|
if (!pattern) {
|
|
134
105
|
return;
|
|
@@ -161,62 +132,73 @@ var DateInput = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
161
132
|
setSelectionRange(nextState.selectionStart, nextState.selectionEnd);
|
|
162
133
|
|
|
163
134
|
// If the field is full value, move the cursor to the next field
|
|
164
|
-
if (isFieldFullValue(newValue, pattern) && input.selectionEnd !== input.value.length) {
|
|
165
|
-
|
|
135
|
+
if ((0, _utils2.isFieldFullValue)(formatStr, newValue, pattern) && input.selectionEnd !== input.value.length) {
|
|
136
|
+
onSegmentChange(event, 'right');
|
|
166
137
|
}
|
|
167
|
-
}
|
|
168
|
-
var
|
|
138
|
+
});
|
|
139
|
+
var onSegmentValueRemove = (0, _utils.useEventCallback)(function (event) {
|
|
140
|
+
var input = event.target;
|
|
169
141
|
if (selectedState.selectedPattern) {
|
|
142
|
+
var nextState = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
143
|
+
input: input,
|
|
144
|
+
valueOffset: null
|
|
145
|
+
}));
|
|
146
|
+
setSelectedState(nextState);
|
|
147
|
+
setSelectionRange(nextState.selectionStart, nextState.selectionEnd);
|
|
170
148
|
setDateField(selectedState.selectedPattern, null, function (date) {
|
|
171
149
|
return handleChange(date, event);
|
|
172
150
|
});
|
|
173
|
-
setSelectionRange();
|
|
174
151
|
}
|
|
175
|
-
}
|
|
176
|
-
var
|
|
177
|
-
var _key$match;
|
|
178
|
-
var key = event.key;
|
|
179
|
-
switch (key) {
|
|
180
|
-
case 'ArrowRight':
|
|
181
|
-
case 'ArrowLeft':
|
|
182
|
-
handleChangeField(event);
|
|
183
|
-
event.preventDefault();
|
|
184
|
-
break;
|
|
185
|
-
case 'ArrowUp':
|
|
186
|
-
case 'ArrowDown':
|
|
187
|
-
handleChangeFieldValue(event);
|
|
188
|
-
event.preventDefault();
|
|
189
|
-
break;
|
|
190
|
-
case 'Backspace':
|
|
191
|
-
handleRemoveFieldValue(event);
|
|
192
|
-
event.preventDefault();
|
|
193
|
-
break;
|
|
194
|
-
case (_key$match = key.match(/\d/)) === null || _key$match === void 0 ? void 0 : _key$match.input:
|
|
195
|
-
handleChangeFieldValueWithNumericKeys(event);
|
|
196
|
-
event.preventDefault();
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
|
|
200
|
-
};
|
|
201
|
-
var handleClick = (0, _react.useCallback)(function (event) {
|
|
152
|
+
});
|
|
153
|
+
var handleClick = (0, _utils.useEventCallback)(function (event) {
|
|
202
154
|
var input = event.target;
|
|
203
155
|
var state = (0, _utils2.getInputSelectedState)((0, _extends2.default)({}, keyPressOptions, {
|
|
204
156
|
input: input
|
|
205
157
|
}));
|
|
206
158
|
setSelectedState(state);
|
|
207
159
|
setSelectionRange(state.selectionStart, state.selectionEnd);
|
|
208
|
-
}
|
|
160
|
+
});
|
|
161
|
+
var onKeyboardInput = (0, _useKeyboardInputEvent.default)({
|
|
162
|
+
onSegmentChange: onSegmentChange,
|
|
163
|
+
onSegmentValueChange: onSegmentValueChange,
|
|
164
|
+
onSegmentValueChangeWithNumericKeys: onSegmentValueChangeWithNumericKeys,
|
|
165
|
+
onSegmentValueRemove: onSegmentValueRemove,
|
|
166
|
+
onKeyDown: onKeyDown
|
|
167
|
+
});
|
|
168
|
+
var _useIsFocused = (0, _useIsFocused2.default)({
|
|
169
|
+
onBlur: onBlur,
|
|
170
|
+
onFocus: onFocus
|
|
171
|
+
}),
|
|
172
|
+
focused = _useIsFocused[0],
|
|
173
|
+
focusEventProps = _useIsFocused[1];
|
|
174
|
+
var renderedValue = (0, _react.useMemo)(function () {
|
|
175
|
+
if (!isEmptyValue()) {
|
|
176
|
+
return dateString;
|
|
177
|
+
}
|
|
178
|
+
return !focused ? '' : dateString;
|
|
179
|
+
}, [dateString, focused, isEmptyValue]);
|
|
209
180
|
return /*#__PURE__*/_react.default.createElement(_Input.default, (0, _extends2.default)({
|
|
210
|
-
inputMode:
|
|
181
|
+
inputMode: focused ? 'numeric' : 'text',
|
|
211
182
|
autoComplete: "off",
|
|
212
183
|
autoCorrect: "off",
|
|
213
184
|
spellCheck: false,
|
|
214
185
|
ref: (0, _utils.mergeRefs)(inputRef, ref),
|
|
215
|
-
onKeyDown:
|
|
186
|
+
onKeyDown: onKeyboardInput,
|
|
216
187
|
onClick: handleClick,
|
|
217
|
-
value:
|
|
218
|
-
|
|
188
|
+
value: renderedValue,
|
|
189
|
+
placeholder: placeholder || formatStr
|
|
190
|
+
}, focusEventProps, rest));
|
|
219
191
|
});
|
|
220
192
|
DateInput.displayName = 'DateInput';
|
|
193
|
+
DateInput.propTypes = {
|
|
194
|
+
defaultValue: _propTypes.default.instanceOf(Date),
|
|
195
|
+
format: _propTypes.default.string,
|
|
196
|
+
value: _propTypes.default.instanceOf(Date),
|
|
197
|
+
placeholder: _propTypes.default.string,
|
|
198
|
+
onChange: _propTypes.default.func,
|
|
199
|
+
onKeyDown: _propTypes.default.func,
|
|
200
|
+
onBlur: _propTypes.default.func,
|
|
201
|
+
onFocus: _propTypes.default.func
|
|
202
|
+
};
|
|
221
203
|
var _default = DateInput;
|
|
222
204
|
exports.default = _default;
|
package/cjs/DateInput/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import DateInput from './DateInput';
|
|
2
|
+
export { useDateInputState } from './useDateInputState';
|
|
3
|
+
export { useKeyboardInputEvent } from './useKeyboardInputEvent';
|
|
4
|
+
export { useIsFocused } from './useIsFocused';
|
|
5
|
+
export * from './utils';
|
|
2
6
|
export type { DateInputProps } from './DateInput';
|
|
3
7
|
export default DateInput;
|
package/cjs/DateInput/index.js
CHANGED
|
@@ -3,7 +3,25 @@
|
|
|
3
3
|
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
useDateInputState: true,
|
|
8
|
+
useKeyboardInputEvent: true,
|
|
9
|
+
useIsFocused: true
|
|
10
|
+
};
|
|
11
|
+
exports.default = exports.useIsFocused = exports.useKeyboardInputEvent = exports.useDateInputState = void 0;
|
|
7
12
|
var _DateInput = _interopRequireDefault(require("./DateInput"));
|
|
13
|
+
var _useDateInputState = require("./useDateInputState");
|
|
14
|
+
exports.useDateInputState = _useDateInputState.useDateInputState;
|
|
15
|
+
var _useKeyboardInputEvent = require("./useKeyboardInputEvent");
|
|
16
|
+
exports.useKeyboardInputEvent = _useKeyboardInputEvent.useKeyboardInputEvent;
|
|
17
|
+
var _useIsFocused = require("./useIsFocused");
|
|
18
|
+
exports.useIsFocused = _useIsFocused.useIsFocused;
|
|
19
|
+
var _utils = require("./utils");
|
|
20
|
+
Object.keys(_utils).forEach(function (key) {
|
|
21
|
+
if (key === "default" || key === "__esModule") return;
|
|
22
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
23
|
+
if (key in exports && exports[key] === _utils[key]) return;
|
|
24
|
+
exports[key] = _utils[key];
|
|
25
|
+
});
|
|
8
26
|
var _default = _DateInput.default;
|
|
9
27
|
exports.default = _default;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { format } from '../utils/dateUtils';
|
|
1
2
|
import type { Locale } from 'date-fns';
|
|
2
3
|
interface DateInputState {
|
|
3
4
|
formatStr: string;
|
|
4
|
-
|
|
5
|
+
formatDate?: typeof format;
|
|
6
|
+
locale: Locale;
|
|
5
7
|
date?: Date | null;
|
|
6
8
|
isControlledDate?: boolean;
|
|
7
9
|
}
|
|
8
|
-
declare function useDateInputState({ formatStr,
|
|
10
|
+
export declare function useDateInputState({ formatStr, locale, date, isControlledDate }: DateInputState): {
|
|
9
11
|
dateField: {
|
|
10
12
|
year: any;
|
|
11
13
|
format: string;
|
|
@@ -18,7 +20,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
18
20
|
hour: number | null;
|
|
19
21
|
minute: number | null;
|
|
20
22
|
second: number | null;
|
|
21
|
-
meridian: "AM" | "PM" | null;
|
|
22
23
|
constructor: Function;
|
|
23
24
|
toString(): string;
|
|
24
25
|
toLocaleString(): string;
|
|
@@ -39,7 +40,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
39
40
|
hour: number | null;
|
|
40
41
|
minute: number | null;
|
|
41
42
|
second: number | null;
|
|
42
|
-
meridian: "AM" | "PM" | null;
|
|
43
43
|
constructor: Function;
|
|
44
44
|
toString(): string;
|
|
45
45
|
toLocaleString(): string;
|
|
@@ -60,7 +60,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
60
60
|
hour: number | null;
|
|
61
61
|
minute: number | null;
|
|
62
62
|
second: number | null;
|
|
63
|
-
meridian: "AM" | "PM" | null;
|
|
64
63
|
constructor: Function;
|
|
65
64
|
toString(): string;
|
|
66
65
|
toLocaleString(): string;
|
|
@@ -81,7 +80,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
81
80
|
day: number | null;
|
|
82
81
|
minute: number | null;
|
|
83
82
|
second: number | null;
|
|
84
|
-
meridian: "AM" | "PM" | null;
|
|
85
83
|
constructor: Function;
|
|
86
84
|
toString(): string;
|
|
87
85
|
toLocaleString(): string;
|
|
@@ -102,7 +100,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
102
100
|
day: number | null;
|
|
103
101
|
hour: number | null;
|
|
104
102
|
second: number | null;
|
|
105
|
-
meridian: "AM" | "PM" | null;
|
|
106
103
|
constructor: Function;
|
|
107
104
|
toString(): string;
|
|
108
105
|
toLocaleString(): string;
|
|
@@ -123,28 +120,6 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
123
120
|
day: number | null;
|
|
124
121
|
hour: number | null;
|
|
125
122
|
minute: number | null;
|
|
126
|
-
meridian: "AM" | "PM" | null;
|
|
127
|
-
constructor: Function;
|
|
128
|
-
toString(): string;
|
|
129
|
-
toLocaleString(): string;
|
|
130
|
-
valueOf(): Object;
|
|
131
|
-
hasOwnProperty(v: PropertyKey): boolean;
|
|
132
|
-
isPrototypeOf(v: Object): boolean;
|
|
133
|
-
propertyIsEnumerable(v: PropertyKey): boolean;
|
|
134
|
-
should: Chai.Assertion;
|
|
135
|
-
} | {
|
|
136
|
-
meridian: any;
|
|
137
|
-
format: string;
|
|
138
|
-
patternArray: {
|
|
139
|
-
pattern: string;
|
|
140
|
-
key: string;
|
|
141
|
-
}[];
|
|
142
|
-
year: number | null;
|
|
143
|
-
month: number | null;
|
|
144
|
-
day: number | null;
|
|
145
|
-
hour: number | null;
|
|
146
|
-
minute: number | null;
|
|
147
|
-
second: number | null;
|
|
148
123
|
constructor: Function;
|
|
149
124
|
toString(): string;
|
|
150
125
|
toLocaleString(): string;
|
|
@@ -154,12 +129,13 @@ declare function useDateInputState({ formatStr, localize, date, isControlledDate
|
|
|
154
129
|
propertyIsEnumerable(v: PropertyKey): boolean;
|
|
155
130
|
should: Chai.Assertion;
|
|
156
131
|
};
|
|
157
|
-
setDateOffset: (pattern: string, offset: number, callback?: ((newDate: Date) => void) | undefined) => void;
|
|
158
|
-
setDateField: (pattern: string, value: number | null, callback?: ((newDate: Date) => void) | undefined) => void;
|
|
132
|
+
setDateOffset: (pattern: string, offset: number, callback?: ((newDate: Date | null) => void) | undefined) => void;
|
|
133
|
+
setDateField: (pattern: string, value: number | null, callback?: ((newDate: Date | null) => void) | undefined) => void;
|
|
159
134
|
getDateField: (pattern: string) => {
|
|
160
135
|
name: any;
|
|
161
136
|
value: any;
|
|
162
137
|
};
|
|
163
138
|
toDateString: () => string;
|
|
139
|
+
isEmptyValue: (type?: string | undefined, value?: number | null | undefined) => boolean | undefined;
|
|
164
140
|
};
|
|
165
141
|
export default useDateInputState;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
+
exports.useDateInputState = useDateInputState;
|
|
6
7
|
exports.default = void 0;
|
|
7
8
|
var _react = require("react");
|
|
8
9
|
var _startCase = _interopRequireDefault(require("lodash/startCase"));
|
|
@@ -10,15 +11,16 @@ var _dateUtils = require("../utils/dateUtils");
|
|
|
10
11
|
var _DateField = require("./DateField");
|
|
11
12
|
function useDateInputState(_ref) {
|
|
12
13
|
var formatStr = _ref.formatStr,
|
|
13
|
-
|
|
14
|
+
locale = _ref.locale,
|
|
14
15
|
date = _ref.date,
|
|
15
16
|
isControlledDate = _ref.isControlledDate;
|
|
16
|
-
var _useDateField = (0, _DateField.useDateField)(formatStr, localize, date),
|
|
17
|
+
var _useDateField = (0, _DateField.useDateField)(formatStr, locale.localize, date),
|
|
17
18
|
dateField = _useDateField.dateField,
|
|
18
19
|
dispatch = _useDateField.dispatch,
|
|
19
20
|
toDateString = _useDateField.toDateString,
|
|
20
|
-
toDate = _useDateField.toDate
|
|
21
|
-
|
|
21
|
+
toDate = _useDateField.toDate,
|
|
22
|
+
isEmptyValue = _useDateField.isEmptyValue;
|
|
23
|
+
var setDateOffset = function setDateOffset(pattern, offset, callback) {
|
|
22
24
|
var currentDate = new Date();
|
|
23
25
|
var year = dateField.year || currentDate.getFullYear();
|
|
24
26
|
var month = dateField.month ? dateField.month - 1 : currentDate.getMonth();
|
|
@@ -61,8 +63,8 @@ function useDateInputState(_ref) {
|
|
|
61
63
|
value = (0, _dateUtils.addSeconds)(new Date(year, month, day, hour, minute, second), offset).getSeconds();
|
|
62
64
|
break;
|
|
63
65
|
case 'a':
|
|
64
|
-
actionName = '
|
|
65
|
-
value =
|
|
66
|
+
actionName = 'setHour';
|
|
67
|
+
value = hour >= 12 ? hour - 12 : hour + 12;
|
|
66
68
|
break;
|
|
67
69
|
}
|
|
68
70
|
if (actionName && value) {
|
|
@@ -73,8 +75,8 @@ function useDateInputState(_ref) {
|
|
|
73
75
|
var field = _DateField.patternMap[pattern];
|
|
74
76
|
callback === null || callback === void 0 ? void 0 : callback(toDate(field, value));
|
|
75
77
|
}
|
|
76
|
-
}
|
|
77
|
-
var setDateField =
|
|
78
|
+
};
|
|
79
|
+
var setDateField = function setDateField(pattern, value, callback) {
|
|
78
80
|
var field = _DateField.patternMap[pattern];
|
|
79
81
|
var actionName = "set" + (0, _startCase.default)(field);
|
|
80
82
|
dispatch({
|
|
@@ -82,23 +84,45 @@ function useDateInputState(_ref) {
|
|
|
82
84
|
value: value
|
|
83
85
|
});
|
|
84
86
|
callback === null || callback === void 0 ? void 0 : callback(toDate(field, value));
|
|
85
|
-
}
|
|
86
|
-
var getDateField =
|
|
87
|
+
};
|
|
88
|
+
var getDateField = function getDateField(pattern) {
|
|
87
89
|
var fieldName = _DateField.patternMap[pattern];
|
|
88
90
|
return {
|
|
89
91
|
name: fieldName,
|
|
90
92
|
value: dateField[fieldName]
|
|
91
93
|
};
|
|
92
|
-
}
|
|
93
|
-
var toControlledDateString =
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
};
|
|
95
|
+
var toControlledDateString = function toControlledDateString() {
|
|
96
|
+
if (date && (0, _dateUtils.isValid)(date)) {
|
|
97
|
+
return (0, _dateUtils.format)(date, formatStr, {
|
|
98
|
+
locale: locale
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// if date is not valid, return uncontrolled date string
|
|
102
|
+
return toDateString();
|
|
103
|
+
};
|
|
104
|
+
(0, _react.useEffect)(function () {
|
|
105
|
+
if (isControlledDate) {
|
|
106
|
+
if (date && (0, _dateUtils.isValid)(date)) {
|
|
107
|
+
dispatch({
|
|
108
|
+
type: 'setNewDate',
|
|
109
|
+
value: date
|
|
110
|
+
});
|
|
111
|
+
} else if (date === null) {
|
|
112
|
+
dispatch({
|
|
113
|
+
type: 'setNewDate',
|
|
114
|
+
value: null
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}, [date, dispatch, isControlledDate]);
|
|
96
119
|
return {
|
|
97
120
|
dateField: dateField,
|
|
98
121
|
setDateOffset: setDateOffset,
|
|
99
122
|
setDateField: setDateField,
|
|
100
123
|
getDateField: getDateField,
|
|
101
|
-
toDateString: isControlledDate ? toControlledDateString : toDateString
|
|
124
|
+
toDateString: isControlledDate ? toControlledDateString : toDateString,
|
|
125
|
+
isEmptyValue: isEmptyValue
|
|
102
126
|
};
|
|
103
127
|
}
|
|
104
128
|
var _default = useDateInputState;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface FocusEventOptions {
|
|
3
|
+
onFocus?: React.FocusEventHandler<HTMLInputElement>;
|
|
4
|
+
onBlur?: React.FocusEventHandler<HTMLInputElement>;
|
|
5
|
+
}
|
|
6
|
+
export declare function useIsFocused({ onFocus: onFocusProp, onBlur: onBlurProp }: FocusEventOptions): [boolean, FocusEventOptions];
|
|
7
|
+
export default useIsFocused;
|