rsuite 5.31.0 → 5.32.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 +19 -0
- package/Calendar/styles/index.less +3 -2
- package/Toggle/styles/mixin.less +14 -0
- package/cjs/Calendar/Calendar.d.ts +3 -3
- package/cjs/Calendar/Calendar.js +4 -4
- package/cjs/Calendar/CalendarContainer.d.ts +2 -2
- package/cjs/Calendar/CalendarContainer.js +8 -11
- package/cjs/Calendar/MonthDropdown.js +1 -1
- package/cjs/Cascader/Cascader.d.ts +2 -2
- package/cjs/Cascader/Cascader.js +83 -71
- package/cjs/Cascader/DropdownMenu.d.ts +6 -2
- package/cjs/Cascader/DropdownMenu.js +8 -4
- package/cjs/Cascader/utils.d.ts +52 -17
- package/cjs/Cascader/utils.js +99 -138
- package/cjs/DatePicker/DatePicker.d.ts +3 -1
- package/cjs/DatePicker/DatePicker.js +4 -5
- package/cjs/DateRangePicker/Calendar.d.ts +1 -0
- package/cjs/DateRangePicker/Calendar.js +4 -5
- package/cjs/DateRangePicker/DateRangePicker.d.ts +3 -1
- package/cjs/DateRangePicker/DateRangePicker.js +4 -1
- package/cjs/MultiCascader/DropdownMenu.d.ts +2 -2
- package/cjs/MultiCascader/MultiCascader.d.ts +1 -1
- package/cjs/MultiCascader/MultiCascader.js +12 -7
- package/cjs/MultiCascader/utils.d.ts +2 -2
- package/cjs/MultiCascader/utils.js +3 -3
- package/cjs/Picker/utils.d.ts +4 -3
- package/cjs/Picker/utils.js +8 -4
- package/cjs/locales/ru_RU.js +6 -6
- package/cjs/utils/getDataGroupBy.js +1 -1
- package/cjs/utils/treeUtils.d.ts +5 -1
- package/cjs/utils/treeUtils.js +31 -6
- package/cjs/utils/useMap.d.ts +6 -0
- package/cjs/utils/useMap.js +35 -0
- package/dist/rsuite-no-reset-rtl.css +31 -2
- 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 +31 -2
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +31 -2
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +31 -2
- package/dist/rsuite.js +187 -15
- 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/Calendar.d.ts +3 -3
- package/esm/Calendar/Calendar.js +6 -6
- package/esm/Calendar/CalendarContainer.d.ts +2 -2
- package/esm/Calendar/CalendarContainer.js +10 -13
- package/esm/Calendar/MonthDropdown.js +1 -1
- package/esm/Cascader/Cascader.d.ts +2 -2
- package/esm/Cascader/Cascader.js +85 -75
- package/esm/Cascader/DropdownMenu.d.ts +6 -2
- package/esm/Cascader/DropdownMenu.js +8 -4
- package/esm/Cascader/utils.d.ts +52 -17
- package/esm/Cascader/utils.js +100 -135
- package/esm/DatePicker/DatePicker.d.ts +3 -1
- package/esm/DatePicker/DatePicker.js +4 -5
- package/esm/DateRangePicker/Calendar.d.ts +1 -0
- package/esm/DateRangePicker/Calendar.js +5 -6
- package/esm/DateRangePicker/DateRangePicker.d.ts +3 -1
- package/esm/DateRangePicker/DateRangePicker.js +4 -1
- package/esm/MultiCascader/DropdownMenu.d.ts +2 -2
- package/esm/MultiCascader/MultiCascader.d.ts +1 -1
- package/esm/MultiCascader/MultiCascader.js +12 -7
- package/esm/MultiCascader/utils.d.ts +2 -2
- package/esm/MultiCascader/utils.js +4 -4
- package/esm/Picker/utils.d.ts +4 -3
- package/esm/Picker/utils.js +8 -4
- package/esm/locales/ru_RU.js +6 -6
- package/esm/utils/getDataGroupBy.js +2 -2
- package/esm/utils/treeUtils.d.ts +5 -1
- package/esm/utils/treeUtils.js +30 -6
- package/esm/utils/useMap.d.ts +6 -0
- package/esm/utils/useMap.js +29 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
# [5.32.0](https://github.com/rsuite/rsuite/compare/v5.31.1...v5.32.0) (2023-04-21)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
- **build:** fix broken lodash currying in CDN bundles ([#3159](https://github.com/rsuite/rsuite/issues/3159)) ([896a9d5](https://github.com/rsuite/rsuite/commit/896a9d53cf2c1e0140e43eea024c4f0361c04328))
|
|
6
|
+
- **Cascader:** avoid mutating data prop ([#3157](https://github.com/rsuite/rsuite/issues/3157)) ([6d13318](https://github.com/rsuite/rsuite/commit/6d133185ea1c65b47b35da61499d5cff77dde122))
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **DateRangePicker:** add `limitStartYear` prop ([#3163](https://github.com/rsuite/rsuite/issues/3163)) ([fd27df2](https://github.com/rsuite/rsuite/commit/fd27df21e1c36372ea8b444f79521c901a65780c))
|
|
11
|
+
|
|
12
|
+
## [5.31.1](https://github.com/rsuite/rsuite/compare/v5.31.0...v5.31.1) (2023-04-14)
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
- **Calendar:** fix style errors that are not as designed ([#3146](https://github.com/rsuite/rsuite/issues/3146)) ([f3fe484](https://github.com/rsuite/rsuite/commit/f3fe484a8f63e877c517061e5911116d3107b68b))
|
|
17
|
+
- **i18n:** update ru_RU locale ([#3153](https://github.com/rsuite/rsuite/issues/3153)) ([5c626a9](https://github.com/rsuite/rsuite/commit/5c626a99ca70d9e30836b02f81b90a37f5f2de2d))
|
|
18
|
+
- **Toggle:** fix spinner size in sm/lg Toggles ([#3156](https://github.com/rsuite/rsuite/issues/3156)) ([896ee49](https://github.com/rsuite/rsuite/commit/896ee492bbdd2277dbe23f6667305ceaf9154a8a))
|
|
19
|
+
|
|
1
20
|
# [5.31.0](https://github.com/rsuite/rsuite/compare/v5.30.0...v5.31.0) (2023-04-07)
|
|
2
21
|
|
|
3
22
|
### Bug Fixes
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
&-bordered &-table-row:not(:last-child) &-table-cell,
|
|
21
|
-
&-bordered &-table-header-row &-table-cell {
|
|
21
|
+
&-bordered &-table-header-row &-table-header-cell {
|
|
22
22
|
border-bottom: 1px solid var(--rs-border-secondary);
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
padding-right: 0;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
&-panel &-table-header-row &-table-cell-content {
|
|
66
|
+
&-panel &-table-header-row &-table-header-cell-content {
|
|
67
67
|
padding-top: 8px; // padding + border = 10px
|
|
68
68
|
padding-bottom: 8px;
|
|
69
69
|
}
|
|
@@ -420,6 +420,7 @@
|
|
|
420
420
|
|
|
421
421
|
// Table header row
|
|
422
422
|
.rs-calendar-table-header-cell-content {
|
|
423
|
+
display: inline-block;
|
|
423
424
|
color: var(--rs-text-secondary);
|
|
424
425
|
font-size: @font-size-small;
|
|
425
426
|
line-height: @line-height-small;
|
package/Toggle/styles/mixin.less
CHANGED
|
@@ -6,6 +6,20 @@
|
|
|
6
6
|
height: @handle-diameter;
|
|
7
7
|
left: @toggle-handle-gap;
|
|
8
8
|
top: @toggle-handle-gap;
|
|
9
|
+
|
|
10
|
+
.rs-loader-spin,
|
|
11
|
+
.rs-loader-spin::before,
|
|
12
|
+
.rs-loader-spin::after {
|
|
13
|
+
width: @handle-diameter;
|
|
14
|
+
height: @handle-diameter;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
& when (@handle-diameter < 16px) {
|
|
18
|
+
.rs-loader-spin::before,
|
|
19
|
+
.rs-loader-spin::after {
|
|
20
|
+
border-width: 2px;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
9
23
|
}
|
|
10
24
|
|
|
11
25
|
.rs-toggle-presentation {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
2
|
+
import CalendarContainer from './CalendarContainer';
|
|
3
3
|
import { CalendarLocale } from '../locales';
|
|
4
4
|
import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
|
|
5
5
|
export interface CalendarProps extends WithAsProps {
|
|
@@ -24,5 +24,5 @@ export interface CalendarProps extends WithAsProps {
|
|
|
24
24
|
/** Custom render calendar cells */
|
|
25
25
|
renderCell?: (date: Date) => React.ReactNode;
|
|
26
26
|
}
|
|
27
|
-
declare const
|
|
28
|
-
export default
|
|
27
|
+
declare const Calendar: RsRefForwardingComponent<typeof CalendarContainer, CalendarProps>;
|
|
28
|
+
export default Calendar;
|
package/cjs/Calendar/Calendar.js
CHANGED
|
@@ -27,7 +27,7 @@ var _utils = require("../utils");
|
|
|
27
27
|
|
|
28
28
|
var _useCalendarDate2 = _interopRequireDefault(require("./useCalendarDate"));
|
|
29
29
|
|
|
30
|
-
var
|
|
30
|
+
var Calendar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
31
31
|
var _props$as = props.as,
|
|
32
32
|
Component = _props$as === void 0 ? _CalendarContainer.default : _props$as,
|
|
33
33
|
bordered = props.bordered,
|
|
@@ -115,8 +115,8 @@ var CalendarPanel = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
115
115
|
}));
|
|
116
116
|
});
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
Calendar.displayName = 'Calendar';
|
|
119
|
+
Calendar.propTypes = {
|
|
120
120
|
value: _propTypes.default.instanceOf(Date),
|
|
121
121
|
defaultValue: _propTypes.default.instanceOf(Date),
|
|
122
122
|
isoWeek: _propTypes.default.bool,
|
|
@@ -129,5 +129,5 @@ CalendarPanel.propTypes = {
|
|
|
129
129
|
onSelect: _propTypes.default.func,
|
|
130
130
|
renderCell: _propTypes.default.func
|
|
131
131
|
};
|
|
132
|
-
var _default =
|
|
132
|
+
var _default = Calendar;
|
|
133
133
|
exports.default = _default;
|
|
@@ -30,12 +30,12 @@ export interface CalendarProps extends WithAsProps, Omit<HTMLAttributes<HTMLDivE
|
|
|
30
30
|
hideSeconds?: (second: number, date: Date) => boolean;
|
|
31
31
|
/** The value that mouse hover on in range selection */
|
|
32
32
|
hoverRangeValue?: [Date, Date];
|
|
33
|
-
/** Is it in the same month as today */
|
|
34
|
-
inSameMonth?: (date: Date) => boolean;
|
|
35
33
|
/** ISO 8601 standard, each calendar week begins on Monday and Sunday on the seventh day */
|
|
36
34
|
isoWeek?: boolean;
|
|
37
35
|
/** Limit showing how many years in the future */
|
|
38
36
|
limitEndYear?: number;
|
|
37
|
+
/** Limit showing how many years in the past */
|
|
38
|
+
limitStartYear?: number;
|
|
39
39
|
/** Custom locale */
|
|
40
40
|
locale: CalendarLocale;
|
|
41
41
|
/** Callback after the date has changed */
|
|
@@ -48,10 +48,10 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
48
48
|
disabledForward = props.disabledForward,
|
|
49
49
|
format = props.format,
|
|
50
50
|
hoverRangeValue = props.hoverRangeValue,
|
|
51
|
-
inSameMonth = props.inSameMonth,
|
|
52
51
|
_props$isoWeek = props.isoWeek,
|
|
53
52
|
isoWeek = _props$isoWeek === void 0 ? false : _props$isoWeek,
|
|
54
53
|
limitEndYear = props.limitEndYear,
|
|
54
|
+
limitStartYear = props.limitStartYear,
|
|
55
55
|
locale = props.locale,
|
|
56
56
|
onChangeMonth = props.onChangeMonth,
|
|
57
57
|
onChangeTime = props.onChangeTime,
|
|
@@ -69,7 +69,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
69
69
|
showMeridian = props.showMeridian,
|
|
70
70
|
showWeekNumbers = props.showWeekNumbers,
|
|
71
71
|
inline = props.inline,
|
|
72
|
-
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "
|
|
72
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "className", "classPrefix", "dateRange", "disabledBackward", "defaultState", "disabledDate", "disabledForward", "format", "hoverRangeValue", "isoWeek", "limitEndYear", "limitStartYear", "locale", "onChangeMonth", "onChangeTime", "onMouseMove", "onMoveBackward", "onMoveForward", "onSelect", "onToggleMeridian", "onToggleMonthDropdown", "onToggleTimeDropdown", "calendarDate", "renderCell", "renderTitle", "renderToolbar", "showMeridian", "showWeekNumbers", "inline"]);
|
|
73
73
|
|
|
74
74
|
var _useClassNames = (0, _utils.useClassNames)(classPrefix),
|
|
75
75
|
withClassPrefix = _useClassNames.withClassPrefix,
|
|
@@ -129,12 +129,8 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
129
129
|
var showTime = calendarState === _useCalendarState2.CalendarState.TIME || onlyShowTime;
|
|
130
130
|
var showMonth = calendarState === _useCalendarState2.CalendarState.MONTH || onlyShowMonth;
|
|
131
131
|
var inSameThisMonthDate = (0, _react.useCallback)(function (date) {
|
|
132
|
-
return (0,
|
|
133
|
-
|
|
134
|
-
}, function (d) {
|
|
135
|
-
return (0, _dateUtils.isSameMonth)(d, date);
|
|
136
|
-
})(date);
|
|
137
|
-
}, []);
|
|
132
|
+
return (0, _dateUtils.isSameMonth)(calendarDate, date);
|
|
133
|
+
}, [calendarDate]);
|
|
138
134
|
var calendarClasses = merge(className, withClassPrefix({
|
|
139
135
|
'time-view': showTime,
|
|
140
136
|
'month-view': showMonth,
|
|
@@ -152,7 +148,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
152
148
|
disabledDate: isDisabledDate,
|
|
153
149
|
format: format,
|
|
154
150
|
hoverRangeValue: hoverRangeValue,
|
|
155
|
-
inSameMonth:
|
|
151
|
+
inSameMonth: inSameThisMonthDate,
|
|
156
152
|
isoWeek: isoWeek,
|
|
157
153
|
locale: locale,
|
|
158
154
|
onChangeMonth: handleChangeMonth,
|
|
@@ -163,7 +159,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
163
159
|
showWeekNumbers: showWeekNumbers,
|
|
164
160
|
inline: inline
|
|
165
161
|
};
|
|
166
|
-
}, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue,
|
|
162
|
+
}, [calendarDate, dateRange, format, handleChangeMonth, hoverRangeValue, inSameThisMonthDate, inline, isDisabledDate, isoWeek, locale, onChangeTime, onMouseMove, onSelect, renderCell, showWeekNumbers]);
|
|
167
163
|
return /*#__PURE__*/_react.default.createElement(_CalendarContext.CalendarProvider, {
|
|
168
164
|
value: contextValue
|
|
169
165
|
}, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, (0, _dateUtils.omitHideDisabledProps)(rest), {
|
|
@@ -187,6 +183,7 @@ var CalendarContainer = /*#__PURE__*/_react.default.forwardRef(function (props,
|
|
|
187
183
|
}), renderDate && /*#__PURE__*/_react.default.createElement(_CalendarBody.default, null), renderMonth && /*#__PURE__*/_react.default.createElement(_MonthDropdown.default, {
|
|
188
184
|
show: showMonth,
|
|
189
185
|
limitEndYear: limitEndYear,
|
|
186
|
+
limitStartYear: limitStartYear,
|
|
190
187
|
disabledMonth: isDisabledDate
|
|
191
188
|
}), renderTime && /*#__PURE__*/_react.default.createElement(_TimeDropdown.default, (0, _extends2.default)({}, timeDropdownProps, {
|
|
192
189
|
show: showTime,
|
|
@@ -210,9 +207,9 @@ CalendarContainer.propTypes = {
|
|
|
210
207
|
hideHours: _propTypes.default.func,
|
|
211
208
|
hideMinutes: _propTypes.default.func,
|
|
212
209
|
hideSeconds: _propTypes.default.func,
|
|
213
|
-
inSameMonth: _propTypes.default.func,
|
|
214
210
|
isoWeek: _propTypes.default.bool,
|
|
215
211
|
limitEndYear: _propTypes.default.number,
|
|
212
|
+
limitStartYear: _propTypes.default.number,
|
|
216
213
|
locale: _propTypes.default.object,
|
|
217
214
|
onChangeMonth: _propTypes.default.func,
|
|
218
215
|
onChangeTime: _propTypes.default.func,
|
|
@@ -66,7 +66,7 @@ var MonthDropdown = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
66
66
|
|
|
67
67
|
var thisYear = _utils.DateUtils.getYear(new Date());
|
|
68
68
|
|
|
69
|
-
var startYear = limitStartYear ? thisYear - limitStartYear : 1900;
|
|
69
|
+
var startYear = limitStartYear ? thisYear - limitStartYear + 1 : 1900;
|
|
70
70
|
var rowCount = (0, _react.useMemo)(function () {
|
|
71
71
|
var endYear = thisYear + limitEndYear;
|
|
72
72
|
return endYear - startYear;
|
|
@@ -15,7 +15,7 @@ export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T |
|
|
|
15
15
|
/** When true, make the parent node selectable */
|
|
16
16
|
parentSelectable?: boolean;
|
|
17
17
|
/** Custom render menu */
|
|
18
|
-
renderMenu?: (items: ItemDataType[], menu: React.ReactNode, parentNode?: any, layer?: number) => React.ReactNode;
|
|
18
|
+
renderMenu?: (items: readonly ItemDataType[], menu: React.ReactNode, parentNode?: any, layer?: number) => React.ReactNode;
|
|
19
19
|
/** Custom render menu items */
|
|
20
20
|
renderMenuItem?: (itemLabel: React.ReactNode, item: ItemDataType) => React.ReactNode;
|
|
21
21
|
/** Custom render search items */
|
|
@@ -29,7 +29,7 @@ export interface CascaderProps<T = ValueType> extends FormControlPickerProps<T |
|
|
|
29
29
|
/** Called when searching */
|
|
30
30
|
onSearch?: (searchKeyword: string, event: React.SyntheticEvent) => void;
|
|
31
31
|
/** Asynchronously load the children of the tree node. */
|
|
32
|
-
getChildren?: (node: ItemDataType) => ItemDataType[] | Promise<ItemDataType[]>;
|
|
32
|
+
getChildren?: (node: ItemDataType<T>) => ItemDataType<T>[] | Promise<ItemDataType<T>[]>;
|
|
33
33
|
}
|
|
34
34
|
export interface CascaderComponent {
|
|
35
35
|
<T>(props: CascaderProps<T> & {
|
package/cjs/Cascader/Cascader.js
CHANGED
|
@@ -13,6 +13,8 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
13
13
|
|
|
14
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
15
15
|
|
|
16
|
+
var _reactUseSet = require("react-use-set");
|
|
17
|
+
|
|
16
18
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
17
19
|
|
|
18
20
|
var _omit = _interopRequireDefault(require("lodash/omit"));
|
|
@@ -35,6 +37,8 @@ var _utils2 = require("../utils");
|
|
|
35
37
|
|
|
36
38
|
var _Picker = require("../Picker");
|
|
37
39
|
|
|
40
|
+
var _useMap = require("../utils/useMap");
|
|
41
|
+
|
|
38
42
|
var emptyArray = [];
|
|
39
43
|
|
|
40
44
|
var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
@@ -94,10 +98,6 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
94
98
|
active = _useState[0],
|
|
95
99
|
setActive = _useState[1];
|
|
96
100
|
|
|
97
|
-
var _useState2 = (0, _react.useState)((0, _treeUtils.flattenTree)(data, childrenKey)),
|
|
98
|
-
flattenData = _useState2[0],
|
|
99
|
-
setFlattenData = _useState2[1];
|
|
100
|
-
|
|
101
101
|
var triggerRef = (0, _react.useRef)(null);
|
|
102
102
|
var overlayRef = (0, _react.useRef)(null);
|
|
103
103
|
var targetRef = (0, _react.useRef)(null);
|
|
@@ -107,25 +107,47 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
107
107
|
value = _ref[0],
|
|
108
108
|
setValue = _ref[1];
|
|
109
109
|
|
|
110
|
+
var isMounted = (0, _utils2.useIsMounted)();
|
|
111
|
+
var loadingItemsSet = (0, _reactUseSet.useSet)();
|
|
112
|
+
var asyncChildrenMap = (0, _useMap.useMap)();
|
|
113
|
+
var parentMap = (0, _react.useMemo)(function () {
|
|
114
|
+
return (0, _utils.getParentMap)(data, function (item) {
|
|
115
|
+
var _asyncChildrenMap$get;
|
|
116
|
+
|
|
117
|
+
return (_asyncChildrenMap$get = asyncChildrenMap.get(item)) !== null && _asyncChildrenMap$get !== void 0 ? _asyncChildrenMap$get : item[childrenKey];
|
|
118
|
+
});
|
|
119
|
+
}, [asyncChildrenMap, childrenKey, data]);
|
|
120
|
+
var flattenedData = (0, _react.useMemo)(function () {
|
|
121
|
+
return (0, _treeUtils.flattenTree)(data, function (item) {
|
|
122
|
+
var _asyncChildrenMap$get2;
|
|
123
|
+
|
|
124
|
+
return (_asyncChildrenMap$get2 = asyncChildrenMap.get(item)) !== null && _asyncChildrenMap$get2 !== void 0 ? _asyncChildrenMap$get2 : item[childrenKey];
|
|
125
|
+
});
|
|
126
|
+
}, [asyncChildrenMap, childrenKey, data]); // The item that focus is on
|
|
127
|
+
|
|
128
|
+
var _useState2 = (0, _react.useState)(),
|
|
129
|
+
activeItem = _useState2[0],
|
|
130
|
+
setActiveItem = _useState2[1];
|
|
131
|
+
|
|
110
132
|
var _usePaths = (0, _utils.usePaths)({
|
|
111
133
|
data: data,
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
134
|
+
activeItem: activeItem,
|
|
135
|
+
selectedItem: flattenedData.find(function (item) {
|
|
136
|
+
return item[valueKey] === value;
|
|
137
|
+
}),
|
|
138
|
+
getParent: function getParent(item) {
|
|
139
|
+
return parentMap.get(item);
|
|
140
|
+
},
|
|
141
|
+
getChildren: function getChildren(item) {
|
|
142
|
+
var _asyncChildrenMap$get3;
|
|
143
|
+
|
|
144
|
+
return (_asyncChildrenMap$get3 = asyncChildrenMap.get(item)) !== null && _asyncChildrenMap$get3 !== void 0 ? _asyncChildrenMap$get3 : item[childrenKey];
|
|
145
|
+
}
|
|
115
146
|
}),
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
removeColumnByIndex = _usePaths.removeColumnByIndex,
|
|
121
|
-
setValueToPaths = _usePaths.setValueToPaths,
|
|
122
|
-
setColumnData = _usePaths.setColumnData,
|
|
123
|
-
setSelectedPaths = _usePaths.setSelectedPaths,
|
|
124
|
-
enforceUpdate = _usePaths.enforceUpdate;
|
|
125
|
-
|
|
126
|
-
(0, _react.useEffect)(function () {
|
|
127
|
-
setFlattenData((0, _treeUtils.flattenTree)(data, childrenKey));
|
|
128
|
-
}, [data, childrenKey]);
|
|
147
|
+
columnsToDisplay = _usePaths.columnsToDisplay,
|
|
148
|
+
pathTowardsActiveItem = _usePaths.pathTowardsActiveItem,
|
|
149
|
+
pathTowardsSelectedItem = _usePaths.pathTowardsSelectedItem;
|
|
150
|
+
|
|
129
151
|
(0, _Picker.usePublicMethods)(ref, {
|
|
130
152
|
triggerRef: triggerRef,
|
|
131
153
|
overlayRef: overlayRef,
|
|
@@ -141,7 +163,7 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
141
163
|
*/
|
|
142
164
|
|
|
143
165
|
|
|
144
|
-
var hasValue =
|
|
166
|
+
var hasValue = pathTowardsSelectedItem.length > 0 || !(0, _isNil.default)(value) && (0, _isFunction.default)(renderValue);
|
|
145
167
|
|
|
146
168
|
var _useClassNames = (0, _utils2.useClassNames)(classPrefix),
|
|
147
169
|
prefix = _useClassNames.prefix,
|
|
@@ -156,15 +178,17 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
156
178
|
return true;
|
|
157
179
|
}
|
|
158
180
|
|
|
159
|
-
|
|
181
|
+
var parent = parentMap.get(item);
|
|
182
|
+
|
|
183
|
+
if (parent && someKeyword(parent)) {
|
|
160
184
|
return true;
|
|
161
185
|
}
|
|
162
186
|
|
|
163
187
|
return false;
|
|
164
|
-
}, [labelKey, searchKeyword]);
|
|
188
|
+
}, [labelKey, parentMap, searchKeyword]);
|
|
165
189
|
var getSearchResult = (0, _react.useCallback)(function (keyword) {
|
|
166
190
|
var items = [];
|
|
167
|
-
var result =
|
|
191
|
+
var result = flattenedData.filter(function (item) {
|
|
168
192
|
if (!parentSelectable && item[childrenKey]) {
|
|
169
193
|
return false;
|
|
170
194
|
}
|
|
@@ -181,19 +205,24 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
181
205
|
}
|
|
182
206
|
|
|
183
207
|
return items;
|
|
184
|
-
}, [childrenKey,
|
|
208
|
+
}, [childrenKey, flattenedData, someKeyword, parentSelectable]); // Used to hover the focuse item when trigger `onKeydown`
|
|
185
209
|
|
|
186
210
|
var _useFocusItemValue = (0, _Picker.useFocusItemValue)(value, {
|
|
187
211
|
rtl: rtl,
|
|
188
|
-
data:
|
|
212
|
+
data: flattenedData,
|
|
189
213
|
valueKey: valueKey,
|
|
190
|
-
defaultLayer:
|
|
214
|
+
defaultLayer: pathTowardsSelectedItem !== null && pathTowardsSelectedItem !== void 0 && pathTowardsSelectedItem.length ? pathTowardsSelectedItem.length - 1 : 0,
|
|
191
215
|
target: function target() {
|
|
192
216
|
return overlayRef.current;
|
|
193
217
|
},
|
|
218
|
+
getParent: function getParent(item) {
|
|
219
|
+
return parentMap.get(item);
|
|
220
|
+
},
|
|
194
221
|
callback: (0, _react.useCallback)(function (value) {
|
|
195
|
-
|
|
196
|
-
|
|
222
|
+
setActiveItem(flattenedData.find(function (item) {
|
|
223
|
+
return item[valueKey] === value;
|
|
224
|
+
}));
|
|
225
|
+
}, [flattenedData, setActiveItem, valueKey])
|
|
197
226
|
}),
|
|
198
227
|
focusItemValue = _useFocusItemValue.focusItemValue,
|
|
199
228
|
setFocusItemValue = _useFocusItemValue.setFocusItemValue,
|
|
@@ -239,12 +268,9 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
239
268
|
return;
|
|
240
269
|
}
|
|
241
270
|
|
|
242
|
-
setColumnData([data]);
|
|
243
271
|
setValue(null);
|
|
244
|
-
setSelectedPaths([]);
|
|
245
|
-
setValueToPaths([]);
|
|
246
272
|
onChange === null || onChange === void 0 ? void 0 : onChange(null, event);
|
|
247
|
-
}, [
|
|
273
|
+
}, [disabled, onChange, setValue]);
|
|
248
274
|
var handleMenuPressEnter = (0, _react.useCallback)(function (event) {
|
|
249
275
|
var focusItem = (0, _treeUtils.findNodeOfTree)(data, function (item) {
|
|
250
276
|
return item[valueKey] === focusItemValue;
|
|
@@ -253,10 +279,9 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
253
279
|
|
|
254
280
|
if (isLeafNode) {
|
|
255
281
|
setValue(focusItemValue);
|
|
256
|
-
setValueToPaths(selectedPaths);
|
|
257
282
|
|
|
258
|
-
if (
|
|
259
|
-
setLayer(
|
|
283
|
+
if (pathTowardsActiveItem.length) {
|
|
284
|
+
setLayer(pathTowardsActiveItem.length - 1);
|
|
260
285
|
}
|
|
261
286
|
|
|
262
287
|
if (!(0, _shallowEqual.default)(value, focusItemValue)) {
|
|
@@ -265,7 +290,7 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
265
290
|
|
|
266
291
|
handleClose();
|
|
267
292
|
}
|
|
268
|
-
}, [childrenKey, data, focusItemValue, handleClose, onChange,
|
|
293
|
+
}, [childrenKey, data, focusItemValue, handleClose, onChange, pathTowardsActiveItem, setLayer, setValue, value, valueKey]);
|
|
269
294
|
var onPickerKeyDown = (0, _Picker.useToggleKeyDownEvent)((0, _extends3.default)({
|
|
270
295
|
toggle: !focusItemValue || !active,
|
|
271
296
|
triggerRef: triggerRef,
|
|
@@ -279,44 +304,32 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
279
304
|
}, rest));
|
|
280
305
|
|
|
281
306
|
var handleSelect = function handleSelect(node, cascadePaths, isLeafNode, event) {
|
|
282
|
-
var _node$childrenKey,
|
|
307
|
+
var _node$childrenKey, _triggerRef$current2;
|
|
283
308
|
|
|
284
309
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
|
|
285
|
-
|
|
286
|
-
var nextValue = node[valueKey];
|
|
287
|
-
var columnIndex = cascadePaths.length; // Lazy load node's children
|
|
310
|
+
setActiveItem(node);
|
|
311
|
+
var nextValue = node[valueKey]; // Lazy load node's children
|
|
288
312
|
|
|
289
|
-
if (typeof getChildren === 'function' && ((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) === 0) {
|
|
290
|
-
node
|
|
313
|
+
if (typeof getChildren === 'function' && ((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) === 0 && !asyncChildrenMap.has(node)) {
|
|
314
|
+
loadingItemsSet.add(node);
|
|
291
315
|
var children = getChildren(node);
|
|
292
316
|
|
|
293
317
|
if (children instanceof Promise) {
|
|
294
318
|
children.then(function (data) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
if (targetRef.current || inline) {
|
|
299
|
-
addColumn(data, columnIndex);
|
|
319
|
+
if (isMounted()) {
|
|
320
|
+
loadingItemsSet.delete(node);
|
|
321
|
+
asyncChildrenMap.set(node, data);
|
|
300
322
|
}
|
|
301
323
|
});
|
|
302
324
|
} else {
|
|
303
|
-
node
|
|
304
|
-
node
|
|
305
|
-
addColumn(children, columnIndex);
|
|
325
|
+
loadingItemsSet.delete(node);
|
|
326
|
+
asyncChildrenMap.set(node, children);
|
|
306
327
|
}
|
|
307
|
-
} else if ((_node$childrenKey2 = node[childrenKey]) !== null && _node$childrenKey2 !== void 0 && _node$childrenKey2.length) {
|
|
308
|
-
addColumn(node[childrenKey], columnIndex);
|
|
309
|
-
} else {
|
|
310
|
-
// Removes subsequent columns of the current column when the clicked node is a leaf node.
|
|
311
|
-
removeColumnByIndex(columnIndex);
|
|
312
328
|
}
|
|
313
329
|
|
|
314
330
|
if (isLeafNode) {
|
|
315
331
|
// Determines whether the option is a leaf node, and if so, closes the picker.
|
|
316
|
-
handleClose();
|
|
317
|
-
// That is, the selected path will be displayed on the button after clicking the child node.
|
|
318
|
-
|
|
319
|
-
setValueToPaths(cascadePaths);
|
|
332
|
+
handleClose();
|
|
320
333
|
setValue(nextValue);
|
|
321
334
|
|
|
322
335
|
if (!(0, _shallowEqual.default)(value, nextValue)) {
|
|
@@ -331,7 +344,6 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
331
344
|
if (parentSelectable && !(0, _shallowEqual.default)(value, nextValue)) {
|
|
332
345
|
setValue(nextValue);
|
|
333
346
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
|
|
334
|
-
setValueToPaths(cascadePaths);
|
|
335
347
|
} // Update menu position
|
|
336
348
|
|
|
337
349
|
|
|
@@ -347,16 +359,15 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
347
359
|
handleClose();
|
|
348
360
|
setSearchKeyword('');
|
|
349
361
|
setValue(nextValue);
|
|
350
|
-
setValueToPaths(nodes);
|
|
351
|
-
enforceUpdate(nextValue);
|
|
352
362
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, nodes, event);
|
|
353
363
|
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue, event);
|
|
354
364
|
};
|
|
355
365
|
|
|
356
366
|
var renderSearchRow = function renderSearchRow(item, key) {
|
|
357
367
|
var regx = new RegExp((0, _utils2.getSafeRegExpString)(searchKeyword), 'ig');
|
|
358
|
-
var nodes = (0,
|
|
359
|
-
|
|
368
|
+
var nodes = (0, _utils.getPathTowardsItem)(item, function (item) {
|
|
369
|
+
return parentMap.get(item);
|
|
370
|
+
});
|
|
360
371
|
var formattedNodes = nodes.map(function (node) {
|
|
361
372
|
var _extends2;
|
|
362
373
|
|
|
@@ -448,12 +459,13 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
448
459
|
menuWidth: menuWidth,
|
|
449
460
|
menuHeight: menuHeight,
|
|
450
461
|
disabledItemValues: disabledItemValues,
|
|
462
|
+
loadingItemsSet: loadingItemsSet,
|
|
451
463
|
valueKey: valueKey,
|
|
452
464
|
labelKey: labelKey,
|
|
453
465
|
childrenKey: childrenKey,
|
|
454
466
|
classPrefix: 'picker-cascader-menu',
|
|
455
|
-
cascadeData:
|
|
456
|
-
cascadePaths:
|
|
467
|
+
cascadeData: columnsToDisplay,
|
|
468
|
+
cascadePaths: pathTowardsActiveItem,
|
|
457
469
|
activeItemValue: value // FIXME make onSelect generic
|
|
458
470
|
,
|
|
459
471
|
onSelect: handleSelect,
|
|
@@ -464,15 +476,15 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
464
476
|
|
|
465
477
|
var selectedElement = placeholder;
|
|
466
478
|
|
|
467
|
-
if (
|
|
479
|
+
if (pathTowardsSelectedItem.length > 0) {
|
|
468
480
|
selectedElement = [];
|
|
469
|
-
|
|
481
|
+
pathTowardsSelectedItem.forEach(function (item, index) {
|
|
470
482
|
var key = item[valueKey] || item[labelKey];
|
|
471
483
|
selectedElement.push( /*#__PURE__*/_react.default.createElement("span", {
|
|
472
484
|
key: key
|
|
473
485
|
}, item[labelKey]));
|
|
474
486
|
|
|
475
|
-
if (index <
|
|
487
|
+
if (index < pathTowardsSelectedItem.length - 1) {
|
|
476
488
|
selectedElement.push( /*#__PURE__*/_react.default.createElement("span", {
|
|
477
489
|
className: "separator",
|
|
478
490
|
key: key + "-separator"
|
|
@@ -482,7 +494,7 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
482
494
|
}
|
|
483
495
|
|
|
484
496
|
if (!(0, _isNil.default)(value) && (0, _isFunction.default)(renderValue)) {
|
|
485
|
-
selectedElement = renderValue(value,
|
|
497
|
+
selectedElement = renderValue(value, pathTowardsSelectedItem, selectedElement); // If renderValue returns null or undefined, hasValue is false.
|
|
486
498
|
|
|
487
499
|
if ((0, _isNil.default)(selectedElement)) {
|
|
488
500
|
hasValue = false;
|
|
@@ -2,19 +2,23 @@ import React from 'react';
|
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { ItemDataType, WithAsProps, RsRefForwardingComponent } from '../@types/common';
|
|
4
4
|
import { ValueType } from './Cascader';
|
|
5
|
+
declare type SetLike<T = unknown> = {
|
|
6
|
+
has(value: T): boolean;
|
|
7
|
+
};
|
|
5
8
|
export interface DropdownMenuProps extends Omit<WithAsProps, 'classPrefix'> {
|
|
6
9
|
classPrefix: string;
|
|
7
10
|
disabledItemValues: ValueType[];
|
|
8
11
|
activeItemValue?: ValueType | null;
|
|
9
12
|
childrenKey: string;
|
|
10
|
-
cascadeData: ItemDataType[][];
|
|
13
|
+
cascadeData: (readonly ItemDataType[])[];
|
|
14
|
+
loadingItemsSet?: SetLike<ItemDataType>;
|
|
11
15
|
cascadePaths: ItemDataType[];
|
|
12
16
|
valueKey: string;
|
|
13
17
|
labelKey: string;
|
|
14
18
|
menuWidth?: number;
|
|
15
19
|
menuHeight?: number | string;
|
|
16
20
|
renderMenuItem?: (itemLabel: React.ReactNode, item: ItemDataType) => React.ReactNode;
|
|
17
|
-
renderMenu?: (items: ItemDataType[], menu: React.ReactNode, parentNode?: ItemDataType, layer?: number) => React.ReactNode;
|
|
21
|
+
renderMenu?: (items: readonly ItemDataType[], menu: React.ReactNode, parentNode?: ItemDataType, layer?: number) => React.ReactNode;
|
|
18
22
|
onSelect?: (node: ItemDataType, cascadePaths: ItemDataType[], isLeafNode: boolean, event: React.MouseEvent) => void;
|
|
19
23
|
}
|
|
20
24
|
declare const DropdownMenu: RsRefForwardingComponent<'div', DropdownMenuProps>;
|
|
@@ -55,12 +55,13 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
55
55
|
cascadeData = _props$cascadeData === void 0 ? emptyArray : _props$cascadeData,
|
|
56
56
|
_props$cascadePaths = props.cascadePaths,
|
|
57
57
|
cascadePaths = _props$cascadePaths === void 0 ? emptyArray : _props$cascadePaths,
|
|
58
|
+
loadingItemsSet = props.loadingItemsSet,
|
|
58
59
|
_props$labelKey = props.labelKey,
|
|
59
60
|
labelKey = _props$labelKey === void 0 ? 'label' : _props$labelKey,
|
|
60
61
|
renderMenu = props.renderMenu,
|
|
61
62
|
renderMenuItem = props.renderMenuItem,
|
|
62
63
|
onSelect = props.onSelect,
|
|
63
|
-
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "activeItemValue", "classPrefix", "className", "childrenKey", "disabledItemValues", "menuWidth", "menuHeight", "valueKey", "cascadeData", "cascadePaths", "labelKey", "renderMenu", "renderMenuItem", "onSelect"]);
|
|
64
|
+
rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "activeItemValue", "classPrefix", "className", "childrenKey", "disabledItemValues", "menuWidth", "menuHeight", "valueKey", "cascadeData", "cascadePaths", "loadingItemsSet", "labelKey", "renderMenu", "renderMenuItem", "onSelect"]);
|
|
64
65
|
|
|
65
66
|
var _useClassNames = (0, _utils.useClassNames)(classPrefix),
|
|
66
67
|
merge = _useClassNames.merge,
|
|
@@ -114,15 +115,18 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
114
115
|
};
|
|
115
116
|
|
|
116
117
|
var renderCascadeNode = function renderCascadeNode(node, index, layer, focus) {
|
|
118
|
+
var _loadingItemsSet$has;
|
|
119
|
+
|
|
117
120
|
var children = node[childrenKey];
|
|
118
121
|
var value = node[valueKey];
|
|
119
122
|
var label = node[labelKey];
|
|
120
123
|
var disabled = disabledItemValues.some(function (disabledValue) {
|
|
121
124
|
return (0, _utils.shallowEqual)(disabledValue, value);
|
|
122
|
-
});
|
|
125
|
+
});
|
|
126
|
+
var loading = (_loadingItemsSet$has = loadingItemsSet === null || loadingItemsSet === void 0 ? void 0 : loadingItemsSet.has(node)) !== null && _loadingItemsSet$has !== void 0 ? _loadingItemsSet$has : false; // Use `value` in keys when If `value` is string or number
|
|
123
127
|
|
|
124
128
|
var onlyKey = typeof value === 'number' || typeof value === 'string' ? value : index;
|
|
125
|
-
var Icon =
|
|
129
|
+
var Icon = loading ? _Spinner.default : rtl ? _AngleLeft.default : _AngleRight.default;
|
|
126
130
|
return /*#__PURE__*/_react.default.createElement(_Picker.DropdownMenuItem, {
|
|
127
131
|
classPrefix: "picker-cascader-menu-item",
|
|
128
132
|
as: 'li',
|
|
@@ -139,7 +143,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
|
|
|
139
143
|
}
|
|
140
144
|
}, renderMenuItem ? renderMenuItem(label, node) : label, children ? /*#__PURE__*/_react.default.createElement(Icon, {
|
|
141
145
|
className: prefix('caret'),
|
|
142
|
-
spin:
|
|
146
|
+
spin: loading
|
|
143
147
|
}) : null);
|
|
144
148
|
};
|
|
145
149
|
|