rsuite 5.59.1 → 5.59.3-alpha.1
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 +12 -0
- package/DateRangePicker/styles/index.css +27 -0
- package/DateRangePicker/styles/index.less +27 -0
- package/cjs/@types/common.d.ts +1 -1
- package/cjs/Calendar/CalendarContainer.js +4 -4
- package/cjs/DatePicker/DatePicker.d.ts +3 -38
- package/cjs/DatePicker/DatePicker.js +86 -137
- package/cjs/DatePicker/PredefinedRanges.d.ts +1 -1
- package/cjs/DatePicker/PredefinedRanges.js +3 -3
- package/cjs/DatePicker/Toolbar.d.ts +1 -1
- package/cjs/DatePicker/Toolbar.js +13 -12
- package/cjs/DatePicker/hooks/useFocus.d.ts +13 -0
- package/cjs/DatePicker/hooks/useFocus.js +96 -0
- package/cjs/DatePicker/hooks/useMonthView.d.ts +10 -0
- package/cjs/DatePicker/hooks/useMonthView.js +28 -0
- package/cjs/DatePicker/index.d.ts +2 -1
- package/cjs/DatePicker/types.d.ts +37 -0
- package/cjs/DatePicker/utils.d.ts +9 -0
- package/cjs/DatePicker/utils.js +20 -2
- package/cjs/DateRangePicker/DateRangePicker.d.ts +15 -3
- package/cjs/DateRangePicker/DateRangePicker.js +58 -68
- package/cjs/DateRangePicker/DateRangePickerContext.d.ts +4 -1
- package/cjs/DateRangePicker/DateRangePickerContext.js +4 -4
- package/cjs/DateRangePicker/Header.d.ts +11 -0
- package/cjs/DateRangePicker/Header.js +65 -0
- package/cjs/DateRangePicker/disabledDateUtils.d.ts +1 -1
- package/cjs/DateRangePicker/disabledDateUtils.js +1 -1
- package/cjs/DateRangePicker/index.js +5 -0
- package/cjs/Form/Form.d.ts +56 -39
- package/cjs/Form/Form.js +64 -186
- package/cjs/Form/FormContext.d.ts +12 -9
- package/cjs/Form/FormContext.js +11 -5
- package/cjs/Form/hooks/useFormRef.d.ts +55 -0
- package/cjs/Form/hooks/useFormRef.js +45 -0
- package/cjs/Form/hooks/useFormValidate.d.ts +19 -0
- package/cjs/Form/hooks/useFormValidate.js +157 -0
- package/cjs/Form/hooks/useFormValue.d.ts +2 -1
- package/cjs/Form/hooks/useFormValue.js +12 -1
- package/cjs/Form/hooks/useSchemaModel.js +5 -0
- package/cjs/Form/index.d.ts +2 -1
- package/cjs/FormControl/FormControl.d.ts +1 -1
- package/cjs/FormControl/FormControl.js +50 -68
- package/cjs/FormControl/hooks/useField.d.ts +18 -0
- package/cjs/FormControl/hooks/useField.js +54 -0
- package/cjs/FormControl/hooks/useRegisterModel.d.ts +3 -0
- package/cjs/FormControl/hooks/useRegisterModel.js +22 -0
- package/cjs/FormControl/utils.d.ts +1 -0
- package/cjs/FormControl/utils.js +8 -0
- package/cjs/FormControlLabel/FormControlLabel.js +12 -9
- package/cjs/FormErrorMessage/FormErrorMessage.js +2 -5
- package/cjs/FormGroup/FormGroup.d.ts +18 -4
- package/cjs/FormGroup/FormGroup.js +28 -2
- package/cjs/FormGroup/index.d.ts +1 -0
- package/cjs/FormGroup/index.js +4 -3
- package/cjs/FormHelpText/FormHelpText.d.ts +2 -1
- package/cjs/FormHelpText/FormHelpText.js +16 -9
- package/cjs/Input/Input.js +4 -5
- package/cjs/utils/dateUtils.d.ts +72 -10
- package/cjs/utils/dateUtils.js +88 -29
- package/dist/rsuite-no-reset-rtl.css +27 -0
- package/dist/rsuite-no-reset-rtl.min.css +1 -1
- package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
- package/dist/rsuite-no-reset.css +27 -0
- package/dist/rsuite-no-reset.min.css +1 -1
- package/dist/rsuite-no-reset.min.css.map +1 -1
- package/dist/rsuite-rtl.css +27 -0
- package/dist/rsuite-rtl.min.css +1 -1
- package/dist/rsuite-rtl.min.css.map +1 -1
- package/dist/rsuite.css +27 -0
- package/dist/rsuite.js +144 -44
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.css +1 -1
- package/dist/rsuite.min.css.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.LICENSE.txt +35 -0
- package/dist/rsuite.min.js.map +1 -1
- package/esm/@types/common.d.ts +1 -1
- package/esm/Calendar/CalendarContainer.js +5 -5
- package/esm/DatePicker/DatePicker.d.ts +3 -38
- package/esm/DatePicker/DatePicker.js +88 -139
- package/esm/DatePicker/PredefinedRanges.d.ts +1 -1
- package/esm/DatePicker/PredefinedRanges.js +3 -3
- package/esm/DatePicker/Toolbar.d.ts +1 -1
- package/esm/DatePicker/Toolbar.js +13 -12
- package/esm/DatePicker/hooks/useFocus.d.ts +13 -0
- package/esm/DatePicker/hooks/useFocus.js +90 -0
- package/esm/DatePicker/hooks/useMonthView.d.ts +10 -0
- package/esm/DatePicker/hooks/useMonthView.js +22 -0
- package/esm/DatePicker/index.d.ts +2 -1
- package/esm/DatePicker/types.d.ts +37 -0
- package/esm/DatePicker/utils.d.ts +9 -0
- package/esm/DatePicker/utils.js +18 -2
- package/esm/DateRangePicker/DateRangePicker.d.ts +15 -3
- package/esm/DateRangePicker/DateRangePicker.js +61 -71
- package/esm/DateRangePicker/DateRangePickerContext.d.ts +4 -1
- package/esm/DateRangePicker/DateRangePickerContext.js +2 -2
- package/esm/DateRangePicker/Header.d.ts +11 -0
- package/esm/DateRangePicker/Header.js +59 -0
- package/esm/DateRangePicker/disabledDateUtils.d.ts +1 -1
- package/esm/DateRangePicker/disabledDateUtils.js +1 -1
- package/esm/DateRangePicker/index.js +4 -0
- package/esm/Form/Form.d.ts +56 -39
- package/esm/Form/Form.js +62 -183
- package/esm/Form/FormContext.d.ts +12 -9
- package/esm/Form/FormContext.js +6 -2
- package/esm/Form/hooks/useFormRef.d.ts +55 -0
- package/esm/Form/hooks/useFormRef.js +40 -0
- package/esm/Form/hooks/useFormValidate.d.ts +19 -0
- package/esm/Form/hooks/useFormValidate.js +152 -0
- package/esm/Form/hooks/useFormValue.d.ts +2 -1
- package/esm/Form/hooks/useFormValue.js +12 -1
- package/esm/Form/hooks/useSchemaModel.js +5 -0
- package/esm/Form/index.d.ts +2 -1
- package/esm/FormControl/FormControl.d.ts +1 -1
- package/esm/FormControl/FormControl.js +48 -66
- package/esm/FormControl/hooks/useField.d.ts +18 -0
- package/esm/FormControl/hooks/useField.js +48 -0
- package/esm/FormControl/hooks/useRegisterModel.d.ts +3 -0
- package/esm/FormControl/hooks/useRegisterModel.js +17 -0
- package/esm/FormControl/utils.d.ts +1 -0
- package/esm/FormControl/utils.js +4 -0
- package/esm/FormControlLabel/FormControlLabel.js +12 -8
- package/esm/FormErrorMessage/FormErrorMessage.js +2 -5
- package/esm/FormGroup/FormGroup.d.ts +18 -4
- package/esm/FormGroup/FormGroup.js +27 -1
- package/esm/FormGroup/index.d.ts +1 -0
- package/esm/FormGroup/index.js +1 -0
- package/esm/FormHelpText/FormHelpText.d.ts +2 -1
- package/esm/FormHelpText/FormHelpText.js +17 -9
- package/esm/Input/Input.js +4 -5
- package/esm/utils/dateUtils.d.ts +72 -10
- package/esm/utils/dateUtils.js +86 -28
- package/package.json +2 -2
- package/cjs/Form/hooks/useFormError.d.ts +0 -6
- package/cjs/Form/hooks/useFormError.js +0 -31
- package/cjs/FormControl/useRegisterModel.d.ts +0 -4
- package/cjs/FormControl/useRegisterModel.js +0 -18
- package/esm/Form/hooks/useFormError.d.ts +0 -6
- package/esm/Form/hooks/useFormError.js +0 -26
- package/esm/FormControl/useRegisterModel.d.ts +0 -4
- package/esm/FormControl/useRegisterModel.js +0 -13
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import delay from 'lodash/delay';
|
|
3
|
+
import addMonths from 'date-fns/addMonths';
|
|
4
|
+
import addDays from 'date-fns/addDays';
|
|
5
|
+
import useEventCallback from '../../utils/useEventCallback';
|
|
6
|
+
import { getAriaLabel } from '../../Calendar/utils';
|
|
7
|
+
import { useCustom } from '../../utils';
|
|
8
|
+
import { onMenuKeyDown } from '../../internals/Picker/utils';
|
|
9
|
+
function useFocus(props) {
|
|
10
|
+
var target = props.target,
|
|
11
|
+
showMonth = props.showMonth,
|
|
12
|
+
id = props.id,
|
|
13
|
+
localeProp = props.locale;
|
|
14
|
+
var _useCustom = useCustom('DatePicker', localeProp),
|
|
15
|
+
locale = _useCustom.locale,
|
|
16
|
+
formatDate = _useCustom.formatDate;
|
|
17
|
+
/**
|
|
18
|
+
* Get the corresponding container based on date selection and month selection
|
|
19
|
+
*/
|
|
20
|
+
var getOverlayContainer = function getOverlayContainer() {
|
|
21
|
+
return showMonth ? document.getElementById(id + "-calendar-month-dropdown") : document.getElementById(id + "-calendar-table");
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Check whether the date is focusable
|
|
26
|
+
*/
|
|
27
|
+
var checkFocusable = function checkFocusable(date) {
|
|
28
|
+
var formatStr = showMonth ? locale.formattedMonthPattern : locale.formattedDayPattern;
|
|
29
|
+
var ariaLabel = getAriaLabel(date, formatStr, formatDate);
|
|
30
|
+
var container = getOverlayContainer();
|
|
31
|
+
var dateElement = container === null || container === void 0 ? void 0 : container.querySelector("[aria-label=\"" + ariaLabel + "\"]");
|
|
32
|
+
if ((dateElement === null || dateElement === void 0 ? void 0 : dateElement.getAttribute('aria-disabled')) === 'true') {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Focus on the currently selected date element
|
|
40
|
+
*/
|
|
41
|
+
var focusSelectedDate = function focusSelectedDate() {
|
|
42
|
+
delay(function () {
|
|
43
|
+
var container = getOverlayContainer();
|
|
44
|
+
var selectedElement = container === null || container === void 0 ? void 0 : container.querySelector('[aria-selected="true"]');
|
|
45
|
+
selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.focus();
|
|
46
|
+
}, 1);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Focus on the input element
|
|
51
|
+
*/
|
|
52
|
+
var focusInput = useEventCallback(function () {
|
|
53
|
+
delay(function () {
|
|
54
|
+
var _target$current;
|
|
55
|
+
return (_target$current = target.current) === null || _target$current === void 0 ? void 0 : _target$current.focus();
|
|
56
|
+
}, 1);
|
|
57
|
+
});
|
|
58
|
+
var onKeyFocusEvent = useEventCallback(function (event, options) {
|
|
59
|
+
var date = options.date,
|
|
60
|
+
callback = options.callback;
|
|
61
|
+
var delta = 0;
|
|
62
|
+
var step = showMonth ? 6 : 7;
|
|
63
|
+
var changeDateFunc = showMonth ? addMonths : addDays;
|
|
64
|
+
onMenuKeyDown(event, {
|
|
65
|
+
down: function down() {
|
|
66
|
+
delta = step;
|
|
67
|
+
},
|
|
68
|
+
up: function up() {
|
|
69
|
+
delta = -step;
|
|
70
|
+
},
|
|
71
|
+
right: function right() {
|
|
72
|
+
delta = 1;
|
|
73
|
+
},
|
|
74
|
+
left: function left() {
|
|
75
|
+
delta = -1;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
var nextDate = changeDateFunc(date, delta);
|
|
79
|
+
if (checkFocusable(nextDate)) {
|
|
80
|
+
callback(nextDate);
|
|
81
|
+
focusSelectedDate();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
focusInput: focusInput,
|
|
86
|
+
focusSelectedDate: focusSelectedDate,
|
|
87
|
+
onKeyFocusEvent: onKeyFocusEvent
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export default useFocus;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface UseMonthViewProps {
|
|
3
|
+
onToggleMonthDropdown?: (toggle: boolean) => void;
|
|
4
|
+
}
|
|
5
|
+
declare function useMonthView(props: UseMonthViewProps): {
|
|
6
|
+
monthView: boolean;
|
|
7
|
+
setMonthView: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
8
|
+
toggleMonthView: (...args: any[]) => any;
|
|
9
|
+
};
|
|
10
|
+
export default useMonthView;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import useEventCallback from '../../utils/useEventCallback';
|
|
4
|
+
function useMonthView(props) {
|
|
5
|
+
var onToggleMonthDropdown = props.onToggleMonthDropdown;
|
|
6
|
+
var _useState = useState(false),
|
|
7
|
+
monthView = _useState[0],
|
|
8
|
+
setMonthView = _useState[1];
|
|
9
|
+
/**
|
|
10
|
+
* The callback triggered after the month selection box is opened or closed.
|
|
11
|
+
*/
|
|
12
|
+
var toggleMonthView = useEventCallback(function (show) {
|
|
13
|
+
onToggleMonthDropdown === null || onToggleMonthDropdown === void 0 ? void 0 : onToggleMonthDropdown(show);
|
|
14
|
+
setMonthView(show);
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
monthView: monthView,
|
|
18
|
+
setMonthView: setMonthView,
|
|
19
|
+
toggleMonthView: toggleMonthView
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export default useMonthView;
|
|
@@ -9,3 +9,40 @@ export interface RangeType<T> {
|
|
|
9
9
|
export interface InnerRange<T> extends Omit<RangeType<T>, 'value'> {
|
|
10
10
|
value: T;
|
|
11
11
|
}
|
|
12
|
+
export interface DeprecatedProps {
|
|
13
|
+
/**
|
|
14
|
+
* Display date panel when component initial
|
|
15
|
+
*
|
|
16
|
+
* @deprecated use <Calendar> instead
|
|
17
|
+
**/
|
|
18
|
+
inline?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Whether to disable a date on the calendar view
|
|
21
|
+
*
|
|
22
|
+
* @returns date should be disabled (not selectable)
|
|
23
|
+
* @deprecated Use {@link shouldDisableDate} instead
|
|
24
|
+
*/
|
|
25
|
+
disabledDate?: (date?: Date) => boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Disabled hours
|
|
28
|
+
*
|
|
29
|
+
* @deprecated Use {@link shouldDisableHour} instead
|
|
30
|
+
*/
|
|
31
|
+
disabledHours?: (hour: number, date: Date) => boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Disabled minutes
|
|
34
|
+
*
|
|
35
|
+
* @deprecated Use {@link shouldDisableMinute} instead
|
|
36
|
+
*/
|
|
37
|
+
disabledMinutes?: (minute: number, date: Date) => boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Disabled seconds
|
|
40
|
+
*
|
|
41
|
+
* @deprecated Use {@link shouldDisableSecond} instead
|
|
42
|
+
*/
|
|
43
|
+
disabledSeconds?: (second: number, date: Date) => boolean;
|
|
44
|
+
/**
|
|
45
|
+
* @deprecated
|
|
46
|
+
*/
|
|
47
|
+
renderValue?: (value: Date, format: string) => string;
|
|
48
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/// <reference types="lodash" />
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
1
3
|
import { ToolbarProps } from './Toolbar';
|
|
2
4
|
import { InnerRange, RangeType } from './types';
|
|
3
5
|
import { DateRange } from '../DateRangePicker/types';
|
|
@@ -12,3 +14,10 @@ export declare function splitRanges(ranges?: RangeType<Date>[]): {
|
|
|
12
14
|
sideRanges: RangeType<Date>[];
|
|
13
15
|
bottomRanges: RangeType<Date>[];
|
|
14
16
|
};
|
|
17
|
+
export declare const deprecatedPropTypes: {
|
|
18
|
+
disabledDate: PropTypes.Requireable<(...args: any[]) => any>;
|
|
19
|
+
disabledHours: PropTypes.Requireable<(...args: any[]) => any>;
|
|
20
|
+
disabledMinutes: PropTypes.Requireable<(...args: any[]) => any>;
|
|
21
|
+
disabledSeconds: PropTypes.Requireable<(...args: any[]) => any>;
|
|
22
|
+
};
|
|
23
|
+
export declare const getRestProps: (props: any, omitProps?: string[]) => import("lodash").Omit<any, string>;
|
package/esm/DatePicker/utils.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
3
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
4
|
-
import
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
import omit from 'lodash/omit';
|
|
6
|
+
import { deprecatePropTypeNew } from '../internals/propTypes';
|
|
7
|
+
import { omitTriggerPropKeys } from '../internals/Picker';
|
|
8
|
+
import { subDays, startOfDay, endOfDay, calendarOnlyProps } from '../utils/dateUtils';
|
|
5
9
|
export function getDefaultRanges(value) {
|
|
6
10
|
var today = new Date();
|
|
7
11
|
|
|
@@ -66,4 +70,16 @@ export function splitRanges(ranges) {
|
|
|
66
70
|
sideRanges: sideRanges,
|
|
67
71
|
bottomRanges: bottomRanges
|
|
68
72
|
};
|
|
69
|
-
}
|
|
73
|
+
}
|
|
74
|
+
export var deprecatedPropTypes = {
|
|
75
|
+
disabledDate: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableDate" property instead.'),
|
|
76
|
+
disabledHours: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableHour" property instead.'),
|
|
77
|
+
disabledMinutes: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableMinute" property instead.'),
|
|
78
|
+
disabledSeconds: deprecatePropTypeNew(PropTypes.func, 'Use "shouldDisableSecond" property instead.')
|
|
79
|
+
};
|
|
80
|
+
export var getRestProps = function getRestProps(props, omitProps) {
|
|
81
|
+
if (omitProps === void 0) {
|
|
82
|
+
omitProps = [];
|
|
83
|
+
}
|
|
84
|
+
return omit(props, [].concat(omitTriggerPropKeys, calendarOnlyProps, omitProps));
|
|
85
|
+
};
|
|
@@ -8,9 +8,17 @@ export interface DateRangePickerProps extends PickerBaseProps<DateRangePickerLoc
|
|
|
8
8
|
caretAs?: React.ElementType | null;
|
|
9
9
|
/** Predefined date ranges */
|
|
10
10
|
ranges?: RangeType[];
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Format of the date displayed in the input box
|
|
13
|
+
*
|
|
14
|
+
* @default 'yyyy-MM-dd'
|
|
15
|
+
*/
|
|
12
16
|
format?: string;
|
|
13
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Rendered as an input, the date can be entered via the keyboard.
|
|
19
|
+
*
|
|
20
|
+
* @default true
|
|
21
|
+
*/
|
|
14
22
|
editable?: boolean;
|
|
15
23
|
/** The date range that will be selected when you click on the date */
|
|
16
24
|
hoverRange?: 'week' | 'month' | ((date: Date) => DateRange);
|
|
@@ -24,7 +32,11 @@ export interface DateRangePickerProps extends PickerBaseProps<DateRangePickerLoc
|
|
|
24
32
|
isoWeek?: boolean;
|
|
25
33
|
/** A label displayed at the beginning of toggle button */
|
|
26
34
|
label?: React.ReactNode;
|
|
27
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Set the upper limit of the available year relative to the current selection date.
|
|
37
|
+
*
|
|
38
|
+
* @default 1000
|
|
39
|
+
*/
|
|
28
40
|
limitEndYear?: number;
|
|
29
41
|
/** Set the lower limit of the available year relative to the current selection date */
|
|
30
42
|
limitStartYear?: number;
|
|
@@ -11,20 +11,19 @@ import pick from 'lodash/pick';
|
|
|
11
11
|
import PropTypes from 'prop-types';
|
|
12
12
|
import IconCalendar from '@rsuite/icons/legacy/Calendar';
|
|
13
13
|
import IconClockO from '@rsuite/icons/legacy/ClockO';
|
|
14
|
-
import { FormattedDate } from '../CustomProvider';
|
|
15
14
|
import Toolbar from '../DatePicker/Toolbar';
|
|
16
15
|
import PredefinedRanges from '../DatePicker/PredefinedRanges';
|
|
17
16
|
import Stack from '../Stack';
|
|
18
17
|
import { omitTriggerPropKeys, PickerPopup, pickerPropTypes, PickerToggleTrigger, PickerIndicator, PickerLabel, pickTriggerPropKeys, usePickerClassName, usePickerRef, onMenuKeyDown } from '../internals/Picker';
|
|
19
|
-
import { createChainedFunction, DATERANGE_DISABLED_TARGET, mergeRefs, useClassNames, useControlled, useCustom, useUniqueId, useEventCallback, partitionHTMLProps, getStringLength } from '../utils';
|
|
20
|
-
import { addMonths,
|
|
18
|
+
import { createChainedFunction, DATERANGE_DISABLED_TARGET as TARGET, mergeRefs, useClassNames, useControlled, useCustom, useUniqueId, useEventCallback, partitionHTMLProps, getStringLength } from '../utils';
|
|
19
|
+
import { addMonths, isValid, isBefore, isSameDay, addDays, startOfDay, endOfDay, shouldRenderTime, isAfter, copyTime, isSameMonth, shouldRenderMonth, shouldRenderDate, reverseDateRangeOmitTime, getReversedTimeMeridian, calendarOnlyProps, shouldOnlyRenderTime } from '../utils/dateUtils';
|
|
21
20
|
import Calendar from './Calendar';
|
|
22
|
-
import * as disabledDateUtils from './disabledDateUtils';
|
|
23
21
|
import { getSafeCalendarDate, getMonthHoverRange, getWeekHoverRange, isSameRange } from './utils';
|
|
24
22
|
import { deprecatePropTypeNew, oneOf } from '../internals/propTypes';
|
|
25
23
|
import DateRangePickerContext from './DateRangePickerContext';
|
|
26
24
|
import DateRangeInput from '../DateRangeInput';
|
|
27
25
|
import InputGroup from '../InputGroup';
|
|
26
|
+
import Header from './Header';
|
|
28
27
|
/**
|
|
29
28
|
* A date range picker allows you to select a date range from a calendar.
|
|
30
29
|
*
|
|
@@ -144,7 +143,9 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
144
143
|
* so declare a Ref to temporarily store the `selectValue` of the first click.
|
|
145
144
|
*/
|
|
146
145
|
var selectRangeValueRef = useRef(null);
|
|
147
|
-
|
|
146
|
+
var _useState5 = useState(),
|
|
147
|
+
activeCalendarKey = _useState5[0],
|
|
148
|
+
setActiveCalendarKey = _useState5[1];
|
|
148
149
|
/**
|
|
149
150
|
* Get the time on the calendar.
|
|
150
151
|
*/
|
|
@@ -194,22 +195,6 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
194
195
|
setSelectedDates(valueProp !== null && valueProp !== void 0 ? valueProp : []);
|
|
195
196
|
setHoverDateRange(valueProp !== null && valueProp !== void 0 ? valueProp : null);
|
|
196
197
|
}, [valueProp]);
|
|
197
|
-
var getDateRangeString = function getDateRangeString(nextValue) {
|
|
198
|
-
var _ref4 = nextValue !== null && nextValue !== void 0 ? nextValue : [null, null],
|
|
199
|
-
startDate = _ref4[0],
|
|
200
|
-
endDate = _ref4[1];
|
|
201
|
-
if (startDate && endDate) {
|
|
202
|
-
var displayValue = [startDate, endDate].sort(compareAsc);
|
|
203
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FormattedDate, {
|
|
204
|
-
date: displayValue[0],
|
|
205
|
-
formatStr: formatStr
|
|
206
|
-
}), character, /*#__PURE__*/React.createElement(FormattedDate, {
|
|
207
|
-
date: displayValue[1],
|
|
208
|
-
formatStr: formatStr
|
|
209
|
-
}));
|
|
210
|
-
}
|
|
211
|
-
return rangeFormatStr;
|
|
212
|
-
};
|
|
213
198
|
var getInputHtmlSize = function getInputHtmlSize() {
|
|
214
199
|
var padding = 4;
|
|
215
200
|
var strings = rangeFormatStr;
|
|
@@ -268,7 +253,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
268
253
|
* Select the date range. If oneTap is not set, you need to click twice to select the start time and end time.
|
|
269
254
|
* The MouseMove event is called between the first click and the second click to update the selection state.
|
|
270
255
|
*/
|
|
271
|
-
var
|
|
256
|
+
var onMouseMove = useEventCallback(function (date) {
|
|
272
257
|
var nextHoverDateRange = getHoverRangeValue(date);
|
|
273
258
|
|
|
274
259
|
// If hasDoneSelect is false,
|
|
@@ -304,9 +289,9 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
304
289
|
var noHoverRangeValid = isNil(hoverRangeValue);
|
|
305
290
|
|
|
306
291
|
// in `oneTap` mode
|
|
307
|
-
if (
|
|
292
|
+
if (oneTap) {
|
|
308
293
|
setDateRange(event, noHoverRangeValid ? [startOfDay(date), endOfDay(date)] : hoverRangeValue);
|
|
309
|
-
|
|
294
|
+
onSelect === null || onSelect === void 0 ? void 0 : onSelect(date, event);
|
|
310
295
|
return;
|
|
311
296
|
}
|
|
312
297
|
|
|
@@ -366,7 +351,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
366
351
|
var doneSelected = selectValueLength === 0 || selectValueLength === 2;
|
|
367
352
|
doneSelected && setHoverDateRange(null);
|
|
368
353
|
}, [selectedDates]);
|
|
369
|
-
var
|
|
354
|
+
var onChangeCalendarMonth = useEventCallback(function (index, date) {
|
|
370
355
|
var calendarKey = index === 0 ? 'start' : 'end';
|
|
371
356
|
var nextCalendarDate = Array.from(calendarDate);
|
|
372
357
|
nextCalendarDate[index] = date;
|
|
@@ -376,7 +361,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
376
361
|
eventName: 'changeMonth'
|
|
377
362
|
});
|
|
378
363
|
});
|
|
379
|
-
var
|
|
364
|
+
var onChangeCalendarTime = useEventCallback(function (index, date) {
|
|
380
365
|
var calendarKey = index === 0 ? 'start' : 'end';
|
|
381
366
|
var nextCalendarDate = Array.from(calendarDate);
|
|
382
367
|
nextCalendarDate[index] = date;
|
|
@@ -400,7 +385,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
400
385
|
/**
|
|
401
386
|
* The callback triggered when PM/AM is switched.
|
|
402
387
|
*/
|
|
403
|
-
var
|
|
388
|
+
var onToggleMeridian = useEventCallback(function (index) {
|
|
404
389
|
var nextCalendarDate = Array.from(calendarDate);
|
|
405
390
|
nextCalendarDate[index] = getReversedTimeMeridian(nextCalendarDate[index]);
|
|
406
391
|
setCalendarDate(nextCalendarDate);
|
|
@@ -494,7 +479,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
494
479
|
}
|
|
495
480
|
return false;
|
|
496
481
|
};
|
|
497
|
-
var
|
|
482
|
+
var disableByBetween = function disableByBetween(start, end, type) {
|
|
498
483
|
// If the date is between the start and the end
|
|
499
484
|
// the button is disabled
|
|
500
485
|
while (isBefore(start, end) || isSameDay(start, end)) {
|
|
@@ -509,15 +494,15 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
509
494
|
}
|
|
510
495
|
return false;
|
|
511
496
|
};
|
|
512
|
-
var
|
|
497
|
+
var disableOkButton = function disableOkButton() {
|
|
513
498
|
var start = selectedDates[0],
|
|
514
499
|
end = selectedDates[1];
|
|
515
500
|
if (!start || !end || !isSelectedIdle) {
|
|
516
501
|
return true;
|
|
517
502
|
}
|
|
518
|
-
return
|
|
503
|
+
return disableByBetween(start, end, TARGET.TOOLBAR_BUTTON_OK);
|
|
519
504
|
};
|
|
520
|
-
var
|
|
505
|
+
var disableShortcut = function disableShortcut(value) {
|
|
521
506
|
if (value === void 0) {
|
|
522
507
|
value = [];
|
|
523
508
|
}
|
|
@@ -527,7 +512,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
527
512
|
if (!start || !end) {
|
|
528
513
|
return true;
|
|
529
514
|
}
|
|
530
|
-
return
|
|
515
|
+
return disableByBetween(start, end, TARGET.TOOLBAR_SHORTCUT);
|
|
531
516
|
};
|
|
532
517
|
var handleClose = useEventCallback(function () {
|
|
533
518
|
var _trigger$current, _trigger$current$clos;
|
|
@@ -538,8 +523,8 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
538
523
|
esc: handleClose,
|
|
539
524
|
enter: function enter() {
|
|
540
525
|
var _trigger$current2;
|
|
541
|
-
var
|
|
542
|
-
open =
|
|
526
|
+
var _ref4 = ((_trigger$current2 = trigger.current) === null || _trigger$current2 === void 0 ? void 0 : _trigger$current2.getState()) || {},
|
|
527
|
+
open = _ref4.open;
|
|
543
528
|
if (!open) {
|
|
544
529
|
var _trigger$current3;
|
|
545
530
|
(_trigger$current3 = trigger.current) === null || _trigger$current3 === void 0 ? void 0 : _trigger$current3.open();
|
|
@@ -567,31 +552,44 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
567
552
|
left: left,
|
|
568
553
|
top: top
|
|
569
554
|
});
|
|
555
|
+
var disabledDate = function disabledDate(date, values, type) {
|
|
556
|
+
return isDateDisabled(date, {
|
|
557
|
+
selectDate: values,
|
|
558
|
+
selectedDone: isSelectedIdle,
|
|
559
|
+
target: type
|
|
560
|
+
});
|
|
561
|
+
};
|
|
570
562
|
var calendarProps = {
|
|
571
|
-
|
|
572
|
-
disabledDate: function disabledDate(date, values, type) {
|
|
573
|
-
return isDateDisabled(date, {
|
|
574
|
-
selectDate: values,
|
|
575
|
-
selectedDone: isSelectedIdle,
|
|
576
|
-
target: type
|
|
577
|
-
});
|
|
578
|
-
},
|
|
579
|
-
format: formatStr,
|
|
580
|
-
hoverRangeValue: hoverDateRange !== null && hoverDateRange !== void 0 ? hoverDateRange : undefined,
|
|
563
|
+
locale: locale,
|
|
581
564
|
isoWeek: isoWeek,
|
|
582
565
|
limitEndYear: limitEndYear,
|
|
566
|
+
showMeridian: showMeridian,
|
|
567
|
+
calendarDate: calendarDate,
|
|
583
568
|
limitStartYear: limitStartYear,
|
|
584
|
-
locale: locale,
|
|
585
569
|
showWeekNumbers: showWeekNumbers,
|
|
570
|
+
format: formatStr,
|
|
586
571
|
value: selectedDates,
|
|
587
|
-
|
|
588
|
-
onChangeCalendarMonth: handleSingleCalendarMonth,
|
|
589
|
-
onChangeCalendarTime: handleSingleCalendarTime,
|
|
590
|
-
onMouseMove: handleMouseMove,
|
|
572
|
+
hoverRangeValue: hoverDateRange !== null && hoverDateRange !== void 0 ? hoverDateRange : undefined,
|
|
591
573
|
onSelect: handleSelectDate,
|
|
592
|
-
|
|
574
|
+
onChangeCalendarMonth: onChangeCalendarMonth,
|
|
575
|
+
onChangeCalendarTime: onChangeCalendarTime,
|
|
576
|
+
onToggleMeridian: onToggleMeridian,
|
|
577
|
+
onMouseMove: onMouseMove,
|
|
578
|
+
disabledDate: disabledDate,
|
|
593
579
|
renderTitle: renderTitle
|
|
594
580
|
};
|
|
581
|
+
var getCalendars = function getCalendars() {
|
|
582
|
+
if (showOneCalendar) {
|
|
583
|
+
return /*#__PURE__*/React.createElement(Calendar, _extends({
|
|
584
|
+
index: activeCalendarKey === 'end' ? 1 : 0
|
|
585
|
+
}, calendarProps));
|
|
586
|
+
}
|
|
587
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Calendar, _extends({
|
|
588
|
+
index: 0
|
|
589
|
+
}, calendarProps)), /*#__PURE__*/React.createElement(Calendar, _extends({
|
|
590
|
+
index: 1
|
|
591
|
+
}, calendarProps)));
|
|
592
|
+
};
|
|
595
593
|
var sideRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
|
|
596
594
|
return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
|
|
597
595
|
})) || [];
|
|
@@ -618,29 +616,29 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
618
616
|
ranges: sideRanges,
|
|
619
617
|
calendarDate: calendarDate,
|
|
620
618
|
locale: locale,
|
|
621
|
-
|
|
619
|
+
disableShortcut: disableShortcut,
|
|
622
620
|
onShortcutClick: handleShortcutPageDate,
|
|
623
621
|
"data-testid": "daterange-predefined-side"
|
|
624
622
|
}), /*#__PURE__*/React.createElement(Stack.Item, null, /*#__PURE__*/React.createElement("div", {
|
|
625
623
|
className: prefix('daterange-content')
|
|
626
|
-
}, showHeader && /*#__PURE__*/React.createElement(
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
624
|
+
}, showHeader && /*#__PURE__*/React.createElement(Header, {
|
|
625
|
+
value: isSelectedIdle ? selectedDates : hoverDateRange,
|
|
626
|
+
formatStr: formatStr,
|
|
627
|
+
character: character,
|
|
628
|
+
clickable: showOneCalendar,
|
|
629
|
+
activeKey: activeCalendarKey,
|
|
630
|
+
onSelect: setActiveCalendarKey
|
|
631
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
630
632
|
className: prefix("daterange-calendar-" + (showOneCalendar ? 'single' : 'group'))
|
|
631
633
|
}, /*#__PURE__*/React.createElement(DateRangePickerContext.Provider, {
|
|
632
634
|
value: {
|
|
633
635
|
isSelectedIdle: isSelectedIdle
|
|
634
636
|
}
|
|
635
|
-
}, /*#__PURE__*/React.createElement(
|
|
636
|
-
index: 0
|
|
637
|
-
}, calendarProps)), !showOneCalendar && /*#__PURE__*/React.createElement(Calendar, _extends({
|
|
638
|
-
index: 1
|
|
639
|
-
}, calendarProps))))), /*#__PURE__*/React.createElement(Toolbar, {
|
|
637
|
+
}, getCalendars()))), /*#__PURE__*/React.createElement(Toolbar, {
|
|
640
638
|
locale: locale,
|
|
641
639
|
calendarDate: selectedDates,
|
|
642
|
-
|
|
643
|
-
|
|
640
|
+
disableOkBtn: disableOkButton,
|
|
641
|
+
disableShortcut: disableShortcut,
|
|
644
642
|
hideOkBtn: oneTap,
|
|
645
643
|
onOk: handleOK,
|
|
646
644
|
onShortcutClick: handleShortcutPageDate,
|
|
@@ -683,7 +681,7 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
683
681
|
var disabledOptions = {
|
|
684
682
|
selectDate: value,
|
|
685
683
|
selectedDone: isSelectedIdle,
|
|
686
|
-
target:
|
|
684
|
+
target: TARGET.INPUT
|
|
687
685
|
};
|
|
688
686
|
if (isDateDisabled(startDate, disabledOptions) || isDateDisabled(endDate, disabledOptions)) {
|
|
689
687
|
return true;
|
|
@@ -745,14 +743,6 @@ var DateRangePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
745
743
|
showCleanButton: showCleanButton
|
|
746
744
|
}))));
|
|
747
745
|
});
|
|
748
|
-
DateRangePicker.after = disabledDateUtils.after;
|
|
749
|
-
DateRangePicker.afterToday = disabledDateUtils.afterToday;
|
|
750
|
-
DateRangePicker.allowedDays = disabledDateUtils.allowedDays;
|
|
751
|
-
DateRangePicker.allowedMaxDays = disabledDateUtils.allowedMaxDays;
|
|
752
|
-
DateRangePicker.allowedRange = disabledDateUtils.allowedRange;
|
|
753
|
-
DateRangePicker.before = disabledDateUtils.before;
|
|
754
|
-
DateRangePicker.beforeToday = disabledDateUtils.beforeToday;
|
|
755
|
-
DateRangePicker.combine = disabledDateUtils.combine;
|
|
756
746
|
DateRangePicker.displayName = 'DateRangePicker';
|
|
757
747
|
DateRangePicker.propTypes = _extends({}, pickerPropTypes, {
|
|
758
748
|
ranges: PropTypes.array,
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
interface DateRangePickerContextValue {
|
|
3
|
+
/**
|
|
4
|
+
* Whether to complete the selection.
|
|
5
|
+
*/
|
|
3
6
|
isSelectedIdle?: boolean;
|
|
4
7
|
}
|
|
5
8
|
declare const DateRangePickerContext: React.Context<DateRangePickerContextValue>;
|
|
6
|
-
export default DateRangePickerContext;
|
|
7
9
|
export declare const useDateRangePickerContext: () => DateRangePickerContextValue;
|
|
10
|
+
export default DateRangePickerContext;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import React, { useContext } from 'react';
|
|
3
3
|
var DateRangePickerContext = /*#__PURE__*/React.createContext({});
|
|
4
|
-
export default DateRangePickerContext;
|
|
5
4
|
export var useDateRangePickerContext = function useDateRangePickerContext() {
|
|
6
5
|
return useContext(DateRangePickerContext) || {};
|
|
7
|
-
};
|
|
6
|
+
};
|
|
7
|
+
export default DateRangePickerContext;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface HeaderProps {
|
|
3
|
+
formatStr: string;
|
|
4
|
+
character: string;
|
|
5
|
+
value: Date[] | null;
|
|
6
|
+
activeKey?: 'start' | 'end';
|
|
7
|
+
onSelect?: (eventKey: 'start' | 'end') => void;
|
|
8
|
+
clickable?: boolean;
|
|
9
|
+
}
|
|
10
|
+
declare function Header(props: HeaderProps): JSX.Element;
|
|
11
|
+
export default Header;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useClassNames } from '../utils';
|
|
4
|
+
import { compareAsc } from '../utils/dateUtils';
|
|
5
|
+
import { FormattedDate } from '../CustomProvider';
|
|
6
|
+
import Button from '../Button';
|
|
7
|
+
function Header(props) {
|
|
8
|
+
var _prefix;
|
|
9
|
+
var _useClassNames = useClassNames('picker'),
|
|
10
|
+
prefix = _useClassNames.prefix;
|
|
11
|
+
var formatStr = props.formatStr,
|
|
12
|
+
character = props.character,
|
|
13
|
+
value = props.value,
|
|
14
|
+
_props$activeKey = props.activeKey,
|
|
15
|
+
activeKey = _props$activeKey === void 0 ? 'start' : _props$activeKey,
|
|
16
|
+
clickable = props.clickable,
|
|
17
|
+
onSelect = props.onSelect;
|
|
18
|
+
var _ref = value !== null && value !== void 0 ? value : [null, null],
|
|
19
|
+
startDate = _ref[0],
|
|
20
|
+
endDate = _ref[1];
|
|
21
|
+
var v = startDate && endDate ? [startDate, endDate].sort(compareAsc) : [startDate, endDate];
|
|
22
|
+
var start = v[0] ? /*#__PURE__*/React.createElement(FormattedDate, {
|
|
23
|
+
date: v[0],
|
|
24
|
+
formatStr: formatStr
|
|
25
|
+
}) : formatStr;
|
|
26
|
+
var end = v[1] ? /*#__PURE__*/React.createElement(FormattedDate, {
|
|
27
|
+
date: v[1],
|
|
28
|
+
formatStr: formatStr
|
|
29
|
+
}) : formatStr;
|
|
30
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
31
|
+
className: prefix('daterange-header', (_prefix = {}, _prefix["tab-active-" + activeKey] = clickable, _prefix)),
|
|
32
|
+
"data-testid": "daterange-header"
|
|
33
|
+
}, clickable ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
|
|
34
|
+
size: "xs",
|
|
35
|
+
appearance: "subtle",
|
|
36
|
+
className: prefix('header-date'),
|
|
37
|
+
onClick: function onClick() {
|
|
38
|
+
return onSelect === null || onSelect === void 0 ? void 0 : onSelect('start');
|
|
39
|
+
},
|
|
40
|
+
"aria-label": "Select start date"
|
|
41
|
+
}, start), /*#__PURE__*/React.createElement("span", {
|
|
42
|
+
className: prefix('header-character')
|
|
43
|
+
}, character), /*#__PURE__*/React.createElement(Button, {
|
|
44
|
+
size: "xs",
|
|
45
|
+
appearance: "subtle",
|
|
46
|
+
className: prefix('header-date'),
|
|
47
|
+
onClick: function onClick() {
|
|
48
|
+
return onSelect === null || onSelect === void 0 ? void 0 : onSelect('end');
|
|
49
|
+
},
|
|
50
|
+
"aria-label": "Select end date"
|
|
51
|
+
}, end)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
|
|
52
|
+
className: prefix('header-date')
|
|
53
|
+
}, start), /*#__PURE__*/React.createElement("span", {
|
|
54
|
+
className: prefix('header-character')
|
|
55
|
+
}, character), /*#__PURE__*/React.createElement("span", {
|
|
56
|
+
className: prefix('header-date')
|
|
57
|
+
}, end)));
|
|
58
|
+
}
|
|
59
|
+
export default Header;
|
|
@@ -4,7 +4,7 @@ import { DisabledDateFunction } from './types';
|
|
|
4
4
|
*/
|
|
5
5
|
export declare function allowedMaxDays(days: number): DisabledDateFunction;
|
|
6
6
|
/**
|
|
7
|
-
Only allowed days are specified, other dates are disabled.
|
|
7
|
+
* Only allowed days are specified, other dates are disabled.
|
|
8
8
|
*/
|
|
9
9
|
export declare function allowedDays(days: number): DisabledDateFunction;
|
|
10
10
|
/**
|
|
@@ -35,7 +35,7 @@ export function allowedMaxDays(days) {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
|
-
Only allowed days are specified, other dates are disabled.
|
|
38
|
+
* Only allowed days are specified, other dates are disabled.
|
|
39
39
|
*/
|
|
40
40
|
export function allowedDays(days) {
|
|
41
41
|
return function (date, selectValue, selectedDone, target) {
|