rsuite 5.19.1 → 5.20.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 +11 -0
- package/Picker/styles/index.less +4 -0
- package/cjs/DatePicker/DatePicker.js +9 -0
- package/cjs/Form/Form.js +44 -38
- package/cjs/Overlay/OverlayTrigger.d.ts +10 -1
- package/cjs/Overlay/OverlayTrigger.js +26 -4
- package/cjs/Picker/PickerToggle.d.ts +1 -0
- package/cjs/Picker/PickerToggle.js +24 -8
- package/cjs/Picker/PickerToggleTrigger.d.ts +1 -1
- package/cjs/Picker/PickerToggleTrigger.js +4 -2
- package/cjs/SelectPicker/SelectPicker.d.ts +2 -0
- package/dist/rsuite-rtl.css +3 -0
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +3 -0
- package/dist/rsuite.js +50 -50
- 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/DatePicker/DatePicker.js +8 -0
- package/esm/Form/Form.js +44 -38
- package/esm/Overlay/OverlayTrigger.d.ts +10 -1
- package/esm/Overlay/OverlayTrigger.js +23 -3
- package/esm/Picker/PickerToggle.d.ts +1 -0
- package/esm/Picker/PickerToggle.js +22 -8
- package/esm/Picker/PickerToggleTrigger.d.ts +1 -1
- package/esm/Picker/PickerToggleTrigger.js +4 -2
- package/esm/SelectPicker/SelectPicker.d.ts +2 -0
- package/package.json +3 -3
|
@@ -12,6 +12,7 @@ import useCalendarDate from '../Calendar/useCalendarDate';
|
|
|
12
12
|
import Toolbar from './Toolbar';
|
|
13
13
|
import { composeFunctions, createChainedFunction, DateUtils, mergeRefs, useClassNames, useControlled, useCustom } from '../utils';
|
|
14
14
|
import { PickerOverlay, pickerPropTypes, PickerToggle, PickerToggleTrigger, pickTriggerPropKeys, omitTriggerPropKeys, usePickerClassName, usePublicMethods, useToggleKeyDownEvent } from '../Picker';
|
|
15
|
+
import { OverlayCloseCause } from '../Overlay/OverlayTrigger';
|
|
15
16
|
var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
16
17
|
var _props$as = props.as,
|
|
17
18
|
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
@@ -390,6 +391,13 @@ var DatePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
390
391
|
pickerProps: pick(props, pickTriggerPropKeys),
|
|
391
392
|
ref: triggerRef,
|
|
392
393
|
placement: placement,
|
|
394
|
+
onClose: function onClose(cause) {
|
|
395
|
+
// Unless overlay is closing on user clicking "OK" button,
|
|
396
|
+
// reset the selected date on calendar panel
|
|
397
|
+
if (cause !== OverlayCloseCause.ImperativeHandle) {
|
|
398
|
+
resetCalendarDate();
|
|
399
|
+
}
|
|
400
|
+
},
|
|
393
401
|
onEntered: createChainedFunction(handleEntered, onEntered),
|
|
394
402
|
onExited: createChainedFunction(handleExited, onExited),
|
|
395
403
|
speaker: renderDropdownMenu
|
package/esm/Form/Form.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
-
import React, { useMemo, useCallback,
|
|
3
|
+
import React, { useMemo, useCallback, useImperativeHandle, useRef } from 'react';
|
|
4
4
|
import PropTypes from 'prop-types';
|
|
5
|
-
import isUndefined from 'lodash/isUndefined';
|
|
6
5
|
import omit from 'lodash/omit';
|
|
7
6
|
import { SchemaModel } from 'schema-typed';
|
|
8
7
|
import FormContext, { FormValueContext } from './FormContext';
|
|
@@ -13,6 +12,7 @@ import FormGroup from '../FormGroup';
|
|
|
13
12
|
import FormHelpText from '../FormHelpText';
|
|
14
13
|
import { useFormClassNames } from './useFormClassNames';
|
|
15
14
|
import useSchemaModel from './useSchemaModel';
|
|
15
|
+
import { useControlled } from '../utils';
|
|
16
16
|
var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
17
17
|
var _props$checkTrigger = props.checkTrigger,
|
|
18
18
|
checkTrigger = _props$checkTrigger === void 0 ? 'change' : _props$checkTrigger,
|
|
@@ -55,20 +55,18 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
55
55
|
disabled: disabled
|
|
56
56
|
});
|
|
57
57
|
|
|
58
|
-
var
|
|
59
|
-
|
|
60
|
-
setFormValue =
|
|
58
|
+
var _useControlled = useControlled(formValue, formDefaultValue),
|
|
59
|
+
realFormValue = _useControlled[0],
|
|
60
|
+
setFormValue = _useControlled[1];
|
|
61
61
|
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
setFormError =
|
|
62
|
+
var _useControlled2 = useControlled(formError, {}),
|
|
63
|
+
realFormError = _useControlled2[0],
|
|
64
|
+
setFormError = _useControlled2[1];
|
|
65
65
|
|
|
66
|
-
var
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return isUndefined(formError) ? _formError : formError;
|
|
71
|
-
}, [formError, _formError]);
|
|
66
|
+
var realFormValueRef = useRef(realFormValue);
|
|
67
|
+
realFormValueRef.current = realFormValue;
|
|
68
|
+
var realFormErrorRef = useRef(realFormError);
|
|
69
|
+
realFormErrorRef.current = realFormError;
|
|
72
70
|
/**
|
|
73
71
|
* Validate the form data and return a boolean.
|
|
74
72
|
* The error message after verification is returned in the callback.
|
|
@@ -76,7 +74,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
76
74
|
*/
|
|
77
75
|
|
|
78
76
|
var check = useCallback(function (callback) {
|
|
79
|
-
var formValue =
|
|
77
|
+
var formValue = realFormValue || {};
|
|
80
78
|
var formError = {};
|
|
81
79
|
var errorCount = 0;
|
|
82
80
|
var model = getCombinedModel();
|
|
@@ -98,7 +96,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
98
96
|
}
|
|
99
97
|
|
|
100
98
|
return true;
|
|
101
|
-
}, [
|
|
99
|
+
}, [realFormValue, getCombinedModel, setFormError, onCheck, onError]);
|
|
102
100
|
/**
|
|
103
101
|
* Check the data field
|
|
104
102
|
* @param fieldName
|
|
@@ -108,11 +106,11 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
108
106
|
var checkForField = useCallback(function (fieldName, callback) {
|
|
109
107
|
var _extends2;
|
|
110
108
|
|
|
111
|
-
var formValue =
|
|
109
|
+
var formValue = realFormValue || {};
|
|
112
110
|
var model = getCombinedModel();
|
|
113
111
|
var checkResult = model.checkForField(fieldName, formValue);
|
|
114
112
|
|
|
115
|
-
var formError = _extends({},
|
|
113
|
+
var formError = _extends({}, realFormError, (_extends2 = {}, _extends2[fieldName] = (checkResult === null || checkResult === void 0 ? void 0 : checkResult.errorMessage) || checkResult, _extends2));
|
|
116
114
|
|
|
117
115
|
setFormError(formError);
|
|
118
116
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
@@ -123,13 +121,13 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
123
121
|
}
|
|
124
122
|
|
|
125
123
|
return !checkResult.hasError;
|
|
126
|
-
}, [
|
|
124
|
+
}, [realFormValue, getCombinedModel, realFormError, setFormError, onCheck, onError]);
|
|
127
125
|
/**
|
|
128
126
|
* Check form data asynchronously and return a Promise
|
|
129
127
|
*/
|
|
130
128
|
|
|
131
129
|
var checkAsync = useCallback(function () {
|
|
132
|
-
var formValue =
|
|
130
|
+
var formValue = realFormValue || {};
|
|
133
131
|
var promises = [];
|
|
134
132
|
var keys = [];
|
|
135
133
|
var model = getCombinedModel();
|
|
@@ -160,19 +158,19 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
160
158
|
formError: formError
|
|
161
159
|
};
|
|
162
160
|
});
|
|
163
|
-
}, [
|
|
161
|
+
}, [realFormValue, getCombinedModel, onCheck, setFormError, onError]);
|
|
164
162
|
/**
|
|
165
163
|
* Asynchronously check form fields and return Promise
|
|
166
164
|
* @param fieldName
|
|
167
165
|
*/
|
|
168
166
|
|
|
169
167
|
var checkForFieldAsync = useCallback(function (fieldName) {
|
|
170
|
-
var formValue =
|
|
168
|
+
var formValue = realFormValue || {};
|
|
171
169
|
var model = getCombinedModel();
|
|
172
170
|
return model.checkForFieldAsync(fieldName, formValue).then(function (checkResult) {
|
|
173
171
|
var _extends3;
|
|
174
172
|
|
|
175
|
-
var formError = _extends({},
|
|
173
|
+
var formError = _extends({}, realFormError, (_extends3 = {}, _extends3[fieldName] = checkResult.errorMessage, _extends3));
|
|
176
174
|
|
|
177
175
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
178
176
|
setFormError(formError);
|
|
@@ -183,20 +181,20 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
183
181
|
|
|
184
182
|
return checkResult;
|
|
185
183
|
});
|
|
186
|
-
}, [
|
|
184
|
+
}, [realFormValue, getCombinedModel, realFormError, onCheck, setFormError, onError]);
|
|
187
185
|
var cleanErrors = useCallback(function () {
|
|
188
186
|
setFormError({});
|
|
189
|
-
}, []);
|
|
187
|
+
}, [setFormError]);
|
|
190
188
|
var cleanErrorForField = useCallback(function (fieldName) {
|
|
191
|
-
setFormError(omit(
|
|
192
|
-
}, [
|
|
189
|
+
setFormError(omit(realFormError, [fieldName]));
|
|
190
|
+
}, [realFormError, setFormError]);
|
|
193
191
|
var resetErrors = useCallback(function (formError) {
|
|
194
192
|
if (formError === void 0) {
|
|
195
193
|
formError = {};
|
|
196
194
|
}
|
|
197
195
|
|
|
198
196
|
setFormError(formError);
|
|
199
|
-
}, []);
|
|
197
|
+
}, [setFormError]);
|
|
200
198
|
useImperativeHandle(ref, function () {
|
|
201
199
|
return {
|
|
202
200
|
root: rootRef.current,
|
|
@@ -210,15 +208,23 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
210
208
|
};
|
|
211
209
|
});
|
|
212
210
|
var removeFieldError = useCallback(function (name) {
|
|
213
|
-
|
|
211
|
+
/**
|
|
212
|
+
* when this function is called when the children component is unmount, it's an old render frame
|
|
213
|
+
* so use Ref to get future error
|
|
214
|
+
*/
|
|
215
|
+
var formError = omit(realFormErrorRef.current, [name]);
|
|
214
216
|
setFormError(formError);
|
|
215
217
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
216
|
-
}, [
|
|
218
|
+
}, [onCheck, setFormError]);
|
|
217
219
|
var removeFieldValue = useCallback(function (name) {
|
|
218
|
-
|
|
220
|
+
/**
|
|
221
|
+
* when this function is called when the children component is unmount, it's an old render frame
|
|
222
|
+
* so use Ref to get future value
|
|
223
|
+
*/
|
|
224
|
+
var formValue = omit(realFormValueRef.current, [name]);
|
|
219
225
|
setFormValue(formValue);
|
|
220
226
|
onChange === null || onChange === void 0 ? void 0 : onChange(formValue);
|
|
221
|
-
}, [
|
|
227
|
+
}, [onChange, setFormValue]);
|
|
222
228
|
var handleSubmit = useCallback(function (event) {
|
|
223
229
|
if (disabled || readOnly || plaintext) {
|
|
224
230
|
return;
|
|
@@ -232,25 +238,25 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
232
238
|
var handleFieldError = useCallback(function (name, errorMessage) {
|
|
233
239
|
var _extends4;
|
|
234
240
|
|
|
235
|
-
var formError = _extends({},
|
|
241
|
+
var formError = _extends({}, realFormError, (_extends4 = {}, _extends4[name] = errorMessage, _extends4));
|
|
236
242
|
|
|
237
243
|
setFormError(formError);
|
|
238
244
|
onError === null || onError === void 0 ? void 0 : onError(formError);
|
|
239
245
|
onCheck === null || onCheck === void 0 ? void 0 : onCheck(formError);
|
|
240
|
-
}, [onError, onCheck
|
|
246
|
+
}, [realFormError, setFormError, onError, onCheck]);
|
|
241
247
|
var handleFieldSuccess = useCallback(function (name) {
|
|
242
248
|
removeFieldError(name);
|
|
243
249
|
}, [removeFieldError]);
|
|
244
250
|
var handleFieldChange = useCallback(function (name, value, event) {
|
|
245
251
|
var _extends5;
|
|
246
252
|
|
|
247
|
-
var formValue =
|
|
253
|
+
var formValue = realFormValue;
|
|
248
254
|
|
|
249
255
|
var nextFormValue = _extends({}, formValue, (_extends5 = {}, _extends5[name] = value, _extends5));
|
|
250
256
|
|
|
251
257
|
setFormValue(nextFormValue);
|
|
252
258
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextFormValue, event);
|
|
253
|
-
}, [
|
|
259
|
+
}, [realFormValue, setFormValue, onChange]);
|
|
254
260
|
var rootRef = useRef(null);
|
|
255
261
|
var formContextValue = useMemo(function () {
|
|
256
262
|
return {
|
|
@@ -261,7 +267,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
261
267
|
readOnly: readOnly,
|
|
262
268
|
plaintext: plaintext,
|
|
263
269
|
disabled: disabled,
|
|
264
|
-
formError:
|
|
270
|
+
formError: realFormError,
|
|
265
271
|
removeFieldValue: removeFieldValue,
|
|
266
272
|
removeFieldError: removeFieldError,
|
|
267
273
|
pushFieldRule: pushFieldRule,
|
|
@@ -270,7 +276,7 @@ var Form = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
270
276
|
onFieldError: handleFieldError,
|
|
271
277
|
onFieldSuccess: handleFieldSuccess
|
|
272
278
|
};
|
|
273
|
-
}, [getCombinedModel, checkTrigger, formDefaultValue, errorFromContext, readOnly, plaintext, disabled,
|
|
279
|
+
}, [getCombinedModel, checkTrigger, formDefaultValue, errorFromContext, readOnly, plaintext, disabled, realFormError, removeFieldValue, removeFieldError, pushFieldRule, removeFieldRule, handleFieldChange, handleFieldError, handleFieldSuccess]);
|
|
274
280
|
return /*#__PURE__*/React.createElement("form", _extends({}, rest, {
|
|
275
281
|
ref: rootRef,
|
|
276
282
|
onSubmit: handleSubmit,
|
|
@@ -59,10 +59,19 @@ export interface OverlayTriggerProps extends StandardProps, AnimationEventProps
|
|
|
59
59
|
/** Callback fired when open component */
|
|
60
60
|
onOpen?: () => void;
|
|
61
61
|
/** Callback fired when close component */
|
|
62
|
-
onClose?: () => void;
|
|
62
|
+
onClose?: (cause?: OverlayCloseCause) => void;
|
|
63
63
|
/** Whether speaker to follow the cursor */
|
|
64
64
|
followCursor?: boolean;
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* The reason that triggers closing of an overlay
|
|
68
|
+
* - Clicking outside of the overlay
|
|
69
|
+
* - Direct invocation of triggerRef.current.close()
|
|
70
|
+
*/
|
|
71
|
+
export declare enum OverlayCloseCause {
|
|
72
|
+
ClickOutside = 0,
|
|
73
|
+
ImperativeHandle = 1
|
|
74
|
+
}
|
|
66
75
|
export interface OverlayTriggerInstance {
|
|
67
76
|
root: HTMLElement | undefined;
|
|
68
77
|
updatePosition: () => void;
|
|
@@ -30,6 +30,12 @@ function mergeEvents(events, props) {
|
|
|
30
30
|
return nextEvents;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The reason that triggers closing of an overlay
|
|
35
|
+
* - Clicking outside of the overlay
|
|
36
|
+
* - Direct invocation of triggerRef.current.close()
|
|
37
|
+
*/
|
|
38
|
+
export var OverlayCloseCause;
|
|
33
39
|
/**
|
|
34
40
|
* Useful for mouseover and mouseout.
|
|
35
41
|
* In order to resolve the node entering the mouseover element, a mouseout event and a mouseover event will be triggered.
|
|
@@ -37,6 +43,12 @@ function mergeEvents(events, props) {
|
|
|
37
43
|
* @param handler
|
|
38
44
|
* @param event
|
|
39
45
|
*/
|
|
46
|
+
|
|
47
|
+
(function (OverlayCloseCause) {
|
|
48
|
+
OverlayCloseCause[OverlayCloseCause["ClickOutside"] = 0] = "ClickOutside";
|
|
49
|
+
OverlayCloseCause[OverlayCloseCause["ImperativeHandle"] = 1] = "ImperativeHandle";
|
|
50
|
+
})(OverlayCloseCause || (OverlayCloseCause = {}));
|
|
51
|
+
|
|
40
52
|
function onMouseEventHandler(handler, event, delay) {
|
|
41
53
|
var target = event.currentTarget;
|
|
42
54
|
var related = event.relatedTarget || get(event, ['nativeEvent', 'toElement']);
|
|
@@ -133,17 +145,19 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
133
145
|
|
|
134
146
|
setOpen(true);
|
|
135
147
|
}, [delayOpen, setOpen]);
|
|
136
|
-
var handleClose = useCallback(function (delay) {
|
|
148
|
+
var handleClose = useCallback(function (delay, callback) {
|
|
137
149
|
var ms = _isUndefined(delay) ? delayClose : delay;
|
|
138
150
|
|
|
139
151
|
if (ms && typeof ms === 'number') {
|
|
140
152
|
return delayCloseTimer.current = setTimeout(function () {
|
|
141
153
|
delayCloseTimer.current = null;
|
|
142
154
|
setOpen(false);
|
|
155
|
+
callback === null || callback === void 0 ? void 0 : callback();
|
|
143
156
|
}, ms);
|
|
144
157
|
}
|
|
145
158
|
|
|
146
159
|
setOpen(false);
|
|
160
|
+
callback === null || callback === void 0 ? void 0 : callback();
|
|
147
161
|
}, [delayClose, setOpen]);
|
|
148
162
|
var handleExited = useCallback(function () {
|
|
149
163
|
setCursorPosition(null);
|
|
@@ -161,7 +175,11 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
161
175
|
},
|
|
162
176
|
|
|
163
177
|
open: handleOpen,
|
|
164
|
-
close:
|
|
178
|
+
close: function close(delay) {
|
|
179
|
+
return handleClose(delay, function () {
|
|
180
|
+
return onClose === null || onClose === void 0 ? void 0 : onClose(OverlayCloseCause.ImperativeHandle);
|
|
181
|
+
});
|
|
182
|
+
},
|
|
165
183
|
updatePosition: function updatePosition() {
|
|
166
184
|
var _overlayRef$current2, _overlayRef$current2$;
|
|
167
185
|
|
|
@@ -322,7 +340,9 @@ var OverlayTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
322
340
|
var overlayProps = _extends({}, rest, {
|
|
323
341
|
rootClose: rootClose,
|
|
324
342
|
triggerTarget: triggerRef,
|
|
325
|
-
onClose: trigger !== 'none' ? createChainedFunction(handleClose,
|
|
343
|
+
onClose: trigger !== 'none' ? createChainedFunction(handleClose, function () {
|
|
344
|
+
return onClose === null || onClose === void 0 ? void 0 : onClose(OverlayCloseCause.ClickOutside);
|
|
345
|
+
}) : undefined,
|
|
326
346
|
onExited: createChainedFunction(followCursor ? handleExited : undefined, onExited),
|
|
327
347
|
placement: placement,
|
|
328
348
|
container: container,
|
|
@@ -14,6 +14,8 @@ import Plaintext from '../Plaintext';
|
|
|
14
14
|
import useToggleCaret from '../utils/useToggleCaret';
|
|
15
15
|
import TextMask from '../MaskedInput/TextMask';
|
|
16
16
|
import deprecatePropType from '../utils/deprecatePropType';
|
|
17
|
+
import Loader from '../Loader';
|
|
18
|
+
import Stack from '../Stack';
|
|
17
19
|
var defaultInputMask = [];
|
|
18
20
|
var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
19
21
|
var activeProp = props.active,
|
|
@@ -30,6 +32,8 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
30
32
|
plaintext = props.plaintext,
|
|
31
33
|
hasValue = props.hasValue,
|
|
32
34
|
editable = props.editable,
|
|
35
|
+
_props$loading = props.loading,
|
|
36
|
+
loading = _props$loading === void 0 ? false : _props$loading,
|
|
33
37
|
cleanableProp = props.cleanable,
|
|
34
38
|
_props$tabIndex = props.tabIndex,
|
|
35
39
|
tabIndexProp = _props$tabIndex === void 0 ? editable ? -1 : 0 : _props$tabIndex,
|
|
@@ -52,7 +56,7 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
52
56
|
_props$caretAs = props.caretAs,
|
|
53
57
|
caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
|
|
54
58
|
label = props.label,
|
|
55
|
-
rest = _objectWithoutPropertiesLoose(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label"]);
|
|
59
|
+
rest = _objectWithoutPropertiesLoose(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "editable", "loading", "cleanable", "tabIndex", "id", "value", "inputPlaceholder", "inputValue", "inputMask", "onInputChange", "onInputPressEnter", "onInputBlur", "onInputFocus", "onClean", "onFocus", "onBlur", "placement", "caretComponent", "caretAs", "label"]);
|
|
56
60
|
|
|
57
61
|
var inputRef = useRef(null);
|
|
58
62
|
var comboboxRef = useRef(null);
|
|
@@ -85,7 +89,9 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
85
89
|
active: activeProp || activeState
|
|
86
90
|
}));
|
|
87
91
|
var handleFocus = useCallback(function (event) {
|
|
88
|
-
|
|
92
|
+
if (!loading) {
|
|
93
|
+
setActive(true);
|
|
94
|
+
}
|
|
89
95
|
|
|
90
96
|
if (editable) {
|
|
91
97
|
// Avoid firing the onFocus event twice when DatePicker and DateRangePicker allow keyboard input.
|
|
@@ -102,7 +108,7 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
102
108
|
} else {
|
|
103
109
|
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
104
110
|
}
|
|
105
|
-
}, [editable, onFocus]);
|
|
111
|
+
}, [editable, loading, onFocus]);
|
|
106
112
|
var handleBlur = useCallback(function (event) {
|
|
107
113
|
if (inputRef.current && !editable) {
|
|
108
114
|
setActive(false);
|
|
@@ -177,7 +183,17 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
177
183
|
onFocus: !disabled ? handleFocus : null // The debounce is set to 200 to solve the flicker caused by the switch between input and div.
|
|
178
184
|
,
|
|
179
185
|
onBlur: !disabled ? debounce(handleBlur, 200) : null
|
|
180
|
-
}), /*#__PURE__*/React.createElement(
|
|
186
|
+
}), /*#__PURE__*/React.createElement(Stack, null, label && /*#__PURE__*/React.createElement(Stack.Item, null, /*#__PURE__*/React.createElement("span", {
|
|
187
|
+
className: prefix('label')
|
|
188
|
+
}, label)), /*#__PURE__*/React.createElement(Stack.Item, {
|
|
189
|
+
grow: 1
|
|
190
|
+
}, loading ? /*#__PURE__*/React.createElement(Loader, {
|
|
191
|
+
style: {
|
|
192
|
+
display: 'block',
|
|
193
|
+
padding: '1px 0'
|
|
194
|
+
},
|
|
195
|
+
"data-testid": "spinner"
|
|
196
|
+
}) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TextMask, {
|
|
181
197
|
mask: inputMask,
|
|
182
198
|
value: Array.isArray(inputValue) ? inputValue.toString() : inputValue,
|
|
183
199
|
onBlur: handleInputBlur,
|
|
@@ -198,9 +214,7 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
198
214
|
}), children ? /*#__PURE__*/React.createElement("span", {
|
|
199
215
|
className: prefix(hasValue ? 'value' : 'placeholder'),
|
|
200
216
|
"aria-placeholder": typeof children === 'string' ? children : undefined
|
|
201
|
-
},
|
|
202
|
-
className: prefix('label')
|
|
203
|
-
}, label), children) : null, showCleanButton && /*#__PURE__*/React.createElement(CloseButton, {
|
|
217
|
+
}, children) : null)), showCleanButton && /*#__PURE__*/React.createElement(CloseButton, {
|
|
204
218
|
className: prefix(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["clean"]))),
|
|
205
219
|
tabIndex: -1,
|
|
206
220
|
locale: {
|
|
@@ -209,7 +223,7 @@ var PickerToggle = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
209
223
|
onClick: handleClean
|
|
210
224
|
}), caret && /*#__PURE__*/React.createElement(Caret, {
|
|
211
225
|
className: prefix(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["caret"])))
|
|
212
|
-
}));
|
|
226
|
+
})));
|
|
213
227
|
});
|
|
214
228
|
PickerToggle.displayName = 'PickerToggle';
|
|
215
229
|
PickerToggle.propTypes = {
|
|
@@ -3,7 +3,7 @@ import { OverlayTriggerInstance, OverlayTriggerProps, OverlayTriggerType } from
|
|
|
3
3
|
import { PositionChildProps } from '../Overlay/Position';
|
|
4
4
|
import { TypeAttributes, AnimationEventProps } from '../@types/common';
|
|
5
5
|
export type { OverlayTriggerInstance, PositionChildProps };
|
|
6
|
-
export interface PickerToggleTriggerProps extends Omit<AnimationEventProps, 'onEntering' | 'onExiting'>, Pick<OverlayTriggerProps, 'speaker'> {
|
|
6
|
+
export interface PickerToggleTriggerProps extends Omit<AnimationEventProps, 'onEntering' | 'onExiting'>, Pick<OverlayTriggerProps, 'speaker' | 'onClose'> {
|
|
7
7
|
placement?: TypeAttributes.Placement;
|
|
8
8
|
pickerProps: any;
|
|
9
9
|
open?: boolean;
|
|
@@ -6,7 +6,7 @@ import OverlayTrigger from '../Overlay/OverlayTrigger';
|
|
|
6
6
|
import { placementPolyfill } from '../utils';
|
|
7
7
|
import { CustomConsumer } from '../CustomProvider';
|
|
8
8
|
export var omitTriggerPropKeys = ['onEntered', 'onExited', 'onEnter', 'onEntering', 'onExit', 'onExiting', 'open', 'defaultOpen', 'onHide', 'container', 'containerPadding', 'preventOverflow'];
|
|
9
|
-
export var pickTriggerPropKeys = [].concat(omitTriggerPropKeys, ['disabled', 'plaintext', 'readOnly']);
|
|
9
|
+
export var pickTriggerPropKeys = [].concat(omitTriggerPropKeys, ['disabled', 'plaintext', 'readOnly', 'loading']);
|
|
10
10
|
var PickerToggleTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
11
11
|
var pickerProps = props.pickerProps,
|
|
12
12
|
speaker = props.speaker,
|
|
@@ -15,8 +15,10 @@ var PickerToggleTrigger = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
15
15
|
trigger = _props$trigger === void 0 ? 'click' : _props$trigger,
|
|
16
16
|
rest = _objectWithoutPropertiesLoose(props, ["pickerProps", "speaker", "placement", "trigger"]);
|
|
17
17
|
|
|
18
|
+
var pickerTriggerProps = pick(pickerProps, pickTriggerPropKeys);
|
|
18
19
|
return /*#__PURE__*/React.createElement(CustomConsumer, null, function (context) {
|
|
19
|
-
return /*#__PURE__*/React.createElement(OverlayTrigger, _extends({}, rest,
|
|
20
|
+
return /*#__PURE__*/React.createElement(OverlayTrigger, _extends({}, rest, pickerTriggerProps, {
|
|
21
|
+
disabled: pickerTriggerProps.disabled || pickerTriggerProps.loading,
|
|
20
22
|
ref: ref,
|
|
21
23
|
trigger: trigger,
|
|
22
24
|
placement: placementPolyfill(placement, context === null || context === void 0 ? void 0 : context.rtl),
|
|
@@ -6,6 +6,8 @@ import { FormControlPickerProps, ItemDataType } from '../@types/common';
|
|
|
6
6
|
export interface SelectProps<T> {
|
|
7
7
|
/** Set group condition key in data */
|
|
8
8
|
groupBy?: string;
|
|
9
|
+
/** Whether to display an loading indicator on toggle button */
|
|
10
|
+
loading?: boolean;
|
|
9
11
|
/** Whether dispaly search input box */
|
|
10
12
|
searchable?: boolean;
|
|
11
13
|
/** Whether using virtualized list */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rsuite",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.20.0",
|
|
4
4
|
"description": "A suite of react components",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"url": "git@github.com:rsuite/rsuite.git"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@babel/runtime": "^7.
|
|
27
|
+
"@babel/runtime": "^7.19.0",
|
|
28
28
|
"@juggle/resize-observer": "^3.4.0",
|
|
29
29
|
"@rsuite/icons": "^1.0.2",
|
|
30
30
|
"@types/chai": "^4.3.3",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"@types/prop-types": "^15.7.5",
|
|
33
33
|
"@types/react-virtualized": "^9.21.11",
|
|
34
34
|
"classnames": "^2.3.1",
|
|
35
|
-
"date-fns": "^2.29.
|
|
35
|
+
"date-fns": "^2.29.3",
|
|
36
36
|
"dom-lib": "^3.1.3",
|
|
37
37
|
"lodash": "^4.17.11",
|
|
38
38
|
"prop-types": "^15.8.1",
|