@alfalab/core-components-calendar-range 4.3.0 → 5.0.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/Component.d.ts +25 -3
  3. package/dist/Component.js +19 -185
  4. package/dist/cssm/Component.d.ts +25 -3
  5. package/dist/cssm/Component.js +20 -184
  6. package/dist/cssm/hooks.d.ts +22 -0
  7. package/dist/cssm/hooks.js +131 -0
  8. package/dist/cssm/index.js +15 -6
  9. package/dist/cssm/tslib.es6-ce870b46.d.ts +32 -0
  10. package/dist/cssm/tslib.es6-ce870b46.js +42 -0
  11. package/dist/cssm/utils.d.ts +1 -10
  12. package/dist/cssm/utils.js +0 -15
  13. package/dist/cssm/{index.module.css → views/index.module.css} +30 -0
  14. package/dist/cssm/views/popover.d.ts +5 -0
  15. package/dist/cssm/views/popover.js +118 -0
  16. package/dist/cssm/views/static.d.ts +5 -0
  17. package/dist/cssm/views/static.js +175 -0
  18. package/dist/esm/Component.d.ts +25 -3
  19. package/dist/esm/Component.js +20 -185
  20. package/dist/esm/hooks.d.ts +22 -0
  21. package/dist/esm/hooks.js +117 -0
  22. package/dist/esm/index.js +14 -5
  23. package/dist/esm/index.module-1e16472a.d.ts +32 -0
  24. package/dist/esm/index.module-1e16472a.js +43 -0
  25. package/dist/esm/utils.d.ts +1 -10
  26. package/dist/esm/utils.js +1 -14
  27. package/dist/esm/views/index.css +66 -0
  28. package/dist/esm/views/popover.d.ts +5 -0
  29. package/dist/esm/views/popover.js +106 -0
  30. package/dist/esm/views/static.d.ts +5 -0
  31. package/dist/esm/views/static.js +159 -0
  32. package/dist/hooks.d.ts +22 -0
  33. package/dist/hooks.js +131 -0
  34. package/dist/index.js +14 -5
  35. package/dist/index.module-bcae62ec.d.ts +32 -0
  36. package/dist/index.module-bcae62ec.js +46 -0
  37. package/dist/modern/Component.d.ts +25 -3
  38. package/dist/modern/Component.js +20 -168
  39. package/dist/modern/hooks.d.ts +22 -0
  40. package/dist/modern/hooks.js +113 -0
  41. package/dist/modern/index.js +13 -4
  42. package/dist/modern/index.module-7d74ac8d.js +4 -0
  43. package/dist/modern/utils.d.ts +1 -10
  44. package/dist/modern/utils.js +1 -14
  45. package/dist/modern/views/index.css +66 -0
  46. package/dist/modern/views/popover.d.ts +5 -0
  47. package/dist/modern/views/popover.js +115 -0
  48. package/dist/modern/views/static.d.ts +5 -0
  49. package/dist/modern/views/static.js +158 -0
  50. package/dist/utils.d.ts +1 -10
  51. package/dist/utils.js +1 -18
  52. package/dist/views/index.css +66 -0
  53. package/dist/views/popover.d.ts +5 -0
  54. package/dist/views/popover.js +116 -0
  55. package/dist/views/static.d.ts +5 -0
  56. package/dist/views/static.js +173 -0
  57. package/package.json +6 -6
  58. package/dist/cssm/useCalendarMaxMinDates.d.ts +0 -16
  59. package/dist/cssm/useCalendarMaxMinDates.js +0 -22
  60. package/dist/cssm/useCalendarMonthes.d.ts +0 -14
  61. package/dist/cssm/useCalendarMonthes.js +0 -54
  62. package/dist/esm/index.css +0 -36
  63. package/dist/esm/useCalendarMaxMinDates.d.ts +0 -16
  64. package/dist/esm/useCalendarMaxMinDates.js +0 -18
  65. package/dist/esm/useCalendarMonthes.d.ts +0 -14
  66. package/dist/esm/useCalendarMonthes.js +0 -50
  67. package/dist/index.css +0 -36
  68. package/dist/modern/index.css +0 -36
  69. package/dist/modern/useCalendarMaxMinDates.d.ts +0 -16
  70. package/dist/modern/useCalendarMaxMinDates.js +0 -17
  71. package/dist/modern/useCalendarMonthes.d.ts +0 -14
  72. package/dist/modern/useCalendarMonthes.js +0 -49
  73. package/dist/useCalendarMaxMinDates.d.ts +0 -16
  74. package/dist/useCalendarMaxMinDates.js +0 -22
  75. package/dist/useCalendarMonthes.d.ts +0 -14
  76. package/dist/useCalendarMonthes.js +0 -54
@@ -0,0 +1,131 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var startOfMonth = require('date-fns/startOfMonth');
7
+ var addMonths = require('date-fns/addMonths');
8
+ var subMonths = require('date-fns/subMonths');
9
+ var max = require('date-fns/max');
10
+ var min = require('date-fns/min');
11
+ var isEqual = require('date-fns/isEqual');
12
+
13
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
+
15
+ var startOfMonth__default = /*#__PURE__*/_interopDefaultLegacy(startOfMonth);
16
+ var addMonths__default = /*#__PURE__*/_interopDefaultLegacy(addMonths);
17
+ var subMonths__default = /*#__PURE__*/_interopDefaultLegacy(subMonths);
18
+ var max__default = /*#__PURE__*/_interopDefaultLegacy(max);
19
+ var min__default = /*#__PURE__*/_interopDefaultLegacy(min);
20
+ var isEqual__default = /*#__PURE__*/_interopDefaultLegacy(isEqual);
21
+
22
+ function usePopoverViewMonthes(_a) {
23
+ var dateFrom = _a.dateFrom, dateTo = _a.dateTo, defaultMonth = _a.defaultMonth, resetKey = _a.resetKey;
24
+ var _b = React.useState(), monthFrom = _b[0], setMonthFrom = _b[1];
25
+ var _c = React.useState(), monthTo = _c[0], setMonthTo = _c[1];
26
+ var handleMonthFromChange = React.useCallback(function (newMonthFrom) {
27
+ setMonthFrom(newMonthFrom);
28
+ if (!dateTo) {
29
+ setMonthTo(newMonthFrom);
30
+ }
31
+ }, [dateTo]);
32
+ var handleMonthToChange = React.useCallback(function (newMonthTo) {
33
+ setMonthTo(newMonthTo);
34
+ if (!dateFrom) {
35
+ setMonthFrom(newMonthTo);
36
+ }
37
+ }, [dateFrom]);
38
+ React.useEffect(function () {
39
+ setMonthFrom(dateFrom ? startOfMonth__default['default'](dateFrom).getTime() : defaultMonth);
40
+ }, [defaultMonth, dateFrom, resetKey]);
41
+ React.useEffect(function () {
42
+ setMonthTo(dateTo ? startOfMonth__default['default'](dateTo).getTime() : monthFrom);
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
44
+ }, [dateTo, resetKey]);
45
+ return {
46
+ monthFrom: monthFrom,
47
+ monthTo: monthTo,
48
+ handleMonthFromChange: handleMonthFromChange,
49
+ handleMonthToChange: handleMonthToChange,
50
+ };
51
+ }
52
+ function useStaticViewMonthes(_a) {
53
+ var selectedFrom = _a.selectedFrom, selectedTo = _a.selectedTo, defaultMonth = _a.defaultMonth;
54
+ /**
55
+ * Если указана начальная дата — левый месяц равен ей, иначе используется дата конца.
56
+ * Если обе даты не указаны, то используется дефолтный месяц
57
+ */
58
+ var initialMonthFrom = React.useMemo(function () { return startOfMonth__default['default'](selectedFrom || selectedTo || defaultMonth).getTime(); },
59
+ // eslint-disable-next-line react-hooks/exhaustive-deps
60
+ []);
61
+ /**
62
+ * Правый месяц должен быть как минимум на 1 месяц больше левого
63
+ */
64
+ var initialMonthTo = React.useMemo(function () {
65
+ return max__default['default']([
66
+ selectedTo ? startOfMonth__default['default'](selectedTo) : 0,
67
+ addMonths__default['default'](initialMonthFrom, 1),
68
+ ]).getTime();
69
+ },
70
+ // eslint-disable-next-line react-hooks/exhaustive-deps
71
+ []);
72
+ var _b = React.useState(initialMonthFrom), monthFrom = _b[0], setMonthFrom = _b[1];
73
+ var _c = React.useState(initialMonthTo), monthTo = _c[0], setMonthTo = _c[1];
74
+ var handleMonthFromChange = React.useCallback(function (newMonthFrom) {
75
+ setMonthFrom(newMonthFrom);
76
+ if (monthTo && isEqual__default['default'](newMonthFrom, monthTo)) {
77
+ var nextMonth = addMonths__default['default'](newMonthFrom, 1).getTime();
78
+ setMonthTo(nextMonth);
79
+ }
80
+ }, [monthTo]);
81
+ var handleMonthToChange = React.useCallback(function (newMonthTo) {
82
+ setMonthTo(newMonthTo);
83
+ if (monthFrom && isEqual__default['default'](newMonthTo, monthFrom)) {
84
+ var prevMonth = subMonths__default['default'](newMonthTo, 1).getTime();
85
+ setMonthFrom(prevMonth);
86
+ }
87
+ }, [monthFrom]);
88
+ // eslint-disable-next-line complexity
89
+ React.useEffect(function () {
90
+ var selectedFromMonth = selectedFrom ? startOfMonth__default['default'](selectedFrom).getTime() : undefined;
91
+ var selectedToMonth = selectedTo ? startOfMonth__default['default'](selectedTo).getTime() : undefined;
92
+ // Проверяем, показываются ли выбранные месяцы в левой или правой части компонента
93
+ var fromMonthOnLeft = selectedFromMonth && selectedFromMonth === monthFrom;
94
+ var fromMonthOnRight = selectedFromMonth && selectedFromMonth === monthTo;
95
+ var toMonthOnRight = selectedToMonth && selectedToMonth === monthTo;
96
+ var toMonthOnLeft = selectedToMonth && selectedToMonth === monthFrom;
97
+ var fromMonthOnScreen = fromMonthOnLeft || fromMonthOnRight;
98
+ var toMonthOnScreen = toMonthOnLeft || toMonthOnRight;
99
+ if (fromMonthOnLeft && toMonthOnLeft) {
100
+ setMonthTo(max__default['default']([addMonths__default['default'](selectedFromMonth, 1), monthTo]).getTime());
101
+ return;
102
+ }
103
+ if (fromMonthOnRight && toMonthOnRight) {
104
+ setMonthFrom(min__default['default']([subMonths__default['default'](selectedToMonth, 1), monthFrom]).getTime());
105
+ return;
106
+ }
107
+ if (selectedFromMonth && selectedToMonth) {
108
+ setMonthFrom(selectedFromMonth);
109
+ setMonthTo(max__default['default']([addMonths__default['default'](selectedFromMonth, 1), selectedToMonth]).getTime());
110
+ return;
111
+ }
112
+ if (selectedFromMonth && !selectedToMonth && !fromMonthOnScreen) {
113
+ setMonthFrom(selectedFromMonth);
114
+ setMonthTo(max__default['default']([addMonths__default['default'](selectedFromMonth, 1), monthTo]).getTime());
115
+ }
116
+ if (selectedToMonth && !selectedFromMonth && !toMonthOnScreen) {
117
+ setMonthTo(selectedToMonth);
118
+ setMonthFrom(min__default['default']([subMonths__default['default'](selectedToMonth, 1), monthFrom]).getTime());
119
+ }
120
+ // eslint-disable-next-line react-hooks/exhaustive-deps
121
+ }, [selectedFrom, selectedTo]);
122
+ return {
123
+ monthFrom: monthFrom,
124
+ monthTo: monthTo,
125
+ handleMonthFromChange: handleMonthFromChange,
126
+ handleMonthToChange: handleMonthToChange,
127
+ };
128
+ }
129
+
130
+ exports.usePopoverViewMonthes = usePopoverViewMonthes;
131
+ exports.useStaticViewMonthes = useStaticViewMonthes;
@@ -2,16 +2,25 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var Component = require('./Component.js');
5
+ require('./tslib.es6-ce870b46.js');
6
6
  require('react');
7
7
  require('classnames');
8
- require('date-fns');
9
- require('@alfalab/core-components-calendar/dist/cssm');
8
+ require('date-fns/startOfMonth');
10
9
  require('@alfalab/core-components-calendar-input/dist/cssm');
10
+ require('@alfalab/core-components-date-input/dist/cssm');
11
+ require('date-fns/addMonths');
12
+ require('date-fns/subMonths');
13
+ require('date-fns/max');
14
+ require('date-fns/min');
15
+ require('date-fns/isEqual');
16
+ require('./hooks.js');
17
+ require('./views/index.module.css');
18
+ require('./views/popover.js');
19
+ require('date-fns/endOfMonth');
20
+ require('@alfalab/core-components-calendar/dist/cssm');
11
21
  require('./utils.js');
12
- require('./useCalendarMonthes.js');
13
- require('./useCalendarMaxMinDates.js');
14
- require('./index.module.css');
22
+ require('./views/static.js');
23
+ var Component = require('./Component.js');
15
24
 
16
25
 
17
26
 
@@ -0,0 +1,32 @@
1
+ declare function __extends(d: any, b: any): void;
2
+ declare function __rest(s: any, e: any): {};
3
+ declare function __decorate(decorators: any, target: any, key: any, desc: any, ...args: any[]): any;
4
+ declare function __param(paramIndex: any, decorator: any): (target: any, key: any) => void;
5
+ declare function __metadata(metadataKey: any, metadataValue: any): any;
6
+ declare function __awaiter(thisArg: any, _arguments: any, P: any, generator: any): any;
7
+ declare function __generator(thisArg: any, body: any): {
8
+ next: (v: any) => any;
9
+ throw: (v: any) => any;
10
+ return: (v: any) => any;
11
+ };
12
+ declare function __exportStar(m: any, o: any): void;
13
+ declare function __values(o: any): any;
14
+ declare function __read(o: any, n: any): any;
15
+ declare function __spread(...args: any[]): any[];
16
+ declare function __spreadArrays(...args: any[]): any[];
17
+ declare function __await(v: any): any;
18
+ declare class __await {
19
+ constructor(v: any);
20
+ v: any;
21
+ }
22
+ declare function __asyncGenerator(thisArg: any, _arguments: any, generator: any): {};
23
+ declare function __asyncDelegator(o: any): {};
24
+ declare function __asyncValues(o: any): any;
25
+ declare function __makeTemplateObject(cooked: any, raw: any): any;
26
+ declare function __importStar(mod: any): any;
27
+ declare function __importDefault(mod: any): any;
28
+ declare function __classPrivateFieldGet(receiver: any, privateMap: any): any;
29
+ declare function __classPrivateFieldSet(receiver: any, privateMap: any, value: any): any;
30
+ declare function __assign(...args: any[]): any;
31
+ declare function __createBinding(o: any, m: any, k: any, k2: any): void;
32
+ export { __extends, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet, __assign, __createBinding };
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ /*! *****************************************************************************
4
+ Copyright (c) Microsoft Corporation.
5
+
6
+ Permission to use, copy, modify, and/or distribute this software for any
7
+ purpose with or without fee is hereby granted.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ PERFORMANCE OF THIS SOFTWARE.
16
+ ***************************************************************************** */
17
+ exports.__assign = function () {
18
+ exports.__assign = Object.assign || function __assign(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s)
22
+ if (Object.prototype.hasOwnProperty.call(s, p))
23
+ t[p] = s[p];
24
+ }
25
+ return t;
26
+ };
27
+ return exports.__assign.apply(this, arguments);
28
+ };
29
+ function __rest(s, e) {
30
+ var t = {};
31
+ for (var p in s)
32
+ if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
33
+ t[p] = s[p];
34
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
35
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
36
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
37
+ t[p[i]] = s[p[i]];
38
+ }
39
+ return t;
40
+ }
41
+
42
+ exports.__rest = __rest;
@@ -1,11 +1,2 @@
1
- type ValueState = {
2
- date: number | null;
3
- value: string;
4
- };
5
- declare const initialValueState: {
6
- date: null;
7
- value: string;
8
- };
9
- declare const getCorrectValueState: (stateValue: ValueState, propValue?: string | undefined, minDate?: number | undefined, maxDate?: number | undefined) => ValueState;
10
1
  declare const isDayButton: (node: HTMLElement | null) => string | false | null | undefined;
11
- export { ValueState, initialValueState, getCorrectValueState, isDayButton };
2
+ export { isDayButton };
@@ -2,23 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var coreComponentsCalendar = require('@alfalab/core-components-calendar/dist/cssm');
6
- var coreComponentsCalendarInput = require('@alfalab/core-components-calendar-input/dist/cssm');
7
-
8
- var initialValueState = { date: null, value: '' };
9
- var getCorrectValueState = function (stateValue, propValue, minDate, maxDate) {
10
- var state = propValue === undefined
11
- ? stateValue
12
- : { value: propValue, date: coreComponentsCalendarInput.parseDateString(propValue).getTime() };
13
- if (!coreComponentsCalendar.dateInLimits(state.date, minDate, maxDate)) {
14
- state.date = null;
15
- }
16
- return state;
17
- };
18
5
  var isDayButton = function (node) {
19
6
  return node && node.tagName === 'BUTTON' && node.dataset.date;
20
7
  };
21
8
 
22
- exports.getCorrectValueState = getCorrectValueState;
23
- exports.initialValueState = initialValueState;
24
9
  exports.isDayButton = isDayButton;
@@ -12,12 +12,39 @@
12
12
  :root {
13
13
  --gap-xs: 8px;
14
14
  }
15
+ :root {
16
+ --calendar-inner-width: 280px;
17
+
18
+ /* Кнопки выбора месяцев и годов */
19
+
20
+ /* Шапка */
21
+
22
+ /* День */
23
+
24
+ /* today */
25
+
26
+ /* highlighted */
27
+
28
+ /* range */
29
+
30
+ /* selected */
31
+
32
+ /* disabled */
33
+
34
+ /* marker */
35
+ }
15
36
  .component {
16
37
  display: flex
17
38
  }
18
39
  .component button[aria-selected='true'] {
19
40
  cursor: pointer;
20
41
  }
42
+ .component *[class*='errorIcon_'] {
43
+ display: none;
44
+ }
45
+ .component *[class*='calendarIcon_'] {
46
+ margin-right: 0;
47
+ }
21
48
  .divider {
22
49
  height: 48px;
23
50
  display: flex;
@@ -33,3 +60,6 @@
33
60
  height: 1px;
34
61
  background-color: var(--color-light-graphic-primary);
35
62
  }
63
+ .static .calendar {
64
+ width: var(--calendar-inner-width);
65
+ }
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ import { CalendarRangeProps } from "../Component";
3
+ type CalendarRangePopoverProps = Omit<CalendarRangeProps, 'calendarPosition'>;
4
+ declare const CalendarRangePopover: FC<CalendarRangePopoverProps>;
5
+ export { CalendarRangePopoverProps, CalendarRangePopover };
@@ -0,0 +1,118 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib_es6 = require('../tslib.es6-ce870b46.js');
6
+ var React = require('react');
7
+ var cn = require('classnames');
8
+ var startOfMonth = require('date-fns/startOfMonth');
9
+ var coreComponentsCalendarInput = require('@alfalab/core-components-calendar-input/dist/cssm');
10
+ var coreComponentsDateInput = require('@alfalab/core-components-date-input/dist/cssm');
11
+ require('date-fns/addMonths');
12
+ require('date-fns/subMonths');
13
+ require('date-fns/max');
14
+ require('date-fns/min');
15
+ require('date-fns/isEqual');
16
+ var hooks = require('../hooks.js');
17
+ var styles = require('./index.module.css');
18
+
19
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
+
21
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
22
+ var cn__default = /*#__PURE__*/_interopDefaultLegacy(cn);
23
+ var startOfMonth__default = /*#__PURE__*/_interopDefaultLegacy(startOfMonth);
24
+ var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
25
+
26
+ var CalendarRangePopover = function (_a) {
27
+ var className = _a.className, _b = _a.defaultMonth, defaultMonth = _b === void 0 ? startOfMonth__default['default'](new Date()).getTime() : _b, minDate = _a.minDate, maxDate = _a.maxDate, _c = _a.valueFrom, valueFrom = _c === void 0 ? '' : _c, _d = _a.valueTo, valueTo = _d === void 0 ? '' : _d, _e = _a.onDateFromChange, onDateFromChange = _e === void 0 ? function () { return null; } : _e, _f = _a.onDateToChange, onDateToChange = _f === void 0 ? function () { return null; } : _f, _g = _a.onChange, onChange = _g === void 0 ? function () { return null; } : _g, _h = _a.inputFromProps, inputFromProps = _h === void 0 ? {} : _h, _j = _a.inputToProps, inputToProps = _j === void 0 ? {} : _j, offDays = _a.offDays, events = _a.events, dataTestId = _a.dataTestId;
28
+ var _k = React.useState(valueFrom), inputFromValue = _k[0], setInputFromValue = _k[1];
29
+ var _l = React.useState(valueTo), inputToValue = _l[0], setInputToValue = _l[1];
30
+ /**
31
+ * Ключ для сброса календарей
32
+ * Пользователь открыл календарь, изменил месяц, но ничего не выбрал
33
+ * — при следующем открытии в календаре будет установлен начальный месяц
34
+ */
35
+ var _m = React.useState(0), resetKey = _m[0], setResetKey = _m[1];
36
+ var dateFrom = coreComponentsCalendarInput.isValidInputValue(inputFromValue, minDate, maxDate, offDays)
37
+ ? coreComponentsCalendarInput.parseDateString(inputFromValue).getTime()
38
+ : null;
39
+ var dateTo = coreComponentsCalendarInput.isValidInputValue(inputToValue, dateFrom || minDate, maxDate, offDays)
40
+ ? coreComponentsCalendarInput.parseDateString(inputToValue).getTime()
41
+ : null;
42
+ var _o = React.useState(coreComponentsDateInput.isCompleteDateInput(inputFromValue) && dateFrom === null), inputFromInvalid = _o[0], setInputFromInvalid = _o[1];
43
+ var _p = React.useState(coreComponentsDateInput.isCompleteDateInput(inputToValue) && dateTo === null), inputToInvalid = _p[0], setInputToInvalid = _p[1];
44
+ var bothInvalid = coreComponentsDateInput.isCompleteDateInput(inputFromValue) &&
45
+ coreComponentsDateInput.isCompleteDateInput(inputToValue) &&
46
+ coreComponentsCalendarInput.parseDateString(inputFromValue).getTime() > coreComponentsCalendarInput.parseDateString(inputToValue).getTime();
47
+ var _q = hooks.usePopoverViewMonthes({
48
+ dateFrom: dateFrom,
49
+ dateTo: dateTo,
50
+ defaultMonth: defaultMonth,
51
+ resetKey: resetKey,
52
+ }), monthFrom = _q.monthFrom, monthTo = _q.monthTo, handleMonthFromChange = _q.handleMonthFromChange, handleMonthToChange = _q.handleMonthToChange;
53
+ var handleValidInputFrom = React.useCallback(function () {
54
+ setInputFromInvalid(inputFromValue !== '' && !coreComponentsCalendarInput.isValidInputValue(inputFromValue, minDate, maxDate, offDays));
55
+ }, [inputFromValue, maxDate, minDate, offDays]);
56
+ var handleValidInputTo = React.useCallback(function () {
57
+ setInputToInvalid(inputToValue !== '' &&
58
+ !coreComponentsCalendarInput.isValidInputValue(inputToValue, dateFrom || minDate, maxDate, offDays));
59
+ }, [dateFrom, inputToValue, maxDate, minDate, offDays]);
60
+ var handleInputFromChange = React.useCallback(function (_, payload) {
61
+ setInputFromValue(payload.value);
62
+ }, []);
63
+ var handleInputToChange = React.useCallback(function (_, payload) {
64
+ setInputToValue(payload.value);
65
+ }, []);
66
+ var handleInputFromBlur = React.useCallback(function () {
67
+ handleValidInputFrom();
68
+ setResetKey(+new Date());
69
+ }, [handleValidInputFrom]);
70
+ var handleInputToBlur = React.useCallback(function () {
71
+ handleValidInputTo();
72
+ setResetKey(+new Date());
73
+ }, [handleValidInputTo]);
74
+ var handleFromChange = React.useCallback(function (_, payload) {
75
+ setInputFromValue(payload.value);
76
+ }, []);
77
+ var handleToChange = React.useCallback(function (_, payload) {
78
+ setInputToValue(payload.value);
79
+ }, []);
80
+ React.useEffect(function () {
81
+ setInputFromValue(valueFrom);
82
+ }, [valueFrom]);
83
+ React.useEffect(function () {
84
+ setInputToValue(valueTo);
85
+ }, [valueTo]);
86
+ React.useEffect(function () {
87
+ onDateFromChange({ value: inputFromValue, date: dateFrom });
88
+ onChange({
89
+ valueFrom: inputFromValue,
90
+ valueTo: inputToValue,
91
+ dateFrom: dateFrom,
92
+ dateTo: dateTo,
93
+ });
94
+ if (!inputFromValue || coreComponentsDateInput.isCompleteDateInput(inputFromValue)) {
95
+ handleValidInputFrom();
96
+ }
97
+ // eslint-disable-next-line react-hooks/exhaustive-deps
98
+ }, [inputFromValue]);
99
+ React.useEffect(function () {
100
+ onDateToChange({ value: inputToValue, date: dateTo });
101
+ onChange({
102
+ valueFrom: inputFromValue,
103
+ valueTo: inputToValue,
104
+ dateFrom: dateFrom,
105
+ dateTo: dateTo,
106
+ });
107
+ if (!inputToValue || coreComponentsDateInput.isCompleteDateInput(inputToValue)) {
108
+ handleValidInputTo();
109
+ }
110
+ // eslint-disable-next-line react-hooks/exhaustive-deps
111
+ }, [inputToValue]);
112
+ return (React__default['default'].createElement("div", { className: cn__default['default'](styles__default['default'].component, className), "data-test-id": dataTestId },
113
+ React__default['default'].createElement(coreComponentsCalendarInput.CalendarInput, tslib_es6.__assign({}, inputFromProps, { useAnchorWidth: false, calendarPosition: 'popover', popoverPosition: 'bottom-start', error: inputFromInvalid || bothInvalid || inputFromProps.error, onChange: handleFromChange, onInputChange: handleInputFromChange, onBlur: handleInputFromBlur, value: inputFromValue, minDate: minDate, maxDate: maxDate, offDays: offDays, events: events, calendarProps: tslib_es6.__assign(tslib_es6.__assign({}, inputFromProps.calendarProps), { month: monthFrom, onMonthChange: handleMonthFromChange, selectorView: 'full' }) })),
114
+ React__default['default'].createElement("span", { className: styles__default['default'].divider }),
115
+ React__default['default'].createElement(coreComponentsCalendarInput.CalendarInput, tslib_es6.__assign({}, inputToProps, { useAnchorWidth: false, calendarPosition: 'popover', popoverPosition: 'bottom-end', error: inputToInvalid || bothInvalid || inputToProps.error, onChange: handleToChange, onInputChange: handleInputToChange, onBlur: handleInputToBlur, value: inputToValue, minDate: dateFrom || minDate, maxDate: maxDate, offDays: offDays, events: events, calendarProps: tslib_es6.__assign(tslib_es6.__assign({}, inputToProps.calendarProps), { month: monthTo, onMonthChange: handleMonthToChange, selectorView: 'full' }) }))));
116
+ };
117
+
118
+ exports.CalendarRangePopover = CalendarRangePopover;
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ import { CalendarRangeProps } from "../Component";
3
+ type CalendarRangeStaticProps = Omit<CalendarRangeProps, 'calendarPosition'>;
4
+ declare const CalendarRangeStatic: FC<CalendarRangeStaticProps>;
5
+ export { CalendarRangeStaticProps, CalendarRangeStatic };
@@ -0,0 +1,175 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib_es6 = require('../tslib.es6-ce870b46.js');
6
+ var React = require('react');
7
+ var cn = require('classnames');
8
+ var startOfMonth = require('date-fns/startOfMonth');
9
+ var coreComponentsCalendarInput = require('@alfalab/core-components-calendar-input/dist/cssm');
10
+ var coreComponentsDateInput = require('@alfalab/core-components-date-input/dist/cssm');
11
+ var addMonths = require('date-fns/addMonths');
12
+ var subMonths = require('date-fns/subMonths');
13
+ var max = require('date-fns/max');
14
+ require('date-fns/min');
15
+ require('date-fns/isEqual');
16
+ var hooks = require('../hooks.js');
17
+ var styles = require('./index.module.css');
18
+ var endOfMonth = require('date-fns/endOfMonth');
19
+ var coreComponentsCalendar = require('@alfalab/core-components-calendar/dist/cssm');
20
+ var utils = require('../utils.js');
21
+
22
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
+
24
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
25
+ var cn__default = /*#__PURE__*/_interopDefaultLegacy(cn);
26
+ var startOfMonth__default = /*#__PURE__*/_interopDefaultLegacy(startOfMonth);
27
+ var addMonths__default = /*#__PURE__*/_interopDefaultLegacy(addMonths);
28
+ var subMonths__default = /*#__PURE__*/_interopDefaultLegacy(subMonths);
29
+ var max__default = /*#__PURE__*/_interopDefaultLegacy(max);
30
+ var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
31
+ var endOfMonth__default = /*#__PURE__*/_interopDefaultLegacy(endOfMonth);
32
+
33
+ var CalendarRangeStatic = function (_a) {
34
+ var className = _a.className, _b = _a.defaultMonth, defaultMonth = _b === void 0 ? startOfMonth__default['default'](new Date()).getTime() : _b, minDate = _a.minDate, maxDate = _a.maxDate, _c = _a.valueFrom, valueFrom = _c === void 0 ? '' : _c, _d = _a.valueTo, valueTo = _d === void 0 ? '' : _d, _e = _a.onDateFromChange, onDateFromChange = _e === void 0 ? function () { return null; } : _e, _f = _a.onDateToChange, onDateToChange = _f === void 0 ? function () { return null; } : _f, _g = _a.onChange, onChange = _g === void 0 ? function () { return null; } : _g, _h = _a.inputFromProps, inputFromProps = _h === void 0 ? {} : _h, _j = _a.inputToProps, inputToProps = _j === void 0 ? {} : _j, offDays = _a.offDays, events = _a.events, dataTestId = _a.dataTestId;
35
+ var calendarToRef = React.useRef(null);
36
+ var _k = React.useState(valueFrom), inputFromValue = _k[0], setInputFromValue = _k[1];
37
+ var _l = React.useState(valueTo), inputToValue = _l[0], setInputToValue = _l[1];
38
+ var dateFrom = coreComponentsCalendarInput.isValidInputValue(inputFromValue, minDate, maxDate, offDays)
39
+ ? coreComponentsCalendarInput.parseDateString(inputFromValue).getTime()
40
+ : null;
41
+ var dateTo = coreComponentsCalendarInput.isValidInputValue(inputToValue, dateFrom || minDate, maxDate, offDays)
42
+ ? coreComponentsCalendarInput.parseDateString(inputToValue).getTime()
43
+ : null;
44
+ if (coreComponentsDateInput.isCompleteDateInput(inputToValue) && !dateTo) {
45
+ dateFrom = null;
46
+ }
47
+ var bothInvalid = coreComponentsDateInput.isCompleteDateInput(inputFromValue) &&
48
+ coreComponentsDateInput.isCompleteDateInput(inputToValue) &&
49
+ coreComponentsCalendarInput.parseDateString(inputFromValue).getTime() > coreComponentsCalendarInput.parseDateString(inputToValue).getTime();
50
+ var _m = React.useState(false), nextMonthHighlighted = _m[0], setNextMonthHighlighted = _m[1];
51
+ var period = coreComponentsCalendar.usePeriodWithReset({
52
+ initialSelectedFrom: dateFrom ? coreComponentsCalendarInput.parseDateString(inputFromValue).getTime() : undefined,
53
+ initialSelectedTo: dateTo ? coreComponentsCalendarInput.parseDateString(inputToValue).getTime() : undefined,
54
+ });
55
+ var validateInputFromValue = React.useCallback(function (value) { return coreComponentsCalendarInput.isValidInputValue(value, minDate, dateFrom || maxDate, offDays); }, [dateFrom, maxDate, minDate, offDays]);
56
+ var validateInputToValue = React.useCallback(function (value) { return coreComponentsCalendarInput.isValidInputValue(value, dateFrom || minDate, maxDate, offDays); }, [dateFrom, minDate, maxDate, offDays]);
57
+ var _o = React.useState(validateInputFromValue(inputFromValue) === false), inputFromInvalid = _o[0], setInputFromInvalid = _o[1];
58
+ var _p = React.useState(validateInputToValue(inputToValue) === false), inputToInvalid = _p[0], setInputToInvalid = _p[1];
59
+ var _q = hooks.useStaticViewMonthes({
60
+ selectedFrom: period.selectedFrom,
61
+ selectedTo: period.selectedTo,
62
+ defaultMonth: defaultMonth,
63
+ }), monthFrom = _q.monthFrom, monthTo = _q.monthTo, handleMonthFromChange = _q.handleMonthFromChange, handleMonthToChange = _q.handleMonthToChange;
64
+ var handleValidInputFrom = React.useCallback(function () {
65
+ setInputFromInvalid(inputFromValue !== '' && !validateInputFromValue(inputFromValue));
66
+ }, [inputFromValue, validateInputFromValue]);
67
+ var handleValidInputTo = React.useCallback(function () {
68
+ setInputToInvalid(inputToValue !== '' && !validateInputToValue(inputToValue));
69
+ }, [inputToValue, validateInputToValue]);
70
+ var handleInputFromChange = React.useCallback(function (_, payload) {
71
+ setInputFromValue(payload.value);
72
+ }, []);
73
+ var handleInputToChange = React.useCallback(function (_, payload) {
74
+ setInputToValue(payload.value);
75
+ }, []);
76
+ var handleCalendarToMouseOver = React.useCallback(function (event) {
77
+ var _a;
78
+ var target = event.target;
79
+ if ((_a = calendarToRef.current) === null || _a === void 0 ? void 0 : _a.contains(target)) {
80
+ var dayHighlighted_1 = utils.isDayButton(target) || utils.isDayButton(target.parentElement);
81
+ setNextMonthHighlighted(function (highlighted) {
82
+ if (highlighted && !dayHighlighted_1)
83
+ return false;
84
+ if (!highlighted && dayHighlighted_1)
85
+ return true;
86
+ return highlighted;
87
+ });
88
+ }
89
+ else {
90
+ setNextMonthHighlighted(false);
91
+ }
92
+ }, []);
93
+ var handleClearFrom = React.useCallback(function () {
94
+ setInputFromValue('');
95
+ }, []);
96
+ var handleClearTo = React.useCallback(function () {
97
+ setInputToValue('');
98
+ }, []);
99
+ React.useEffect(function () {
100
+ setInputFromValue(period.selectedFrom ? coreComponentsCalendarInput.formatDate(period.selectedFrom) : '');
101
+ }, [period.selectedFrom]);
102
+ React.useEffect(function () {
103
+ setInputToValue(period.selectedTo ? coreComponentsCalendarInput.formatDate(period.selectedTo) : '');
104
+ }, [period.selectedTo]);
105
+ React.useEffect(function () {
106
+ setInputFromValue(valueFrom);
107
+ }, [valueFrom]);
108
+ React.useEffect(function () {
109
+ setInputToValue(valueTo);
110
+ }, [valueTo]);
111
+ React.useEffect(function () {
112
+ if (!inputFromValue || coreComponentsDateInput.isCompleteDateInput(inputFromValue)) {
113
+ handleValidInputFrom();
114
+ }
115
+ period.setStart(dateFrom || undefined);
116
+ if (dateTo) {
117
+ period.setEnd(dateTo);
118
+ }
119
+ if (inputFromValue !== valueFrom) {
120
+ onDateFromChange({
121
+ value: inputFromValue,
122
+ date: dateFrom,
123
+ });
124
+ onChange({
125
+ valueFrom: inputFromValue,
126
+ valueTo: inputToValue,
127
+ dateFrom: dateFrom,
128
+ dateTo: dateTo,
129
+ });
130
+ }
131
+ // eslint-disable-next-line react-hooks/exhaustive-deps
132
+ }, [inputFromValue]);
133
+ React.useEffect(function () {
134
+ if (!inputToValue || coreComponentsDateInput.isCompleteDateInput(inputToValue)) {
135
+ handleValidInputTo();
136
+ }
137
+ period.setEnd(dateTo || undefined);
138
+ if (dateFrom) {
139
+ period.setStart(dateFrom);
140
+ }
141
+ if (inputToValue !== valueTo) {
142
+ onDateToChange({
143
+ value: inputToValue,
144
+ date: dateTo,
145
+ });
146
+ onChange({
147
+ valueFrom: inputFromValue,
148
+ valueTo: inputToValue,
149
+ dateFrom: dateFrom,
150
+ dateTo: dateTo,
151
+ });
152
+ }
153
+ // eslint-disable-next-line react-hooks/exhaustive-deps
154
+ }, [inputToValue]);
155
+ var calendarFromProps = inputFromProps.calendarProps, dateInputFromProps = tslib_es6.__rest(inputFromProps, ["calendarProps"]);
156
+ var calendarToProps = inputToProps.calendarProps, dateInputToProps = tslib_es6.__rest(inputToProps, ["calendarProps"]);
157
+ var CalendarFromComponent = dateInputFromProps.Calendar || coreComponentsCalendar.Calendar;
158
+ var CalendarToComponent = dateInputToProps.Calendar || coreComponentsCalendar.Calendar;
159
+ return (
160
+ // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events
161
+ React__default['default'].createElement("div", { className: cn__default['default'](styles__default['default'].component, styles__default['default'].static, className), onMouseOver: handleCalendarToMouseOver, "data-test-id": dataTestId },
162
+ React__default['default'].createElement("div", null,
163
+ React__default['default'].createElement(coreComponentsDateInput.DateInput, tslib_es6.__assign({}, dateInputFromProps, { mobileMode: dateInputFromProps.mobileMode === 'popover'
164
+ ? 'input'
165
+ : dateInputFromProps.mobileMode, value: inputFromValue, onChange: handleInputFromChange, onClear: handleClearFrom, onBlur: handleValidInputFrom, error: bothInvalid || inputFromInvalid || dateInputFromProps.error, clear: true, block: true })),
166
+ React__default['default'].createElement(CalendarFromComponent, tslib_es6.__assign({}, calendarFromProps, { className: cn__default['default'](styles__default['default'].calendar, calendarFromProps === null || calendarFromProps === void 0 ? void 0 : calendarFromProps.className), month: monthFrom, selectorView: 'month-only', offDays: offDays, events: events, onChange: period.updatePeriod, onMonthChange: handleMonthFromChange, minDate: minDate, maxDate: maxDate && max__default['default']([maxDate, endOfMonth__default['default'](subMonths__default['default'](maxDate, 1))]).getTime(), selectedFrom: period.selectedFrom, selectedTo: period.selectedTo || (nextMonthHighlighted ? monthTo : undefined), rangeComplete: Boolean(period.selectedFrom && period.selectedTo) }))),
167
+ React__default['default'].createElement("span", { className: styles__default['default'].divider }),
168
+ React__default['default'].createElement("div", null,
169
+ React__default['default'].createElement(coreComponentsDateInput.DateInput, tslib_es6.__assign({}, dateInputToProps, { mobileMode: dateInputToProps.mobileMode === 'popover'
170
+ ? 'input'
171
+ : dateInputToProps.mobileMode, value: inputToValue, onChange: handleInputToChange, onClear: handleClearTo, onBlur: handleValidInputTo, error: bothInvalid || inputToInvalid, clear: true, block: true })),
172
+ React__default['default'].createElement(CalendarToComponent, tslib_es6.__assign({}, calendarToProps, { className: cn__default['default'](styles__default['default'].calendar, calendarToProps === null || calendarToProps === void 0 ? void 0 : calendarToProps.className), ref: calendarToRef, month: monthTo, selectorView: 'month-only', offDays: offDays, events: events, onChange: period.updatePeriod, onMonthChange: handleMonthToChange, minDate: minDate && startOfMonth__default['default'](addMonths__default['default'](minDate, 1)).getTime(), maxDate: maxDate, selectedFrom: period.selectedFrom, selectedTo: period.selectedTo })))));
173
+ };
174
+
175
+ exports.CalendarRangeStatic = CalendarRangeStatic;