rsuite 5.29.0 → 5.30.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.
@@ -9,6 +9,7 @@ import Button from '../Button';
9
9
  import { useClassNames } from '../utils';
10
10
  import { FormattedDate } from '../CustomProvider';
11
11
  import { useCalendarContext } from './CalendarContext';
12
+ import { useDateRangePickerContext } from '../DateRangePicker/DateRangePickerContext';
12
13
  var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
13
14
  var _props$as = props.as,
14
15
  Component = _props$as === void 0 ? 'div' : _props$as,
@@ -39,6 +40,9 @@ var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
39
40
  inline = _useCalendarContext.inline,
40
41
  disabledDate = _useCalendarContext.disabledDate;
41
42
 
43
+ var _useDateRangePickerCo = useDateRangePickerContext(),
44
+ isSelectedIdle = _useDateRangePickerCo.isSelectedIdle;
45
+
42
46
  var _useClassNames = useClassNames(classPrefix),
43
47
  prefix = _useClassNames.prefix,
44
48
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -114,7 +118,9 @@ var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
114
118
  var classes = merge(className, withClassPrefix({
115
119
  'has-month': hasMonth,
116
120
  'has-time': showTime
117
- }));
121
+ })); // If the date is not selected, the time cannot be selected (it only works in DateRangePicker).
122
+
123
+ var disableSelectTime = typeof isSelectedIdle === 'undefined' ? false : !isSelectedIdle;
118
124
  return /*#__PURE__*/React.createElement(Component, _extends({}, rest, {
119
125
  ref: ref,
120
126
  className: classes
@@ -122,13 +128,15 @@ var CalendarHeader = /*#__PURE__*/React.forwardRef(function (props, ref) {
122
128
  className: prefix('time-toolbar')
123
129
  }, /*#__PURE__*/React.createElement(Button, _extends({}, btnProps, {
124
130
  className: timeTitleClasses,
125
- onClick: onToggleTimeDropdown
131
+ onClick: onToggleTimeDropdown,
132
+ disabled: disableSelectTime
126
133
  }), date && /*#__PURE__*/React.createElement(FormattedDate, {
127
134
  date: date,
128
135
  formatStr: getTimeFormat()
129
136
  })), showMeridian && /*#__PURE__*/React.createElement(Button, _extends({}, btnProps, {
130
137
  className: prefix('meridian'),
131
- onClick: onToggleMeridian
138
+ onClick: onToggleMeridian,
139
+ disabled: disableSelectTime
132
140
  }), date && /*#__PURE__*/React.createElement(FormattedDate, {
133
141
  date: date,
134
142
  formatStr: "a"
@@ -272,7 +272,7 @@ var Cascader = /*#__PURE__*/React.forwardRef(function (props, ref) {
272
272
  node.loading = false;
273
273
  node[childrenKey] = data;
274
274
 
275
- if (targetRef.current) {
275
+ if (targetRef.current || inline) {
276
276
  addColumn(data, columnIndex);
277
277
  }
278
278
  });
@@ -18,6 +18,7 @@ import Calendar from './Calendar';
18
18
  import * as disabledDateUtils from './disabledDateUtils';
19
19
  import { getSafeCalendarDate, getMonthHoverRange, getWeekHoverRange, isSameRange } from './utils';
20
20
  import { deprecatePropTypeNew } from '../utils/deprecatePropType';
21
+ import DateRangePickerContext from './DateRangePickerContext';
21
22
  var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
22
23
  var _ref, _ref2, _merge;
23
24
 
@@ -98,7 +99,9 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
98
99
  */
99
100
 
100
101
 
101
- var hasDoneSelect = useRef(true);
102
+ var _useState = useState(true),
103
+ isSelectedIdle = _useState[0],
104
+ setSelectedIdle = _useState[1];
102
105
  /**
103
106
  * The currently selected date range.
104
107
  *
@@ -108,25 +111,26 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
108
111
  *
109
112
  */
110
113
 
111
- var _useState = useState((_ref = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue) !== null && _ref !== void 0 ? _ref : []),
112
- selectedDates = _useState[0],
113
- setSelectedDates = _useState[1]; // The date of the current hover, used to reduce the calculation of `handleMouseMove`
114
114
 
115
+ var _useState2 = useState((_ref = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue) !== null && _ref !== void 0 ? _ref : []),
116
+ selectedDates = _useState2[0],
117
+ setSelectedDates = _useState2[1]; // The date of the current hover, used to reduce the calculation of `handleMouseMove`
115
118
 
116
- var _useState2 = useState(null),
117
- hoverDateRange = _useState2[0],
118
- setHoverDateRange = _useState2[1]; // The displayed calendar panel is rendered based on this value.
119
119
 
120
+ var _useState3 = useState(null),
121
+ hoverDateRange = _useState3[0],
122
+ setHoverDateRange = _useState3[1]; // The displayed calendar panel is rendered based on this value.
120
123
 
121
- var _useState3 = useState(getSafeCalendarDate({
124
+
125
+ var _useState4 = useState(getSafeCalendarDate({
122
126
  value: (_ref2 = value !== null && value !== void 0 ? value : defaultCalendarValue) !== null && _ref2 !== void 0 ? _ref2 : null
123
127
  })),
124
- calendarDate = _useState3[0],
125
- setCalendarDate = _useState3[1];
128
+ calendarDate = _useState4[0],
129
+ setCalendarDate = _useState4[1];
126
130
 
127
- var _useState4 = useState(),
128
- inputState = _useState4[0],
129
- setInputState = _useState4[1];
131
+ var _useState5 = useState(),
132
+ inputState = _useState5[0],
133
+ setInputState = _useState5[1];
130
134
  /**
131
135
  * When hoverRange is set, `selectValue` will be updated during the hover process,
132
136
  * which will cause the `selectValue` to be updated after the first click,
@@ -182,9 +186,9 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
182
186
  setHoverDateRange(valueProp !== null && valueProp !== void 0 ? valueProp : null);
183
187
  }, [valueProp]);
184
188
 
185
- var _useState5 = useState(false),
186
- isPickerToggleActive = _useState5[0],
187
- setPickerToggleActive = _useState5[1];
189
+ var _useState6 = useState(false),
190
+ isPickerToggleActive = _useState6[0],
191
+ setPickerToggleActive = _useState6[1];
188
192
 
189
193
  var rootRef = useRef(null);
190
194
  var overlayRef = useRef(null);
@@ -287,7 +291,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
287
291
  // it means there's already one selected date
288
292
  // and waiting for user to select the second date to complete the selection.
289
293
 
290
- if (!hasDoneSelect.current) {
294
+ if (!isSelectedIdle) {
291
295
  // If `hoverRange` is set, you need to change the value of hoverDateRange according to the rules
292
296
  if (!isNil(nextHoverDateRange) && !isNil(selectRangeValueRef.current)) {
293
297
  var nextSelectedDates = [selectRangeValueRef.current[0], nextHoverDateRange[1]];
@@ -306,7 +310,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
306
310
  } else if (!isNil(nextHoverDateRange)) {
307
311
  setHoverDateRange(nextHoverDateRange);
308
312
  }
309
- }, [getHoverRangeValue]);
313
+ }, [getHoverRangeValue, isSelectedIdle]);
310
314
  /**
311
315
  * Callback for selecting a date cell in the calendar grid
312
316
  */
@@ -317,23 +321,23 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
317
321
  var hoverRangeValue = getHoverRangeValue(date);
318
322
  var noHoverRangeValid = isNil(hoverRangeValue); // in `oneTap` mode
319
323
 
320
- if (hasDoneSelect.current && oneTap) {
324
+ if (isSelectedIdle && oneTap) {
321
325
  handleValueUpdate(event, noHoverRangeValid ? [startOfDay(date), endOfDay(date)] : hoverRangeValue);
322
- hasDoneSelect.current = false;
326
+ setSelectedIdle(false);
323
327
  return;
324
328
  } // no preset hover range can use
325
329
 
326
330
 
327
331
  if (noHoverRangeValid) {
328
332
  // start select
329
- if (hasDoneSelect.current) {
333
+ if (isSelectedIdle) {
330
334
  nextSelectDates = [date];
331
335
  } else {
332
336
  // finish select
333
337
  nextSelectDates[1] = date;
334
338
  }
335
339
  } else {
336
- if (!hasDoneSelect.current) {
340
+ if (!isSelectedIdle) {
337
341
  nextSelectDates = selectedDates;
338
342
  selectRangeValueRef.current = null;
339
343
  } else {
@@ -370,8 +374,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
370
374
  eventName: 'changeDate'
371
375
  });
372
376
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
373
- hasDoneSelect.current = !hasDoneSelect.current;
374
- }, [formatStr, getCalendarDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
377
+ setSelectedIdle(!isSelectedIdle);
378
+ }, [formatStr, getCalendarDatetime, getHoverRangeValue, handleValueUpdate, hoverDateRange, isSelectedIdle, onSelect, oneTap, selectedDates, updateCalendarDateRange]);
375
379
  /**
376
380
  * If `selectValue` changed, there will be the following effects.
377
381
  * 1. Check if the selection is completed.
@@ -447,7 +451,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
447
451
  } // End unfinished selections.
448
452
 
449
453
 
450
- hasDoneSelect.current = true;
454
+ setSelectedIdle(true);
451
455
  }, [handleValueUpdate, updateCalendarDateRange]);
452
456
  var handleOK = useCallback(function (event) {
453
457
  handleValueUpdate(event, selectedDates);
@@ -534,7 +538,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
534
538
  }, [onOpen]);
535
539
  var handleExited = useCallback(function () {
536
540
  setPickerToggleActive(false);
537
- hasDoneSelect.current = true;
541
+ setSelectedIdle(true);
538
542
  onClose === null || onClose === void 0 ? void 0 : onClose();
539
543
  }, [onClose]);
540
544
  var isDateDisabled = useCallback(function (date, selectDate, selectedDone, target) {
@@ -552,7 +556,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
552
556
  // If the date is between the start and the end
553
557
  // the button is disabled
554
558
  while (DateUtils.isBefore(start, end) || DateUtils.isSameDay(start, end)) {
555
- if (isDateDisabled(start, selectedDates, hasDoneSelect.current, type)) {
559
+ if (isDateDisabled(start, selectedDates, isSelectedIdle, type)) {
556
560
  return true;
557
561
  }
558
562
 
@@ -560,17 +564,17 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
560
564
  }
561
565
 
562
566
  return false;
563
- }, [isDateDisabled, selectedDates]);
567
+ }, [isDateDisabled, isSelectedIdle, selectedDates]);
564
568
  var disabledOkButton = useCallback(function () {
565
569
  var start = selectedDates[0],
566
570
  end = selectedDates[1];
567
571
 
568
- if (!start || !end || !hasDoneSelect.current) {
572
+ if (!start || !end || !isSelectedIdle) {
569
573
  return true;
570
574
  }
571
575
 
572
576
  return disabledByBetween(start, end, DATERANGE_DISABLED_TARGET.TOOLBAR_BUTTON_OK);
573
- }, [disabledByBetween, selectedDates]);
577
+ }, [disabledByBetween, isSelectedIdle, selectedDates]);
574
578
  var disabledShortcutButton = useCallback(function (value) {
575
579
  if (value === void 0) {
576
580
  value = [];
@@ -587,8 +591,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
587
591
  return disabledByBetween(start, end, DATERANGE_DISABLED_TARGET.TOOLBAR_SHORTCUT);
588
592
  }, [disabledByBetween]);
589
593
  var handleDisabledDate = useCallback(function (date, values, type) {
590
- return isDateDisabled(date, values, hasDoneSelect.current, type);
591
- }, [isDateDisabled]);
594
+ return isDateDisabled(date, values, isSelectedIdle, type);
595
+ }, [isDateDisabled, isSelectedIdle]);
592
596
  var onPickerKeyDown = useToggleKeyDownEvent(_extends({
593
597
  triggerRef: triggerRef,
594
598
  targetRef: targetRef,
@@ -659,11 +663,15 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
659
663
  className: prefix('daterange-header')
660
664
  }, getDisplayString(selectedDates)), /*#__PURE__*/React.createElement("div", {
661
665
  className: prefix("daterange-calendar-" + (showOneCalendar ? 'single' : 'group'))
666
+ }, /*#__PURE__*/React.createElement(DateRangePickerContext.Provider, {
667
+ value: {
668
+ isSelectedIdle: isSelectedIdle
669
+ }
662
670
  }, /*#__PURE__*/React.createElement(Calendar, _extends({
663
671
  index: 0
664
672
  }, calendarProps)), !showOneCalendar && /*#__PURE__*/React.createElement(Calendar, _extends({
665
673
  index: 1
666
- }, calendarProps)))), /*#__PURE__*/React.createElement(Toolbar, {
674
+ }, calendarProps))))), /*#__PURE__*/React.createElement(Toolbar, {
667
675
  locale: locale,
668
676
  calendarDate: selectedDates,
669
677
  disabledOkBtn: disabledOkButton,
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface DateRangePickerContextValue {
3
+ isSelectedIdle?: boolean;
4
+ }
5
+ declare const DateRangePickerContext: React.Context<DateRangePickerContextValue>;
6
+ export default DateRangePickerContext;
7
+ export declare const useDateRangePickerContext: () => DateRangePickerContextValue;
@@ -0,0 +1,6 @@
1
+ import React, { useContext } from 'react';
2
+ var DateRangePickerContext = /*#__PURE__*/React.createContext({});
3
+ export default DateRangePickerContext;
4
+ export var useDateRangePickerContext = function useDateRangePickerContext() {
5
+ return useContext(DateRangePickerContext) || {};
6
+ };
@@ -57,21 +57,21 @@ function validTime(calendarProps, date) {
57
57
 
58
58
  return Object.keys(calendarProps).some(function (key) {
59
59
  if (/(Hours)/.test(key)) {
60
- var _calendarProps$key, _calendarProps$key2;
60
+ var _calendarProps$key;
61
61
 
62
- return (_calendarProps$key = (_calendarProps$key2 = calendarProps[key]) === null || _calendarProps$key2 === void 0 ? void 0 : _calendarProps$key2.call(calendarProps, getHours(date), date)) !== null && _calendarProps$key !== void 0 ? _calendarProps$key : true;
62
+ return (_calendarProps$key = calendarProps[key]) === null || _calendarProps$key === void 0 ? void 0 : _calendarProps$key.call(calendarProps, getHours(date), date);
63
63
  }
64
64
 
65
65
  if (/(Minutes)/.test(key)) {
66
- var _calendarProps$key3, _calendarProps$key4;
66
+ var _calendarProps$key2;
67
67
 
68
- return (_calendarProps$key3 = (_calendarProps$key4 = calendarProps[key]) === null || _calendarProps$key4 === void 0 ? void 0 : _calendarProps$key4.call(calendarProps, getMinutes(date), date)) !== null && _calendarProps$key3 !== void 0 ? _calendarProps$key3 : true;
68
+ return (_calendarProps$key2 = calendarProps[key]) === null || _calendarProps$key2 === void 0 ? void 0 : _calendarProps$key2.call(calendarProps, getMinutes(date), date);
69
69
  }
70
70
 
71
71
  if (/(Seconds)/.test(key)) {
72
- var _calendarProps$key5, _calendarProps$key6;
72
+ var _calendarProps$key3;
73
73
 
74
- return (_calendarProps$key5 = (_calendarProps$key6 = calendarProps[key]) === null || _calendarProps$key6 === void 0 ? void 0 : _calendarProps$key6.call(calendarProps, getSeconds(date), date)) !== null && _calendarProps$key5 !== void 0 ? _calendarProps$key5 : true;
74
+ return (_calendarProps$key3 = calendarProps[key]) === null || _calendarProps$key3 === void 0 ? void 0 : _calendarProps$key3.call(calendarProps, getSeconds(date), date);
75
75
  }
76
76
 
77
77
  return false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.29.0",
3
+ "version": "5.30.0",
4
4
  "description": "A suite of react components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",