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.
@@ -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,62 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ import React, { useCallback, useState } from 'react';
4
+ import Button from '../Button';
5
+ import Stack from '../Stack';
6
+ import { useUpdateEffect } from '../utils';
7
+ import { getDefaultRanges, getRanges } from './utils';
8
+ var PredefinedRanges = /*#__PURE__*/React.forwardRef(function (props, ref) {
9
+ var className = props.className,
10
+ disabledShortcut = props.disabledShortcut,
11
+ onClickShortcut = props.onClickShortcut,
12
+ calendarDate = props.calendarDate,
13
+ rangesProp = props.ranges,
14
+ locale = props.locale,
15
+ rest = _objectWithoutPropertiesLoose(props, ["className", "disabledShortcut", "onClickShortcut", "calendarDate", "ranges", "locale"]);
16
+
17
+ var _useState = useState(getRanges(props)),
18
+ ranges = _useState[0],
19
+ setRanges = _useState[1];
20
+
21
+ useUpdateEffect(function () {
22
+ setRanges(getRanges({
23
+ ranges: rangesProp,
24
+ calendarDate: calendarDate
25
+ }));
26
+ }, [calendarDate, rangesProp]);
27
+ var hasLocaleKey = useCallback(function (key) {
28
+ return getDefaultRanges(calendarDate).some(function (item) {
29
+ return item.label === key;
30
+ });
31
+ }, [calendarDate]);
32
+ return /*#__PURE__*/React.createElement(Stack, _extends({
33
+ className: className,
34
+ ref: ref,
35
+ alignItems: "flex-start",
36
+ spacing: 4
37
+ }, rest), ranges.map(function (_ref, index) {
38
+ var value = _ref.value,
39
+ closeOverlay = _ref.closeOverlay,
40
+ label = _ref.label,
41
+ rest = _objectWithoutPropertiesLoose(_ref, ["value", "closeOverlay", "label"]);
42
+
43
+ var disabled = disabledShortcut === null || disabledShortcut === void 0 ? void 0 : disabledShortcut(value);
44
+
45
+ var handleClickShortcut = function handleClickShortcut(event) {
46
+ if (disabled) {
47
+ return;
48
+ }
49
+
50
+ onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !== false ? true : false, event);
51
+ };
52
+
53
+ return /*#__PURE__*/React.createElement(Button, _extends({
54
+ appearance: "link",
55
+ size: "sm",
56
+ key: index,
57
+ disabled: disabled,
58
+ onClick: handleClickShortcut
59
+ }, rest), hasLocaleKey(label) && typeof label === 'string' ? locale === null || locale === void 0 ? void 0 : locale[label] : label);
60
+ }));
61
+ });
62
+ export default PredefinedRanges;
@@ -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,14 +1,36 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- import React, { useCallback, useState } from 'react';
3
+ import React from 'react';
4
4
  import PropTypes from 'prop-types';
5
5
  import Button from '../Button';
6
- import { useClassNames, useUpdateEffect } from '../utils';
7
- import { getDefaultRanges, getRanges } from './utils';
6
+ import { useClassNames } from '../utils';
7
+ import PredefinedRanges from './PredefinedRanges';
8
+ import Stack from '../Stack';
8
9
 
10
+ var SubmitButton = function SubmitButton(_ref) {
11
+ var hide = _ref.hide,
12
+ disabledOkBtn = _ref.disabledOkBtn,
13
+ calendarDate = _ref.calendarDate,
14
+ onOk = _ref.onOk,
15
+ children = _ref.children;
16
+
17
+ if (hide) {
18
+ return null;
19
+ }
20
+
21
+ var disabled = disabledOkBtn === null || disabledOkBtn === void 0 ? void 0 : disabledOkBtn(calendarDate);
22
+ return /*#__PURE__*/React.createElement(Button, {
23
+ appearance: "primary",
24
+ size: "sm",
25
+ disabled: disabled,
26
+ onClick: disabled ? undefined : onOk
27
+ }, children);
28
+ };
9
29
  /**
10
30
  * Toolbar for DatePicker and DateRangePicker
11
31
  */
32
+
33
+
12
34
  var Toolbar = /*#__PURE__*/React.forwardRef(function (props, ref) {
13
35
  var className = props.className,
14
36
  _props$classPrefix = props.classPrefix,
@@ -19,78 +41,40 @@ var Toolbar = /*#__PURE__*/React.forwardRef(function (props, ref) {
19
41
  onOk = props.onOk,
20
42
  onClickShortcut = props.onClickShortcut,
21
43
  calendarDate = props.calendarDate,
22
- rangesProp = props.ranges,
44
+ ranges = props.ranges,
23
45
  locale = props.locale,
24
46
  rest = _objectWithoutPropertiesLoose(props, ["className", "classPrefix", "disabledOkBtn", "disabledShortcut", "hideOkBtn", "onOk", "onClickShortcut", "calendarDate", "ranges", "locale"]);
25
47
 
26
- var _useState = useState(getRanges(props)),
27
- ranges = _useState[0],
28
- setRanges = _useState[1];
29
-
30
48
  var _useClassNames = useClassNames(classPrefix),
31
49
  merge = _useClassNames.merge,
32
50
  prefix = _useClassNames.prefix,
33
51
  withClassPrefix = _useClassNames.withClassPrefix;
34
52
 
35
- useUpdateEffect(function () {
36
- setRanges(getRanges({
37
- ranges: rangesProp,
38
- calendarDate: calendarDate
39
- }));
40
- }, [calendarDate, rangesProp]);
41
- var hasLocaleKey = useCallback(function (key) {
42
- return getDefaultRanges(calendarDate).some(function (item) {
43
- return item.label === key;
44
- });
45
- }, [calendarDate]);
46
- var renderOkButton = useCallback(function () {
47
- if (hideOkBtn) {
48
- return null;
49
- }
50
-
51
- var disabled = disabledOkBtn === null || disabledOkBtn === void 0 ? void 0 : disabledOkBtn(calendarDate);
52
- return /*#__PURE__*/React.createElement("div", {
53
- className: prefix('right')
54
- }, /*#__PURE__*/React.createElement(Button, {
55
- appearance: "primary",
56
- size: "sm",
57
- disabled: disabled,
58
- onClick: disabled ? undefined : onOk
59
- }, locale === null || locale === void 0 ? void 0 : locale.ok));
60
- }, [disabledOkBtn, hideOkBtn, locale, onOk, calendarDate, prefix]);
61
-
62
- if (hideOkBtn && ranges.length === 0) {
53
+ if (hideOkBtn && (ranges === null || ranges === void 0 ? void 0 : ranges.length) === 0) {
63
54
  return null;
64
55
  }
65
56
 
66
57
  var classes = merge(className, withClassPrefix());
67
- return /*#__PURE__*/React.createElement("div", _extends({}, rest, {
58
+ return /*#__PURE__*/React.createElement(Stack, _extends({
68
59
  ref: ref,
69
- className: classes
60
+ className: classes,
61
+ justifyContent: "space-between",
62
+ alignItems: "flex-start"
63
+ }, rest), /*#__PURE__*/React.createElement(PredefinedRanges, {
64
+ className: prefix('ranges'),
65
+ ranges: ranges,
66
+ calendarDate: calendarDate,
67
+ locale: locale,
68
+ disabledShortcut: disabledShortcut,
69
+ onClickShortcut: onClickShortcut
70
70
  }), /*#__PURE__*/React.createElement("div", {
71
- className: prefix('ranges')
72
- }, ranges.map(function (_ref, index) {
73
- var value = _ref.value,
74
- closeOverlay = _ref.closeOverlay,
75
- label = _ref.label;
76
- var disabled = disabledShortcut === null || disabledShortcut === void 0 ? void 0 : disabledShortcut(value);
77
-
78
- var handleClickShortcut = function handleClickShortcut(event) {
79
- if (disabled) {
80
- return;
81
- }
82
-
83
- onClickShortcut === null || onClickShortcut === void 0 ? void 0 : onClickShortcut(value, closeOverlay !== false ? true : false, event);
84
- };
85
-
86
- return /*#__PURE__*/React.createElement(Button, {
87
- appearance: "link",
88
- size: "sm",
89
- key: index,
90
- disabled: disabled,
91
- onClick: handleClickShortcut
92
- }, hasLocaleKey(label) && typeof label === 'string' ? locale === null || locale === void 0 ? void 0 : locale[label] : label);
93
- })), renderOkButton());
71
+ className: prefix('right')
72
+ }, /*#__PURE__*/React.createElement(SubmitButton, {
73
+ disabledOkBtn: disabledOkBtn,
74
+ hide: hideOkBtn,
75
+ calendarDate: calendarDate,
76
+ onOk: onOk
77
+ }, locale === null || locale === void 0 ? void 0 : locale.ok)));
94
78
  });
95
79
  Toolbar.displayName = 'Toolbar';
96
80
  Toolbar.propTypes = {
@@ -9,6 +9,8 @@ import PropTypes from 'prop-types';
9
9
  import React, { useCallback, useEffect, useRef, useState } from 'react';
10
10
  import { FormattedDate } from '../CustomProvider';
11
11
  import Toolbar from '../DatePicker/Toolbar';
12
+ import PredefinedRanges from '../DatePicker/PredefinedRanges';
13
+ import Stack from '../Stack';
12
14
  import { omitTriggerPropKeys, PickerOverlay, pickerPropTypes, PickerToggle, PickerToggleTrigger, pickTriggerPropKeys, usePickerClassName, usePublicMethods, useToggleKeyDownEvent } from '../Picker';
13
15
  import { createChainedFunction, DATERANGE_DISABLED_TARGET, DateUtils, mergeRefs, useClassNames, useControlled, useCustom } from '../utils';
14
16
  import { addMonths, compareAsc, isSameMonth } from '../utils/dateUtils';
@@ -391,10 +393,17 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
391
393
  closeOverlay = false;
392
394
  }
393
395
 
394
- handleValueUpdate(event, value, closeOverlay); // End unfinished selections.
396
+ updateCalendarDateRange(value);
397
+
398
+ if (closeOverlay) {
399
+ handleValueUpdate(event, value, closeOverlay);
400
+ } else {
401
+ setSelectedDates(value !== null && value !== void 0 ? value : []);
402
+ } // End unfinished selections.
403
+
395
404
 
396
405
  hasDoneSelect.current = true;
397
- }, [handleValueUpdate]);
406
+ }, [handleValueUpdate, updateCalendarDateRange]);
398
407
  var handleOK = useCallback(function (event) {
399
408
  handleValueUpdate(event, selectedDates);
400
409
  onOk === null || onOk === void 0 ? void 0 : onOk(selectedDates, event);
@@ -563,13 +572,27 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
563
572
  renderTitle: renderTitle
564
573
  };
565
574
  return /*#__PURE__*/React.createElement(PickerOverlay, {
575
+ role: "dialog",
566
576
  className: classes,
567
577
  ref: mergeRefs(overlayRef, speakerRef),
568
578
  target: triggerRef,
569
579
  style: styles
570
580
  }, /*#__PURE__*/React.createElement("div", {
571
581
  className: panelClasses
572
- }, /*#__PURE__*/React.createElement("div", {
582
+ }, /*#__PURE__*/React.createElement(Stack, {
583
+ alignItems: "flex-start"
584
+ }, /*#__PURE__*/React.createElement(PredefinedRanges, {
585
+ direction: "column",
586
+ spacing: 0,
587
+ className: prefix('daterange-predefined'),
588
+ ranges: (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
589
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
590
+ })) || [],
591
+ calendarDate: calendarDate,
592
+ locale: locale,
593
+ disabledShortcut: disabledShortcutButton,
594
+ onClickShortcut: handleShortcutPageDate
595
+ }), /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
573
596
  className: prefix('daterange-content')
574
597
  }, /*#__PURE__*/React.createElement("div", {
575
598
  className: prefix('daterange-header')
@@ -587,8 +610,10 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
587
610
  hideOkBtn: oneTap,
588
611
  onOk: handleOK,
589
612
  onClickShortcut: handleShortcutPageDate,
590
- ranges: ranges
591
- })));
613
+ ranges: ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
614
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
615
+ })
616
+ })))));
592
617
  };
593
618
 
594
619
  var hasValue = !isNil(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. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsuite",
3
- "version": "5.16.6",
3
+ "version": "5.17.0",
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.6.0",
40
+ "rsuite-table": "^5.7.0",
41
41
  "schema-typed": "^2.0.3"
42
42
  },
43
43
  "peerDependencies": {