rsuite 5.16.6 → 5.17.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 CHANGED
@@ -1,3 +1,9 @@
1
+ # [5.17.0](https://github.com/rsuite/rsuite/compare/v5.16.6...v5.17.0) (2022-08-26)
2
+
3
+ ### Features
4
+
5
+ - **DateRangePicker:** supports placing predefined ranges on the left ([#2670](https://github.com/rsuite/rsuite/issues/2670)) ([8df4a61](https://github.com/rsuite/rsuite/commit/8df4a61d3b81e6054369197ff44e1416ea1aefbb))
6
+
1
7
  ## [5.16.6](https://github.com/rsuite/rsuite/compare/v5.16.5...v5.16.6) (2022-08-18)
2
8
 
3
9
  ### Bug Fixes
@@ -19,18 +19,8 @@
19
19
 
20
20
  // Toolbar
21
21
  .rs-picker-toolbar {
22
- .clearfix();
23
-
24
22
  padding: @calendar-picker-padding;
25
23
  border-top: 1px solid @calendar-toolbar-border-color;
26
-
27
- &-ranges {
28
- display: inline-block;
29
- }
30
-
31
- &-right {
32
- float: right;
33
- }
34
24
  }
35
25
 
36
26
  // Picker date
@@ -10,7 +10,7 @@
10
10
  .rs-picker-daterange-menu {
11
11
  .rs-calendar {
12
12
  display: inline-block;
13
- height: 278px;
13
+ height: 276px;
14
14
  padding-bottom: 12px;
15
15
 
16
16
  &:first-child {
@@ -35,10 +35,6 @@
35
35
  }
36
36
  }
37
37
 
38
- .rs-picker-toolbar {
39
- margin-top: 4px;
40
- }
41
-
42
38
  .rs-picker-daterange-panel-show-one-calendar .rs-picker-toolbar {
43
39
  max-width: @date-range-picker-calendar-default-width;
44
40
 
@@ -71,3 +67,14 @@
71
67
  // Make sure group wrapper can put 2 date-panels even screen width is not enough.
72
68
  min-width: 492px;
73
69
  }
70
+
71
+ // Predefined Ranges
72
+ .rs-picker-daterange-predefined {
73
+ height: 366px;
74
+ border-right: 1px solid var(--rs-border-primary);
75
+ padding: 4px 0;
76
+
77
+ .rs-btn {
78
+ display: block;
79
+ }
80
+ }
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { StackProps } from '../Stack';
3
+ import { RangeType } from './types';
4
+ import { CalendarLocale } from '../locales';
5
+ export interface PredefinedRangesProps<T = any, Shortcut = T> extends StackProps {
6
+ ranges?: RangeType<Shortcut>[];
7
+ calendarDate: T;
8
+ locale: CalendarLocale;
9
+ disabledShortcut?: (value: T) => boolean;
10
+ onClickShortcut?: (value: Shortcut, closeOverlay: boolean, event: React.MouseEvent) => void;
11
+ }
12
+ declare const PredefinedRanges: React.ForwardRefExoticComponent<PredefinedRangesProps<any, any> & React.RefAttributes<HTMLDivElement>>;
13
+ export default PredefinedRanges;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
+
7
+ exports.__esModule = true;
8
+ exports.default = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _Button = _interopRequireDefault(require("../Button"));
17
+
18
+ var _Stack = _interopRequireDefault(require("../Stack"));
19
+
20
+ var _utils = require("../utils");
21
+
22
+ var _utils2 = require("./utils");
23
+
24
+ var PredefinedRanges = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
25
+ var className = props.className,
26
+ disabledShortcut = props.disabledShortcut,
27
+ onClickShortcut = props.onClickShortcut,
28
+ calendarDate = props.calendarDate,
29
+ rangesProp = props.ranges,
30
+ locale = props.locale,
31
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "disabledShortcut", "onClickShortcut", "calendarDate", "ranges", "locale"]);
32
+
33
+ var _useState = (0, _react.useState)((0, _utils2.getRanges)(props)),
34
+ ranges = _useState[0],
35
+ setRanges = _useState[1];
36
+
37
+ (0, _utils.useUpdateEffect)(function () {
38
+ setRanges((0, _utils2.getRanges)({
39
+ ranges: rangesProp,
40
+ calendarDate: calendarDate
41
+ }));
42
+ }, [calendarDate, rangesProp]);
43
+ var hasLocaleKey = (0, _react.useCallback)(function (key) {
44
+ return (0, _utils2.getDefaultRanges)(calendarDate).some(function (item) {
45
+ return item.label === key;
46
+ });
47
+ }, [calendarDate]);
48
+ return /*#__PURE__*/_react.default.createElement(_Stack.default, (0, _extends2.default)({
49
+ className: className,
50
+ ref: ref,
51
+ alignItems: "flex-start",
52
+ spacing: 4
53
+ }, rest), ranges.map(function (_ref, index) {
54
+ var value = _ref.value,
55
+ closeOverlay = _ref.closeOverlay,
56
+ label = _ref.label,
57
+ rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["value", "closeOverlay", "label"]);
58
+ var disabled = disabledShortcut === null || disabledShortcut === void 0 ? void 0 : disabledShortcut(value);
59
+
60
+ var handleClickShortcut = function handleClickShortcut(event) {
61
+ if (disabled) {
62
+ return;
63
+ }
64
+
65
+ onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !== false ? true : false, event);
66
+ };
67
+
68
+ return /*#__PURE__*/_react.default.createElement(_Button.default, (0, _extends2.default)({
69
+ appearance: "link",
70
+ size: "sm",
71
+ key: index,
72
+ disabled: disabled,
73
+ onClick: handleClickShortcut
74
+ }, rest), hasLocaleKey(label) && typeof label === 'string' ? locale === null || locale === void 0 ? void 0 : locale[label] : label);
75
+ }));
76
+ });
77
+
78
+ var _default = PredefinedRanges;
79
+ exports.default = _default;
@@ -1,17 +1,10 @@
1
1
  import React from 'react';
2
- import { StandardProps } from '../@types/common';
3
- import { RangeType } from './types';
4
- import { CalendarLocale } from '../locales';
2
+ import { PredefinedRangesProps } from './PredefinedRanges';
5
3
  export type { RangeType } from './types';
6
- export interface ToolbarProps<T = any, Shortcut = T> extends StandardProps {
4
+ export interface ToolbarProps<T = any, Shortcut = T> extends PredefinedRangesProps<T, Shortcut> {
7
5
  hideOkBtn?: boolean;
8
- locale?: CalendarLocale;
9
- calendarDate: T;
10
- ranges?: RangeType<Shortcut>[];
11
6
  disabledOkBtn?: (value: T) => boolean;
12
- disabledShortcut?: (value: T) => boolean;
13
7
  onOk?: (event: React.MouseEvent) => void;
14
- onClickShortcut?: (value: Shortcut, closeOverlay: boolean, event: React.MouseEvent) => void;
15
8
  }
16
9
  declare type ToolbarComponent = React.ForwardRefExoticComponent<ToolbarProps> & {
17
10
  <T = any, Shortcut = T>(props: ToolbarProps<T, Shortcut>): React.ReactElement | null;
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
7
5
  exports.__esModule = true;
@@ -11,7 +9,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
9
 
12
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
11
 
14
- var _react = _interopRequireWildcard(require("react"));
12
+ var _react = _interopRequireDefault(require("react"));
15
13
 
16
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
15
 
@@ -19,11 +17,34 @@ var _Button = _interopRequireDefault(require("../Button"));
19
17
 
20
18
  var _utils = require("../utils");
21
19
 
22
- var _utils2 = require("./utils");
20
+ var _PredefinedRanges = _interopRequireDefault(require("./PredefinedRanges"));
21
+
22
+ var _Stack = _interopRequireDefault(require("../Stack"));
23
+
24
+ var SubmitButton = function SubmitButton(_ref) {
25
+ var hide = _ref.hide,
26
+ disabledOkBtn = _ref.disabledOkBtn,
27
+ calendarDate = _ref.calendarDate,
28
+ onOk = _ref.onOk,
29
+ children = _ref.children;
30
+
31
+ if (hide) {
32
+ return null;
33
+ }
23
34
 
35
+ var disabled = disabledOkBtn === null || disabledOkBtn === void 0 ? void 0 : disabledOkBtn(calendarDate);
36
+ return /*#__PURE__*/_react.default.createElement(_Button.default, {
37
+ appearance: "primary",
38
+ size: "sm",
39
+ disabled: disabled,
40
+ onClick: disabled ? undefined : onOk
41
+ }, children);
42
+ };
24
43
  /**
25
44
  * Toolbar for DatePicker and DateRangePicker
26
45
  */
46
+
47
+
27
48
  var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
28
49
  var className = props.className,
29
50
  _props$classPrefix = props.classPrefix,
@@ -34,78 +55,40 @@ var Toolbar = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
34
55
  onOk = props.onOk,
35
56
  onClickShortcut = props.onClickShortcut,
36
57
  calendarDate = props.calendarDate,
37
- rangesProp = props.ranges,
58
+ ranges = props.ranges,
38
59
  locale = props.locale,
39
60
  rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["className", "classPrefix", "disabledOkBtn", "disabledShortcut", "hideOkBtn", "onOk", "onClickShortcut", "calendarDate", "ranges", "locale"]);
40
61
 
41
- var _useState = (0, _react.useState)((0, _utils2.getRanges)(props)),
42
- ranges = _useState[0],
43
- setRanges = _useState[1];
44
-
45
62
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
46
63
  merge = _useClassNames.merge,
47
64
  prefix = _useClassNames.prefix,
48
65
  withClassPrefix = _useClassNames.withClassPrefix;
49
66
 
50
- (0, _utils.useUpdateEffect)(function () {
51
- setRanges((0, _utils2.getRanges)({
52
- ranges: rangesProp,
53
- calendarDate: calendarDate
54
- }));
55
- }, [calendarDate, rangesProp]);
56
- var hasLocaleKey = (0, _react.useCallback)(function (key) {
57
- return (0, _utils2.getDefaultRanges)(calendarDate).some(function (item) {
58
- return item.label === key;
59
- });
60
- }, [calendarDate]);
61
- var renderOkButton = (0, _react.useCallback)(function () {
62
- if (hideOkBtn) {
63
- return null;
64
- }
65
-
66
- var disabled = disabledOkBtn === null || disabledOkBtn === void 0 ? void 0 : disabledOkBtn(calendarDate);
67
- return /*#__PURE__*/_react.default.createElement("div", {
68
- className: prefix('right')
69
- }, /*#__PURE__*/_react.default.createElement(_Button.default, {
70
- appearance: "primary",
71
- size: "sm",
72
- disabled: disabled,
73
- onClick: disabled ? undefined : onOk
74
- }, locale === null || locale === void 0 ? void 0 : locale.ok));
75
- }, [disabledOkBtn, hideOkBtn, locale, onOk, calendarDate, prefix]);
76
-
77
- if (hideOkBtn && ranges.length === 0) {
67
+ if (hideOkBtn && (ranges === null || ranges === void 0 ? void 0 : ranges.length) === 0) {
78
68
  return null;
79
69
  }
80
70
 
81
71
  var classes = merge(className, withClassPrefix());
82
- return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, rest, {
72
+ return /*#__PURE__*/_react.default.createElement(_Stack.default, (0, _extends2.default)({
83
73
  ref: ref,
84
- className: classes
74
+ className: classes,
75
+ justifyContent: "space-between",
76
+ alignItems: "flex-start"
77
+ }, rest), /*#__PURE__*/_react.default.createElement(_PredefinedRanges.default, {
78
+ className: prefix('ranges'),
79
+ ranges: ranges,
80
+ calendarDate: calendarDate,
81
+ locale: locale,
82
+ disabledShortcut: disabledShortcut,
83
+ onClickShortcut: onClickShortcut
85
84
  }), /*#__PURE__*/_react.default.createElement("div", {
86
- className: prefix('ranges')
87
- }, ranges.map(function (_ref, index) {
88
- var value = _ref.value,
89
- closeOverlay = _ref.closeOverlay,
90
- label = _ref.label;
91
- var disabled = disabledShortcut === null || disabledShortcut === void 0 ? void 0 : disabledShortcut(value);
92
-
93
- var handleClickShortcut = function handleClickShortcut(event) {
94
- if (disabled) {
95
- return;
96
- }
97
-
98
- onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !== false ? true : false, event);
99
- };
100
-
101
- return /*#__PURE__*/_react.default.createElement(_Button.default, {
102
- appearance: "link",
103
- size: "sm",
104
- key: index,
105
- disabled: disabled,
106
- onClick: handleClickShortcut
107
- }, hasLocaleKey(label) && typeof label === 'string' ? locale === null || locale === void 0 ? void 0 : locale[label] : label);
108
- })), renderOkButton());
85
+ className: prefix('right')
86
+ }, /*#__PURE__*/_react.default.createElement(SubmitButton, {
87
+ disabledOkBtn: disabledOkBtn,
88
+ hide: hideOkBtn,
89
+ calendarDate: calendarDate,
90
+ onOk: onOk
91
+ }, locale === null || locale === void 0 ? void 0 : locale.ok)));
109
92
  });
110
93
 
111
94
  Toolbar.displayName = 'Toolbar';
@@ -29,6 +29,10 @@ var _CustomProvider = require("../CustomProvider");
29
29
 
30
30
  var _Toolbar = _interopRequireDefault(require("../DatePicker/Toolbar"));
31
31
 
32
+ var _PredefinedRanges = _interopRequireDefault(require("../DatePicker/PredefinedRanges"));
33
+
34
+ var _Stack = _interopRequireDefault(require("../Stack"));
35
+
32
36
  var _Picker = require("../Picker");
33
37
 
34
38
  var _utils = require("../utils");
@@ -419,10 +423,17 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
419
423
  closeOverlay = false;
420
424
  }
421
425
 
422
- handleValueUpdate(event, value, closeOverlay); // End unfinished selections.
426
+ updateCalendarDateRange(value);
427
+
428
+ if (closeOverlay) {
429
+ handleValueUpdate(event, value, closeOverlay);
430
+ } else {
431
+ setSelectedDates(value !== null && value !== void 0 ? value : []);
432
+ } // End unfinished selections.
433
+
423
434
 
424
435
  hasDoneSelect.current = true;
425
- }, [handleValueUpdate]);
436
+ }, [handleValueUpdate, updateCalendarDateRange]);
426
437
  var handleOK = (0, _react.useCallback)(function (event) {
427
438
  handleValueUpdate(event, selectedDates);
428
439
  onOk === null || onOk === void 0 ? void 0 : onOk(selectedDates, event);
@@ -589,13 +600,27 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
589
600
  renderTitle: renderTitle
590
601
  };
591
602
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
603
+ role: "dialog",
592
604
  className: classes,
593
605
  ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
594
606
  target: triggerRef,
595
607
  style: styles
596
608
  }, /*#__PURE__*/_react.default.createElement("div", {
597
609
  className: panelClasses
598
- }, /*#__PURE__*/_react.default.createElement("div", {
610
+ }, /*#__PURE__*/_react.default.createElement(_Stack.default, {
611
+ alignItems: "flex-start"
612
+ }, /*#__PURE__*/_react.default.createElement(_PredefinedRanges.default, {
613
+ direction: "column",
614
+ spacing: 0,
615
+ className: prefix('daterange-predefined'),
616
+ ranges: (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
617
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
618
+ })) || [],
619
+ calendarDate: calendarDate,
620
+ locale: locale,
621
+ disabledShortcut: disabledShortcutButton,
622
+ onClickShortcut: handleShortcutPageDate
623
+ }), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
599
624
  className: prefix('daterange-content')
600
625
  }, /*#__PURE__*/_react.default.createElement("div", {
601
626
  className: prefix('daterange-header')
@@ -613,8 +638,10 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
613
638
  hideOkBtn: oneTap,
614
639
  onOk: handleOK,
615
640
  onClickShortcut: handleShortcutPageDate,
616
- ranges: ranges
617
- })));
641
+ ranges: ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
642
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
643
+ })
644
+ })))));
618
645
  };
619
646
 
620
647
  var hasValue = !(0, _isNil.default)(value) && value.length > 1;
@@ -4,8 +4,9 @@ export declare type ValueType = [Date?, Date?];
4
4
  export declare type DateRange = [Date, Date];
5
5
  export interface RangeType {
6
6
  label: React.ReactNode;
7
- closeOverlay?: boolean;
8
7
  value: DateRange | ((value?: ValueType) => DateRange);
8
+ closeOverlay?: boolean;
9
+ placement?: 'bottom' | 'left';
9
10
  }
10
11
  export declare type DisabledDateFunction = (
11
12
  /** Date used to determine if disabling is required. */
@@ -4369,20 +4369,6 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner::before {
4369
4369
  border-top: 1px solid #e5e5ea;
4370
4370
  border-top: 1px solid var(--rs-border-primary);
4371
4371
  }
4372
- .rs-picker-toolbar::before,
4373
- .rs-picker-toolbar::after {
4374
- content: ' ';
4375
- display: table;
4376
- }
4377
- .rs-picker-toolbar::after {
4378
- clear: both;
4379
- }
4380
- .rs-picker-toolbar-ranges {
4381
- display: inline-block;
4382
- }
4383
- .rs-picker-toolbar-right {
4384
- float: left;
4385
- }
4386
4372
  .rs-picker-date-inline {
4387
4373
  height: 299px;
4388
4374
  }
@@ -4465,7 +4451,7 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner::before {
4465
4451
  }
4466
4452
  .rs-picker-daterange-menu .rs-calendar {
4467
4453
  display: inline-block;
4468
- height: 278px;
4454
+ height: 276px;
4469
4455
  padding-bottom: 12px;
4470
4456
  }
4471
4457
  .rs-picker-daterange-menu .rs-calendar:first-child {
@@ -4485,9 +4471,6 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner::before {
4485
4471
  .rs-picker-daterange-menu .rs-calendar-month-dropdown-list {
4486
4472
  width: 185px;
4487
4473
  }
4488
- .rs-picker-daterange-menu .rs-picker-toolbar {
4489
- margin-top: 4px;
4490
- }
4491
4474
  .rs-picker-daterange-menu .rs-picker-daterange-panel-show-one-calendar .rs-picker-toolbar {
4492
4475
  max-width: 255px;
4493
4476
  }
@@ -4510,6 +4493,15 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner::before {
4510
4493
  height: 274px;
4511
4494
  min-width: 492px;
4512
4495
  }
4496
+ .rs-picker-daterange-predefined {
4497
+ height: 366px;
4498
+ border-left: 1px solid #e5e5ea;
4499
+ border-left: 1px solid var(--rs-border-primary);
4500
+ padding: 4px 0;
4501
+ }
4502
+ .rs-picker-daterange-predefined .rs-btn {
4503
+ display: block;
4504
+ }
4513
4505
  .rs-divider {
4514
4506
  background-color: #e5e5ea;
4515
4507
  background-color: var(--rs-divider-border);