@ozen-ui/kit 0.73.0 → 0.75.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/__inner__/cjs/components/Calendar/Calendar.js +26 -2
- package/__inner__/cjs/components/Calendar/CalendarContext.d.ts +8 -1
- package/__inner__/cjs/components/Calendar/CalendarContext.js +10 -1
- package/__inner__/cjs/components/Calendar/__tests__/utils.d.ts +11 -0
- package/__inner__/cjs/components/Calendar/__tests__/utils.js +58 -0
- package/__inner__/cjs/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +68 -13
- package/__inner__/cjs/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +62 -16
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +13 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +5 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +2 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/components/CalendarSwitcher/components/index.js +4 -0
- package/__inner__/cjs/components/Calendar/constants.d.ts +2 -0
- package/__inner__/cjs/components/Calendar/constants.js +7 -1
- package/__inner__/cjs/components/Calendar/index.d.ts +1 -0
- package/__inner__/cjs/components/Calendar/index.js +1 -0
- package/__inner__/cjs/components/Calendar/types.d.ts +13 -5
- package/__inner__/cjs/components/Calendar/utils.d.ts +10 -1
- package/__inner__/cjs/components/Calendar/utils.js +12 -1
- package/__inner__/cjs/components/DatePicker/components/DateInput/DateInput.js +4 -3
- package/__inner__/cjs/components/DatePicker/components/DateInput/types.d.ts +6 -2
- package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
- package/__inner__/cjs/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +32 -20
- package/__inner__/cjs/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +74 -51
- package/__inner__/cjs/components/DatePicker/constants.d.ts +2 -0
- package/__inner__/cjs/components/DatePicker/constants.js +4 -1
- package/__inner__/cjs/components/DatePicker/types.d.ts +10 -6
- package/__inner__/cjs/components/DatePicker/types.js +3 -1
- package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
- package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
- package/__inner__/cjs/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
- package/__inner__/cjs/components/DatePicker/utils/index.d.ts +2 -0
- package/__inner__/cjs/components/DatePicker/utils/index.js +2 -0
- package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
- package/__inner__/cjs/components/DatePicker/utils/isValidDateString/isValidDateString.js +9 -8
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/index.js +4 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
- package/__inner__/cjs/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +43 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/index.js +4 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
- package/__inner__/cjs/components/DatePicker/utils/parseDateString/parseDateString.js +66 -0
- package/__inner__/cjs/components/Grid/Grid.d.ts +2 -1
- package/__inner__/cjs/components/Grid/GridItem.d.ts +2 -1
- package/__inner__/cjs/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
- package/__inner__/cjs/components/SectionMessage/SectionMessage.css +6 -0
- package/__inner__/cjs/components/SectionMessage/SectionMessage.js +8 -5
- package/__inner__/cjs/components/SectionMessage/config.d.ts +2 -3
- package/__inner__/cjs/components/SectionMessage/config.js +6 -22
- package/__inner__/cjs/components/SectionMessage/constants.d.ts +3 -0
- package/__inner__/cjs/components/SectionMessage/constants.js +7 -1
- package/__inner__/cjs/components/SectionMessage/types.d.ts +6 -1
- package/__inner__/cjs/components/SectionMessage/types.js +1 -0
- package/__inner__/cjs/components/Stack/Stack.css +3 -0
- package/__inner__/cjs/components/Stack/Stack.js +2 -1
- package/__inner__/cjs/components/Stack/constants.d.ts +1 -0
- package/__inner__/cjs/components/Stack/constants.js +2 -1
- package/__inner__/cjs/components/Stack/types.d.ts +4 -0
- package/__inner__/cjs/components/Stack/types.js +2 -1
- package/__inner__/cjs/hooks/useDevEffect/index.d.ts +1 -0
- package/__inner__/cjs/hooks/useDevEffect/index.js +4 -0
- package/__inner__/cjs/hooks/useDevEffect/useDevEffect.d.ts +3 -0
- package/__inner__/cjs/hooks/useDevEffect/useDevEffect.js +13 -0
- package/__inner__/cjs/hooks/useIntersectionObserver/index.d.ts +2 -0
- package/__inner__/cjs/hooks/useIntersectionObserver/index.js +5 -0
- package/__inner__/cjs/hooks/useIntersectionObserver/types.d.ts +29 -0
- package/__inner__/cjs/hooks/useIntersectionObserver/types.js +2 -0
- package/__inner__/cjs/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +6 -0
- package/__inner__/cjs/hooks/useIntersectionObserver/useIntersectionObserver.js +80 -0
- package/__inner__/cjs/locale/locale.js +39 -3
- package/__inner__/cjs/utils/array/createFilled/createFilledArray.d.ts +1 -1
- package/__inner__/cjs/utils/array/createFilled/createFilledArray.js +6 -1
- package/__inner__/cjs/utils/react/extractRef.d.ts +2 -0
- package/__inner__/cjs/utils/react/extractRef.js +11 -0
- package/__inner__/cjs/utils/react/index.d.ts +1 -0
- package/__inner__/cjs/utils/react/index.js +1 -0
- package/__inner__/esm/components/Calendar/Calendar.js +27 -3
- package/__inner__/esm/components/Calendar/CalendarContext.d.ts +8 -1
- package/__inner__/esm/components/Calendar/CalendarContext.js +10 -1
- package/__inner__/esm/components/Calendar/__tests__/utils.d.ts +11 -0
- package/__inner__/esm/components/Calendar/__tests__/utils.js +45 -0
- package/__inner__/esm/components/Calendar/components/CalendarGrid/CalendarGrid.js +4 -3
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItem.js +25 -2
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.d.ts +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarItem/CalendarItemContext.js +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarModeRange/CalendarModeRange.js +70 -15
- package/__inner__/esm/components/Calendar/components/CalendarModeSingle/CalendarModeSingle.js +64 -18
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/CalendarSwitcher.js +6 -7
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.d.ts +3 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/CalendarSwitcherText.js +9 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.d.ts +2 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/index.js +2 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.d.ts +4 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/CalendarSwitcherText/types.js +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.d.ts +1 -0
- package/__inner__/esm/components/Calendar/components/CalendarSwitcher/components/index.js +1 -0
- package/__inner__/esm/components/Calendar/constants.d.ts +2 -0
- package/__inner__/esm/components/Calendar/constants.js +6 -0
- package/__inner__/esm/components/Calendar/index.d.ts +1 -0
- package/__inner__/esm/components/Calendar/index.js +1 -0
- package/__inner__/esm/components/Calendar/types.d.ts +13 -5
- package/__inner__/esm/components/Calendar/utils.d.ts +10 -1
- package/__inner__/esm/components/Calendar/utils.js +9 -0
- package/__inner__/esm/components/DatePicker/components/DateInput/DateInput.js +3 -2
- package/__inner__/esm/components/DatePicker/components/DateInput/types.d.ts +6 -2
- package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/components/DateInput/utils/dateInputMask/dateInputMask.js +67 -7
- package/__inner__/esm/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js +33 -21
- package/__inner__/esm/components/DatePicker/components/DatePickerModeDateRange/DatePickerModeDateRange.js +68 -45
- package/__inner__/esm/components/DatePicker/constants.d.ts +2 -0
- package/__inner__/esm/components/DatePicker/constants.js +3 -0
- package/__inner__/esm/components/DatePicker/types.d.ts +10 -6
- package/__inner__/esm/components/DatePicker/types.js +2 -0
- package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/formatDateToString/formatDateToString.js +18 -5
- package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/formatStringToDate/formatStringToDate.js +6 -5
- package/__inner__/esm/components/DatePicker/utils/getCommonCalendarProps/getCommonCalendarProps.js +2 -2
- package/__inner__/esm/components/DatePicker/utils/index.d.ts +2 -0
- package/__inner__/esm/components/DatePicker/utils/index.js +2 -0
- package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.d.ts +2 -1
- package/__inner__/esm/components/DatePicker/utils/isValidDateString/isValidDateString.js +8 -7
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.d.ts +1 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/index.js +1 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.d.ts +6 -0
- package/__inner__/esm/components/DatePicker/utils/maskPastedDate/maskPastedDate.js +39 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/index.d.ts +1 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/index.js +1 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.d.ts +6 -0
- package/__inner__/esm/components/DatePicker/utils/parseDateString/parseDateString.js +62 -0
- package/__inner__/esm/components/Grid/Grid.d.ts +2 -1
- package/__inner__/esm/components/Grid/GridItem.d.ts +2 -1
- package/__inner__/esm/components/ListCardItem/hooks/useListCardItemRatio.js +10 -14
- package/__inner__/esm/components/SectionMessage/SectionMessage.css +6 -0
- package/__inner__/esm/components/SectionMessage/SectionMessage.js +8 -5
- package/__inner__/esm/components/SectionMessage/config.d.ts +2 -3
- package/__inner__/esm/components/SectionMessage/config.js +6 -21
- package/__inner__/esm/components/SectionMessage/constants.d.ts +3 -0
- package/__inner__/esm/components/SectionMessage/constants.js +6 -0
- package/__inner__/esm/components/SectionMessage/types.d.ts +6 -1
- package/__inner__/esm/components/SectionMessage/types.js +1 -0
- package/__inner__/esm/components/Stack/Stack.css +3 -0
- package/__inner__/esm/components/Stack/Stack.js +3 -2
- package/__inner__/esm/components/Stack/constants.d.ts +1 -0
- package/__inner__/esm/components/Stack/constants.js +1 -0
- package/__inner__/esm/components/Stack/types.d.ts +4 -0
- package/__inner__/esm/components/Stack/types.js +1 -0
- package/__inner__/esm/hooks/useDevEffect/index.d.ts +1 -0
- package/__inner__/esm/hooks/useDevEffect/index.js +1 -0
- package/__inner__/esm/hooks/useDevEffect/useDevEffect.d.ts +3 -0
- package/__inner__/esm/hooks/useDevEffect/useDevEffect.js +9 -0
- package/__inner__/esm/hooks/useIntersectionObserver/index.d.ts +2 -0
- package/__inner__/esm/hooks/useIntersectionObserver/index.js +2 -0
- package/__inner__/esm/hooks/useIntersectionObserver/types.d.ts +29 -0
- package/__inner__/esm/hooks/useIntersectionObserver/types.js +1 -0
- package/__inner__/esm/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +6 -0
- package/__inner__/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +77 -0
- package/__inner__/esm/locale/locale.js +39 -3
- package/__inner__/esm/utils/array/createFilled/createFilledArray.d.ts +1 -1
- package/__inner__/esm/utils/array/createFilled/createFilledArray.js +6 -1
- package/__inner__/esm/utils/react/extractRef.d.ts +2 -0
- package/__inner__/esm/utils/react/extractRef.js +7 -0
- package/__inner__/esm/utils/react/index.d.ts +1 -0
- package/__inner__/esm/utils/react/index.js +1 -0
- package/package.json +4 -4
- package/useDevEffect/package.json +5 -0
- package/useIntersectionObserver/package.json +5 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { MouseEvent, ReactElement, ReactNode } from 'react';
|
|
2
2
|
import type { DPExcludeConfig, DPDayInteger } from '@rehookify/datepicker';
|
|
3
|
-
import type { ExtendableComponentPropsWithRef } from '../../types
|
|
3
|
+
import type { WithRequired, ExtendableComponentPropsWithRef } from '../../types';
|
|
4
4
|
import type { WithDisplayName } from '../../types/react';
|
|
5
5
|
import type { CALENDAR_DEFAULT_MODE } from './constants';
|
|
6
6
|
export declare const calendarStepVariant: readonly ["days", "months", "years"];
|
|
@@ -18,6 +18,7 @@ export type CalendarPropRenderAdditionalControls<MODE extends CalendarModeVarian
|
|
|
18
18
|
date?: MODE extends 'range' ? Date[] : Date;
|
|
19
19
|
}) => ReactElement;
|
|
20
20
|
export type CalendarPropCalendars = 1 | 2;
|
|
21
|
+
export type CalendarSteps = CalendarStepVariant[];
|
|
21
22
|
/**
|
|
22
23
|
* @deprecated
|
|
23
24
|
* Use the `CalendarPropOnChange` type to replace it.
|
|
@@ -44,6 +45,9 @@ export type CalendarExclude = CalendarPropExclude;
|
|
|
44
45
|
* */
|
|
45
46
|
export type CalendarStartDay = CalendarPropStartDay;
|
|
46
47
|
export type CalendarRenderAdditionalControls<MODE extends CalendarModeVariant> = CalendarPropRenderAdditionalControls<MODE>;
|
|
48
|
+
export type CalendarOnMonthClick = (event: MouseEvent<HTMLElement>, date: Date) => void;
|
|
49
|
+
export type CalendarOnDayClick = (event: MouseEvent<HTMLElement>, date: Date) => void;
|
|
50
|
+
export type CalendarOnYearClick = (event: MouseEvent<HTMLElement>, date: Date) => void;
|
|
47
51
|
export type CalendarProps<MODE extends CalendarModeVariant = typeof CALENDAR_DEFAULT_MODE> = ExtendableComponentPropsWithRef<{
|
|
48
52
|
/** Способ выбора даты:
|
|
49
53
|
* - `single` — позволяет выбрать одну дату (показывает один календарь).
|
|
@@ -75,11 +79,11 @@ export type CalendarProps<MODE extends CalendarModeVariant = typeof CALENDAR_DEF
|
|
|
75
79
|
/** Ограничение выбора дат по большей дате */
|
|
76
80
|
maxDate?: Date;
|
|
77
81
|
/** Обработчик нажатия на кнопку месяца */
|
|
78
|
-
onMonthClick
|
|
82
|
+
onMonthClick?: CalendarOnMonthClick;
|
|
79
83
|
/** Обработчик нажатия на кнопку дня */
|
|
80
|
-
onDayClick
|
|
84
|
+
onDayClick?: CalendarOnDayClick;
|
|
81
85
|
/** Обработчик нажатия на кнопку года */
|
|
82
|
-
onYearClick
|
|
86
|
+
onYearClick?: CalendarOnYearClick;
|
|
83
87
|
/** Дополнительные контролы — рендер функция */
|
|
84
88
|
renderAdditionalControls?: CalendarPropRenderAdditionalControls<MODE>;
|
|
85
89
|
/** Функция форматирования атрибута `aria-label` для кнопок переключения периодов */
|
|
@@ -89,6 +93,10 @@ export type CalendarProps<MODE extends CalendarModeVariant = typeof CALENDAR_DEF
|
|
|
89
93
|
/** Количество отображаемых календарей в компоненте: один или два */
|
|
90
94
|
calendars?: CalendarPropCalendars;
|
|
91
95
|
children?: never;
|
|
96
|
+
/** Шаги календаря. Определяет порядок и наличие этапов выбора. */
|
|
97
|
+
steps?: CalendarSteps;
|
|
98
|
+
/** Изначальный шаг */
|
|
99
|
+
initialStep?: CalendarStepVariant;
|
|
92
100
|
}, 'div'>;
|
|
93
101
|
export type CalendarComponent = WithDisplayName<(<MODE extends CalendarModeVariant = typeof CALENDAR_DEFAULT_MODE>(props: CalendarProps<MODE>) => ReactNode)>;
|
|
94
|
-
export type CalendarModeComponent<MODE extends CalendarModeVariant> = WithDisplayName<(props: Omit<CalendarProps<MODE>, 'mode'>) => ReactNode>;
|
|
102
|
+
export type CalendarModeComponent<MODE extends CalendarModeVariant> = WithDisplayName<(props: Omit<WithRequired<CalendarProps<MODE>, 'steps' | 'initialStep'>, 'mode'>) => ReactNode>;
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
import type { CalendarProps } from './index';
|
|
1
|
+
import type { CalendarProps, CalendarSteps } from './index';
|
|
2
2
|
export declare const cnCalendar: import("@bem-react/classname").ClassNameFormatter;
|
|
3
3
|
export declare const getPeriodSwitchAriaLabel: CalendarProps['getPeriodSwitchAriaLabel'];
|
|
4
|
+
export declare const calculateStepsAvailability: (steps: CalendarSteps) => {
|
|
5
|
+
hasDaysStep: boolean;
|
|
6
|
+
hasMonthsStep: boolean;
|
|
7
|
+
hasYearsStep: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const calculateStepsHelpers: (steps: CalendarSteps) => {
|
|
10
|
+
lastStep: "days" | "months" | "years";
|
|
11
|
+
firstStep: "days" | "months" | "years";
|
|
12
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getPeriodSwitchAriaLabel = exports.cnCalendar = void 0;
|
|
3
|
+
exports.calculateStepsHelpers = exports.calculateStepsAvailability = exports.getPeriodSwitchAriaLabel = exports.cnCalendar = void 0;
|
|
4
4
|
var classname_1 = require("../../utils/classname");
|
|
5
5
|
exports.cnCalendar = (0, classname_1.cn)('Calendar');
|
|
6
6
|
var getPeriodSwitchAriaLabel = function (step) {
|
|
@@ -13,3 +13,14 @@ var getPeriodSwitchAriaLabel = function (step) {
|
|
|
13
13
|
return ['Previous period', 'Next period'];
|
|
14
14
|
};
|
|
15
15
|
exports.getPeriodSwitchAriaLabel = getPeriodSwitchAriaLabel;
|
|
16
|
+
var calculateStepsAvailability = function (steps) { return ({
|
|
17
|
+
hasDaysStep: steps.includes('days'),
|
|
18
|
+
hasMonthsStep: steps.includes('months'),
|
|
19
|
+
hasYearsStep: steps.includes('years'),
|
|
20
|
+
}); };
|
|
21
|
+
exports.calculateStepsAvailability = calculateStepsAvailability;
|
|
22
|
+
var calculateStepsHelpers = function (steps) { return ({
|
|
23
|
+
lastStep: steps[steps.length - 1],
|
|
24
|
+
firstStep: steps[0],
|
|
25
|
+
}); };
|
|
26
|
+
exports.calculateStepsHelpers = calculateStepsHelpers;
|
|
@@ -4,10 +4,11 @@ exports.DateInput = void 0;
|
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
6
6
|
var useMultiRef_1 = require("../../../../hooks/useMultiRef");
|
|
7
|
+
var utils_1 = require("../../../../utils");
|
|
7
8
|
var Input_1 = require("../../../Input");
|
|
8
|
-
var
|
|
9
|
+
var utils_2 = require("./utils");
|
|
9
10
|
exports.DateInput = (0, react_1.forwardRef)(function (_a, ref) {
|
|
10
|
-
var valueProp = _a.value, defaultValue = _a.defaultValue, other = tslib_1.__rest(_a, ["value", "defaultValue"]);
|
|
11
|
-
return (react_1.default.createElement(Input_1.Input, tslib_1.__assign({ value: (0,
|
|
11
|
+
var valueProp = _a.value, defaultValue = _a.defaultValue, steps = _a.steps, placeholder = _a.placeholder, other = tslib_1.__rest(_a, ["value", "defaultValue", "steps", "placeholder"]);
|
|
12
|
+
return (react_1.default.createElement(Input_1.Input, tslib_1.__assign({ value: (0, utils_2.dateInputMask)(valueProp, steps), defaultValue: (0, utils_2.dateInputMask)(defaultValue, steps) }, other, { placeholder: (0, utils_1.isFunction)(placeholder) ? placeholder(steps) : placeholder, ref: (0, useMultiRef_1.useMultiRef)([ref]) })));
|
|
12
13
|
});
|
|
13
14
|
exports.DateInput.displayName = 'DateInput';
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import type { ComponentRef } from 'react';
|
|
2
|
-
import type { ExtendableComponentPropsWithRef } from '../../../../types
|
|
2
|
+
import type { ExtendableComponentPropsWithRef } from '../../../../types';
|
|
3
|
+
import type { CalendarSteps } from '../../../Calendar';
|
|
3
4
|
import type { FIELD_CONTROL_DEFAULT_TAG } from '../../../FieldControl';
|
|
4
5
|
import type { InputProps } from '../../../Input';
|
|
6
|
+
import type { InputPropPlaceholder } from '../../types';
|
|
5
7
|
export type DateInputRef = ComponentRef<typeof FIELD_CONTROL_DEFAULT_TAG>;
|
|
6
8
|
export type DateInputProps = ExtendableComponentPropsWithRef<{
|
|
9
|
+
steps: CalendarSteps;
|
|
7
10
|
value?: string;
|
|
8
11
|
defaultValue?: string;
|
|
9
|
-
|
|
12
|
+
placeholder?: InputPropPlaceholder;
|
|
13
|
+
} & Omit<InputProps, 'value' | 'defaultValue' | 'placeholder'>, typeof FIELD_CONTROL_DEFAULT_TAG>;
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import type { CalendarSteps } from '../../../../../Calendar';
|
|
2
|
+
export declare const dateInputMask: (value: string | undefined, steps: CalendarSteps) => string | undefined;
|
|
@@ -1,18 +1,78 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.dateInputMask = void 0;
|
|
4
|
-
var
|
|
4
|
+
var onlyOneDot = function (value) {
|
|
5
|
+
// Разрешить только первую точку, остальные убрать
|
|
6
|
+
var firstDotIndex = value.indexOf('.');
|
|
7
|
+
if (firstDotIndex === -1) {
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
// Сохраняем первую часть и одну точку
|
|
11
|
+
var beforeDot = value.slice(0, firstDotIndex + 1);
|
|
12
|
+
var afterDot = value.slice(firstDotIndex + 1).replace(/\./g, '');
|
|
13
|
+
return beforeDot + afterDot;
|
|
14
|
+
};
|
|
15
|
+
var dateInputMask = function (value, steps) {
|
|
5
16
|
if (!value) {
|
|
6
17
|
return value;
|
|
7
18
|
}
|
|
19
|
+
var hasDaysStep = steps.includes('days');
|
|
20
|
+
var hasMonthsStep = steps.includes('months');
|
|
21
|
+
var hasYearsStep = steps.includes('years');
|
|
22
|
+
var maxLength = 0;
|
|
8
23
|
var newValue = value.replace(/[^0-9.]/g, ''); // Запрещаем ввод, кроме цифр и точек
|
|
9
24
|
newValue = newValue.replace(/\.\.+/g, '..'); // Удаляем лишние точки
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
25
|
+
// DD
|
|
26
|
+
if (hasDaysStep && !hasMonthsStep && !hasYearsStep) {
|
|
27
|
+
maxLength = 2;
|
|
28
|
+
newValue = newValue.replace('.', '');
|
|
29
|
+
}
|
|
30
|
+
// MM
|
|
31
|
+
if (!hasDaysStep && hasMonthsStep && !hasYearsStep) {
|
|
32
|
+
maxLength = 2;
|
|
33
|
+
newValue = newValue.replace('.', '');
|
|
34
|
+
}
|
|
35
|
+
// YYYY
|
|
36
|
+
if (!hasDaysStep && !hasMonthsStep && hasYearsStep) {
|
|
37
|
+
maxLength = 4;
|
|
38
|
+
newValue = newValue.replace('.', '');
|
|
39
|
+
}
|
|
40
|
+
// DD.MM.YYYY
|
|
41
|
+
if (hasDaysStep && hasMonthsStep && hasYearsStep) {
|
|
42
|
+
newValue = newValue.replace(/^(\d)\.$/g, '0$1.'); // Добавляем 0 в D.
|
|
43
|
+
newValue = newValue.replace(/^(\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в DD.M
|
|
44
|
+
newValue = newValue.replace(/^(\d\d)\.(\d)\.$/g, '$1.0$2.'); // Добавляем 0 в DD.M.
|
|
45
|
+
newValue = newValue.replace(/^(\d\d\.\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в DD.MM.Y
|
|
46
|
+
// + 2, так как одно соединение в виде "."
|
|
47
|
+
maxLength = 8 + 2;
|
|
48
|
+
}
|
|
49
|
+
// DD.MM
|
|
50
|
+
if (hasDaysStep && hasMonthsStep && !hasYearsStep) {
|
|
51
|
+
newValue = newValue.replace(/^(\d)\.$/g, '0$1.'); // Добавляем 0 в D.
|
|
52
|
+
newValue = newValue.replace(/^(\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в DD.M
|
|
53
|
+
newValue = onlyOneDot(newValue); // Разрешаем только одну точку
|
|
54
|
+
// + 1, так как одно соединение в виде "."
|
|
55
|
+
maxLength = 4 + 1;
|
|
56
|
+
}
|
|
57
|
+
// DD.YYYY
|
|
58
|
+
if (hasDaysStep && !hasMonthsStep && hasYearsStep) {
|
|
59
|
+
newValue = newValue.replace(/^(\d)\.$/g, '0$1.'); // Добавляем 0 в D.
|
|
60
|
+
newValue = newValue.replace(/^(\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в DD.Y
|
|
61
|
+
newValue = onlyOneDot(newValue);
|
|
62
|
+
// + 1, так как одно соединение в виде "."
|
|
63
|
+
maxLength = 6 + 1;
|
|
64
|
+
}
|
|
65
|
+
// MM.YYYY
|
|
66
|
+
if (!hasDaysStep && hasMonthsStep && hasYearsStep) {
|
|
67
|
+
newValue = newValue.replace(/^(\d)\.$/g, '0$1.'); // Добавляем 0 в M.
|
|
68
|
+
newValue = newValue.replace(/^(\d\d)(\d)$/g, '$1.$2'); // Добавляем точку в MM.Y
|
|
69
|
+
newValue = onlyOneDot(newValue);
|
|
70
|
+
// + 1, так как одно соединение в виде "."
|
|
71
|
+
maxLength = 6 + 1;
|
|
72
|
+
}
|
|
73
|
+
if (newValue.length > maxLength) {
|
|
74
|
+
newValue = newValue.slice(0, maxLength); // Ограничиваем длину
|
|
75
|
+
}
|
|
16
76
|
return newValue;
|
|
17
77
|
};
|
|
18
78
|
exports.dateInputMask = dateInputMask;
|
package/__inner__/cjs/components/DatePicker/components/DatePickerModeDate/DatePickerModeDate.js
CHANGED
|
@@ -5,44 +5,47 @@ var tslib_1 = require("tslib");
|
|
|
5
5
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
6
6
|
var useControlled_1 = require("../../../../hooks/useControlled");
|
|
7
7
|
var useMultiRef_1 = require("../../../../hooks/useMultiRef");
|
|
8
|
+
var useStoredValue_1 = require("../../../../hooks/useStoredValue");
|
|
8
9
|
var isKeys_1 = require("../../../../utils/isKeys");
|
|
9
10
|
var Calendar_1 = require("../../../Calendar");
|
|
10
11
|
var Popover_1 = require("../../../Popover");
|
|
12
|
+
var constants_1 = require("../../constants");
|
|
11
13
|
var index_1 = require("../../index");
|
|
12
14
|
var utils_1 = require("../../utils");
|
|
13
15
|
var index_2 = require("../index");
|
|
14
16
|
exports.DatePickerModeDate = (0, react_1.forwardRef)(function (props, ref) {
|
|
15
|
-
var size = props.size, valueProp = props.value, label = props.label, defaultValue = props.defaultValue, openProp = props.open, onCloseProp = props.onClose, onOpenProp = props.onOpen, onInputChange = props.onInputChange, clearText = props.clearText, defaultOpen = props.defaultOpen, disabled = props.disabled, minDate = props.minDate, maxDate = props.maxDate, exclude = props.exclude, inputProps = props.inputProps, renderRight = props.renderRight, className = props.className, _a = props.calendars, calendars = _a === void 0 ? 1 : _a, disableClearButton = props.disableClearButton, onChange = props.onChange, onKeyDown = props.onKeyDown, autoFocus = props.autoFocus, disableCloseOnSelect = props.disableCloseOnSelect, popoverPropsProp = props.popoverProps, calendarPropsProp = props.calendarProps, onError = props.onError, other = tslib_1.__rest(props, ["size", "value", "label", "defaultValue", "open", "onClose", "onOpen", "onInputChange", "clearText", "defaultOpen", "disabled", "minDate", "maxDate", "exclude", "inputProps", "renderRight", "className", "calendars", "disableClearButton", "onChange", "onKeyDown", "autoFocus", "disableCloseOnSelect", "popoverProps", "calendarProps", "onError"]);
|
|
17
|
+
var size = props.size, valueProp = props.value, label = props.label, defaultValue = props.defaultValue, openProp = props.open, onCloseProp = props.onClose, onOpenProp = props.onOpen, onInputChange = props.onInputChange, clearText = props.clearText, defaultOpen = props.defaultOpen, disabled = props.disabled, minDate = props.minDate, maxDate = props.maxDate, exclude = props.exclude, inputProps = props.inputProps, renderRight = props.renderRight, className = props.className, _a = props.calendars, calendars = _a === void 0 ? 1 : _a, disableClearButton = props.disableClearButton, onChange = props.onChange, onKeyDown = props.onKeyDown, autoFocus = props.autoFocus, disableCloseOnSelect = props.disableCloseOnSelect, popoverPropsProp = props.popoverProps, calendarPropsProp = props.calendarProps, onError = props.onError, _b = props.steps, steps = _b === void 0 ? constants_1.DATE_PICKER_DEFAULT_STEPS : _b, _c = props.initialStep, initialStep = _c === void 0 ? constants_1.DATE_PICKER_DEFAULT_INITIAL_STEP : _c, other = tslib_1.__rest(props, ["size", "value", "label", "defaultValue", "open", "onClose", "onOpen", "onInputChange", "clearText", "defaultOpen", "disabled", "minDate", "maxDate", "exclude", "inputProps", "renderRight", "className", "calendars", "disableClearButton", "onChange", "onKeyDown", "autoFocus", "disableCloseOnSelect", "popoverProps", "calendarProps", "onError", "steps", "initialStep"]);
|
|
16
18
|
var anchorRef = (0, react_1.useRef)(null);
|
|
17
19
|
var calendarInnerRef = (0, react_1.useRef)(null);
|
|
18
20
|
var calendarRef = (0, useMultiRef_1.useMultiRef)([calendarInnerRef, calendarPropsProp === null || calendarPropsProp === void 0 ? void 0 : calendarPropsProp.ref]);
|
|
19
21
|
var lastValidDate = (0, react_1.useRef)('');
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
+
var _d = tslib_1.__read((0, react_1.useState)(null), 2), offsetDate = _d[0], setOffsetDate = _d[1];
|
|
23
|
+
var isWasPaste = (0, useStoredValue_1.useStoredValue)(false);
|
|
24
|
+
var _e = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
22
25
|
value: undefined,
|
|
23
26
|
defaultValue: '',
|
|
24
27
|
name: 'DatePicker',
|
|
25
28
|
state: 'inputValue',
|
|
26
|
-
}), 2), inputValue =
|
|
27
|
-
var
|
|
29
|
+
}), 2), inputValue = _e[0], setInputValue = _e[1];
|
|
30
|
+
var _f = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
28
31
|
value: openProp,
|
|
29
32
|
defaultValue: defaultOpen,
|
|
30
33
|
name: 'DatePicker',
|
|
31
34
|
state: 'open',
|
|
32
|
-
}), 2), open =
|
|
33
|
-
var
|
|
35
|
+
}), 2), open = _f[0], setOpen = _f[1];
|
|
36
|
+
var _g = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
34
37
|
value: valueProp,
|
|
35
38
|
defaultValue: defaultValue,
|
|
36
39
|
name: 'DatePicker',
|
|
37
40
|
state: 'value',
|
|
38
|
-
}), 2), value =
|
|
41
|
+
}), 2), value = _g[0], setValue = _g[1];
|
|
39
42
|
var popoverProps = (0, utils_1.getCommonPopoverProps)(tslib_1.__assign(tslib_1.__assign({}, props), { popoverProps: popoverPropsProp }));
|
|
40
43
|
var calendarProps = (0, utils_1.getCommonCalendarProps)(tslib_1.__assign(tslib_1.__assign({}, props), { calendarProps: calendarPropsProp, ref: calendarRef }));
|
|
41
44
|
var onOffsetDateChange = function (date) {
|
|
42
45
|
setOffsetDate(date);
|
|
43
46
|
};
|
|
44
47
|
var callOnChange = function (value) {
|
|
45
|
-
var formattedDate = (0, utils_1.formatStringToDate)(value);
|
|
48
|
+
var formattedDate = (0, utils_1.formatStringToDate)(value, steps);
|
|
46
49
|
setValue(formattedDate);
|
|
47
50
|
onChange === null || onChange === void 0 ? void 0 : onChange(formattedDate);
|
|
48
51
|
lastValidDate.current = value;
|
|
@@ -50,9 +53,9 @@ exports.DatePickerModeDate = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
50
53
|
var changeInputValue = function (e, value) {
|
|
51
54
|
setInputValue(value);
|
|
52
55
|
onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(e, value);
|
|
53
|
-
if ((0, utils_1.isValidDateString)(value)) {
|
|
56
|
+
if ((0, utils_1.isValidDateString)(value, steps)) {
|
|
54
57
|
callOnChange(value);
|
|
55
|
-
onOffsetDateChange((0, utils_1.formatStringToDate)(value));
|
|
58
|
+
onOffsetDateChange((0, utils_1.formatStringToDate)(value, steps));
|
|
56
59
|
}
|
|
57
60
|
};
|
|
58
61
|
var handleExited = function () {
|
|
@@ -74,7 +77,7 @@ exports.DatePickerModeDate = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
74
77
|
}, [autoFocus]);
|
|
75
78
|
/** Эффект — синхронизируем значение текстового поля со значением в списке */
|
|
76
79
|
(0, react_1.useEffect)(function () {
|
|
77
|
-
var formattedDate = (0, utils_1.formatDateToString)(value);
|
|
80
|
+
var formattedDate = (0, utils_1.formatDateToString)(value, steps);
|
|
78
81
|
if (formattedDate !== inputValue) {
|
|
79
82
|
setInputValue(formattedDate);
|
|
80
83
|
onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(null, formattedDate);
|
|
@@ -130,7 +133,7 @@ exports.DatePickerModeDate = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
130
133
|
(_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.onBlur) === null || _a === void 0 ? void 0 : _a.call(inputProps, e);
|
|
131
134
|
if (!inputValue)
|
|
132
135
|
return;
|
|
133
|
-
if (!(0, utils_1.isValidDateString)(inputValue))
|
|
136
|
+
if (!(0, utils_1.isValidDateString)(inputValue, steps))
|
|
134
137
|
changeInputValue(null, lastValidDate.current);
|
|
135
138
|
};
|
|
136
139
|
/** Очистка поля */
|
|
@@ -138,22 +141,31 @@ exports.DatePickerModeDate = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
138
141
|
changeInputValue(null, '');
|
|
139
142
|
};
|
|
140
143
|
/** Событие ввода значения в текстовом поле */
|
|
141
|
-
var handleChangeInput = function (
|
|
144
|
+
var handleChangeInput = function (event) {
|
|
145
|
+
var _a;
|
|
146
|
+
var value = event.target.value.trim();
|
|
147
|
+
var preparedValue = isWasPaste.current
|
|
148
|
+
? (0, utils_1.maskPastedDate)(value, steps)
|
|
149
|
+
: value;
|
|
150
|
+
changeInputValue(event, preparedValue);
|
|
151
|
+
(_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.onChange) === null || _a === void 0 ? void 0 : _a.call(inputProps, event);
|
|
152
|
+
isWasPaste.current = false;
|
|
153
|
+
};
|
|
154
|
+
var handlePasteInput = function (event) {
|
|
142
155
|
var _a;
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
(_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.onChange) === null || _a === void 0 ? void 0 : _a.call(inputProps, e);
|
|
156
|
+
isWasPaste.current = true;
|
|
157
|
+
(_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.onPaste) === null || _a === void 0 ? void 0 : _a.call(inputProps, event);
|
|
146
158
|
};
|
|
147
159
|
/** Событие выбора значения из календаря */
|
|
148
160
|
var handleChangeCalendar = function (date) {
|
|
149
|
-
var formattedDate = (0, utils_1.formatDateToString)(date);
|
|
161
|
+
var formattedDate = (0, utils_1.formatDateToString)(date, steps);
|
|
150
162
|
changeInputValue(null, formattedDate);
|
|
151
163
|
if (!disableCloseOnSelect)
|
|
152
164
|
handleClose();
|
|
153
165
|
};
|
|
154
166
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
155
|
-
react_1.default.createElement(index_2.DateInput, tslib_1.__assign({ size: size, disabled: disabled, label: label }, other, { className: (0, index_1.cnDatePicker)({ mode: 'date' }, className), renderRight: react_1.default.createElement(index_2.DatePickerRenderRight, { size: size, open: open, onClear: handleClear, clearText: clearText, hasValue: !!value, renderRight: renderRight, disableClearButton: disableClearButton }), value: inputValue, inputProps: tslib_1.__assign(tslib_1.__assign({ autoComplete: 'off' }, inputProps), { onBlur: handleBlur, onClick: handleClickOnInput, onChange: handleChangeInput }), bodyProps: { ref: anchorRef, 'aria-expanded': open }, onKeyDown: handleKeyDown, ref: ref })),
|
|
167
|
+
react_1.default.createElement(index_2.DateInput, tslib_1.__assign({ size: size, disabled: disabled, label: label }, other, { steps: steps, className: (0, index_1.cnDatePicker)({ mode: 'date' }, className), renderRight: react_1.default.createElement(index_2.DatePickerRenderRight, { size: size, open: open, onClear: handleClear, clearText: clearText, hasValue: !!value, renderRight: renderRight, disableClearButton: disableClearButton }), value: inputValue, inputProps: tslib_1.__assign(tslib_1.__assign({ autoComplete: 'off' }, inputProps), { onBlur: handleBlur, onClick: handleClickOnInput, onChange: handleChangeInput, onPaste: handlePasteInput }), bodyProps: { ref: anchorRef, 'aria-expanded': open }, onKeyDown: handleKeyDown, ref: ref })),
|
|
156
168
|
react_1.default.createElement(Popover_1.Popover, tslib_1.__assign({ open: open, anchorRef: anchorRef, onClose: handleClose }, popoverProps, { disableEnforceFocus: !enableEnforceFocus, onExited: handleExited }),
|
|
157
|
-
react_1.default.createElement(Calendar_1.Calendar, tslib_1.__assign({ calendars: calendars }, calendarProps, { mode: "single", value: value || null, offsetDate: offsetDate, onOffsetDateChange: onOffsetDateChange, onChange: handleChangeCalendar })))));
|
|
169
|
+
react_1.default.createElement(Calendar_1.Calendar, tslib_1.__assign({ calendars: calendars }, calendarProps, { steps: steps, initialStep: initialStep, mode: "single", value: value || null, offsetDate: offsetDate, onOffsetDateChange: onOffsetDateChange, onChange: handleChangeCalendar })))));
|
|
158
170
|
});
|
|
159
171
|
exports.DatePickerModeDate.displayName = 'DatePickerModeDate';
|
|
@@ -8,27 +8,30 @@ var useBoolean_1 = require("../../../../hooks/useBoolean");
|
|
|
8
8
|
var useControlled_1 = require("../../../../hooks/useControlled");
|
|
9
9
|
var useMultiRef_1 = require("../../../../hooks/useMultiRef");
|
|
10
10
|
var useMutableRef_1 = require("../../../../hooks/useMutableRef");
|
|
11
|
-
var
|
|
11
|
+
var useStoredValue_1 = require("../../../../hooks/useStoredValue");
|
|
12
|
+
var utils_1 = require("../../../../utils");
|
|
12
13
|
var Calendar_1 = require("../../../Calendar");
|
|
13
14
|
var FieldHint_1 = require("../../../FieldHint");
|
|
14
15
|
var Popover_1 = require("../../../Popover");
|
|
15
16
|
var Stack_1 = require("../../../Stack");
|
|
17
|
+
var constants_1 = require("../../constants");
|
|
16
18
|
var index_1 = require("../../index");
|
|
17
|
-
var
|
|
19
|
+
var utils_2 = require("../../utils");
|
|
18
20
|
var index_2 = require("../index");
|
|
19
|
-
var
|
|
21
|
+
var utils_3 = require("./utils");
|
|
20
22
|
exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref) {
|
|
21
23
|
var size = props.size, error = props.error, openProp = props.open, label = props.label, onKeyDown = props.onKeyDown, onInputChange = props.onInputChange, renderLeft = props.renderLeft, renderRight = props.renderRight, required = props.required, fullWidth = props.fullWidth, placeholder = props.placeholder, hint = props.hint, disableStroke = props.disableStroke, hintProps = props.hintProps, onChange = props.onChange, labelProps = props.labelProps, popoverPropsProp = props.popoverProps, calendarPropsProp = props.calendarProps, defaultOpen = props.defaultOpen, onCloseProp = props.onClose, defaultValue = props.defaultValue, valueProp = props.value, inputProps = props.inputProps, disabled = props.disabled, className = props.className, _a = props.calendars, calendars = _a === void 0 ? 2 : _a, onError = props.onError, clearText = props.clearText, disableCloseOnSelect = props.disableCloseOnSelect, disableClearButton = props.disableClearButton, onOpenProp = props.onOpen, fieldsProps = props.fieldsProps,
|
|
22
24
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
23
25
|
minDate = props.minDate,
|
|
24
26
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
-
maxDate = props.maxDate, other = tslib_1.__rest(props, ["size", "error", "open", "label", "onKeyDown", "onInputChange", "renderLeft", "renderRight", "required", "fullWidth", "placeholder", "hint", "disableStroke", "hintProps", "onChange", "labelProps", "popoverProps", "calendarProps", "defaultOpen", "onClose", "defaultValue", "value", "inputProps", "disabled", "className", "calendars", "onError", "clearText", "disableCloseOnSelect", "disableClearButton", "onOpen", "fieldsProps", "minDate", "maxDate"]);
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
27
|
+
maxDate = props.maxDate, _b = props.steps, steps = _b === void 0 ? constants_1.DATE_PICKER_DEFAULT_STEPS : _b, _c = props.initialStep, initialStep = _c === void 0 ? constants_1.DATE_PICKER_DEFAULT_INITIAL_STEP : _c, other = tslib_1.__rest(props, ["size", "error", "open", "label", "onKeyDown", "onInputChange", "renderLeft", "renderRight", "required", "fullWidth", "placeholder", "hint", "disableStroke", "hintProps", "onChange", "labelProps", "popoverProps", "calendarProps", "defaultOpen", "onClose", "defaultValue", "value", "inputProps", "disabled", "className", "calendars", "onError", "clearText", "disableCloseOnSelect", "disableClearButton", "onOpen", "fieldsProps", "minDate", "maxDate", "steps", "initialStep"]);
|
|
28
|
+
var _d = tslib_1.__read((0, utils_3.getValueForDoubleProp)(label), 2), labelFrom = _d[0], labelTo = _d[1];
|
|
29
|
+
var _e = tslib_1.__read((0, utils_3.getValueForDoubleProp)(renderLeft), 2), renderLeftFrom = _e[0], renderLeftTo = _e[1];
|
|
30
|
+
var _f = tslib_1.__read((0, utils_3.getValueForDoubleProp)(renderRight), 2), renderRightFrom = _f[0], renderRightTo = _f[1];
|
|
31
|
+
var _g = tslib_1.__read((0, utils_3.getValueForDoubleProp)(placeholder), 2), placeholderFrom = _g[0], placeholderTo = _g[1];
|
|
32
|
+
var _h = tslib_1.__read((0, utils_3.getValueForDoubleProp)(inputProps), 2), inputPropsFrom = _h[0], inputPropsTo = _h[1];
|
|
33
|
+
var _j = tslib_1.__read((0, utils_3.getValueForDoubleProp)(labelProps), 2), labelPropsFrom = _j[0], labelPropsTo = _j[1];
|
|
34
|
+
var isWasPaste = (0, useStoredValue_1.useStoredValue)(false);
|
|
32
35
|
var containerRef = (0, react_1.useRef)(null);
|
|
33
36
|
var anchorRef = (0, react_1.useRef)(null);
|
|
34
37
|
var calendarInnerRef = (0, react_1.useRef)(null);
|
|
@@ -36,34 +39,34 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
36
39
|
var calendarRef = (0, useMultiRef_1.useMultiRef)([calendarInnerRef, calendarPropsProp === null || calendarPropsProp === void 0 ? void 0 : calendarPropsProp.ref]);
|
|
37
40
|
var fieldsRef = (0, useMultiRef_1.useMultiRef)([anchorRef, fieldsProps === null || fieldsProps === void 0 ? void 0 : fieldsProps.ref]);
|
|
38
41
|
var rootRef = (0, useMultiRef_1.useMultiRef)([ref, containerRef]);
|
|
39
|
-
var
|
|
40
|
-
var
|
|
42
|
+
var _k = tslib_1.__read((0, react_1.useState)(null), 2), offsetDate = _k[0], setOffsetDate = _k[1];
|
|
43
|
+
var _l = tslib_1.__read((0, react_1.useState)(null), 2), calendarPeriod = _l[0], setCalendarPeriod = _l[1];
|
|
41
44
|
var savedCalendarPeriod = (0, useMutableRef_1.useMutableRef)(calendarPeriod);
|
|
42
45
|
var lastValidDate = (0, react_1.useRef)(['', '']);
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
+
var _m = tslib_1.__read((0, useBoolean_1.useBoolean)(false), 2), focusInputFrom = _m[0], setFocusInputFrom = _m[1];
|
|
47
|
+
var _o = tslib_1.__read((0, useBoolean_1.useBoolean)(false), 2), focusInputTo = _o[0], setFocusInputTo = _o[1];
|
|
48
|
+
var _p = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
46
49
|
value: valueProp,
|
|
47
50
|
defaultValue: defaultValue,
|
|
48
51
|
name: 'DatePicker',
|
|
49
52
|
state: 'value',
|
|
50
|
-
}), 2), value =
|
|
51
|
-
var
|
|
53
|
+
}), 2), value = _p[0], setValue = _p[1];
|
|
54
|
+
var _q = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
52
55
|
value: undefined,
|
|
53
56
|
defaultValue: [],
|
|
54
57
|
name: 'DatePicker',
|
|
55
58
|
state: 'inputValue',
|
|
56
|
-
}), 2), inputValue =
|
|
57
|
-
var
|
|
58
|
-
var
|
|
59
|
-
var
|
|
59
|
+
}), 2), inputValue = _q[0], setInputValue = _q[1];
|
|
60
|
+
var _r = tslib_1.__read(value || [], 2), valueFrom = _r[0], valueTo = _r[1];
|
|
61
|
+
var _s = tslib_1.__read(inputValue || [], 2), _t = _s[0], inputValueFrom = _t === void 0 ? '' : _t, _u = _s[1], inputValueTo = _u === void 0 ? '' : _u;
|
|
62
|
+
var _v = tslib_1.__read((0, useControlled_1.useControlled)({
|
|
60
63
|
value: openProp,
|
|
61
64
|
defaultValue: defaultOpen,
|
|
62
65
|
name: 'DatePicker',
|
|
63
66
|
state: 'open',
|
|
64
|
-
}), 2), open =
|
|
65
|
-
var popoverProps = (0,
|
|
66
|
-
var calendarProps = (0,
|
|
67
|
+
}), 2), open = _v[0], setOpen = _v[1];
|
|
68
|
+
var popoverProps = (0, utils_2.getCommonPopoverProps)(tslib_1.__assign(tslib_1.__assign({}, props), { popoverProps: popoverPropsProp }));
|
|
69
|
+
var calendarProps = (0, utils_2.getCommonCalendarProps)(tslib_1.__assign(tslib_1.__assign({}, props), { calendarProps: calendarPropsProp, ref: calendarRef }));
|
|
67
70
|
var onOffsetDateChange = function (date) {
|
|
68
71
|
setOffsetDate(date);
|
|
69
72
|
};
|
|
@@ -71,7 +74,7 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
71
74
|
setCalendarPeriod(date);
|
|
72
75
|
}, []);
|
|
73
76
|
/** Enables calendar keyboard interaction */
|
|
74
|
-
var enableEnforceFocusTo = (0,
|
|
77
|
+
var enableEnforceFocusTo = (0, utils_2.useCalendarKeyboard)({
|
|
75
78
|
controlRef: dateInputToRef,
|
|
76
79
|
calendarRef: calendarInnerRef,
|
|
77
80
|
active: open,
|
|
@@ -79,8 +82,8 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
79
82
|
var disableEnforceFocus = !enableEnforceFocusTo;
|
|
80
83
|
/** Эффект — синхронизируем значение текстового поля со значением в списке */
|
|
81
84
|
(0, react_1.useEffect)(function () {
|
|
82
|
-
var formattedDateFrom = (0,
|
|
83
|
-
var formattedDateTo = (0,
|
|
85
|
+
var formattedDateFrom = (0, utils_2.formatDateToString)(valueFrom, steps);
|
|
86
|
+
var formattedDateTo = (0, utils_2.formatDateToString)(valueTo, steps);
|
|
84
87
|
if (formattedDateFrom !== inputValueFrom ||
|
|
85
88
|
formattedDateTo !== inputValueTo) {
|
|
86
89
|
setInputValue([formattedDateFrom, formattedDateTo]);
|
|
@@ -96,14 +99,14 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
96
99
|
}, [onError]);
|
|
97
100
|
/** Calendar offset when interacting with inputs */
|
|
98
101
|
(0, react_1.useEffect)(function () {
|
|
99
|
-
if (!(0,
|
|
100
|
-
!(0,
|
|
102
|
+
if (!(0, utils_2.isValidDateString)(inputValueFrom, steps) ||
|
|
103
|
+
!(0, utils_2.isValidDateString)(inputValueTo, steps) ||
|
|
101
104
|
!savedCalendarPeriod.current)
|
|
102
105
|
return;
|
|
103
106
|
if ((focusInputFrom || focusInputTo) && open && (calendarPeriod === null || calendarPeriod === void 0 ? void 0 : calendarPeriod.length)) {
|
|
104
|
-
var firstDate = (0,
|
|
105
|
-
var secondDate = (0,
|
|
106
|
-
var offset = (0,
|
|
107
|
+
var firstDate = (0, utils_2.formatStringToDate)(inputValueFrom, steps);
|
|
108
|
+
var secondDate = (0, utils_2.formatStringToDate)(inputValueTo, steps);
|
|
109
|
+
var offset = (0, utils_3.getOffsetDateInRange)(tslib_1.__assign(tslib_1.__assign({}, (focusInputTo && { type: 'end' })), { calendarPeriod: savedCalendarPeriod.current, value: [firstDate || undefined, secondDate || undefined] }));
|
|
107
110
|
setOffsetDate(offset);
|
|
108
111
|
}
|
|
109
112
|
}, [
|
|
@@ -128,8 +131,8 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
128
131
|
};
|
|
129
132
|
var callOnChange = function (value) {
|
|
130
133
|
var _a = tslib_1.__read(value || [], 2), dateFrom = _a[0], dateTo = _a[1];
|
|
131
|
-
var formattedDateFrom = (0,
|
|
132
|
-
var formattedDateTo = (0,
|
|
134
|
+
var formattedDateFrom = (0, utils_2.formatStringToDate)(dateFrom, steps) || undefined;
|
|
135
|
+
var formattedDateTo = (0, utils_2.formatStringToDate)(dateTo, steps) || undefined;
|
|
133
136
|
if (formattedDateTo &&
|
|
134
137
|
formattedDateFrom &&
|
|
135
138
|
(formattedDateFrom === null || formattedDateFrom === void 0 ? void 0 : formattedDateFrom.getTime()) > (formattedDateTo === null || formattedDateTo === void 0 ? void 0 : formattedDateTo.getTime())) {
|
|
@@ -144,7 +147,8 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
144
147
|
setInputValue(value);
|
|
145
148
|
onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(e, value);
|
|
146
149
|
var _a = tslib_1.__read(value || [], 2), valueFrom = _a[0], valueTo = _a[1];
|
|
147
|
-
if ((0,
|
|
150
|
+
if ((0, utils_2.isValidDateString)(valueFrom, steps) &&
|
|
151
|
+
(0, utils_2.isValidDateString)(valueTo, steps))
|
|
148
152
|
callOnChange([valueFrom, valueTo]);
|
|
149
153
|
};
|
|
150
154
|
var handleExited = function () {
|
|
@@ -153,12 +157,20 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
153
157
|
setCalendarPeriod(null);
|
|
154
158
|
(_a = popoverProps === null || popoverProps === void 0 ? void 0 : popoverProps.onExited) === null || _a === void 0 ? void 0 : _a.call(popoverProps);
|
|
155
159
|
};
|
|
160
|
+
var prepareInputValue = function (value) {
|
|
161
|
+
var trimmed = value.trim();
|
|
162
|
+
if (isWasPaste.current) {
|
|
163
|
+
return (0, utils_2.maskPastedDate)(trimmed, steps);
|
|
164
|
+
}
|
|
165
|
+
return trimmed;
|
|
166
|
+
};
|
|
156
167
|
/** Событие ввода значения в текстовом поле */
|
|
157
|
-
var handleChangeInputFrom = function (
|
|
168
|
+
var handleChangeInputFrom = function (event) {
|
|
158
169
|
var _a;
|
|
159
|
-
var value =
|
|
160
|
-
(_a = inputPropsFrom === null || inputPropsFrom === void 0 ? void 0 : inputPropsFrom.onChange) === null || _a === void 0 ? void 0 : _a.call(inputPropsFrom,
|
|
161
|
-
changeInputValue(
|
|
170
|
+
var value = prepareInputValue(event.target.value);
|
|
171
|
+
(_a = inputPropsFrom === null || inputPropsFrom === void 0 ? void 0 : inputPropsFrom.onChange) === null || _a === void 0 ? void 0 : _a.call(inputPropsFrom, event);
|
|
172
|
+
changeInputValue(event, [value, inputValueTo]);
|
|
173
|
+
isWasPaste.current = false;
|
|
162
174
|
};
|
|
163
175
|
/** Очистка поля */
|
|
164
176
|
var handleClear = function (type) { return function () {
|
|
@@ -180,7 +192,7 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
180
192
|
setFocusInputFrom.off();
|
|
181
193
|
if (!inputValue)
|
|
182
194
|
return;
|
|
183
|
-
if (!(0,
|
|
195
|
+
if (!(0, utils_2.isValidDateString)(inputValueFrom, steps)) {
|
|
184
196
|
changeInputValue(null, lastValidDate.current);
|
|
185
197
|
}
|
|
186
198
|
};
|
|
@@ -190,15 +202,26 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
190
202
|
setFocusInputTo.off();
|
|
191
203
|
if (!inputValue)
|
|
192
204
|
return;
|
|
193
|
-
if (!(0,
|
|
205
|
+
if (!(0, utils_2.isValidDateString)(inputValueTo, steps))
|
|
194
206
|
changeInputValue(null, lastValidDate.current);
|
|
195
207
|
};
|
|
196
208
|
/** Событие ввода значения в текстовом поле */
|
|
197
|
-
var handleChangeInputTo = function (
|
|
209
|
+
var handleChangeInputTo = function (event) {
|
|
210
|
+
var _a;
|
|
211
|
+
var value = prepareInputValue(event.target.value);
|
|
212
|
+
(_a = inputPropsTo === null || inputPropsTo === void 0 ? void 0 : inputPropsTo.onChange) === null || _a === void 0 ? void 0 : _a.call(inputPropsTo, event);
|
|
213
|
+
changeInputValue(event, [inputValueFrom, value]);
|
|
214
|
+
isWasPaste.current = false;
|
|
215
|
+
};
|
|
216
|
+
var handlePasteInputFrom = function (event) {
|
|
217
|
+
var _a;
|
|
218
|
+
isWasPaste.current = true;
|
|
219
|
+
(_a = inputPropsFrom === null || inputPropsFrom === void 0 ? void 0 : inputPropsFrom.onPaste) === null || _a === void 0 ? void 0 : _a.call(inputPropsFrom, event);
|
|
220
|
+
};
|
|
221
|
+
var handlePasteInputTo = function (event) {
|
|
198
222
|
var _a;
|
|
199
|
-
|
|
200
|
-
(_a = inputPropsTo === null || inputPropsTo === void 0 ? void 0 : inputPropsTo.
|
|
201
|
-
changeInputValue(e, [inputValueFrom, value]);
|
|
223
|
+
isWasPaste.current = true;
|
|
224
|
+
(_a = inputPropsTo === null || inputPropsTo === void 0 ? void 0 : inputPropsTo.onPaste) === null || _a === void 0 ? void 0 : _a.call(inputPropsTo, event);
|
|
202
225
|
};
|
|
203
226
|
/** Открытие списка по клику на текстовом поле */
|
|
204
227
|
var handleClickOnInputFrom = function (e) {
|
|
@@ -214,7 +237,7 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
214
237
|
};
|
|
215
238
|
/** Управление элементом контроля через клавиатуру */
|
|
216
239
|
var handleKeyDown = function (event) {
|
|
217
|
-
if ((0,
|
|
240
|
+
if ((0, utils_1.isKeys)(event, ['ArrowDown', 'ArrowUp'])) {
|
|
218
241
|
event.preventDefault();
|
|
219
242
|
handleOpen();
|
|
220
243
|
}
|
|
@@ -224,8 +247,8 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
224
247
|
var handleChangeCalendar = function (date) {
|
|
225
248
|
var _a = tslib_1.__read(date || [], 2), dateFrom = _a[0], dateTo = _a[1];
|
|
226
249
|
var formattedDate = [
|
|
227
|
-
(0,
|
|
228
|
-
(0,
|
|
250
|
+
(0, utils_2.formatDateToString)(dateFrom, steps),
|
|
251
|
+
(0, utils_2.formatDateToString)(dateTo, steps),
|
|
229
252
|
];
|
|
230
253
|
changeInputValue(null, formattedDate);
|
|
231
254
|
if (!disableCloseOnSelect && dateFrom && dateTo)
|
|
@@ -241,10 +264,10 @@ exports.DatePickerModeDateRange = (0, react_1.forwardRef)(function (props, ref)
|
|
|
241
264
|
disableStroke: disableStroke,
|
|
242
265
|
}, [className]) }, other, { ref: rootRef }),
|
|
243
266
|
react_1.default.createElement(Stack_1.Stack, tslib_1.__assign({ gap: "l", className: (0, index_1.cnDatePicker)('Fields', [fieldsProps === null || fieldsProps === void 0 ? void 0 : fieldsProps.className]) }, fieldsProps, { ref: fieldsRef }),
|
|
244
|
-
react_1.default.createElement(index_2.DateInput, { size: size, error: error, label: labelFrom, required: required, disabled: disabled, value: inputValueFrom, onKeyDown: handleKeyDown, renderLeft: renderLeftFrom, labelProps: labelPropsFrom, disableStroke: disableStroke, placeholder: placeholderFrom, renderRight: react_1.default.createElement(index_2.DatePickerRenderRight, { size: size, open: open, hasValue: !!valueFrom, clearText: clearText, renderRight: renderRightFrom, onClear: handleClear('from'), disableClearButton: disableClearButton }), inputProps: tslib_1.__assign(tslib_1.__assign({ autoComplete: 'off' }, inputPropsFrom), { onBlur: handleBlurInputFrom, onFocus: handleFocusInputFrom, onClick: handleClickOnInputFrom, onChange: handleChangeInputFrom }), "data-testid": "date-input-from", bodyProps: { 'aria-expanded': open } }),
|
|
245
|
-
react_1.default.createElement(index_2.DateInput, { size: size, error: error, label: labelTo, required: required, disabled: disabled, value: inputValueTo, onKeyDown: handleKeyDown, renderLeft: renderLeftTo, labelProps: labelPropsTo, placeholder: placeholderTo, disableStroke: disableStroke, renderRight: react_1.default.createElement(index_2.DatePickerRenderRight, { size: size, open: open, hasValue: !!valueTo, clearText: clearText, renderRight: renderRightTo, onClear: handleClear('to'), disableClearButton: disableClearButton }), inputProps: tslib_1.__assign(tslib_1.__assign({ autoComplete: 'off' }, inputPropsTo), { onBlur: handleBlurInputTo, onFocus: handleFocusInputTo, onClick: handleClickOnInputTo, onChange: handleChangeInputTo }), "data-testid": "date-input-to", bodyProps: { ref: dateInputToRef, 'aria-expanded': open } })),
|
|
267
|
+
react_1.default.createElement(index_2.DateInput, { size: size, error: error, label: labelFrom, required: required, disabled: disabled, value: inputValueFrom, onKeyDown: handleKeyDown, renderLeft: renderLeftFrom, labelProps: labelPropsFrom, disableStroke: disableStroke, steps: steps, placeholder: placeholderFrom, renderRight: react_1.default.createElement(index_2.DatePickerRenderRight, { size: size, open: open, hasValue: !!valueFrom, clearText: clearText, renderRight: renderRightFrom, onClear: handleClear('from'), disableClearButton: disableClearButton }), inputProps: tslib_1.__assign(tslib_1.__assign({ autoComplete: 'off' }, inputPropsFrom), { onBlur: handleBlurInputFrom, onFocus: handleFocusInputFrom, onClick: handleClickOnInputFrom, onChange: handleChangeInputFrom, onPaste: handlePasteInputFrom }), "data-testid": "date-input-from", bodyProps: { 'aria-expanded': open } }),
|
|
268
|
+
react_1.default.createElement(index_2.DateInput, { size: size, error: error, label: labelTo, required: required, disabled: disabled, value: inputValueTo, onKeyDown: handleKeyDown, renderLeft: renderLeftTo, labelProps: labelPropsTo, placeholder: placeholderTo, disableStroke: disableStroke, steps: steps, renderRight: react_1.default.createElement(index_2.DatePickerRenderRight, { size: size, open: open, hasValue: !!valueTo, clearText: clearText, renderRight: renderRightTo, onClear: handleClear('to'), disableClearButton: disableClearButton }), inputProps: tslib_1.__assign(tslib_1.__assign({ autoComplete: 'off' }, inputPropsTo), { onBlur: handleBlurInputTo, onFocus: handleFocusInputTo, onClick: handleClickOnInputTo, onChange: handleChangeInputTo, onPaste: handlePasteInputTo }), "data-testid": "date-input-to", bodyProps: { ref: dateInputToRef, 'aria-expanded': open } })),
|
|
246
269
|
react_1.default.createElement(FieldHint_1.FieldHint, tslib_1.__assign({ size: size, error: error, disabled: disabled }, hintProps), hint),
|
|
247
270
|
react_1.default.createElement(Popover_1.Popover, tslib_1.__assign({ open: open, anchorRef: anchorRef, onClose: handleClose }, popoverProps, { onExited: handleExited, ignoreClickOutsideRefs: [containerRef], disableEnforceFocus: disableEnforceFocus }),
|
|
248
|
-
react_1.default.createElement(Calendar_1.Calendar, tslib_1.__assign({ calendars: calendars }, calendarProps, { mode: "range", offsetDate: offsetDate, onChange: handleChangeCalendar, value: (0,
|
|
271
|
+
react_1.default.createElement(Calendar_1.Calendar, tslib_1.__assign({ calendars: calendars }, calendarProps, { initialStep: initialStep, steps: steps, mode: "range", offsetDate: offsetDate, onChange: handleChangeCalendar, value: (0, utils_3.formatDateForCalendar)(value), onCalendarsChange: onCalendarsChange, onOffsetDateChange: onOffsetDateChange })))));
|
|
249
272
|
});
|
|
250
273
|
exports.DatePickerModeDateRange.displayName = 'DatePickerModeDateRange';
|