rsuite 5.21.0 → 5.22.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.
@@ -34,6 +34,17 @@
34
34
  }
35
35
  }
36
36
 
37
+ // Predefined Ranges
38
+ .rs-picker-date-predefined {
39
+ height: 325px;
40
+ border-right: 1px solid var(--rs-border-primary);
41
+ padding: 4px 0;
42
+
43
+ .rs-btn {
44
+ display: block;
45
+ }
46
+ }
47
+
37
48
  // Calendar in DatePicker popup
38
49
  .rs-picker-menu {
39
50
  @calendar-width: (
@@ -60,13 +60,6 @@
60
60
  box-shadow: none;
61
61
  }
62
62
 
63
- // Added transition for hover
64
- &-row,
65
- &-cell-group,
66
- &-cell {
67
- transition: background-color 0.3s linear;
68
- }
69
-
70
63
  &-hover &-row:not(&-row-header):hover,
71
64
  &-hover &-row:hover &-cell-group,
72
65
  &-hover &-row:hover &-cell {
@@ -215,6 +208,18 @@
215
208
  }
216
209
  }
217
210
 
211
+ &-cell-full-text {
212
+ &:hover {
213
+ z-index: 1 !important;
214
+ width: auto !important;
215
+ box-shadow: inset @table-cell-hover-color 0px 0px 2px;
216
+
217
+ .rs-table-cell-content {
218
+ width: auto !important;
219
+ }
220
+ }
221
+ }
222
+
218
223
  &-cell-header-sortable &-cell-content {
219
224
  cursor: pointer;
220
225
  }
@@ -31,6 +31,10 @@ var _useCalendarDate2 = _interopRequireDefault(require("../Calendar/useCalendarD
31
31
 
32
32
  var _Toolbar = _interopRequireDefault(require("./Toolbar"));
33
33
 
34
+ var _Stack = _interopRequireDefault(require("../Stack"));
35
+
36
+ var _PredefinedRanges = _interopRequireDefault(require("./PredefinedRanges"));
37
+
34
38
  var _utils = require("../utils");
35
39
 
36
40
  var _Picker = require("../Picker");
@@ -365,6 +369,13 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
365
369
  onToggleMeridian: handleToggleMeridian
366
370
  }));
367
371
 
372
+ var sideRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
373
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
374
+ })) || [];
375
+ var bottomRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
376
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
377
+ })) || [];
378
+
368
379
  var renderDropdownMenu = function renderDropdownMenu(positionProps, speakerRef) {
369
380
  var left = positionProps.left,
370
381
  top = positionProps.top,
@@ -380,16 +391,27 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
380
391
  ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
381
392
  style: styles,
382
393
  target: triggerRef
383
- }, calendar, /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
394
+ }, /*#__PURE__*/_react.default.createElement(_Stack.default, {
395
+ alignItems: "flex-start"
396
+ }, sideRanges.length > 0 && /*#__PURE__*/_react.default.createElement(_PredefinedRanges.default, {
397
+ direction: "column",
398
+ spacing: 0,
399
+ className: prefix('date-predefined'),
400
+ ranges: sideRanges,
401
+ calendarDate: calendarDate,
402
+ locale: locale,
403
+ disabledShortcut: disabledToolbarHandle,
404
+ onClickShortcut: handleShortcutPageDate
405
+ }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, calendar, /*#__PURE__*/_react.default.createElement(_Toolbar.default, {
384
406
  locale: locale,
385
- ranges: ranges,
407
+ ranges: bottomRanges,
386
408
  calendarDate: calendarDate,
387
409
  disabledOkBtn: disabledToolbarHandle,
388
410
  disabledShortcut: disabledToolbarHandle,
389
411
  onClickShortcut: handleShortcutPageDate,
390
412
  onOk: handleOK,
391
413
  hideOkBtn: oneTap
392
- }));
414
+ }))));
393
415
  };
394
416
 
395
417
  var hasValue = !!value;
@@ -4,6 +4,7 @@ export interface RangeType<T> {
4
4
  label: ReactNode;
5
5
  closeOverlay?: boolean;
6
6
  value: T | ((value: T) => T);
7
+ placement?: 'bottom' | 'left';
7
8
  }
8
9
  export interface InnerRange<T> extends Omit<RangeType<T>, 'value'> {
9
10
  value: T;
@@ -161,6 +161,22 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
161
161
 
162
162
 
163
163
  var selectRangeValueRef = (0, _react.useRef)(null);
164
+ /**
165
+ * Get the time on the second calendar as the end of the date range.
166
+ */
167
+
168
+ var getCalendarEndDatetime = (0, _react.useCallback)(function (date) {
169
+ var getHours = _utils.DateUtils.getHours,
170
+ getMinutes = _utils.DateUtils.getMinutes,
171
+ getSeconds = _utils.DateUtils.getSeconds,
172
+ set = _utils.DateUtils.set;
173
+ var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue[1]);
174
+ return set(date, {
175
+ hours: getHours(calendarEndDate),
176
+ minutes: getMinutes(calendarEndDate),
177
+ seconds: getSeconds(calendarEndDate)
178
+ });
179
+ }, [calendarDate, defaultCalendarValue]);
164
180
  /**
165
181
  * Call this function to update the calendar panel rendering benchmark value.
166
182
  * If params `value` is not passed, it defaults to [new Date(), addMonth(new Date(), 1)].
@@ -168,21 +184,12 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
168
184
 
169
185
  var updateCalendarDateRange = (0, _react.useCallback)(function (selectedDate, calendarKey) {
170
186
  var nextValue = selectedDate;
171
- var shouldRenderTime = _utils.DateUtils.shouldRenderTime,
172
- getHours = _utils.DateUtils.getHours,
173
- getMinutes = _utils.DateUtils.getMinutes,
174
- getSeconds = _utils.DateUtils.getSeconds,
175
- set = _utils.DateUtils.set;
187
+ var shouldRenderTime = _utils.DateUtils.shouldRenderTime;
176
188
 
177
- if (shouldRenderTime(formatStr) && calendarKey === undefined && (selectedDate === null || selectedDate === void 0 ? void 0 : selectedDate.length) === 1) {
178
- var calendarEndDate = (calendarDate === null || calendarDate === void 0 ? void 0 : calendarDate[1]) || (defaultCalendarValue === null || defaultCalendarValue === void 0 ? void 0 : defaultCalendarValue[1]);
179
- var _startDate = selectedDate[0]; // When updating the start date, the time of the end date should keep the time set by the user by default.
189
+ if (shouldRenderTime(formatStr) && calendarKey === undefined && selectedDate !== null && selectedDate !== void 0 && selectedDate.length) {
190
+ var _startDate = selectedDate[0];
180
191
 
181
- var _endDate = set((0, _dateUtils.addMonths)(_startDate, 1), {
182
- hours: getHours(calendarEndDate),
183
- minutes: getMinutes(calendarEndDate),
184
- seconds: getSeconds(calendarEndDate)
185
- });
192
+ var _endDate = getCalendarEndDatetime((0, _dateUtils.addMonths)(_startDate, 1));
186
193
 
187
194
  nextValue = [_startDate, _endDate];
188
195
  }
@@ -191,7 +198,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
191
198
  value: nextValue,
192
199
  calendarKey: calendarKey
193
200
  }));
194
- }, [calendarDate, defaultCalendarValue, formatStr]); // if valueProp changed then update selectValue/hoverValue
201
+ }, [getCalendarEndDatetime, formatStr]); // if valueProp changed then update selectValue/hoverValue
195
202
 
196
203
  (0, _react.useEffect)(function () {
197
204
  setSelectedDates(valueProp !== null && valueProp !== void 0 ? valueProp : []);
@@ -355,19 +362,31 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
355
362
  nextSelectDates = hoverRangeValue;
356
363
  selectRangeValueRef.current = hoverRangeValue;
357
364
  }
358
- } // If user have completed the selection, then sort
365
+ }
359
366
 
367
+ var shouldRenderTime = _utils.DateUtils.shouldRenderTime,
368
+ isAfter = _utils.DateUtils.isAfter;
360
369
 
361
- if (nextSelectDates.length === 2 && _utils.DateUtils.isAfter(nextSelectDates[0], nextSelectDates[1])) {
362
- nextSelectDates.reverse();
370
+ if (nextSelectDates.length === 2) {
371
+ // If user have completed the selection, then sort the selected dates.
372
+ if (isAfter(nextSelectDates[0], nextSelectDates[1])) {
373
+ nextSelectDates.reverse();
374
+ }
375
+
376
+ if (shouldRenderTime(formatStr)) {
377
+ nextSelectDates[1] = getCalendarEndDatetime(nextSelectDates[1]);
378
+ }
379
+
380
+ setHoverDateRange(nextSelectDates);
381
+ } else {
382
+ setHoverDateRange([nextSelectDates[0], nextSelectDates[0]]);
363
383
  }
364
384
 
365
- setHoverDateRange(nextSelectDates.length === 2 ? nextSelectDates : [nextSelectDates[0], nextSelectDates[0]]);
366
385
  setSelectedDates(nextSelectDates);
367
386
  updateCalendarDateRange(nextSelectDates);
368
387
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
369
388
  hasDoneSelect.current = !hasDoneSelect.current;
370
- }, [getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
389
+ }, [formatStr, getCalendarEndDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
371
390
  /**
372
391
  * If `selectValue` changed, there will be the following effects.
373
392
  * 1. Check if the selection is completed.
@@ -4358,6 +4358,15 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner::before {
4358
4358
  .rs-picker-date-inline .rs-calendar {
4359
4359
  height: 286px;
4360
4360
  }
4361
+ .rs-picker-date-predefined {
4362
+ height: 325px;
4363
+ border-left: 1px solid #e5e5ea;
4364
+ border-left: 1px solid var(--rs-border-primary);
4365
+ padding: 4px 0;
4366
+ }
4367
+ .rs-picker-date-predefined .rs-btn {
4368
+ display: block;
4369
+ }
4361
4370
  .rs-picker-menu .rs-picker-toolbar {
4362
4371
  max-width: 100%;
4363
4372
  }
@@ -14277,12 +14286,6 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
14277
14286
  -webkit-box-shadow: none;
14278
14287
  box-shadow: none;
14279
14288
  }
14280
- .rs-table-row,
14281
- .rs-table-cell-group,
14282
- .rs-table-cell {
14283
- -webkit-transition: background-color 0.3s linear;
14284
- transition: background-color 0.3s linear;
14285
- }
14286
14289
  .rs-table-hover .rs-table-row:not(.rs-table-row-header):hover,
14287
14290
  .rs-table-hover .rs-table-row:hover .rs-table-cell-group,
14288
14291
  .rs-table-hover .rs-table-row:hover .rs-table-cell {
@@ -14444,6 +14447,17 @@ textarea.rs-picker-menu .rs-picker-search-bar .rs-picker-search-bar-input {
14444
14447
  border-bottom: 1px solid #f2f2f5 !important;
14445
14448
  border-bottom: 1px solid var(--rs-border-secondary) !important;
14446
14449
  }
14450
+ .rs-table-cell-full-text:hover {
14451
+ z-index: 1 !important;
14452
+ width: auto !important;
14453
+ -webkit-box-shadow: inset #3498ff 0px 0px 2px;
14454
+ -webkit-box-shadow: inset var(--rs-primary-500) 0px 0px 2px;
14455
+ box-shadow: inset #3498ff 0px 0px 2px;
14456
+ box-shadow: inset var(--rs-primary-500) 0px 0px 2px;
14457
+ }
14458
+ .rs-table-cell-full-text:hover .rs-table-cell-content {
14459
+ width: auto !important;
14460
+ }
14447
14461
  .rs-table-cell-header-sortable .rs-table-cell-content {
14448
14462
  cursor: pointer;
14449
14463
  }