rsuite 5.16.2 → 5.16.5
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 +21 -0
- package/Picker/styles/index.less +1 -1
- package/cjs/AutoComplete/AutoComplete.d.ts +3 -1
- package/cjs/AutoComplete/AutoComplete.js +6 -2
- package/cjs/AutoComplete/test/AutoComplete.test.d.ts +1 -0
- package/cjs/AutoComplete/test/AutoComplete.test.js +23 -0
- package/cjs/Calendar/useCalendarDate.d.ts +1 -0
- package/cjs/Calendar/useCalendarDate.js +7 -1
- package/cjs/CheckTreePicker/CheckTreePicker.js +5 -0
- package/cjs/DatePicker/DatePicker.d.ts +1 -1
- package/cjs/DatePicker/DatePicker.js +5 -4
- package/cjs/DatePicker/Toolbar.js +1 -1
- package/cjs/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/cjs/DateRangePicker/DateRangePicker.js +26 -5
- package/cjs/Overlay/OverlayTrigger.js +43 -34
- package/cjs/Picker/DropdownMenu.d.ts +1 -1
- package/cjs/Picker/PickerToggle.d.ts +1 -1
- package/cjs/Picker/PickerToggle.js +52 -27
- package/cjs/SelectPicker/SelectPicker.d.ts +2 -2
- package/cjs/SelectPicker/test/SelectPicker.test.js +10 -0
- package/cjs/Tree/Tree.d.ts +2 -2
- package/cjs/Tree/test/Tree.test.d.ts +1 -0
- package/cjs/Tree/test/Tree.test.js +18 -0
- package/cjs/utils/dateUtils.d.ts +1 -0
- package/cjs/utils/dateUtils.js +5 -1
- package/dist/rsuite-rtl.css +1 -1
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +1 -1
- package/dist/rsuite.js +20 -9
- 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/AutoComplete/AutoComplete.d.ts +3 -1
- package/esm/AutoComplete/AutoComplete.js +6 -2
- package/esm/AutoComplete/test/AutoComplete.test.d.ts +1 -0
- package/esm/AutoComplete/test/AutoComplete.test.js +18 -0
- package/esm/Calendar/useCalendarDate.d.ts +1 -0
- package/esm/Calendar/useCalendarDate.js +7 -1
- package/esm/CheckTreePicker/CheckTreePicker.js +5 -0
- package/esm/DatePicker/DatePicker.d.ts +1 -1
- package/esm/DatePicker/DatePicker.js +5 -4
- package/esm/DatePicker/Toolbar.js +1 -1
- package/esm/DateRangePicker/DateRangePicker.d.ts +1 -1
- package/esm/DateRangePicker/DateRangePicker.js +26 -5
- package/esm/Overlay/OverlayTrigger.js +44 -35
- package/esm/Picker/DropdownMenu.d.ts +1 -1
- package/esm/Picker/PickerToggle.d.ts +1 -1
- package/esm/Picker/PickerToggle.js +52 -27
- package/esm/SelectPicker/SelectPicker.d.ts +2 -2
- package/esm/SelectPicker/test/SelectPicker.test.js +9 -0
- package/esm/Tree/Tree.d.ts +2 -2
- package/esm/Tree/test/Tree.test.d.ts +1 -0
- package/esm/Tree/test/Tree.test.js +11 -0
- package/esm/utils/dateUtils.d.ts +1 -0
- package/esm/utils/dateUtils.js +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
## [5.16.5](https://github.com/rsuite/rsuite/compare/v5.16.4...v5.16.5) (2022-08-11)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
- **AutoComplete:** fix `listbox` not keeping the same width as `input` ([#2645](https://github.com/rsuite/rsuite/issues/2645)) ([ad09288](https://github.com/rsuite/rsuite/commit/ad09288e0fc38f964524466a79ca25532dc221f8))
|
|
6
|
+
- **AutoComplete:** fix missing definition of string in datatype ([#2644](https://github.com/rsuite/rsuite/issues/2644)) ([528e291](https://github.com/rsuite/rsuite/commit/528e29154d188d928e3d93853f5ed0673b932b4a))
|
|
7
|
+
- **DateRangePicker:** fix default time not working ([#2642](https://github.com/rsuite/rsuite/issues/2642)) ([915de28](https://github.com/rsuite/rsuite/commit/915de2820af418195e7f9a6ed228c1b05362d633))
|
|
8
|
+
|
|
9
|
+
## [5.16.4](https://github.com/rsuite/rsuite/compare/v5.16.3...v5.16.4) (2022-08-04)
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
- **DatePicker:** fix issues with focus event ([#2636](https://github.com/rsuite/rsuite/issues/2636)) ([76b68aa](https://github.com/rsuite/rsuite/commit/76b68aa79dd129a210238517c279fe41b0da89ac))
|
|
14
|
+
|
|
15
|
+
## [5.16.3](https://github.com/rsuite/rsuite/compare/v5.16.2...v5.16.3) (2022-07-29)
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
- **DateRangePicker:** fix predefined `ranges` cannot close picker ([#2614](https://github.com/rsuite/rsuite/issues/2614)) ([7773899](https://github.com/rsuite/rsuite/commit/7773899d5cda5ce53d556be85abc76f23166fc28))
|
|
20
|
+
- **listProps:** fix properties in listProps to be optional ([#2622](https://github.com/rsuite/rsuite/issues/2622)) ([650abbd](https://github.com/rsuite/rsuite/commit/650abbdd7b1073fb1a5a3d3ca761127ac2dcdd08))
|
|
21
|
+
|
|
1
22
|
## [5.16.2](https://github.com/rsuite/rsuite/compare/v5.16.1...v5.16.2) (2022-07-28)
|
|
2
23
|
|
|
3
24
|
### Bug Fixes
|
package/Picker/styles/index.less
CHANGED
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
padding-right: 32px;
|
|
105
105
|
color: var(--rs-text-primary);
|
|
106
106
|
background-color: var(--rs-input-bg);
|
|
107
|
+
outline: none;
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
&.rs-btn-lg &-textbox {
|
|
@@ -120,7 +121,6 @@
|
|
|
120
121
|
|
|
121
122
|
&-read-only {
|
|
122
123
|
opacity: 0;
|
|
123
|
-
pointer-events: none;
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { PickerComponent } from '../Picker';
|
|
3
3
|
import { WithAsProps, FormControlPickerProps, TypeAttributes, ItemDataType } from '../@types/common';
|
|
4
4
|
export declare type ValueType = string;
|
|
5
|
-
export interface AutoCompleteProps<T = ValueType> extends WithAsProps, FormControlPickerProps<T, any, ItemDataType> {
|
|
5
|
+
export interface AutoCompleteProps<T = ValueType> extends WithAsProps, FormControlPickerProps<T, any, ItemDataType | string> {
|
|
6
6
|
/** Additional classes for menu */
|
|
7
7
|
menuClassName?: string;
|
|
8
8
|
/** The placement of component */
|
|
@@ -13,6 +13,8 @@ export interface AutoCompleteProps<T = ValueType> extends WithAsProps, FormContr
|
|
|
13
13
|
open?: boolean;
|
|
14
14
|
/** Placeholder text */
|
|
15
15
|
placeholder?: string;
|
|
16
|
+
/** The width of the menu will automatically follow the width of the input box */
|
|
17
|
+
menuAutoWidth?: boolean;
|
|
16
18
|
/** Custom filter function to determine whether the item will be displayed */
|
|
17
19
|
filterBy?: (value: string, item: ItemDataType) => boolean;
|
|
18
20
|
/** Called when a option is selected */
|
|
@@ -44,6 +44,8 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
44
44
|
classPrefix = _props$classPrefix === void 0 ? 'auto-complete' : _props$classPrefix,
|
|
45
45
|
_props$defaultValue = props.defaultValue,
|
|
46
46
|
defaultValue = _props$defaultValue === void 0 ? '' : _props$defaultValue,
|
|
47
|
+
_props$menuAutoWidth = props.menuAutoWidth,
|
|
48
|
+
menuAutoWidth = _props$menuAutoWidth === void 0 ? true : _props$menuAutoWidth,
|
|
47
49
|
data = props.data,
|
|
48
50
|
valueProp = props.value,
|
|
49
51
|
open = props.open,
|
|
@@ -61,7 +63,7 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
61
63
|
onFocus = props.onFocus,
|
|
62
64
|
onBlur = props.onBlur,
|
|
63
65
|
onMenuFocus = props.onMenuFocus,
|
|
64
|
-
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "disabled", "className", "placement", "selectOnEnter", "classPrefix", "defaultValue", "data", "value", "open", "style", "menuClassName", "id", "renderMenu", "renderMenuItem", "onSelect", "filterBy", "onKeyDown", "onChange", "onClose", "onOpen", "onFocus", "onBlur", "onMenuFocus"]);
|
|
66
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "disabled", "className", "placement", "selectOnEnter", "classPrefix", "defaultValue", "menuAutoWidth", "data", "value", "open", "style", "menuClassName", "id", "renderMenu", "renderMenuItem", "onSelect", "filterBy", "onKeyDown", "onChange", "onClose", "onOpen", "onFocus", "onBlur", "onMenuFocus"]);
|
|
65
67
|
var datalist = (0, _utils3.transformData)(data);
|
|
66
68
|
|
|
67
69
|
var _useControlled = (0, _utils.useControlled)(valueProp, defaultValue),
|
|
@@ -203,7 +205,8 @@ var AutoComplete = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
203
205
|
style: styles,
|
|
204
206
|
className: className,
|
|
205
207
|
onKeyDown: handleKeyDownEvent,
|
|
206
|
-
target: triggerRef
|
|
208
|
+
target: triggerRef,
|
|
209
|
+
autoWidth: menuAutoWidth
|
|
207
210
|
}, renderMenu ? renderMenu(menu) : menu);
|
|
208
211
|
};
|
|
209
212
|
|
|
@@ -239,6 +242,7 @@ AutoComplete.propTypes = (0, _extends2.default)({}, _utils2.animationPropTypes,
|
|
|
239
242
|
defaultValue: _propTypes.default.string,
|
|
240
243
|
className: _propTypes.default.string,
|
|
241
244
|
menuClassName: _propTypes.default.string,
|
|
245
|
+
menuAutoWidth: _propTypes.default.bool,
|
|
242
246
|
placement: _propTypes.default.oneOf(_utils.PLACEMENT),
|
|
243
247
|
onFocus: _propTypes.default.func,
|
|
244
248
|
onMenuFocus: _propTypes.default.func,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _AutoComplete = _interopRequireDefault(require("../AutoComplete"));
|
|
8
|
+
|
|
9
|
+
/*#__PURE__*/
|
|
10
|
+
_react.default.createElement(_AutoComplete.default, {
|
|
11
|
+
data: ['item1', 'item2']
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
/*#__PURE__*/
|
|
15
|
+
_react.default.createElement(_AutoComplete.default, {
|
|
16
|
+
data: [{
|
|
17
|
+
label: 'item1',
|
|
18
|
+
value: 'item1'
|
|
19
|
+
}, {
|
|
20
|
+
label: 'item2',
|
|
21
|
+
value: 'item2'
|
|
22
|
+
}]
|
|
23
|
+
});
|
|
@@ -21,6 +21,11 @@ var useCalendarDate = function useCalendarDate(value, defaultDate) {
|
|
|
21
21
|
setValue(date);
|
|
22
22
|
}
|
|
23
23
|
}, [calendarDate]);
|
|
24
|
+
var resetCalendarDate = (0, _react.useCallback)(function () {
|
|
25
|
+
var _ref2;
|
|
26
|
+
|
|
27
|
+
setValue((_ref2 = value !== null && value !== void 0 ? value : defaultDate) !== null && _ref2 !== void 0 ? _ref2 : new Date());
|
|
28
|
+
}, [defaultDate, value]);
|
|
24
29
|
(0, _utils.useUpdateEffect)(function () {
|
|
25
30
|
var _valueRef$current;
|
|
26
31
|
|
|
@@ -31,7 +36,8 @@ var useCalendarDate = function useCalendarDate(value, defaultDate) {
|
|
|
31
36
|
}, [value]);
|
|
32
37
|
return {
|
|
33
38
|
calendarDate: calendarDate,
|
|
34
|
-
setCalendarDate: setCalendarDate
|
|
39
|
+
setCalendarDate: setCalendarDate,
|
|
40
|
+
resetCalendarDate: resetCalendarDate
|
|
35
41
|
};
|
|
36
42
|
};
|
|
37
43
|
|
|
@@ -592,6 +592,11 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
592
592
|
var children = node[childrenKey];
|
|
593
593
|
var visibleChildren = (0, _isUndefined2.default)(searchKeywordState) || searchKeywordState.length === 0 ? !!children : (0, _treeUtils.hasVisibleChildren)(node, childrenKey);
|
|
594
594
|
var nodeProps = (0, _extends2.default)({}, getTreeNodeProps((0, _extends2.default)({}, node, {
|
|
595
|
+
/**
|
|
596
|
+
* spread operator dont copy unenumerable properties
|
|
597
|
+
* so we need to copy them manually
|
|
598
|
+
*/
|
|
599
|
+
parent: node.parent,
|
|
595
600
|
expand: expand
|
|
596
601
|
}), layer), {
|
|
597
602
|
hasChildren: visibleChildren
|
|
@@ -5,7 +5,7 @@ import { PickerToggleProps } from '../Picker';
|
|
|
5
5
|
import { FormControlBaseProps, PickerBaseProps, RsRefForwardingComponent } from '../@types/common';
|
|
6
6
|
export type { RangeType } from './Toolbar';
|
|
7
7
|
export interface DatePickerProps extends PickerBaseProps<DatePickerLocale>, FormControlBaseProps<Date | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext'> {
|
|
8
|
-
/**
|
|
8
|
+
/** Predefined date Ranges */
|
|
9
9
|
ranges?: RangeType<Date>[];
|
|
10
10
|
/** Calendar panel default presentation date and time */
|
|
11
11
|
calendarDefaultDate?: Date;
|
|
@@ -101,7 +101,8 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
101
101
|
|
|
102
102
|
var _useCalendarDate = (0, _useCalendarDate2.default)(valueProp, calendarDefaultDate),
|
|
103
103
|
calendarDate = _useCalendarDate.calendarDate,
|
|
104
|
-
setCalendarDate = _useCalendarDate.setCalendarDate
|
|
104
|
+
setCalendarDate = _useCalendarDate.setCalendarDate,
|
|
105
|
+
resetCalendarDate = _useCalendarDate.resetCalendarDate;
|
|
105
106
|
|
|
106
107
|
var _useState = (0, _react.useState)(),
|
|
107
108
|
inputState = _useState[0],
|
|
@@ -244,9 +245,9 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
244
245
|
*/
|
|
245
246
|
|
|
246
247
|
var handleClean = (0, _react.useCallback)(function (event) {
|
|
247
|
-
setCalendarDate(new Date());
|
|
248
248
|
updateValue(event, null);
|
|
249
|
-
|
|
249
|
+
resetCalendarDate();
|
|
250
|
+
}, [resetCalendarDate, updateValue]);
|
|
250
251
|
/**
|
|
251
252
|
* Handle keyboard events.
|
|
252
253
|
*/
|
|
@@ -467,7 +468,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
467
468
|
as: toggleAs,
|
|
468
469
|
ref: targetRef,
|
|
469
470
|
appearance: appearance,
|
|
470
|
-
|
|
471
|
+
editable: true,
|
|
471
472
|
inputValue: value ? formatDate(value, formatStr) : '',
|
|
472
473
|
inputPlaceholder: typeof placeholder === 'string' && placeholder ? placeholder : formatStr,
|
|
473
474
|
inputMask: _utils.DateUtils.getDateMask(formatStr),
|
|
@@ -95,7 +95,7 @@ var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !==
|
|
98
|
+
onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !== false ? true : false, event);
|
|
99
99
|
};
|
|
100
100
|
|
|
101
101
|
return /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
@@ -3,7 +3,7 @@ import { FormControlBaseProps, PickerBaseProps } from '../@types/common';
|
|
|
3
3
|
import { PickerComponent, PickerToggleProps } from '../Picker';
|
|
4
4
|
import { DisabledDateFunction, RangeType, DateRange } from './types';
|
|
5
5
|
export interface DateRangePickerProps extends PickerBaseProps, FormControlBaseProps<DateRange | null>, Pick<PickerToggleProps, 'caretAs' | 'readOnly' | 'plaintext'> {
|
|
6
|
-
/**
|
|
6
|
+
/** Predefined date ranges */
|
|
7
7
|
ranges?: RangeType[];
|
|
8
8
|
/** Format date */
|
|
9
9
|
format?: string;
|
|
@@ -161,11 +161,31 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
161
161
|
*/
|
|
162
162
|
|
|
163
163
|
var updateCalendarDateRange = (0, _react.useCallback)(function (value, calendarKey) {
|
|
164
|
+
var nextValue = value;
|
|
165
|
+
var shouldTime = _utils.DateUtils.shouldTime,
|
|
166
|
+
getHours = _utils.DateUtils.getHours,
|
|
167
|
+
getMinutes = _utils.DateUtils.getMinutes,
|
|
168
|
+
getSeconds = _utils.DateUtils.getSeconds,
|
|
169
|
+
set = _utils.DateUtils.set;
|
|
170
|
+
|
|
171
|
+
if (shouldTime(formatStr) && calendarKey === undefined && (value === null || value === void 0 ? void 0 : value.length) === 1 && (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue.length) === 2) {
|
|
172
|
+
var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || defaultCalendarValue[1];
|
|
173
|
+
var _startDate = value[0]; // When updating the start date, the time of the end date should keep the time set by the user by default.
|
|
174
|
+
|
|
175
|
+
var _endDate = set((0, _dateUtils.addMonths)(_startDate, 1), {
|
|
176
|
+
hours: getHours(calendarEndDate),
|
|
177
|
+
minutes: getMinutes(calendarEndDate),
|
|
178
|
+
seconds: getSeconds(calendarEndDate)
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
nextValue = [_startDate, _endDate];
|
|
182
|
+
}
|
|
183
|
+
|
|
164
184
|
setCalendarDate((0, _utils2.getCalendarDate)({
|
|
165
|
-
value:
|
|
185
|
+
value: nextValue,
|
|
166
186
|
calendarKey: calendarKey
|
|
167
187
|
}));
|
|
168
|
-
}, []); // if valueProp changed then update selectValue/hoverValue
|
|
188
|
+
}, [calendarDate, defaultCalendarValue, formatStr]); // if valueProp changed then update selectValue/hoverValue
|
|
169
189
|
|
|
170
190
|
(0, _react.useEffect)(function () {
|
|
171
191
|
setSelectedDates(valueProp !== null && valueProp !== void 0 ? valueProp : []);
|
|
@@ -463,10 +483,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
463
483
|
var nextCalendarDate;
|
|
464
484
|
|
|
465
485
|
if (value && value.length) {
|
|
466
|
-
var
|
|
486
|
+
var _startDate2 = value[0],
|
|
467
487
|
endData = value[1];
|
|
468
|
-
nextCalendarDate = [
|
|
488
|
+
nextCalendarDate = [_startDate2, (0, _dateUtils.isSameMonth)(_startDate2, endData) ? (0, _dateUtils.addMonths)(endData, 1) : endData];
|
|
469
489
|
} else {
|
|
490
|
+
// Reset the date on the calendar to the default date
|
|
470
491
|
nextCalendarDate = (0, _utils2.getCalendarDate)({
|
|
471
492
|
value: defaultCalendarValue !== null && defaultCalendarValue !== void 0 ? defaultCalendarValue : null
|
|
472
493
|
});
|
|
@@ -624,7 +645,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
|
|
|
624
645
|
as: toggleAs,
|
|
625
646
|
ref: targetRef,
|
|
626
647
|
appearance: appearance,
|
|
627
|
-
|
|
648
|
+
editable: true,
|
|
628
649
|
inputMask: _utils.DateUtils.getDateMask(rangeFormatStr),
|
|
629
650
|
inputValue: value ? getDisplayString(value, true) : '',
|
|
630
651
|
inputPlaceholder: typeof placeholder === 'string' && placeholder ? placeholder : rangeFormatStr,
|
|
@@ -278,56 +278,65 @@ var OverlayTrigger = /*#__PURE__*/_react.default.forwardRef(function (props, ref
|
|
|
278
278
|
var preventDefault = (0, _react.useCallback)(function (event) {
|
|
279
279
|
event.preventDefault();
|
|
280
280
|
}, []);
|
|
281
|
-
var triggerEvents = {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
281
|
+
var triggerEvents = (0, _react.useMemo)(function () {
|
|
282
|
+
// Pass events by props
|
|
283
|
+
var events = {
|
|
284
|
+
onClick: onClick,
|
|
285
|
+
onContextMenu: onContextMenu,
|
|
286
|
+
onMouseOver: onMouseOver,
|
|
287
|
+
onMouseOut: onMouseOut,
|
|
288
|
+
onFocus: onFocus,
|
|
289
|
+
onBlur: onBlur,
|
|
290
|
+
onMouseMove: onMouseMove
|
|
291
|
+
}; // When trigger is disabled, no predefined event listeners are added.
|
|
292
|
+
|
|
293
|
+
if (disabled || readOnly || plaintext || trigger === 'none') {
|
|
294
|
+
return events;
|
|
295
|
+
} // Get the cursor position through onMouseMove.
|
|
296
|
+
// https://rsuitejs.com/components/tooltip/#follow-cursor
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
if (followCursor) {
|
|
300
|
+
events.onMouseMove = (0, _utils.createChainedFunction)(handledMoveOverlay, onMouseMove);
|
|
301
|
+
} // The `click` event is usually used in `toggle` scenarios.
|
|
302
|
+
// The first click will open and the second click will close.
|
|
303
|
+
|
|
290
304
|
|
|
291
|
-
if (!disabled && !readOnly && !plaintext) {
|
|
292
305
|
if ((0, _isOneOf.default)('click', trigger)) {
|
|
293
|
-
|
|
294
|
-
|
|
306
|
+
events.onClick = (0, _utils.createChainedFunction)(handleOpenState, events.onClick);
|
|
307
|
+
return events;
|
|
308
|
+
} // The difference between it and the click event is that it does not trigger the close.
|
|
295
309
|
|
|
296
|
-
if ((0, _isOneOf.default)('contextMenu', trigger)) {
|
|
297
|
-
triggerEvents.onContextMenu = (0, _utils.createChainedFunction)(preventDefault, handleOpenState, triggerEvents.onContextMenu);
|
|
298
|
-
}
|
|
299
310
|
|
|
300
311
|
if ((0, _isOneOf.default)('active', trigger)) {
|
|
301
|
-
|
|
312
|
+
events.onClick = (0, _utils.createChainedFunction)(handleDelayedOpen, events.onClick);
|
|
313
|
+
return events;
|
|
302
314
|
}
|
|
303
315
|
|
|
304
316
|
if ((0, _isOneOf.default)('hover', trigger)) {
|
|
305
|
-
var onMouseOverListener =
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
if (trigger !== 'none') {
|
|
309
|
-
onMouseOverListener = function onMouseOverListener(e) {
|
|
310
|
-
return onMouseEventHandler(handleDelayedOpen, e);
|
|
311
|
-
};
|
|
317
|
+
var onMouseOverListener = function onMouseOverListener(e) {
|
|
318
|
+
return onMouseEventHandler(handleDelayedOpen, e);
|
|
319
|
+
};
|
|
312
320
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
}
|
|
321
|
+
var onMouseOutListener = function onMouseOutListener(e) {
|
|
322
|
+
return onMouseEventHandler(handleDelayedClose, e);
|
|
323
|
+
};
|
|
317
324
|
|
|
318
|
-
|
|
319
|
-
|
|
325
|
+
events.onMouseOver = (0, _utils.createChainedFunction)(onMouseOverListener, events.onMouseOver);
|
|
326
|
+
events.onMouseOut = (0, _utils.createChainedFunction)(onMouseOutListener, events.onMouseOut);
|
|
320
327
|
}
|
|
321
328
|
|
|
322
329
|
if ((0, _isOneOf.default)('focus', trigger)) {
|
|
323
|
-
|
|
324
|
-
|
|
330
|
+
events.onFocus = (0, _utils.createChainedFunction)(handleDelayedOpen, events.onFocus);
|
|
331
|
+
events.onBlur = (0, _utils.createChainedFunction)(handleDelayedClose, events.onBlur);
|
|
325
332
|
}
|
|
326
333
|
|
|
327
|
-
if (
|
|
328
|
-
|
|
334
|
+
if ((0, _isOneOf.default)('contextMenu', trigger)) {
|
|
335
|
+
events.onContextMenu = (0, _utils.createChainedFunction)(preventDefault, handleOpenState, events.onContextMenu);
|
|
329
336
|
}
|
|
330
|
-
|
|
337
|
+
|
|
338
|
+
return events;
|
|
339
|
+
}, [disabled, followCursor, handleDelayedClose, handleDelayedOpen, handleOpenState, handledMoveOverlay, onBlur, onClick, onContextMenu, onFocus, onMouseMove, onMouseOut, onMouseOver, plaintext, preventDefault, readOnly, trigger]);
|
|
331
340
|
|
|
332
341
|
var renderOverlay = function renderOverlay() {
|
|
333
342
|
var overlayProps = (0, _extends2.default)({}, rest, {
|
|
@@ -19,7 +19,7 @@ export interface DropdownMenuProps<Multiple = false> extends StandardProps, Omit
|
|
|
19
19
|
rowHeight?: number;
|
|
20
20
|
rowGroupHeight?: number;
|
|
21
21
|
virtualized?: boolean;
|
|
22
|
-
listProps?: ListProps
|
|
22
|
+
listProps?: Partial<ListProps>;
|
|
23
23
|
/** Custom selected option */
|
|
24
24
|
renderMenuItem?: (itemLabel: React.ReactNode, item: any) => React.ReactNode;
|
|
25
25
|
renderMenuGroup?: (title: React.ReactNode, item: any) => React.ReactNode;
|
|
@@ -15,7 +15,7 @@ export interface PickerToggleProps extends ToggleButtonProps {
|
|
|
15
15
|
readOnly?: boolean;
|
|
16
16
|
plaintext?: boolean;
|
|
17
17
|
tabIndex?: number;
|
|
18
|
-
|
|
18
|
+
editable?: boolean;
|
|
19
19
|
inputPlaceholder?: string;
|
|
20
20
|
inputMask?: (string | RegExp)[];
|
|
21
21
|
onInputChange?: (value: string, event: React.ChangeEvent) => void;
|
|
@@ -51,12 +51,12 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
51
51
|
readOnly = props.readOnly,
|
|
52
52
|
plaintext = props.plaintext,
|
|
53
53
|
hasValue = props.hasValue,
|
|
54
|
+
editable = props.editable,
|
|
54
55
|
cleanableProp = props.cleanable,
|
|
55
56
|
_props$tabIndex = props.tabIndex,
|
|
56
|
-
|
|
57
|
+
tabIndexProp = _props$tabIndex === void 0 ? editable ? -1 : 0 : _props$tabIndex,
|
|
57
58
|
id = props.id,
|
|
58
59
|
value = props.value,
|
|
59
|
-
input = props.input,
|
|
60
60
|
inputPlaceholder = props.inputPlaceholder,
|
|
61
61
|
inputValueProp = props.inputValue,
|
|
62
62
|
_props$inputMask = props.inputMask,
|
|
@@ -74,8 +74,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
74
74
|
_props$caretAs = props.caretAs,
|
|
75
75
|
caretAs = _props$caretAs === void 0 ? caretComponent : _props$caretAs,
|
|
76
76
|
label = props.label,
|
|
77
|
-
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["active", "as", "classPrefix", "children", "caret", "className", "disabled", "readOnly", "plaintext", "hasValue", "cleanable", "tabIndex", "id", "value", "
|
|
77
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(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"]);
|
|
78
78
|
var inputRef = (0, _react.useRef)(null);
|
|
79
|
+
var comboboxRef = (0, _react.useRef)(null);
|
|
79
80
|
|
|
80
81
|
var _useState = (0, _react.useState)(false),
|
|
81
82
|
activeState = _useState[0],
|
|
@@ -95,30 +96,46 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
95
96
|
setInputValue = _useState2[1];
|
|
96
97
|
|
|
97
98
|
(0, _react.useEffect)(function () {
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
if (comboboxRef.current) {
|
|
100
|
+
var _value = getInputValue();
|
|
101
|
+
|
|
102
|
+
setInputValue(_value);
|
|
103
|
+
}
|
|
100
104
|
}, [getInputValue]);
|
|
101
105
|
var classes = merge(className, withClassPrefix({
|
|
102
106
|
active: activeProp || activeState
|
|
103
107
|
}));
|
|
104
108
|
var handleFocus = (0, _react.useCallback)(function (event) {
|
|
105
109
|
setActive(true);
|
|
106
|
-
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
107
110
|
|
|
108
|
-
if (
|
|
109
|
-
|
|
111
|
+
if (editable) {
|
|
112
|
+
// Avoid firing the onFocus event twice when DatePicker and DateRangePicker allow keyboard input.
|
|
113
|
+
if (event.target === inputRef.current) {
|
|
114
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
115
|
+
} // Force the input to be focused and editable.
|
|
110
116
|
|
|
111
|
-
|
|
117
|
+
|
|
118
|
+
if (document.activeElement === comboboxRef.current) {
|
|
119
|
+
var _inputRef$current;
|
|
120
|
+
|
|
121
|
+
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
112
125
|
}
|
|
113
|
-
}, [
|
|
126
|
+
}, [editable, onFocus]);
|
|
114
127
|
var handleBlur = (0, _react.useCallback)(function (event) {
|
|
115
|
-
if (inputRef.current &&
|
|
128
|
+
if (inputRef.current && !editable) {
|
|
129
|
+
setActive(false);
|
|
130
|
+
} // When activeElement is an input, it remains active.
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
if (editable && inputRef.current && document.activeElement !== inputRef.current) {
|
|
116
134
|
setActive(false);
|
|
117
|
-
inputRef.current.blur();
|
|
118
135
|
}
|
|
119
136
|
|
|
120
137
|
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
121
|
-
}, [onBlur]);
|
|
138
|
+
}, [editable, onBlur]);
|
|
122
139
|
|
|
123
140
|
var handleInputBlur = function handleInputBlur(event) {
|
|
124
141
|
setInputValue(getInputValue());
|
|
@@ -126,10 +143,13 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
126
143
|
};
|
|
127
144
|
|
|
128
145
|
var handleClean = (0, _react.useCallback)(function (event) {
|
|
146
|
+
var _inputRef$current2, _comboboxRef$current;
|
|
147
|
+
|
|
129
148
|
event.stopPropagation();
|
|
130
|
-
onClean === null || onClean === void 0 ? void 0 : onClean(event);
|
|
131
|
-
|
|
132
|
-
|
|
149
|
+
onClean === null || onClean === void 0 ? void 0 : onClean(event); // When the value is cleared, the current component is still in focus.
|
|
150
|
+
|
|
151
|
+
editable ? (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus() : (_comboboxRef$current = comboboxRef.current) === null || _comboboxRef$current === void 0 ? void 0 : _comboboxRef$current.focus();
|
|
152
|
+
}, [editable, onClean]);
|
|
133
153
|
var handleInputChange = (0, _react.useCallback)(function (event) {
|
|
134
154
|
var _event$target;
|
|
135
155
|
|
|
@@ -138,10 +158,18 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
138
158
|
onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(value, event);
|
|
139
159
|
}, [onInputChange]);
|
|
140
160
|
var handleInputKeyDown = (0, _react.useCallback)(function (event) {
|
|
141
|
-
if (
|
|
161
|
+
if (editable && event.key === _utils.KEY_VALUES.ENTER) {
|
|
142
162
|
onInputPressEnter === null || onInputPressEnter === void 0 ? void 0 : onInputPressEnter(event);
|
|
143
163
|
}
|
|
144
|
-
}, [onInputPressEnter,
|
|
164
|
+
}, [onInputPressEnter, editable]);
|
|
165
|
+
var renderInput = (0, _react.useCallback)(function (ref, props) {
|
|
166
|
+
return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
|
|
167
|
+
ref: (0, _utils.mergeRefs)(inputRef, ref),
|
|
168
|
+
style: {
|
|
169
|
+
pointerEvents: editable ? undefined : 'none'
|
|
170
|
+
}
|
|
171
|
+
}, props));
|
|
172
|
+
}, [editable]);
|
|
145
173
|
var ToggleCaret = (0, _useToggleCaret.default)(placement);
|
|
146
174
|
var Caret = caretAs !== null && caretAs !== void 0 ? caretAs : ToggleCaret;
|
|
147
175
|
|
|
@@ -154,7 +182,8 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
154
182
|
|
|
155
183
|
var showCleanButton = cleanableProp && hasValue && !readOnly; // When the component is read-only or disabled, the input is not interactive.
|
|
156
184
|
|
|
157
|
-
var inputFocused = readOnly || disabled ? false :
|
|
185
|
+
var inputFocused = readOnly || disabled ? false : editable && activeState;
|
|
186
|
+
var tabIndex = disabled ? undefined : tabIndexProp;
|
|
158
187
|
return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
|
|
159
188
|
role: "combobox",
|
|
160
189
|
"aria-haspopup": "listbox",
|
|
@@ -162,9 +191,9 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
162
191
|
"aria-disabled": disabled,
|
|
163
192
|
"aria-owns": id ? id + "-listbox" : undefined
|
|
164
193
|
}, rest, {
|
|
165
|
-
ref: ref,
|
|
194
|
+
ref: (0, _utils.mergeRefs)(comboboxRef, ref),
|
|
166
195
|
disabled: disabled,
|
|
167
|
-
tabIndex:
|
|
196
|
+
tabIndex: tabIndex,
|
|
168
197
|
className: classes,
|
|
169
198
|
onFocus: !disabled ? handleFocus : null // The debounce is set to 200 to solve the flicker caused by the switch between input and div.
|
|
170
199
|
,
|
|
@@ -181,16 +210,12 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
181
210
|
readOnly: !inputFocused,
|
|
182
211
|
disabled: disabled,
|
|
183
212
|
"aria-controls": id ? id + "-listbox" : undefined,
|
|
184
|
-
tabIndex: -1,
|
|
213
|
+
tabIndex: editable ? 0 : -1,
|
|
185
214
|
className: prefix('textbox', {
|
|
186
215
|
'read-only': !inputFocused
|
|
187
216
|
}),
|
|
188
217
|
placeholder: inputPlaceholder,
|
|
189
|
-
render:
|
|
190
|
-
return /*#__PURE__*/_react.default.createElement("input", (0, _extends2.default)({
|
|
191
|
-
ref: (0, _utils.mergeRefs)(inputRef, ref)
|
|
192
|
-
}, props));
|
|
193
|
-
}
|
|
218
|
+
render: renderInput
|
|
194
219
|
}), children ? /*#__PURE__*/_react.default.createElement("span", {
|
|
195
220
|
className: prefix(hasValue ? 'value' : 'placeholder'),
|
|
196
221
|
"aria-placeholder": typeof children === 'string' ? children : undefined
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { Ref } from 'react';
|
|
2
2
|
import { PickerLocale } from '../locales';
|
|
3
3
|
import { PickerInstance, PickerToggleProps } from '../Picker';
|
|
4
|
+
import { ListProps } from '../Picker/VirtualizedList';
|
|
4
5
|
import { FormControlPickerProps, ItemDataType } from '../@types/common';
|
|
5
|
-
import { ListProps } from 'react-virtualized/dist/commonjs/List';
|
|
6
6
|
export interface SelectProps<T> {
|
|
7
7
|
/** Set group condition key in data */
|
|
8
8
|
groupBy?: string;
|
|
@@ -14,7 +14,7 @@ export interface SelectProps<T> {
|
|
|
14
14
|
* List-related properties in `react-virtualized`
|
|
15
15
|
* https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#prop-types
|
|
16
16
|
*/
|
|
17
|
-
listProps?: ListProps
|
|
17
|
+
listProps?: Partial<ListProps>;
|
|
18
18
|
/** Custom search rules. */
|
|
19
19
|
searchBy?: (keyword: string, label: React.ReactNode, item: ItemDataType) => boolean;
|
|
20
20
|
/** Sort options */
|
|
@@ -97,4 +97,14 @@ _react.default.createElement(_SelectPicker.default, {
|
|
|
97
97
|
return /*#__PURE__*/_react.default.createElement("div", null);
|
|
98
98
|
},
|
|
99
99
|
data: []
|
|
100
|
+
}); // Override the default value of listProps.
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
/*#__PURE__*/
|
|
104
|
+
_react.default.createElement(_SelectPicker.default, {
|
|
105
|
+
data: [],
|
|
106
|
+
virtualized: true,
|
|
107
|
+
listProps: {
|
|
108
|
+
rowHeight: 70
|
|
109
|
+
}
|
|
100
110
|
});
|
package/cjs/Tree/Tree.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { StandardProps, ItemDataType, RsRefForwardingComponent } from '../@types/common';
|
|
3
|
-
import { ListProps } from '
|
|
3
|
+
import { ListProps } from '../Picker/VirtualizedList';
|
|
4
4
|
/**
|
|
5
5
|
* Tree Node Drag Type
|
|
6
6
|
*/
|
|
@@ -50,7 +50,7 @@ export interface TreeBaseProps<ValueType = string | number, ItemDataType = Recor
|
|
|
50
50
|
* List-related properties in `react-virtualized`
|
|
51
51
|
* https://github.com/bvaughn/react-virtualized/blob/master/docs/List.md#prop-types
|
|
52
52
|
*/
|
|
53
|
-
listProps?: ListProps
|
|
53
|
+
listProps?: Partial<ListProps>;
|
|
54
54
|
/** Expand all nodes By default */
|
|
55
55
|
defaultExpandAll?: boolean;
|
|
56
56
|
/** searchKeyword (Controlled) */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _react = _interopRequireDefault(require("react"));
|
|
6
|
+
|
|
7
|
+
var _Tree = _interopRequireDefault(require("../Tree"));
|
|
8
|
+
|
|
9
|
+
// Override the default value of listProps.
|
|
10
|
+
|
|
11
|
+
/*#__PURE__*/
|
|
12
|
+
_react.default.createElement(_Tree.default, {
|
|
13
|
+
data: [],
|
|
14
|
+
virtualized: true,
|
|
15
|
+
listProps: {
|
|
16
|
+
rowHeight: 70
|
|
17
|
+
}
|
|
18
|
+
});
|