@alfalab/core-components-calendar-range 9.0.14 → 9.1.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/Component.d.ts +4 -0
- package/Component.js.map +1 -1
- package/components/divider/index.css +8 -8
- package/components/divider/index.module.css.js +1 -1
- package/components/divider/index.module.css.js.map +1 -1
- package/cssm/Component.d.ts +4 -0
- package/cssm/Component.js.map +1 -1
- package/cssm/components/divider/index.module.css +1 -1
- package/cssm/hooks.d.ts +31 -0
- package/cssm/hooks.js +84 -0
- package/cssm/hooks.js.map +1 -1
- package/cssm/views/index.module.css +12 -0
- package/cssm/views/static.d.ts +13 -2
- package/cssm/views/static.js +93 -50
- package/cssm/views/static.js.map +1 -1
- package/esm/Component.d.ts +4 -0
- package/esm/Component.js.map +1 -1
- package/esm/components/divider/index.css +8 -8
- package/esm/components/divider/index.module.css.js +1 -1
- package/esm/components/divider/index.module.css.js.map +1 -1
- package/esm/hooks.d.ts +31 -0
- package/esm/hooks.js +84 -2
- package/esm/hooks.js.map +1 -1
- package/esm/views/index.css +19 -7
- package/esm/views/index.module.css.js +1 -1
- package/esm/views/index.module.css.js.map +1 -1
- package/esm/views/static.d.ts +13 -2
- package/esm/views/static.js +93 -50
- package/esm/views/static.js.map +1 -1
- package/hooks.d.ts +31 -0
- package/hooks.js +84 -0
- package/hooks.js.map +1 -1
- package/modern/Component.d.ts +4 -0
- package/modern/Component.js.map +1 -1
- package/modern/components/divider/index.css +8 -8
- package/modern/components/divider/index.module.css.js +1 -1
- package/modern/components/divider/index.module.css.js.map +1 -1
- package/modern/hooks.d.ts +31 -0
- package/modern/hooks.js +79 -2
- package/modern/hooks.js.map +1 -1
- package/modern/views/index.css +19 -7
- package/modern/views/index.module.css.js +1 -1
- package/modern/views/index.module.css.js.map +1 -1
- package/modern/views/static.d.ts +13 -2
- package/modern/views/static.js +88 -45
- package/modern/views/static.js.map +1 -1
- package/moderncssm/Component.d.ts +4 -0
- package/moderncssm/Component.js.map +1 -1
- package/moderncssm/components/divider/index.module.css +1 -1
- package/moderncssm/hooks.d.ts +31 -0
- package/moderncssm/hooks.js +79 -2
- package/moderncssm/hooks.js.map +1 -1
- package/moderncssm/views/index.module.css +13 -0
- package/moderncssm/views/static.d.ts +13 -2
- package/moderncssm/views/static.js +88 -45
- package/moderncssm/views/static.js.map +1 -1
- package/package.json +2 -1
- package/src/Component.tsx +5 -0
- package/src/components/divider/index.module.css +1 -1
- package/src/hooks.ts +150 -1
- package/src/views/index.module.css +11 -0
- package/src/views/static.tsx +188 -92
- package/views/index.css +19 -7
- package/views/index.module.css.js +1 -1
- package/views/index.module.css.js.map +1 -1
- package/views/static.d.ts +13 -2
- package/views/static.js +90 -47
- package/views/static.js.map +1 -1
package/cssm/views/static.js
CHANGED
|
@@ -10,7 +10,8 @@ var desktop = require('@alfalab/core-components-calendar/cssm/desktop');
|
|
|
10
10
|
var shared$1 = require('@alfalab/core-components-calendar/cssm/shared');
|
|
11
11
|
var shared = require('@alfalab/core-components-calendar-input/cssm/shared');
|
|
12
12
|
var cssm = require('@alfalab/core-components-date-input/cssm');
|
|
13
|
-
var cssm$
|
|
13
|
+
var cssm$2 = require('@alfalab/core-components-shared/cssm');
|
|
14
|
+
var cssm$1 = require('@alfalab/core-components-universal-date-input/cssm');
|
|
14
15
|
var Component = require('../components/divider/Component.js');
|
|
15
16
|
var hooks = require('../hooks.js');
|
|
16
17
|
var utils = require('../utils.js');
|
|
@@ -23,9 +24,25 @@ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
|
|
|
23
24
|
var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
|
|
24
25
|
|
|
25
26
|
var CalendarRangeStatic = function (_a) {
|
|
26
|
-
var className = _a.className, _b = _a.defaultMonth, defaultMonth = _b === void 0 ? dateFns.startOfMonth(new Date()).getTime() : _b, _c = _a.defaultMonthPosition, defaultMonthPosition = _c === void 0 ? 'left' : _c, minDate = _a.minDate, maxDate = _a.maxDate, _d = _a.valueFrom, valueFrom = _d === void 0 ? '' : _d, _e = _a.valueTo, valueTo = _e === void 0 ? '' : _e, _f = _a.onDateFromChange, onDateFromChange = _f === void 0 ? function () { return null; } : _f, _g = _a.onDateToChange, onDateToChange = _g === void 0 ? function () { return null; } : _g, _h = _a.onChange, onChange = _h === void 0 ? function () { return null; } : _h,
|
|
27
|
-
var
|
|
28
|
-
var
|
|
27
|
+
var className = _a.className, _b = _a.defaultMonth, defaultMonth = _b === void 0 ? dateFns.startOfMonth(new Date()).getTime() : _b, _c = _a.defaultMonthPosition, defaultMonthPosition = _c === void 0 ? 'left' : _c, minDate = _a.minDate, maxDate = _a.maxDate, _d = _a.valueFrom, valueFrom = _d === void 0 ? '' : _d, _e = _a.valueTo, valueTo = _e === void 0 ? '' : _e, _f = _a.onDateFromChange, onDateFromChange = _f === void 0 ? function () { return null; } : _f, _g = _a.onDateToChange, onDateToChange = _g === void 0 ? function () { return null; } : _g, _h = _a.onChange, onChange = _h === void 0 ? function () { return null; } : _h, _j = _a.inputFromProps, inputFromProps = _j === void 0 ? {} : _j, _k = _a.inputToProps, inputToProps = _k === void 0 ? {} : _k, offDays = _a.offDays, events = _a.events, _l = _a.returnInvalidDates, returnInvalidDates = _l === void 0 ? false : _l, dataTestId = _a.dataTestId, calendarContainerClassName = _a.calendarContainerClassName, _m = _a.autoSwap, autoSwap = _m === void 0 ? false : _m, onError = _a.onError;
|
|
28
|
+
var _o = React.useState(valueFrom), inputFromValue = _o[0], setInputFromValue = _o[1];
|
|
29
|
+
var _p = React.useState(valueTo), inputToValue = _p[0], setInputToValue = _p[1];
|
|
30
|
+
var _q = React.useState(false), inputFromError = _q[0], setInputFromError = _q[1];
|
|
31
|
+
var _r = React.useState(false), inputToError = _r[0], setInputToError = _r[1];
|
|
32
|
+
var toggleCorrectionFromRef = React.useRef(null);
|
|
33
|
+
var toggleCorrectionToRef = React.useRef(null);
|
|
34
|
+
var inputToRef = React.useRef(null);
|
|
35
|
+
var inputFromRef = React.useRef(null);
|
|
36
|
+
var _s = hooks.useStaticRangeAutoSwap({
|
|
37
|
+
autoSwap: autoSwap,
|
|
38
|
+
setInputFromValue: setInputFromValue,
|
|
39
|
+
setInputToValue: setInputToValue,
|
|
40
|
+
toggleCorrectionFromRef: toggleCorrectionFromRef,
|
|
41
|
+
toggleCorrectionToRef: toggleCorrectionToRef,
|
|
42
|
+
inputFromRef: inputFromRef,
|
|
43
|
+
inputToRef: inputToRef,
|
|
44
|
+
}), swapDates = _s.swapDates, isInternalUpdate = _s.isInternalUpdate;
|
|
45
|
+
var _t = React.useState(false), rangeValidationError = _t[0], setRangeValidationError = _t[1];
|
|
29
46
|
var dateFrom = shared.isValidInputValue(inputFromValue, minDate, maxDate, offDays)
|
|
30
47
|
? shared.parseDateString(inputFromValue).getTime()
|
|
31
48
|
: null;
|
|
@@ -35,40 +52,40 @@ var CalendarRangeStatic = function (_a) {
|
|
|
35
52
|
if (cssm.isCompleteDateInput(inputToValue) && !dateTo && !returnInvalidDates) {
|
|
36
53
|
dateFrom = null;
|
|
37
54
|
}
|
|
38
|
-
var
|
|
39
|
-
cssm.isCompleteDateInput(inputToValue) &&
|
|
40
|
-
shared.parseDateString(inputFromValue).getTime() > shared.parseDateString(inputToValue).getTime();
|
|
41
|
-
var _p = React.useState(undefined), highlightedDate = _p[0], setHighlightedDate = _p[1];
|
|
55
|
+
var _u = React.useState(undefined), highlightedDate = _u[0], setHighlightedDate = _u[1];
|
|
42
56
|
var period = shared$1.usePeriodWithReset({
|
|
43
57
|
initialSelectedFrom: dateFrom ? shared.parseDateString(inputFromValue).getTime() : undefined,
|
|
44
58
|
initialSelectedTo: dateTo ? shared.parseDateString(inputToValue).getTime() : undefined,
|
|
45
59
|
});
|
|
46
|
-
var validateInputFromValue = React.useCallback(function (value) { return shared.isValidInputValue(value, minDate, dateFrom || maxDate, offDays); }, [dateFrom, maxDate, minDate, offDays]);
|
|
47
|
-
var validateInputToValue = React.useCallback(function (value) { return shared.isValidInputValue(value, dateFrom || minDate, maxDate, offDays); }, [dateFrom, minDate, maxDate, offDays]);
|
|
48
|
-
var _q = React.useState(cssm.isCompleteDateInput(inputFromValue) && dateFrom === null), inputFromInvalid = _q[0], setInputFromInvalid = _q[1];
|
|
49
|
-
var _r = React.useState(cssm.isCompleteDateInput(inputToValue) && dateTo === null), inputToInvalid = _r[0], setInputToInvalid = _r[1];
|
|
50
|
-
var hasValidateError = bothInvalid || inputFromInvalid || inputToInvalid;
|
|
51
60
|
var calendarFromProps = inputFromProps.calendarProps, onInputChangeFrom = inputFromProps.onInputChange, dateInputFromProps = tslib.__rest(inputFromProps, ["calendarProps", "onInputChange"]);
|
|
52
61
|
var calendarToProps = inputToProps.calendarProps, onInputChangeTo = inputToProps.onInputChange, dateInputToProps = tslib.__rest(inputToProps, ["calendarProps", "onInputChange"]);
|
|
53
|
-
var
|
|
62
|
+
var _v = hooks.useStaticViewMonthes({
|
|
54
63
|
selectedFrom: period.selectedFrom,
|
|
55
64
|
selectedTo: period.selectedTo,
|
|
56
65
|
defaultMonth: defaultMonth,
|
|
57
66
|
defaultMonthPosition: defaultMonthPosition,
|
|
58
|
-
}), monthFrom =
|
|
59
|
-
var handleValidInputFrom = React.useCallback(function () {
|
|
60
|
-
setInputFromInvalid(inputFromValue !== '' && !validateInputFromValue(inputFromValue));
|
|
61
|
-
}, [inputFromValue, validateInputFromValue]);
|
|
62
|
-
var handleValidInputTo = React.useCallback(function () {
|
|
63
|
-
setInputToInvalid(inputToValue !== '' && !validateInputToValue(inputToValue));
|
|
64
|
-
}, [inputToValue, validateInputToValue]);
|
|
67
|
+
}), monthFrom = _v.monthFrom, monthTo = _v.monthTo, handleMonthFromChange = _v.handleMonthFromChange, handleMonthToChange = _v.handleMonthToChange;
|
|
65
68
|
var handleInputFromChange = function (event, payload) {
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
var newValue = payload.value;
|
|
70
|
+
setInputFromValue(newValue);
|
|
71
|
+
if (shared.isValidInputValue(newValue, minDate, maxDate, offDays)) {
|
|
72
|
+
swapDates(newValue, inputFromValue, inputToValue);
|
|
73
|
+
}
|
|
74
|
+
var payloadWithDate = { date: shared.parseDateString(payload.value), value: payload.value };
|
|
75
|
+
if (onInputChangeFrom) {
|
|
76
|
+
onInputChangeFrom(event === null ? {} : event, payloadWithDate);
|
|
77
|
+
}
|
|
68
78
|
};
|
|
69
79
|
var handleInputToChange = function (event, payload) {
|
|
70
|
-
|
|
71
|
-
|
|
80
|
+
var newValue = payload.value;
|
|
81
|
+
setInputToValue(newValue);
|
|
82
|
+
if (shared.isValidInputValue(newValue, minDate, maxDate, offDays)) {
|
|
83
|
+
swapDates(newValue, inputFromValue, inputToValue);
|
|
84
|
+
}
|
|
85
|
+
var payloadWithDate = { date: shared.parseDateString(payload.value), value: payload.value };
|
|
86
|
+
if (onInputChangeTo) {
|
|
87
|
+
onInputChangeTo(event === null ? {} : event, payloadWithDate);
|
|
88
|
+
}
|
|
72
89
|
};
|
|
73
90
|
var handleMouseOver = React.useCallback(function (event) {
|
|
74
91
|
var target = event.target;
|
|
@@ -101,19 +118,20 @@ var CalendarRangeStatic = function (_a) {
|
|
|
101
118
|
setInputToValue(valueTo);
|
|
102
119
|
}, [valueTo]);
|
|
103
120
|
React.useEffect(function () {
|
|
104
|
-
if (!inputFromValue || cssm.isCompleteDateInput(inputFromValue)) {
|
|
105
|
-
handleValidInputFrom();
|
|
106
|
-
}
|
|
107
121
|
period.setStart(dateFrom || undefined);
|
|
108
122
|
if (dateTo) {
|
|
109
123
|
period.setEnd(dateTo);
|
|
110
124
|
}
|
|
125
|
+
if (isInternalUpdate.current) {
|
|
126
|
+
isInternalUpdate.current = false;
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
111
129
|
if (inputFromValue !== valueFrom) {
|
|
112
|
-
onDateFromChange({
|
|
130
|
+
onDateFromChange === null || onDateFromChange === void 0 ? void 0 : onDateFromChange({
|
|
113
131
|
value: inputFromValue,
|
|
114
132
|
date: dateFrom,
|
|
115
133
|
});
|
|
116
|
-
onChange({
|
|
134
|
+
onChange === null || onChange === void 0 ? void 0 : onChange({
|
|
117
135
|
valueFrom: inputFromValue,
|
|
118
136
|
valueTo: inputToValue,
|
|
119
137
|
dateFrom: dateFrom,
|
|
@@ -123,13 +141,14 @@ var CalendarRangeStatic = function (_a) {
|
|
|
123
141
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
124
142
|
}, [inputFromValue]);
|
|
125
143
|
React.useEffect(function () {
|
|
126
|
-
if (!inputToValue || cssm.isCompleteDateInput(inputToValue)) {
|
|
127
|
-
handleValidInputTo();
|
|
128
|
-
}
|
|
129
144
|
period.setEnd(dateTo || undefined);
|
|
130
145
|
if (dateFrom) {
|
|
131
146
|
period.setStart(dateFrom);
|
|
132
147
|
}
|
|
148
|
+
if (isInternalUpdate.current) {
|
|
149
|
+
isInternalUpdate.current = false;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
133
152
|
if (inputToValue !== valueTo) {
|
|
134
153
|
// eslint-disable-next-line no-nested-ternary
|
|
135
154
|
var inputDateTo = returnInvalidDates
|
|
@@ -137,11 +156,11 @@ var CalendarRangeStatic = function (_a) {
|
|
|
137
156
|
? shared.parseDateString(inputToValue).getTime()
|
|
138
157
|
: null
|
|
139
158
|
: dateTo;
|
|
140
|
-
onDateToChange({
|
|
159
|
+
onDateToChange === null || onDateToChange === void 0 ? void 0 : onDateToChange({
|
|
141
160
|
value: inputToValue,
|
|
142
161
|
date: inputDateTo,
|
|
143
162
|
});
|
|
144
|
-
onChange({
|
|
163
|
+
onChange === null || onChange === void 0 ? void 0 : onChange({
|
|
145
164
|
valueFrom: inputFromValue,
|
|
146
165
|
valueTo: inputToValue,
|
|
147
166
|
dateFrom: dateFrom,
|
|
@@ -150,12 +169,36 @@ var CalendarRangeStatic = function (_a) {
|
|
|
150
169
|
}
|
|
151
170
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
152
171
|
}, [inputToValue]);
|
|
172
|
+
React.useEffect(function () {
|
|
173
|
+
var isInputFromValueComplete = cssm.isCompleteDateInput(inputFromValue);
|
|
174
|
+
var isInputToValueComplete = cssm.isCompleteDateInput(inputToValue);
|
|
175
|
+
var individualInputFromError = false;
|
|
176
|
+
var individualInputToError = false;
|
|
177
|
+
if (isInputFromValueComplete) {
|
|
178
|
+
individualInputFromError = !shared.isValidInputValue(inputFromValue, minDate, maxDate, offDays);
|
|
179
|
+
}
|
|
180
|
+
if (isInputToValueComplete) {
|
|
181
|
+
individualInputToError = !shared.isValidInputValue(inputToValue, minDate, maxDate, offDays);
|
|
182
|
+
}
|
|
183
|
+
var isRangeError = false;
|
|
184
|
+
var isValidInputFromValueStandalone = isInputFromValueComplete && individualInputFromError === false;
|
|
185
|
+
var isValidInputToValueStandalone = isInputToValueComplete && individualInputToError === false;
|
|
186
|
+
if (isValidInputFromValueStandalone && isValidInputToValueStandalone) {
|
|
187
|
+
var parsedDateFrom = shared.parseDateString(inputFromValue).getTime();
|
|
188
|
+
var parsedDateTo = shared.parseDateString(inputToValue).getTime();
|
|
189
|
+
if (parsedDateFrom > parsedDateTo) {
|
|
190
|
+
isRangeError = true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
setInputFromError(individualInputFromError || isRangeError);
|
|
194
|
+
setInputToError(individualInputToError || isRangeError);
|
|
195
|
+
setRangeValidationError(isRangeError);
|
|
196
|
+
}, [inputFromValue, inputToValue, minDate, maxDate, offDays]);
|
|
153
197
|
React.useEffect(function () {
|
|
154
198
|
if (onError) {
|
|
155
|
-
onError(
|
|
199
|
+
onError(rangeValidationError);
|
|
156
200
|
}
|
|
157
|
-
|
|
158
|
-
}, [hasValidateError]);
|
|
201
|
+
}, [onError, rangeValidationError]);
|
|
159
202
|
var rangeProps = hooks.useSelectionProps(period.selectedFrom, period.selectedTo, highlightedDate);
|
|
160
203
|
var CalendarFromComponent = dateInputFromProps.Calendar || desktop.CalendarDesktop;
|
|
161
204
|
var CalendarToComponent = dateInputToProps.Calendar || desktop.CalendarDesktop;
|
|
@@ -165,21 +208,21 @@ var CalendarRangeStatic = function (_a) {
|
|
|
165
208
|
React__default.default.createElement("div", { className: cn__default.default(styles__default.default.component, styles__default.default.static, className),
|
|
166
209
|
// eslint-disable-next-line jsx-a11y/mouse-events-have-key-events
|
|
167
210
|
onMouseOver: handleMouseOver, "data-test-id": dataTestId },
|
|
168
|
-
React__default.default.createElement("div",
|
|
169
|
-
React__default.default.createElement(cssm.
|
|
170
|
-
?
|
|
171
|
-
:
|
|
172
|
-
React__default.default.createElement(
|
|
211
|
+
React__default.default.createElement("div", { className: cn__default.default(styles__default.default.inputsContainer) },
|
|
212
|
+
React__default.default.createElement(cssm$1.UniversalDateInput, tslib.__assign({}, dateInputFromProps, { Calendar: undefined, view: 'date', picker: false, value: inputFromValue, onInputChange: handleInputFromChange, onClear: handleClearFrom, correctionRef: toggleCorrectionFromRef, error: inputFromError ? 'Укажите корректную дату' : dateInputFromProps.error, clear: true, block: true, minDate: minDate, autoCorrection: false, maxDate: minMaxInSameMonth
|
|
213
|
+
? maxDate
|
|
214
|
+
: maxDate && dateFns.max([maxDate, dateFns.endOfMonth(dateFns.subMonths(maxDate, 1))]).getTime(), ref: inputFromRef })),
|
|
215
|
+
React__default.default.createElement(Component.Divider, { inputFromProps: inputFromProps, inputToProps: inputToProps }),
|
|
216
|
+
React__default.default.createElement(cssm$1.UniversalDateInput, tslib.__assign({}, dateInputToProps, { Calendar: undefined, view: 'date', picker: false, value: inputToValue, onInputChange: handleInputToChange, onClear: handleClearTo, error: inputToError ? 'Укажите корректную дату' : dateInputToProps.error, correctionRef: toggleCorrectionToRef, clear: true, block: true, autoCorrection: false, minDate: minMaxInSameMonth
|
|
217
|
+
? minDate
|
|
218
|
+
: minDate && dateFns.startOfMonth(dateFns.addMonths(minDate, 1)).getTime(), maxDate: maxDate, ref: inputToRef }))),
|
|
219
|
+
React__default.default.createElement("div", { className: cn__default.default(styles__default.default.calendarContainers) },
|
|
220
|
+
React__default.default.createElement("div", { className: cn__default.default(styles__default.default.calendarContainer, calendarContainerClassName), "data-test-id": cssm$2.getDataTestId(dataTestId, 'container-from') },
|
|
173
221
|
React__default.default.createElement(CalendarFromComponent, tslib.__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: minMaxInSameMonth
|
|
174
222
|
? maxDate
|
|
175
223
|
: maxDate &&
|
|
176
|
-
dateFns.max([maxDate, dateFns.endOfMonth(dateFns.subMonths(maxDate, 1))]).getTime() }, rangeProps)))
|
|
177
|
-
|
|
178
|
-
React__default.default.createElement("div", null,
|
|
179
|
-
React__default.default.createElement(cssm.DateInput, tslib.__assign({}, dateInputToProps, { mobileMode: dateInputToProps.mobileMode === 'popover'
|
|
180
|
-
? 'input'
|
|
181
|
-
: dateInputToProps.mobileMode, value: inputToValue, onChange: handleInputToChange, onClear: handleClearTo, onBlur: handleValidInputTo, error: bothInvalid || inputToInvalid || dateInputToProps.error, clear: true, block: true })),
|
|
182
|
-
React__default.default.createElement("div", { "data-test-id": cssm$1.getDataTestId(dataTestId, 'container-to') },
|
|
224
|
+
dateFns.max([maxDate, dateFns.endOfMonth(dateFns.subMonths(maxDate, 1))]).getTime() }, rangeProps))),
|
|
225
|
+
React__default.default.createElement("div", { "data-test-id": cssm$2.getDataTestId(dataTestId, 'container-to') },
|
|
183
226
|
React__default.default.createElement(CalendarToComponent, tslib.__assign({}, calendarToProps, { className: cn__default.default(styles__default.default.calendar, calendarToProps === null || calendarToProps === void 0 ? void 0 : calendarToProps.className), month: monthTo, selectorView: 'month-only', offDays: offDays, events: events, onChange: period.updatePeriod, onMonthChange: handleMonthToChange, minDate: minMaxInSameMonth
|
|
184
227
|
? minDate
|
|
185
228
|
: minDate && dateFns.startOfMonth(dateFns.addMonths(minDate, 1)).getTime(), maxDate: maxDate }, rangeProps))))));
|
package/cssm/views/static.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","sources":["../../src/views/static.tsx"],"sourcesContent":["/* eslint-disable complexity */\nimport React, { type FC, type MouseEvent, useCallback, useEffect, useState } from 'react';\nimport cn from 'classnames';\nimport { addMonths, endOfMonth, isSameMonth, max, startOfMonth, subMonths } from 'date-fns';\n\nimport { CalendarDesktop } from '@alfalab/core-components-calendar/desktop';\nimport { usePeriodWithReset } from '@alfalab/core-components-calendar/shared';\nimport {\n formatDate,\n isValidInputValue,\n parseDateString,\n} from '@alfalab/core-components-calendar-input/shared';\nimport {\n DateInput,\n type DateInputProps,\n isCompleteDateInput,\n} from '@alfalab/core-components-date-input';\nimport { getDataTestId } from '@alfalab/core-components-shared';\n\nimport { type CalendarRangeProps } from '../Component';\nimport { Divider } from '../components/divider';\nimport { useSelectionProps, useStaticViewMonthes } from '../hooks';\nimport { isDayButton } from '../utils';\n\nimport styles from './index.module.css';\n\nexport type CalendarRangeStaticProps = Omit<CalendarRangeProps, 'calendarPosition'> & {\n /**\n * Отображать начальный месяц слева или справа (влияет только на начальный рендер)\n */\n defaultMonthPosition?: 'left' | 'right';\n};\n\nexport const CalendarRangeStatic: FC<CalendarRangeStaticProps> = ({\n className,\n defaultMonth = startOfMonth(new Date()).getTime(),\n defaultMonthPosition = 'left',\n minDate,\n maxDate,\n valueFrom = '',\n valueTo = '',\n onDateFromChange = () => null,\n onDateToChange = () => null,\n onChange = () => null,\n onError,\n inputFromProps = {},\n inputToProps = {},\n offDays,\n events,\n returnInvalidDates = false,\n dataTestId,\n calendarContainerClassName,\n}) => {\n const [inputFromValue, setInputFromValue] = useState<string>(valueFrom);\n const [inputToValue, setInputToValue] = useState<string>(valueTo);\n\n let dateFrom = isValidInputValue(inputFromValue, minDate, maxDate, offDays)\n ? parseDateString(inputFromValue).getTime()\n : null;\n\n const dateTo = isValidInputValue(inputToValue, dateFrom || minDate, maxDate, offDays)\n ? parseDateString(inputToValue).getTime()\n : null;\n\n if (isCompleteDateInput(inputToValue) && !dateTo && !returnInvalidDates) {\n dateFrom = null;\n }\n\n const bothInvalid =\n isCompleteDateInput(inputFromValue) &&\n isCompleteDateInput(inputToValue) &&\n parseDateString(inputFromValue).getTime() > parseDateString(inputToValue).getTime();\n\n const [highlightedDate, setHighlightedDate] = useState<number | undefined>(undefined);\n\n const period = usePeriodWithReset({\n initialSelectedFrom: dateFrom ? parseDateString(inputFromValue).getTime() : undefined,\n initialSelectedTo: dateTo ? parseDateString(inputToValue).getTime() : undefined,\n });\n\n const validateInputFromValue = useCallback(\n (value: string) => isValidInputValue(value, minDate, dateFrom || maxDate, offDays),\n [dateFrom, maxDate, minDate, offDays],\n );\n\n const validateInputToValue = useCallback(\n (value: string) => isValidInputValue(value, dateFrom || minDate, maxDate, offDays),\n\n [dateFrom, minDate, maxDate, offDays],\n );\n\n const [inputFromInvalid, setInputFromInvalid] = useState<boolean>(\n isCompleteDateInput(inputFromValue) && dateFrom === null,\n );\n\n const [inputToInvalid, setInputToInvalid] = useState<boolean>(\n isCompleteDateInput(inputToValue) && dateTo === null,\n );\n\n const hasValidateError = bothInvalid || inputFromInvalid || inputToInvalid;\n const {\n calendarProps: calendarFromProps,\n onInputChange: onInputChangeFrom,\n ...dateInputFromProps\n } = inputFromProps;\n const {\n calendarProps: calendarToProps,\n onInputChange: onInputChangeTo,\n ...dateInputToProps\n } = inputToProps;\n\n const { monthFrom, monthTo, handleMonthFromChange, handleMonthToChange } = useStaticViewMonthes(\n {\n selectedFrom: period.selectedFrom,\n selectedTo: period.selectedTo,\n defaultMonth,\n defaultMonthPosition,\n },\n );\n\n const handleValidInputFrom = useCallback(() => {\n setInputFromInvalid(inputFromValue !== '' && !validateInputFromValue(inputFromValue));\n }, [inputFromValue, validateInputFromValue]);\n\n const handleValidInputTo = useCallback(() => {\n setInputToInvalid(inputToValue !== '' && !validateInputToValue(inputToValue));\n }, [inputToValue, validateInputToValue]);\n\n const handleInputFromChange: Required<DateInputProps>['onChange'] = (event, payload) => {\n setInputFromValue(payload.value);\n onInputChangeFrom?.(event, payload);\n };\n\n const handleInputToChange: Required<DateInputProps>['onChange'] = (event, payload) => {\n setInputToValue(payload.value);\n onInputChangeTo?.(event, payload);\n };\n\n const handleMouseOver = useCallback((event: MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n\n const mouseOverDayButton = isDayButton(target) || isDayButton(target.parentElement);\n\n let date;\n\n if (mouseOverDayButton) {\n const button =\n target.tagName === 'BUTTON' ? target : (target.parentElement as HTMLButtonElement);\n\n if (button.dataset.date) {\n date = +button.dataset.date;\n }\n }\n\n setHighlightedDate(date);\n }, []);\n\n const handleClearFrom = useCallback(() => {\n setInputFromValue('');\n }, []);\n\n const handleClearTo = useCallback(() => {\n setInputToValue('');\n }, []);\n\n useEffect(() => {\n setInputFromValue(period.selectedFrom ? formatDate(period.selectedFrom) : '');\n }, [period.selectedFrom]);\n\n useEffect(() => {\n setInputToValue(period.selectedTo ? formatDate(period.selectedTo) : '');\n }, [period.selectedTo]);\n\n useEffect(() => {\n setInputFromValue(valueFrom);\n }, [valueFrom]);\n\n useEffect(() => {\n setInputToValue(valueTo);\n }, [valueTo]);\n\n useEffect(() => {\n if (!inputFromValue || isCompleteDateInput(inputFromValue)) {\n handleValidInputFrom();\n }\n\n period.setStart(dateFrom || undefined);\n if (dateTo) {\n period.setEnd(dateTo);\n }\n\n if (inputFromValue !== valueFrom) {\n onDateFromChange({\n value: inputFromValue,\n date: dateFrom,\n });\n\n onChange({\n valueFrom: inputFromValue,\n valueTo: inputToValue,\n dateFrom,\n dateTo,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inputFromValue]);\n\n useEffect(() => {\n if (!inputToValue || isCompleteDateInput(inputToValue)) {\n handleValidInputTo();\n }\n\n period.setEnd(dateTo || undefined);\n if (dateFrom) {\n period.setStart(dateFrom);\n }\n\n if (inputToValue !== valueTo) {\n // eslint-disable-next-line no-nested-ternary\n const inputDateTo = returnInvalidDates\n ? isCompleteDateInput(inputToValue)\n ? parseDateString(inputToValue).getTime()\n : null\n : dateTo;\n\n onDateToChange({\n value: inputToValue,\n date: inputDateTo,\n });\n\n onChange({\n valueFrom: inputFromValue,\n valueTo: inputToValue,\n dateFrom,\n dateTo: inputDateTo,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inputToValue]);\n\n useEffect(() => {\n if (onError) {\n onError(hasValidateError);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hasValidateError]);\n\n const rangeProps = useSelectionProps(period.selectedFrom, period.selectedTo, highlightedDate);\n\n const CalendarFromComponent = dateInputFromProps.Calendar || CalendarDesktop;\n const CalendarToComponent = dateInputToProps.Calendar || CalendarDesktop;\n\n const minMaxInSameMonth = minDate && maxDate && isSameMonth(minDate, maxDate);\n\n return (\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\n <div\n className={cn(styles.component, styles.static, className)}\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\n onMouseOver={handleMouseOver}\n data-test-id={dataTestId}\n >\n <div>\n <DateInput\n {...dateInputFromProps}\n mobileMode={\n dateInputFromProps.mobileMode === 'popover'\n ? 'input'\n : dateInputFromProps.mobileMode\n }\n value={inputFromValue}\n onChange={handleInputFromChange}\n onClear={handleClearFrom}\n onBlur={handleValidInputFrom}\n error={bothInvalid || inputFromInvalid || dateInputFromProps.error}\n clear={true}\n block={true}\n />\n <div\n className={cn(styles.calendarContainer, calendarContainerClassName)}\n data-test-id={getDataTestId(dataTestId, 'container-from')}\n >\n <CalendarFromComponent\n {...calendarFromProps}\n className={cn(styles.calendar, calendarFromProps?.className)}\n month={monthFrom}\n selectorView='month-only'\n offDays={offDays}\n events={events}\n onChange={period.updatePeriod}\n onMonthChange={handleMonthFromChange}\n minDate={minDate}\n maxDate={\n minMaxInSameMonth\n ? maxDate\n : maxDate &&\n max([maxDate, endOfMonth(subMonths(maxDate, 1))]).getTime()\n }\n {...rangeProps}\n />\n </div>\n </div>\n\n <Divider inputFromProps={inputFromProps} inputToProps={inputToProps} />\n\n <div>\n <DateInput\n {...dateInputToProps}\n mobileMode={\n dateInputToProps.mobileMode === 'popover'\n ? 'input'\n : dateInputToProps.mobileMode\n }\n value={inputToValue}\n onChange={handleInputToChange}\n onClear={handleClearTo}\n onBlur={handleValidInputTo}\n error={bothInvalid || inputToInvalid || dateInputToProps.error}\n clear={true}\n block={true}\n />\n <div data-test-id={getDataTestId(dataTestId, 'container-to')}>\n <CalendarToComponent\n {...calendarToProps}\n className={cn(styles.calendar, calendarToProps?.className)}\n month={monthTo}\n selectorView='month-only'\n offDays={offDays}\n events={events}\n onChange={period.updatePeriod}\n onMonthChange={handleMonthToChange}\n minDate={\n minMaxInSameMonth\n ? minDate\n : minDate && startOfMonth(addMonths(minDate, 1)).getTime()\n }\n maxDate={maxDate}\n {...rangeProps}\n />\n </div>\n </div>\n </div>\n );\n};\n"],"names":["startOfMonth","useState","isValidInputValue","parseDateString","isCompleteDateInput","usePeriodWithReset","useCallback","__rest","useStaticViewMonthes","isDayButton","useEffect","formatDate","useSelectionProps","CalendarDesktop","isSameMonth","React","cn","styles","DateInput","__assign","getDataTestId","max","endOfMonth","subMonths","Divider","addMonths"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"static.js","sources":["../../src/views/static.tsx"],"sourcesContent":["/* eslint-disable complexity */\nimport React, { type FC, type MouseEvent, useCallback, useEffect, useRef, useState } from 'react';\nimport cn from 'classnames';\nimport { addMonths, endOfMonth, isSameMonth, max, startOfMonth, subMonths } from 'date-fns';\n\nimport { CalendarDesktop } from '@alfalab/core-components-calendar/desktop';\nimport { usePeriodWithReset } from '@alfalab/core-components-calendar/shared';\nimport { type CalendarInputProps } from '@alfalab/core-components-calendar-input';\nimport {\n formatDate,\n isValidInputValue,\n parseDateString,\n} from '@alfalab/core-components-calendar-input/shared';\nimport { isCompleteDateInput } from '@alfalab/core-components-date-input';\nimport { getDataTestId } from '@alfalab/core-components-shared';\nimport {\n UniversalDateInput,\n type UniversalDateInputProps,\n} from '@alfalab/core-components-universal-date-input';\n\nimport { type CalendarRangeProps } from '../Component';\nimport { Divider } from '../components/divider';\nimport { useSelectionProps, useStaticRangeAutoSwap, useStaticViewMonthes } from '../hooks';\nimport { isDayButton } from '../utils';\n\nimport styles from './index.module.css';\n\ntype DateInputProps = Omit<CalendarInputProps, 'onCalendarOpen' | 'onCalendarClose' | 'onChange'>;\n\ninterface CalendarRangeStaticProps\n extends Omit<CalendarRangeProps, 'calendarPosition' | 'inputFromProps' | 'inputToProps'> {\n /**\n * Отображать начальный месяц слева или справа (влияет только на начальный рендер)\n */\n defaultMonthPosition?: 'left' | 'right';\n\n /**\n * Пропсы для инпута начальной даты диапазона\n */\n inputFromProps?: DateInputProps;\n\n /**\n * Пропсы для инпута конечной даты диапазона\n */\n inputToProps?: DateInputProps;\n}\n\ntype CorrectionToggleRef = { handleCorrection: () => void };\n\nexport const CalendarRangeStatic: FC<CalendarRangeStaticProps> = ({\n className,\n defaultMonth = startOfMonth(new Date()).getTime(),\n defaultMonthPosition = 'left',\n minDate,\n maxDate,\n valueFrom = '',\n valueTo = '',\n onDateFromChange = () => null,\n onDateToChange = () => null,\n onChange = () => null,\n inputFromProps = {},\n inputToProps = {},\n offDays,\n events,\n returnInvalidDates = false,\n dataTestId,\n calendarContainerClassName,\n autoSwap = false,\n onError,\n}) => {\n const [inputFromValue, setInputFromValue] = useState<string>(valueFrom);\n const [inputToValue, setInputToValue] = useState<string>(valueTo);\n\n const [inputFromError, setInputFromError] = useState(false);\n const [inputToError, setInputToError] = useState(false);\n\n const toggleCorrectionFromRef = useRef<CorrectionToggleRef>(null);\n const toggleCorrectionToRef = useRef<CorrectionToggleRef>(null);\n\n const inputToRef = useRef<HTMLInputElement>(null);\n const inputFromRef = useRef<HTMLInputElement>(null);\n\n const { swapDates, isInternalUpdate } = useStaticRangeAutoSwap({\n autoSwap,\n setInputFromValue,\n setInputToValue,\n toggleCorrectionFromRef,\n toggleCorrectionToRef,\n inputFromRef,\n inputToRef,\n });\n\n const [rangeValidationError, setRangeValidationError] = useState(false);\n\n let dateFrom = isValidInputValue(inputFromValue, minDate, maxDate, offDays)\n ? parseDateString(inputFromValue).getTime()\n : null;\n\n const dateTo = isValidInputValue(inputToValue, dateFrom || minDate, maxDate, offDays)\n ? parseDateString(inputToValue).getTime()\n : null;\n\n if (isCompleteDateInput(inputToValue) && !dateTo && !returnInvalidDates) {\n dateFrom = null;\n }\n\n const [highlightedDate, setHighlightedDate] = useState<number | undefined>(undefined);\n\n const period = usePeriodWithReset({\n initialSelectedFrom: dateFrom ? parseDateString(inputFromValue).getTime() : undefined,\n initialSelectedTo: dateTo ? parseDateString(inputToValue).getTime() : undefined,\n });\n\n const {\n calendarProps: calendarFromProps,\n onInputChange: onInputChangeFrom,\n ...dateInputFromProps\n } = inputFromProps;\n const {\n calendarProps: calendarToProps,\n onInputChange: onInputChangeTo,\n ...dateInputToProps\n } = inputToProps;\n\n const { monthFrom, monthTo, handleMonthFromChange, handleMonthToChange } = useStaticViewMonthes(\n {\n selectedFrom: period.selectedFrom,\n selectedTo: period.selectedTo,\n defaultMonth,\n defaultMonthPosition,\n },\n );\n\n const handleInputFromChange: Required<UniversalDateInputProps>['onInputChange'] = (\n event,\n payload,\n ) => {\n const newValue = payload.value;\n\n setInputFromValue(newValue);\n\n if (isValidInputValue(newValue, minDate, maxDate, offDays)) {\n swapDates(newValue, inputFromValue, inputToValue);\n }\n\n const payloadWithDate = { date: parseDateString(payload.value), value: payload.value };\n\n if (onInputChangeFrom) {\n onInputChangeFrom(\n event === null ? ({} as React.ChangeEvent<HTMLInputElement>) : event,\n payloadWithDate,\n );\n }\n };\n\n const handleInputToChange: Required<UniversalDateInputProps>['onInputChange'] = (\n event,\n payload,\n ) => {\n const newValue = payload.value;\n\n setInputToValue(newValue);\n\n if (isValidInputValue(newValue, minDate, maxDate, offDays)) {\n swapDates(newValue, inputFromValue, inputToValue);\n }\n\n const payloadWithDate = { date: parseDateString(payload.value), value: payload.value };\n\n if (onInputChangeTo) {\n onInputChangeTo(\n event === null ? ({} as React.ChangeEvent<HTMLInputElement>) : event,\n payloadWithDate,\n );\n }\n };\n\n const handleMouseOver = useCallback((event: MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n\n const mouseOverDayButton = isDayButton(target) || isDayButton(target.parentElement);\n\n let date;\n\n if (mouseOverDayButton) {\n const button =\n target.tagName === 'BUTTON' ? target : (target.parentElement as HTMLButtonElement);\n\n if (button.dataset.date) {\n date = +button.dataset.date;\n }\n }\n\n setHighlightedDate(date);\n }, []);\n\n const handleClearFrom = useCallback(() => {\n setInputFromValue('');\n }, []);\n\n const handleClearTo = useCallback(() => {\n setInputToValue('');\n }, []);\n\n useEffect(() => {\n setInputFromValue(period.selectedFrom ? formatDate(period.selectedFrom) : '');\n }, [period.selectedFrom]);\n\n useEffect(() => {\n setInputToValue(period.selectedTo ? formatDate(period.selectedTo) : '');\n }, [period.selectedTo]);\n\n useEffect(() => {\n setInputFromValue(valueFrom);\n }, [valueFrom]);\n\n useEffect(() => {\n setInputToValue(valueTo);\n }, [valueTo]);\n\n useEffect(() => {\n period.setStart(dateFrom || undefined);\n if (dateTo) {\n period.setEnd(dateTo);\n }\n\n if (isInternalUpdate.current) {\n isInternalUpdate.current = false;\n\n return;\n }\n\n if (inputFromValue !== valueFrom) {\n onDateFromChange?.({\n value: inputFromValue,\n date: dateFrom,\n });\n\n onChange?.({\n valueFrom: inputFromValue,\n valueTo: inputToValue,\n dateFrom,\n dateTo,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inputFromValue]);\n\n useEffect(() => {\n period.setEnd(dateTo || undefined);\n if (dateFrom) {\n period.setStart(dateFrom);\n }\n\n if (isInternalUpdate.current) {\n isInternalUpdate.current = false;\n\n return;\n }\n\n if (inputToValue !== valueTo) {\n // eslint-disable-next-line no-nested-ternary\n const inputDateTo = returnInvalidDates\n ? isCompleteDateInput(inputToValue)\n ? parseDateString(inputToValue).getTime()\n : null\n : dateTo;\n\n onDateToChange?.({\n value: inputToValue,\n date: inputDateTo,\n });\n\n onChange?.({\n valueFrom: inputFromValue,\n valueTo: inputToValue,\n dateFrom,\n dateTo: inputDateTo,\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inputToValue]);\n\n useEffect(() => {\n const isInputFromValueComplete = isCompleteDateInput(inputFromValue);\n const isInputToValueComplete = isCompleteDateInput(inputToValue);\n\n let individualInputFromError = false;\n let individualInputToError = false;\n\n if (isInputFromValueComplete) {\n individualInputFromError = !isValidInputValue(\n inputFromValue,\n minDate,\n maxDate,\n offDays,\n );\n }\n\n if (isInputToValueComplete) {\n individualInputToError = !isValidInputValue(inputToValue, minDate, maxDate, offDays);\n }\n\n let isRangeError = false;\n\n const isValidInputFromValueStandalone =\n isInputFromValueComplete && individualInputFromError === false;\n const isValidInputToValueStandalone =\n isInputToValueComplete && individualInputToError === false;\n\n if (isValidInputFromValueStandalone && isValidInputToValueStandalone) {\n const parsedDateFrom = parseDateString(inputFromValue).getTime();\n const parsedDateTo = parseDateString(inputToValue).getTime();\n\n if (parsedDateFrom > parsedDateTo) {\n isRangeError = true;\n }\n }\n\n setInputFromError(individualInputFromError || isRangeError);\n setInputToError(individualInputToError || isRangeError);\n\n setRangeValidationError(isRangeError);\n }, [inputFromValue, inputToValue, minDate, maxDate, offDays]);\n\n useEffect(() => {\n if (onError) {\n onError(rangeValidationError);\n }\n }, [onError, rangeValidationError]);\n\n const rangeProps = useSelectionProps(period.selectedFrom, period.selectedTo, highlightedDate);\n\n const CalendarFromComponent = dateInputFromProps.Calendar || CalendarDesktop;\n const CalendarToComponent = dateInputToProps.Calendar || CalendarDesktop;\n\n const minMaxInSameMonth = minDate && maxDate && isSameMonth(minDate, maxDate);\n\n return (\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\n <div\n className={cn(styles.component, styles.static, className)}\n // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\n onMouseOver={handleMouseOver}\n data-test-id={dataTestId}\n >\n <div className={cn(styles.inputsContainer)}>\n <UniversalDateInput\n {...dateInputFromProps}\n Calendar={undefined}\n view='date'\n picker={false}\n value={inputFromValue}\n onInputChange={handleInputFromChange}\n onClear={handleClearFrom}\n correctionRef={toggleCorrectionFromRef}\n error={inputFromError ? 'Укажите корректную дату' : dateInputFromProps.error}\n clear={true}\n block={true}\n minDate={minDate}\n autoCorrection={false}\n maxDate={\n minMaxInSameMonth\n ? maxDate\n : maxDate && max([maxDate, endOfMonth(subMonths(maxDate, 1))]).getTime()\n }\n ref={inputFromRef}\n />\n\n <Divider inputFromProps={inputFromProps} inputToProps={inputToProps} />\n\n <UniversalDateInput\n {...dateInputToProps}\n Calendar={undefined}\n view='date'\n picker={false}\n value={inputToValue}\n onInputChange={handleInputToChange}\n onClear={handleClearTo}\n error={inputToError ? 'Укажите корректную дату' : dateInputToProps.error}\n correctionRef={toggleCorrectionToRef}\n clear={true}\n block={true}\n autoCorrection={false}\n minDate={\n minMaxInSameMonth\n ? minDate\n : minDate && startOfMonth(addMonths(minDate, 1)).getTime()\n }\n maxDate={maxDate}\n ref={inputToRef}\n />\n </div>\n <div className={cn(styles.calendarContainers)}>\n <div\n className={cn(styles.calendarContainer, calendarContainerClassName)}\n data-test-id={getDataTestId(dataTestId, 'container-from')}\n >\n <CalendarFromComponent\n {...calendarFromProps}\n className={cn(styles.calendar, calendarFromProps?.className)}\n month={monthFrom}\n selectorView='month-only'\n offDays={offDays}\n events={events}\n onChange={period.updatePeriod}\n onMonthChange={handleMonthFromChange}\n minDate={minDate}\n maxDate={\n minMaxInSameMonth\n ? maxDate\n : maxDate &&\n max([maxDate, endOfMonth(subMonths(maxDate, 1))]).getTime()\n }\n {...rangeProps}\n />\n </div>\n <div data-test-id={getDataTestId(dataTestId, 'container-to')}>\n <CalendarToComponent\n {...calendarToProps}\n className={cn(styles.calendar, calendarToProps?.className)}\n month={monthTo}\n selectorView='month-only'\n offDays={offDays}\n events={events}\n onChange={period.updatePeriod}\n onMonthChange={handleMonthToChange}\n minDate={\n minMaxInSameMonth\n ? minDate\n : minDate && startOfMonth(addMonths(minDate, 1)).getTime()\n }\n maxDate={maxDate}\n {...rangeProps}\n />\n </div>\n </div>\n </div>\n );\n};\n"],"names":["startOfMonth","useState","useRef","useStaticRangeAutoSwap","isValidInputValue","parseDateString","isCompleteDateInput","usePeriodWithReset","__rest","useStaticViewMonthes","useCallback","isDayButton","useEffect","formatDate","useSelectionProps","CalendarDesktop","isSameMonth","React","cn","styles","UniversalDateInput","__assign","max","endOfMonth","subMonths","Divider","addMonths","getDataTestId"],"mappings":"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"}
|
package/esm/Component.d.ts
CHANGED
package/esm/Component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, { type FC } from 'react';\n\nimport { type CalendarInputProps } from '@alfalab/core-components-calendar-input';\n\nimport { CalendarRangePopover } from './views/popover';\nimport { CalendarRangeStatic } from './views/static';\n\nexport type CalendarRangeProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueFrom?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueTo?: string;\n\n /**\n * Месяц в календаре по умолчанию\n */\n defaultMonth?: number;\n\n /**\n * Минимальная дата, доступная для выбора (timestamp)\n */\n minDate?: number;\n\n /**\n * Максимальная дата, доступная для выбора (timestamp)\n */\n maxDate?: number;\n\n /**\n * Обработчик изменения даты от\n */\n onDateFromChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения даты до\n */\n onDateToChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения\n */\n onChange?: (payload: {\n dateFrom: number | null;\n valueFrom: string;\n dateTo: number | null;\n valueTo: string;\n }) => void;\n\n /**\n * Коллбэк, срабатывающий при возникновении ошибок валидации дат внутри компонента.\n */\n onError?: (hasError: boolean) => void;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных\n */\n offDays?: Array<Date | number>;\n\n /**\n * Пропсы для инпута даты от\n */\n inputFromProps?: CalendarInputProps;\n\n /**\n * Пропсы для инпута даты до\n */\n inputToProps?: CalendarInputProps;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Определяет, как рендерить календарь — в поповере или снизу инпута\n */\n calendarPosition?: 'static' | 'popover';\n\n /**\n * calendarPosition = static\n * Отображать начальный месяц слева или справа (влияет только на начальный рендер)\n */\n defaultMonthPosition?: 'left' | 'right';\n\n /**\n * Возвращать невалидную дату для кастомной валидации\n */\n returnInvalidDates?: boolean;\n\n /**\n * Дополнительный класс для контейнера календаря\n */\n calendarContainerClassName?: string;\n};\n\nexport const CalendarRange: FC<CalendarRangeProps> = ({\n calendarPosition = 'static',\n ...restProps\n}) => {\n const View = calendarPosition === 'popover' ? CalendarRangePopover : CalendarRangeStatic;\n\n return <View {...restProps} />;\n};\n"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, { type FC } from 'react';\n\nimport { type CalendarInputProps } from '@alfalab/core-components-calendar-input';\n\nimport { CalendarRangePopover } from './views/popover';\nimport { CalendarRangeStatic } from './views/static';\n\nexport type CalendarRangeProps = {\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueFrom?: string;\n\n /**\n * Значение инпута (используется и для календаря)\n */\n valueTo?: string;\n\n /**\n * Месяц в календаре по умолчанию\n */\n defaultMonth?: number;\n\n /**\n * Минимальная дата, доступная для выбора (timestamp)\n */\n minDate?: number;\n\n /**\n * Максимальная дата, доступная для выбора (timestamp)\n */\n maxDate?: number;\n\n /**\n * Обработчик изменения даты от\n */\n onDateFromChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения даты до\n */\n onDateToChange?: (payload: { date: number | null; value: string }) => void;\n\n /**\n * Обработчик изменения\n */\n onChange?: (payload: {\n dateFrom: number | null;\n valueFrom: string;\n dateTo: number | null;\n valueTo: string;\n }) => void;\n\n /**\n * Коллбэк, срабатывающий при возникновении ошибок валидации дат внутри компонента.\n */\n onError?: (hasError: boolean) => void;\n\n /**\n * Список событий\n */\n events?: Array<Date | number>;\n\n /**\n * Список выходных\n */\n offDays?: Array<Date | number>;\n\n /**\n * Пропсы для инпута даты от\n */\n inputFromProps?: CalendarInputProps;\n\n /**\n * Пропсы для инпута даты до\n */\n inputToProps?: CalendarInputProps;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Определяет, как рендерить календарь — в поповере или снизу инпута\n */\n calendarPosition?: 'static' | 'popover';\n\n /**\n * calendarPosition = static\n * Отображать начальный месяц слева или справа (влияет только на начальный рендер)\n */\n defaultMonthPosition?: 'left' | 'right';\n\n /**\n * Возвращать невалидную дату для кастомной валидации\n */\n returnInvalidDates?: boolean;\n\n /**\n * Дополнительный класс для контейнера календаря\n */\n calendarContainerClassName?: string;\n\n /**\n * Автоподмена дат\n */\n autoSwap?: boolean;\n};\n\nexport const CalendarRange: FC<CalendarRangeProps> = ({\n calendarPosition = 'static',\n ...restProps\n}) => {\n const View = calendarPosition === 'popover' ? CalendarRangePopover : CalendarRangeStatic;\n\n return <View {...restProps} />;\n};\n"],"names":[],"mappings":";;;;;AAmHO,IAAM,aAAa,GAA2B,UAAC,EAGrD,EAAA;IAFG,IAAA,EAAA,GAAA,EAAA,CAAA,gBAA2B,EAA3B,gBAAgB,GAAG,EAAA,KAAA,MAAA,GAAA,QAAQ,KAAA,EACxB,SAAS,GAFsC,MAAA,CAAA,EAAA,EAAA,CAAA,kBAAA,CAGrD,CADe;AAEZ,IAAA,IAAM,IAAI,GAAG,gBAAgB,KAAK,SAAS,GAAG,oBAAoB,GAAG,mBAAmB;AAExF,IAAA,OAAO,KAAC,CAAA,aAAA,CAAA,IAAI,EAAK,QAAA,CAAA,EAAA,EAAA,SAAS,EAAI;AAClC;;;;"}
|
|
@@ -14,33 +14,33 @@
|
|
|
14
14
|
--size-l-height: 64px;
|
|
15
15
|
--size-xl-height: 72px;
|
|
16
16
|
}
|
|
17
|
-
.calendar-
|
|
17
|
+
.calendar-range__component_a3a4p {
|
|
18
18
|
display: flex;
|
|
19
19
|
align-items: center;
|
|
20
20
|
justify-content: center;
|
|
21
|
-
width: 16px;
|
|
21
|
+
min-width: 16px;
|
|
22
22
|
margin: var(--gap-0) var(--gap-8);
|
|
23
23
|
}
|
|
24
|
-
.calendar-
|
|
24
|
+
.calendar-range__component_a3a4p:after {
|
|
25
25
|
content: '';
|
|
26
26
|
display: block;
|
|
27
27
|
width: 100%;
|
|
28
28
|
height: 1px;
|
|
29
29
|
background-color: var(--color-light-neutral-translucent-1300);
|
|
30
30
|
}
|
|
31
|
-
.calendar-
|
|
31
|
+
.calendar-range__outer_a3a4p {
|
|
32
32
|
position: relative;
|
|
33
33
|
top: var(--gap-24);
|
|
34
34
|
}
|
|
35
|
-
.calendar-
|
|
35
|
+
.calendar-range__size48_a3a4p {
|
|
36
36
|
height: var(--size-s-height);
|
|
37
37
|
}
|
|
38
|
-
.calendar-
|
|
38
|
+
.calendar-range__size56_a3a4p {
|
|
39
39
|
height: var(--size-m-height);
|
|
40
40
|
}
|
|
41
|
-
.calendar-
|
|
41
|
+
.calendar-range__size64_a3a4p {
|
|
42
42
|
height: var(--size-l-height);
|
|
43
43
|
}
|
|
44
|
-
.calendar-
|
|
44
|
+
.calendar-range__size72_a3a4p {
|
|
45
45
|
height: var(--size-xl-height);
|
|
46
46
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './index.css';
|
|
2
2
|
|
|
3
|
-
var styles = {"component":"calendar-
|
|
3
|
+
var styles = {"component":"calendar-range__component_a3a4p","outer":"calendar-range__outer_a3a4p","size48":"calendar-range__size48_a3a4p","size56":"calendar-range__size56_a3a4p","size64":"calendar-range__size64_a3a4p","size72":"calendar-range__size72_a3a4p"};
|
|
4
4
|
|
|
5
5
|
export { styles as default };
|
|
6
6
|
//# sourceMappingURL=index.module.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.module.css.js","sources":["../../src/components/divider/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n@import '../../../../calendar/src/vars.css';\n\n.component {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n margin: var(--gap-0) var(--gap-8);\n\n &:after {\n content: '';\n display: block;\n width: 100%;\n height: 1px;\n background-color: var(--color-light-neutral-translucent-1300);\n }\n}\n\n.outer {\n position: relative;\n\n /* FormControl .above height + margin-bottom */\n top: var(--gap-24);\n}\n\n.size48 {\n height: var(--size-s-height);\n}\n\n.size56 {\n height: var(--size-m-height);\n}\n\n.size64 {\n height: var(--size-l-height);\n}\n\n.size72 {\n height: var(--size-xl-height);\n}\n"],"names":[],"mappings":";;AAEgB,aAAe,CAAC,WAAW,CAAC,iCAAiC,CAAC,OAAO,CAAC,6BAA6B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"index.module.css.js","sources":["../../src/components/divider/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n@import '../../../../calendar/src/vars.css';\n\n.component {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n margin: var(--gap-0) var(--gap-8);\n\n &:after {\n content: '';\n display: block;\n width: 100%;\n height: 1px;\n background-color: var(--color-light-neutral-translucent-1300);\n }\n}\n\n.outer {\n position: relative;\n\n /* FormControl .above height + margin-bottom */\n top: var(--gap-24);\n}\n\n.size48 {\n height: var(--size-s-height);\n}\n\n.size56 {\n height: var(--size-m-height);\n}\n\n.size64 {\n height: var(--size-l-height);\n}\n\n.size72 {\n height: var(--size-xl-height);\n}\n"],"names":[],"mappings":";;AAEgB,aAAe,CAAC,WAAW,CAAC,iCAAiC,CAAC,OAAO,CAAC,6BAA6B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC,QAAQ,CAAC,8BAA8B,CAAC;;;;"}
|
package/esm/hooks.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
1
2
|
export declare function usePopoverViewMonthes({ dateFrom, dateTo, defaultMonth, resetKey, }: {
|
|
2
3
|
defaultMonth: number;
|
|
3
4
|
dateFrom: number | null;
|
|
@@ -25,3 +26,33 @@ export declare function useSelectionProps(from?: number, to?: number, highlighte
|
|
|
25
26
|
selectedFrom: number | undefined;
|
|
26
27
|
selectedTo: number | undefined;
|
|
27
28
|
};
|
|
29
|
+
interface UseStaticRangeAutoSwapParams {
|
|
30
|
+
autoSwap: boolean;
|
|
31
|
+
setInputFromValue: React.Dispatch<React.SetStateAction<string>>;
|
|
32
|
+
setInputToValue: React.Dispatch<React.SetStateAction<string>>;
|
|
33
|
+
toggleCorrectionFromRef: RefObject<CorrectionToggleRef>;
|
|
34
|
+
toggleCorrectionToRef: RefObject<CorrectionToggleRef>;
|
|
35
|
+
inputFromRef: RefObject<HTMLInputElement>;
|
|
36
|
+
inputToRef: RefObject<HTMLInputElement>;
|
|
37
|
+
}
|
|
38
|
+
type CorrectionToggleRef = {
|
|
39
|
+
handleCorrection: () => void;
|
|
40
|
+
};
|
|
41
|
+
export declare const useStaticRangeAutoSwap: ({ autoSwap, setInputFromValue, setInputToValue, toggleCorrectionFromRef, toggleCorrectionToRef, inputFromRef, inputToRef, }: UseStaticRangeAutoSwapParams) => {
|
|
42
|
+
swapDates: (newValue: string, inputFromValue: string, inputToValue: string) => void;
|
|
43
|
+
isInternalUpdate: import("react").MutableRefObject<boolean>;
|
|
44
|
+
};
|
|
45
|
+
interface UseInputValidationParams {
|
|
46
|
+
inputFromValue: string;
|
|
47
|
+
inputToValue: string;
|
|
48
|
+
minDate: number;
|
|
49
|
+
maxDate: number;
|
|
50
|
+
offDays: Array<number | Date>;
|
|
51
|
+
}
|
|
52
|
+
interface InputValidationResult {
|
|
53
|
+
inputFromError: boolean;
|
|
54
|
+
inputToError: boolean;
|
|
55
|
+
rangeError: boolean;
|
|
56
|
+
}
|
|
57
|
+
export declare const useInputValidation: ({ inputFromValue, inputToValue, minDate, maxDate, offDays, }: UseInputValidationParams) => InputValidationResult;
|
|
58
|
+
export {};
|
package/esm/hooks.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
1
|
+
import { useState, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
2
2
|
import { startOfMonth, max, addMonths, subMonths, isEqual, min } from 'date-fns';
|
|
3
|
+
import { isValidInputValue, parseDateString } from '@alfalab/core-components-calendar-input/esm/shared';
|
|
4
|
+
import { isCompleteDateInput } from '@alfalab/core-components-date-input/esm';
|
|
3
5
|
|
|
4
6
|
function usePopoverViewMonthes(_a) {
|
|
5
7
|
var dateFrom = _a.dateFrom, dateTo = _a.dateTo, defaultMonth = _a.defaultMonth, resetKey = _a.resetKey;
|
|
@@ -129,6 +131,86 @@ function useSelectionProps(from, to, highlighted) {
|
|
|
129
131
|
};
|
|
130
132
|
}, [from, highlighted, to]);
|
|
131
133
|
}
|
|
134
|
+
var useStaticRangeAutoSwap = function (_a) {
|
|
135
|
+
var autoSwap = _a.autoSwap, setInputFromValue = _a.setInputFromValue, setInputToValue = _a.setInputToValue, toggleCorrectionFromRef = _a.toggleCorrectionFromRef, toggleCorrectionToRef = _a.toggleCorrectionToRef, inputFromRef = _a.inputFromRef, inputToRef = _a.inputToRef;
|
|
136
|
+
var isInternalUpdate = useRef(false);
|
|
137
|
+
var swapDates = function (newValue, inputFromValue, inputToValue) {
|
|
138
|
+
var _a, _b, _c, _d;
|
|
139
|
+
if (!autoSwap)
|
|
140
|
+
return;
|
|
141
|
+
if (isCompleteDateInput(newValue) &&
|
|
142
|
+
isCompleteDateInput(inputToValue) &&
|
|
143
|
+
parseDateString(newValue).getTime() > parseDateString(inputToValue).getTime()) {
|
|
144
|
+
if (inputFromValue !== inputToValue) {
|
|
145
|
+
isInternalUpdate.current = true;
|
|
146
|
+
setInputFromValue(inputToValue);
|
|
147
|
+
setInputToValue(newValue);
|
|
148
|
+
(_a = toggleCorrectionFromRef.current) === null || _a === void 0 ? void 0 : _a.handleCorrection();
|
|
149
|
+
(_b = toggleCorrectionToRef.current) === null || _b === void 0 ? void 0 : _b.handleCorrection();
|
|
150
|
+
setTimeout(function () {
|
|
151
|
+
var _a;
|
|
152
|
+
(_a = inputToRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
153
|
+
}, 0);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (isCompleteDateInput(newValue) &&
|
|
157
|
+
isCompleteDateInput(inputFromValue) &&
|
|
158
|
+
parseDateString(newValue).getTime() < parseDateString(inputFromValue).getTime()) {
|
|
159
|
+
if (inputToValue !== inputFromValue) {
|
|
160
|
+
isInternalUpdate.current = true;
|
|
161
|
+
setInputToValue(inputFromValue);
|
|
162
|
+
setInputFromValue(newValue);
|
|
163
|
+
(_c = toggleCorrectionFromRef.current) === null || _c === void 0 ? void 0 : _c.handleCorrection();
|
|
164
|
+
(_d = toggleCorrectionToRef.current) === null || _d === void 0 ? void 0 : _d.handleCorrection();
|
|
165
|
+
setTimeout(function () {
|
|
166
|
+
var _a;
|
|
167
|
+
(_a = inputFromRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
168
|
+
}, 0);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
return { swapDates: swapDates, isInternalUpdate: isInternalUpdate };
|
|
173
|
+
};
|
|
174
|
+
var useInputValidation = function (_a) {
|
|
175
|
+
var inputFromValue = _a.inputFromValue, inputToValue = _a.inputToValue, minDate = _a.minDate, maxDate = _a.maxDate, offDays = _a.offDays;
|
|
176
|
+
var _b = useState({
|
|
177
|
+
inputFromError: false,
|
|
178
|
+
inputToError: false,
|
|
179
|
+
rangeError: false,
|
|
180
|
+
}), validationResult = _b[0], setValidationResult = _b[1];
|
|
181
|
+
useEffect(function () {
|
|
182
|
+
var isInputFromValueComplete = isCompleteDateInput(inputFromValue);
|
|
183
|
+
var isInputToValueComplete = isCompleteDateInput(inputToValue);
|
|
184
|
+
var individualInputFromError = false;
|
|
185
|
+
var individualInputToError = false;
|
|
186
|
+
if (isInputFromValueComplete) {
|
|
187
|
+
individualInputFromError = !isValidInputValue(inputFromValue, minDate, maxDate, offDays);
|
|
188
|
+
}
|
|
189
|
+
if (isInputToValueComplete) {
|
|
190
|
+
individualInputToError = !isValidInputValue(inputToValue, minDate, maxDate, offDays);
|
|
191
|
+
}
|
|
192
|
+
var rangeError = false;
|
|
193
|
+
var parsedDateFrom = isInputFromValueComplete ? parseDateString(inputFromValue) : null;
|
|
194
|
+
var parsedDateTo = isInputToValueComplete ? parseDateString(inputToValue) : null;
|
|
195
|
+
var isParsedDateFromValid = parsedDateFrom &&
|
|
196
|
+
!Number.isNaN(parsedDateFrom.getTime()) &&
|
|
197
|
+
isValidInputValue(inputFromValue, minDate, maxDate, offDays);
|
|
198
|
+
var isParsedDateToValid = parsedDateTo &&
|
|
199
|
+
!Number.isNaN(parsedDateTo.getTime()) &&
|
|
200
|
+
isValidInputValue(inputToValue, minDate, maxDate, offDays);
|
|
201
|
+
if (isParsedDateFromValid &&
|
|
202
|
+
isParsedDateToValid &&
|
|
203
|
+
parsedDateFrom.getTime() > parsedDateTo.getTime()) {
|
|
204
|
+
rangeError = true;
|
|
205
|
+
}
|
|
206
|
+
setValidationResult({
|
|
207
|
+
inputFromError: individualInputFromError || rangeError,
|
|
208
|
+
inputToError: individualInputToError || rangeError,
|
|
209
|
+
rangeError: rangeError,
|
|
210
|
+
});
|
|
211
|
+
}, [inputFromValue, inputToValue, minDate, maxDate, offDays]);
|
|
212
|
+
return validationResult;
|
|
213
|
+
};
|
|
132
214
|
|
|
133
|
-
export { usePopoverViewMonthes, useSelectionProps, useStaticViewMonthes };
|
|
215
|
+
export { useInputValidation, usePopoverViewMonthes, useSelectionProps, useStaticRangeAutoSwap, useStaticViewMonthes };
|
|
134
216
|
//# sourceMappingURL=hooks.js.map
|