rsuite 5.2.3 → 5.2.4

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.
@@ -10,7 +10,7 @@ export interface CarouselProps extends WithAsProps {
10
10
  /** Button shape */
11
11
  shape?: 'dot' | 'bar';
12
12
  /** Callback fired when the active item changes */
13
- onSelect: (index: number, event: React.ChangeEvent<HTMLInputElement>) => void;
13
+ onSelect?: (index: number, event: React.ChangeEvent<HTMLInputElement>) => void;
14
14
  /** Callback fired when a slide transition starts */
15
15
  onSlideStart?: (index: number, event: React.ChangeEvent<HTMLInputElement>) => void;
16
16
  /** Callback fired when a slide transition ends */
@@ -406,10 +406,13 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
406
406
  }
407
407
  }, [childrenKey, expandItemValues, getChildren, loadChildren, onExpand, setExpandItemValues, valueKey]);
408
408
  usePublicMethods(ref, {
409
+ rootRef: inline ? treeViewRef : null,
409
410
  triggerRef: triggerRef,
410
411
  overlayRef: overlayRef,
411
- targetRef: targetRef
412
- }, inline);
412
+ targetRef: targetRef,
413
+ listRef: listRef,
414
+ inline: inline
415
+ });
413
416
  var handleClean = useCallback(function (event) {
414
417
  var target = event.target; // exclude searchBar
415
418
 
@@ -630,7 +633,7 @@ var CheckTreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
630
633
  }, style) : {};
631
634
  return /*#__PURE__*/React.createElement("div", {
632
635
  id: id ? id + "-listbox" : undefined,
633
- ref: inline ? mergeRefs(treeViewRef, ref) : treeViewRef,
636
+ ref: treeViewRef,
634
637
  role: "tree",
635
638
  "aria-multiselectable": true,
636
639
  className: classes,
@@ -3,7 +3,7 @@ import { CalendarProps as CalendarCoreProps } from '../Calendar/Calendar';
3
3
  import { ValueType } from './types';
4
4
  import { RsRefForwardingComponent, WithAsProps } from '../@types/common';
5
5
  import { DatePickerLocale } from '../locales';
6
- declare type OmitCalendarCoreTypes = 'disabledDate' | 'onSelect' | 'onMouseMove' | 'calendarDate';
6
+ declare type OmitCalendarCoreTypes = 'disabledDate' | 'onSelect' | 'onMouseMove' | 'calendarDate' | 'onToggleMeridian';
7
7
  export interface CalendarProps extends WithAsProps, Omit<CalendarCoreProps, OmitCalendarCoreTypes> {
8
8
  calendarDate?: ValueType;
9
9
  disabledDate?: (date: Date, selectValue: ValueType, type: string) => boolean;
@@ -15,6 +15,7 @@ export interface CalendarProps extends WithAsProps, Omit<CalendarCoreProps, Omit
15
15
  locale?: DatePickerLocale;
16
16
  onChangeCalendarDate?: (index: number, date: Date) => void;
17
17
  onChangeCalendarTime?: (index: number, date: Date) => void;
18
+ onToggleMeridian: (index: number, event: React.MouseEvent) => void;
18
19
  onMouseMove?: (date: Date) => void;
19
20
  onSelect?: (date: Date, event?: React.SyntheticEvent) => void;
20
21
  showOneCalendar?: boolean;
@@ -5,6 +5,15 @@ import React, { useCallback, useState } from 'react';
5
5
  import { addMonths, isAfter, isSameMonth, setDate } from '../utils/dateUtils';
6
6
  import CalendarCore, { CalendarState } from '../Calendar/Calendar';
7
7
  import { DATERANGE_DISABLED_TARGET } from '../utils';
8
+
9
+ /**
10
+ * Omit the time in the date, which is used to compare and judge the date.
11
+ * eg: isAfter/isBefore
12
+ */
13
+ function omitTime(date) {
14
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate());
15
+ }
16
+
8
17
  var Calendar = /*#__PURE__*/React.forwardRef(function (props, ref) {
9
18
  var _props$as = props.as,
10
19
  Component = _props$as === void 0 ? CalendarCore : _props$as,
@@ -18,10 +27,11 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (props, ref) {
18
27
  limitEndYear = props.limitEndYear,
19
28
  onChangeCalendarDate = props.onChangeCalendarDate,
20
29
  onChangeCalendarTime = props.onChangeCalendarTime,
30
+ onToggleMeridian = props.onToggleMeridian,
21
31
  showOneCalendar = props.showOneCalendar,
22
32
  _props$value = props.value,
23
33
  value = _props$value === void 0 ? [] : _props$value,
24
- rest = _objectWithoutPropertiesLoose(props, ["as", "calendarDate", "format", "disabledDate", "index", "limitEndYear", "onChangeCalendarDate", "onChangeCalendarTime", "showOneCalendar", "value"]);
34
+ rest = _objectWithoutPropertiesLoose(props, ["as", "calendarDate", "format", "disabledDate", "index", "limitEndYear", "onChangeCalendarDate", "onChangeCalendarTime", "onToggleMeridian", "showOneCalendar", "value"]);
25
35
 
26
36
  var _useState = useState(),
27
37
  calendarState = _useState[0],
@@ -40,6 +50,9 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (props, ref) {
40
50
  var handleChangePageTime = useCallback(function (nextPageDate) {
41
51
  onChangeCalendarTime(index, nextPageDate);
42
52
  }, [index, onChangeCalendarTime]);
53
+ var handleToggleMeridian = useCallback(function (event) {
54
+ onToggleMeridian(index, event);
55
+ }, [index, onToggleMeridian]);
43
56
  var toggleMonthDropdown = useCallback(function () {
44
57
  setCalendarState(calendarState === CalendarState.DROP_MONTH ? undefined : CalendarState.DROP_MONTH);
45
58
  }, [calendarState]);
@@ -59,22 +72,30 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (props, ref) {
59
72
  onMoveBackward === null || onMoveBackward === void 0 ? void 0 : onMoveBackward(addMonths(getCalendarDate(), -1));
60
73
  }, [getCalendarDate, onMoveBackward]);
61
74
  var disabledBackward = useCallback(function () {
62
- var after = isAfter(setDate(calendarDate[1], 1), setDate(addMonths(calendarDate[0], 1), 1));
63
-
75
+ // Do not disable the Backward button on the first calendar.
64
76
  if (index === 0) {
65
77
  return false;
66
78
  }
67
79
 
80
+ var startDate = setDate(addMonths(calendarDate[0], 1), 1);
81
+ var endDate = setDate(omitTime(calendarDate[1]), 1);
82
+ var after = isAfter(endDate, startDate);
68
83
  return !after;
69
84
  }, [calendarDate, index]);
70
85
  var disabledForward = useCallback(function () {
71
- if (showOneCalendar) return false;
72
- var after = isAfter(setDate(calendarDate[1], 1), setDate(addMonths(calendarDate[0], 1), 1));
86
+ // If only one calendar is displayed, do not disable
87
+ if (showOneCalendar) {
88
+ return false;
89
+ } // Do not disable the Forward button on the second calendar.
90
+
73
91
 
74
92
  if (index === 1) {
75
93
  return false;
76
94
  }
77
95
 
96
+ var startDate = setDate(addMonths(omitTime(calendarDate[0]), 1), 1);
97
+ var endDate = setDate(omitTime(calendarDate[1]), 1);
98
+ var after = isAfter(endDate, startDate);
78
99
  return !after;
79
100
  }, [calendarDate, index, showOneCalendar]);
80
101
  var disabledMonth = useCallback(function (date) {
@@ -110,6 +131,7 @@ var Calendar = /*#__PURE__*/React.forwardRef(function (props, ref) {
110
131
  onMoveForward: handleMoveForward,
111
132
  onToggleMonthDropdown: toggleMonthDropdown,
112
133
  onToggleTimeDropdown: toggleTimeDropdown,
134
+ onToggleMeridian: handleToggleMeridian,
113
135
  calendarDate: getCalendarDate(),
114
136
  ref: ref
115
137
  }));
@@ -19,6 +19,8 @@ export interface DateRangePickerProps extends PickerBaseProps, FormControlBasePr
19
19
  showWeekNumbers?: boolean;
20
20
  /** Show only one calendar select */
21
21
  showOneCalendar?: boolean;
22
+ /** Meridian format */
23
+ showMeridian?: boolean;
22
24
  /** Set default date for calendar */
23
25
  defaultCalendarValue?: ValueType;
24
26
  /** The character that separates two dates */
@@ -52,6 +52,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
52
52
  _props$showOneCalenda = props.showOneCalendar,
53
53
  showOneCalendar = _props$showOneCalenda === void 0 ? false : _props$showOneCalenda,
54
54
  showWeekNumbers = props.showWeekNumbers,
55
+ showMeridian = props.showMeridian,
55
56
  style = props.style,
56
57
  toggleAs = props.toggleAs,
57
58
  valueProp = props.value,
@@ -64,7 +65,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
64
65
  onOk = props.onOk,
65
66
  onOpen = props.onOpen,
66
67
  onSelect = props.onSelect,
67
- rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "appearance", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "format", "hoverRange", "isoWeek", "limitEndYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "style", "toggleAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect"]);
68
+ rest = _objectWithoutPropertiesLoose(props, ["as", "classPrefix", "className", "appearance", "cleanable", "character", "defaultCalendarValue", "defaultValue", "disabled", "disabledDate", "format", "hoverRange", "isoWeek", "limitEndYear", "locale", "menuClassName", "menuStyle", "oneTap", "placeholder", "placement", "ranges", "renderValue", "showOneCalendar", "showWeekNumbers", "showMeridian", "style", "toggleAs", "value", "onChange", "onClean", "onClose", "onEnter", "onEntered", "onExited", "onOk", "onOpen", "onSelect"]);
68
69
 
69
70
  var _useClassNames = useClassNames(classPrefix),
70
71
  merge = _useClassNames.merge,
@@ -344,6 +345,22 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
344
345
  });
345
346
  handleChangeCalendarDate(index, date);
346
347
  }, [handleChangeCalendarDate]);
348
+ /**
349
+ * The callback triggered when PM/AM is switched.
350
+ */
351
+
352
+ var handleToggleMeridian = useCallback(function (index) {
353
+ var next = Array.from(calendarDate);
354
+ var clonedDate = new Date(next[index].valueOf());
355
+ var hours = DateUtils.getHours(clonedDate);
356
+ var nextHours = hours >= 12 ? hours - 12 : hours + 12;
357
+ next[index] = DateUtils.setHours(clonedDate, nextHours);
358
+ setCalendarDate(next); // If the value already exists, update the value again.
359
+
360
+ if (selectValue.length === 2) {
361
+ setSelectValue(next);
362
+ }
363
+ }, [calendarDate, selectValue]);
347
364
  /**
348
365
  * Toolbar operation callback function
349
366
  */
@@ -511,10 +528,12 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
511
528
  showOneCalendar: showOneCalendar,
512
529
  showWeekNumbers: showWeekNumbers,
513
530
  value: selectValue,
531
+ showMeridian: showMeridian,
514
532
  onChangeCalendarDate: handleChangeCalendarDate,
515
533
  onChangeCalendarTime: handleChangeCalendarTime,
516
534
  onMouseMove: handleMouseMove,
517
- onSelect: handleSelectValueChange
535
+ onSelect: handleSelectValueChange,
536
+ onToggleMeridian: handleToggleMeridian
518
537
  };
519
538
  return /*#__PURE__*/React.createElement(PickerOverlay, {
520
539
  className: classes,
@@ -609,11 +628,12 @@ DateRangePicker.propTypes = _extends({}, pickerPropTypes, {
609
628
  isoWeek: PropTypes.bool,
610
629
  oneTap: PropTypes.bool,
611
630
  limitEndYear: PropTypes.number,
612
- showWeekNumbers: PropTypes.bool,
613
631
  onChange: PropTypes.func,
614
632
  onOk: PropTypes.func,
615
633
  disabledDate: PropTypes.func,
616
634
  onSelect: PropTypes.func,
635
+ showWeekNumbers: PropTypes.bool,
636
+ showMeridian: PropTypes.bool,
617
637
  showOneCalendar: PropTypes.bool
618
638
  });
619
639
  export default DateRangePicker;
@@ -1,9 +1,36 @@
1
1
  import React from 'react';
2
2
  import { ListProps, ListRowProps } from 'react-virtualized/dist/commonjs/List';
3
3
  import { AutoSizerProps } from 'react-virtualized/dist/commonjs/AutoSizer';
4
+ import type { Alignment } from 'react-virtualized';
4
5
  export interface ListInstance {
5
- child: Element;
6
- scrollToRow?: (index: number) => void;
6
+ /**
7
+ * Forcefully re-render the inner Grid component.
8
+ */
9
+ forceUpdateGrid(): void;
10
+ /**
11
+ * Gets offset for a given row and alignment.
12
+ */
13
+ getOffsetForRow(params: {
14
+ alignment?: Alignment;
15
+ index?: number;
16
+ }): number;
17
+ /**
18
+ * Pre-measure all rows in a List.
19
+ */
20
+ measureAllRows(): void;
21
+ /**
22
+ * Recompute row heights and offsets after the specified index (defaults to 0).
23
+ */
24
+ recomputeRowHeights(index?: number): void;
25
+ /**
26
+ * Scroll to the specified offset. Useful for animating position changes.
27
+ */
28
+ scrollToPosition(scrollTop?: number): void;
29
+ /**
30
+ * Ensure row is visible. This method can be used to safely scroll back to a cell
31
+ * that a user has scrolled away from even if it was previously scrolled to.
32
+ */
33
+ scrollToRow(index?: number): void;
7
34
  }
8
35
  export type { ListProps, AutoSizerProps, ListRowProps };
9
36
  export declare const List: React.ComponentType<ListProps>;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { OverlayTriggerInstance } from './PickerToggleTrigger';
3
3
  import { TypeAttributes, ItemDataType } from '../@types/common';
4
+ import { ListInstance } from './VirtualizedList';
4
5
  interface NodeKeys {
5
6
  valueKey: string;
6
7
  childrenKey: string;
@@ -103,25 +104,16 @@ export declare function useSearch(props: SearchProps): {
103
104
  checkShouldDisplay: (item: ItemDataType, keyword?: string) => boolean;
104
105
  handleSearch: (searchKeyword: string, event: React.SyntheticEvent) => void;
105
106
  };
106
- interface Refs {
107
+ interface PickerDependentParameters {
107
108
  triggerRef?: React.RefObject<OverlayTriggerInstance>;
108
- rootRef?: React.RefObject<HTMLElement>;
109
+ rootRef?: React.RefObject<any>;
109
110
  overlayRef?: React.RefObject<HTMLElement>;
110
111
  targetRef?: React.RefObject<HTMLElement>;
112
+ listRef?: React.RefObject<ListInstance>;
113
+ inline?: boolean;
111
114
  }
112
115
  /**
113
116
  * A hook of the exposed method of Picker
114
- *
115
- * {
116
- * root: Element;
117
- * overlay: Element;
118
- * target?: Element;
119
- * updatePosition:() => void;
120
- * open:() => void;
121
- * close:() => void;
122
- * }
123
- * @param ref
124
- * @param params
125
117
  */
126
- export declare function usePublicMethods(ref: any, { triggerRef, overlayRef, targetRef, rootRef }: Refs, disabled?: boolean): void;
118
+ export declare function usePublicMethods(ref: any, parmas: PickerDependentParameters): void;
127
119
  export {};
@@ -376,9 +376,15 @@ export var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
376
376
 
377
377
 
378
378
  if (event.key.length === 1 && /\w/.test(event.key)) {
379
- var _searchInputRef$curre;
379
+ var _event$target;
380
380
 
381
- searchInputRef === null || searchInputRef === void 0 ? void 0 : (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
381
+ // Exclude Input
382
+ // eg: <SelectPicker renderExtraFooter={() => <Input />} />
383
+ if (((_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.tagName) !== 'INPUT') {
384
+ var _searchInputRef$curre;
385
+
386
+ (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 ? void 0 : _searchInputRef$curre.focus();
387
+ }
382
388
  }
383
389
  }
384
390
 
@@ -455,23 +461,14 @@ export function useSearch(props) {
455
461
 
456
462
  /**
457
463
  * A hook of the exposed method of Picker
458
- *
459
- * {
460
- * root: Element;
461
- * overlay: Element;
462
- * target?: Element;
463
- * updatePosition:() => void;
464
- * open:() => void;
465
- * close:() => void;
466
- * }
467
- * @param ref
468
- * @param params
469
464
  */
470
- export function usePublicMethods(ref, _ref, disabled) {
471
- var triggerRef = _ref.triggerRef,
472
- overlayRef = _ref.overlayRef,
473
- targetRef = _ref.targetRef,
474
- rootRef = _ref.rootRef;
465
+ export function usePublicMethods(ref, parmas) {
466
+ var triggerRef = parmas.triggerRef,
467
+ overlayRef = parmas.overlayRef,
468
+ targetRef = parmas.targetRef,
469
+ rootRef = parmas.rootRef,
470
+ listRef = parmas.listRef,
471
+ inline = parmas.inline;
475
472
  var handleOpen = useCallback(function () {
476
473
  var _triggerRef$current3;
477
474
 
@@ -487,10 +484,9 @@ export function usePublicMethods(ref, _ref, disabled) {
487
484
 
488
485
  (_triggerRef$current5 = triggerRef.current) === null || _triggerRef$current5 === void 0 ? void 0 : _triggerRef$current5.updatePosition();
489
486
  }, [triggerRef]);
490
-
491
- if (!disabled) {
492
- // eslint-disable-next-line react-hooks/rules-of-hooks
493
- useImperativeHandle(ref, function () {
487
+ useImperativeHandle(ref, function () {
488
+ // Tree and CheckTree
489
+ if (inline) {
494
490
  return {
495
491
  get root() {
496
492
  var _triggerRef$current6;
@@ -498,18 +494,43 @@ export function usePublicMethods(ref, _ref, disabled) {
498
494
  return rootRef !== null && rootRef !== void 0 && rootRef.current ? rootRef === null || rootRef === void 0 ? void 0 : rootRef.current : (_triggerRef$current6 = triggerRef.current) === null || _triggerRef$current6 === void 0 ? void 0 : _triggerRef$current6.root;
499
495
  },
500
496
 
501
- get overlay() {
502
- return overlayRef.current;
503
- },
497
+ get list() {
498
+ if (!(listRef !== null && listRef !== void 0 && listRef.current)) {
499
+ throw new Error('The list is not found, please set `virtualized` for the component.');
500
+ }
504
501
 
505
- get target() {
506
- return targetRef === null || targetRef === void 0 ? void 0 : targetRef.current;
507
- },
502
+ return listRef === null || listRef === void 0 ? void 0 : listRef.current;
503
+ }
508
504
 
509
- updatePosition: handleUpdatePosition,
510
- open: handleOpen,
511
- close: handleClose
512
505
  };
513
- });
514
- }
506
+ }
507
+
508
+ return {
509
+ get root() {
510
+ var _triggerRef$current7;
511
+
512
+ return rootRef !== null && rootRef !== void 0 && rootRef.current ? rootRef === null || rootRef === void 0 ? void 0 : rootRef.current : (_triggerRef$current7 = triggerRef.current) === null || _triggerRef$current7 === void 0 ? void 0 : _triggerRef$current7.root;
513
+ },
514
+
515
+ get overlay() {
516
+ return overlayRef.current;
517
+ },
518
+
519
+ get target() {
520
+ return targetRef === null || targetRef === void 0 ? void 0 : targetRef.current;
521
+ },
522
+
523
+ get list() {
524
+ if (!(listRef !== null && listRef !== void 0 && listRef.current)) {
525
+ throw new Error("\n The list is not found.\n 1.Please set virtualized for the component.\n 2.Please confirm whether the picker is open.\n ");
526
+ }
527
+
528
+ return listRef === null || listRef === void 0 ? void 0 : listRef.current;
529
+ },
530
+
531
+ updatePosition: handleUpdatePosition,
532
+ open: handleOpen,
533
+ close: handleClose
534
+ };
535
+ });
515
536
  }
@@ -412,10 +412,13 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
412
412
  (_targetRef$current2 = targetRef.current) === null || _targetRef$current2 === void 0 ? void 0 : _targetRef$current2.focus();
413
413
  }, [activeNode, setSearchKeyword, valueKey]);
414
414
  usePublicMethods(ref, {
415
+ rootRef: inline ? treeViewRef : null,
415
416
  triggerRef: triggerRef,
416
417
  overlayRef: overlayRef,
417
- targetRef: targetRef
418
- }, inline);
418
+ targetRef: targetRef,
419
+ listRef: listRef,
420
+ inline: inline
421
+ });
419
422
  var handleFocusItem = useCallback(function (key) {
420
423
  var focusableItems = getFocusableItems(filteredData, {
421
424
  disabledItemValues: disabledItemValues,
@@ -627,7 +630,7 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
627
630
  return /*#__PURE__*/React.createElement("div", {
628
631
  role: "tree",
629
632
  id: id ? id + "-listbox" : undefined,
630
- ref: inline ? mergeRefs(treeViewRef, ref) : treeViewRef,
633
+ ref: treeViewRef,
631
634
  className: classes,
632
635
  style: styles,
633
636
  onKeyDown: inline ? handleTreeKeyDown : undefined
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.2.3",
3
+ "version": "5.2.4",
4
4
  "description": "A suite of react components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",
@@ -37,7 +37,7 @@
37
37
  "lodash": "^4.17.11",
38
38
  "prop-types": "^15.7.2",
39
39
  "react-virtualized": "^9.22.3",
40
- "rsuite-table": "^5.2.1",
40
+ "rsuite-table": "^5.2.2",
41
41
  "schema-typed": "^2.0.2"
42
42
  },
43
43
  "peerDependencies": {