@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/hooks.js
CHANGED
|
@@ -4,6 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var dateFns = require('date-fns');
|
|
7
|
+
var shared = require('@alfalab/core-components-calendar-input/shared');
|
|
8
|
+
var coreComponentsDateInput = require('@alfalab/core-components-date-input');
|
|
7
9
|
|
|
8
10
|
function usePopoverViewMonthes(_a) {
|
|
9
11
|
var dateFrom = _a.dateFrom, dateTo = _a.dateTo, defaultMonth = _a.defaultMonth, resetKey = _a.resetKey;
|
|
@@ -133,8 +135,90 @@ function useSelectionProps(from, to, highlighted) {
|
|
|
133
135
|
};
|
|
134
136
|
}, [from, highlighted, to]);
|
|
135
137
|
}
|
|
138
|
+
var useStaticRangeAutoSwap = function (_a) {
|
|
139
|
+
var autoSwap = _a.autoSwap, setInputFromValue = _a.setInputFromValue, setInputToValue = _a.setInputToValue, toggleCorrectionFromRef = _a.toggleCorrectionFromRef, toggleCorrectionToRef = _a.toggleCorrectionToRef, inputFromRef = _a.inputFromRef, inputToRef = _a.inputToRef;
|
|
140
|
+
var isInternalUpdate = React.useRef(false);
|
|
141
|
+
var swapDates = function (newValue, inputFromValue, inputToValue) {
|
|
142
|
+
var _a, _b, _c, _d;
|
|
143
|
+
if (!autoSwap)
|
|
144
|
+
return;
|
|
145
|
+
if (coreComponentsDateInput.isCompleteDateInput(newValue) &&
|
|
146
|
+
coreComponentsDateInput.isCompleteDateInput(inputToValue) &&
|
|
147
|
+
shared.parseDateString(newValue).getTime() > shared.parseDateString(inputToValue).getTime()) {
|
|
148
|
+
if (inputFromValue !== inputToValue) {
|
|
149
|
+
isInternalUpdate.current = true;
|
|
150
|
+
setInputFromValue(inputToValue);
|
|
151
|
+
setInputToValue(newValue);
|
|
152
|
+
(_a = toggleCorrectionFromRef.current) === null || _a === void 0 ? void 0 : _a.handleCorrection();
|
|
153
|
+
(_b = toggleCorrectionToRef.current) === null || _b === void 0 ? void 0 : _b.handleCorrection();
|
|
154
|
+
setTimeout(function () {
|
|
155
|
+
var _a;
|
|
156
|
+
(_a = inputToRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
157
|
+
}, 0);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (coreComponentsDateInput.isCompleteDateInput(newValue) &&
|
|
161
|
+
coreComponentsDateInput.isCompleteDateInput(inputFromValue) &&
|
|
162
|
+
shared.parseDateString(newValue).getTime() < shared.parseDateString(inputFromValue).getTime()) {
|
|
163
|
+
if (inputToValue !== inputFromValue) {
|
|
164
|
+
isInternalUpdate.current = true;
|
|
165
|
+
setInputToValue(inputFromValue);
|
|
166
|
+
setInputFromValue(newValue);
|
|
167
|
+
(_c = toggleCorrectionFromRef.current) === null || _c === void 0 ? void 0 : _c.handleCorrection();
|
|
168
|
+
(_d = toggleCorrectionToRef.current) === null || _d === void 0 ? void 0 : _d.handleCorrection();
|
|
169
|
+
setTimeout(function () {
|
|
170
|
+
var _a;
|
|
171
|
+
(_a = inputFromRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
172
|
+
}, 0);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
return { swapDates: swapDates, isInternalUpdate: isInternalUpdate };
|
|
177
|
+
};
|
|
178
|
+
var useInputValidation = function (_a) {
|
|
179
|
+
var inputFromValue = _a.inputFromValue, inputToValue = _a.inputToValue, minDate = _a.minDate, maxDate = _a.maxDate, offDays = _a.offDays;
|
|
180
|
+
var _b = React.useState({
|
|
181
|
+
inputFromError: false,
|
|
182
|
+
inputToError: false,
|
|
183
|
+
rangeError: false,
|
|
184
|
+
}), validationResult = _b[0], setValidationResult = _b[1];
|
|
185
|
+
React.useEffect(function () {
|
|
186
|
+
var isInputFromValueComplete = coreComponentsDateInput.isCompleteDateInput(inputFromValue);
|
|
187
|
+
var isInputToValueComplete = coreComponentsDateInput.isCompleteDateInput(inputToValue);
|
|
188
|
+
var individualInputFromError = false;
|
|
189
|
+
var individualInputToError = false;
|
|
190
|
+
if (isInputFromValueComplete) {
|
|
191
|
+
individualInputFromError = !shared.isValidInputValue(inputFromValue, minDate, maxDate, offDays);
|
|
192
|
+
}
|
|
193
|
+
if (isInputToValueComplete) {
|
|
194
|
+
individualInputToError = !shared.isValidInputValue(inputToValue, minDate, maxDate, offDays);
|
|
195
|
+
}
|
|
196
|
+
var rangeError = false;
|
|
197
|
+
var parsedDateFrom = isInputFromValueComplete ? shared.parseDateString(inputFromValue) : null;
|
|
198
|
+
var parsedDateTo = isInputToValueComplete ? shared.parseDateString(inputToValue) : null;
|
|
199
|
+
var isParsedDateFromValid = parsedDateFrom &&
|
|
200
|
+
!Number.isNaN(parsedDateFrom.getTime()) &&
|
|
201
|
+
shared.isValidInputValue(inputFromValue, minDate, maxDate, offDays);
|
|
202
|
+
var isParsedDateToValid = parsedDateTo &&
|
|
203
|
+
!Number.isNaN(parsedDateTo.getTime()) &&
|
|
204
|
+
shared.isValidInputValue(inputToValue, minDate, maxDate, offDays);
|
|
205
|
+
if (isParsedDateFromValid &&
|
|
206
|
+
isParsedDateToValid &&
|
|
207
|
+
parsedDateFrom.getTime() > parsedDateTo.getTime()) {
|
|
208
|
+
rangeError = true;
|
|
209
|
+
}
|
|
210
|
+
setValidationResult({
|
|
211
|
+
inputFromError: individualInputFromError || rangeError,
|
|
212
|
+
inputToError: individualInputToError || rangeError,
|
|
213
|
+
rangeError: rangeError,
|
|
214
|
+
});
|
|
215
|
+
}, [inputFromValue, inputToValue, minDate, maxDate, offDays]);
|
|
216
|
+
return validationResult;
|
|
217
|
+
};
|
|
136
218
|
|
|
219
|
+
exports.useInputValidation = useInputValidation;
|
|
137
220
|
exports.usePopoverViewMonthes = usePopoverViewMonthes;
|
|
138
221
|
exports.useSelectionProps = useSelectionProps;
|
|
222
|
+
exports.useStaticRangeAutoSwap = useStaticRangeAutoSwap;
|
|
139
223
|
exports.useStaticViewMonthes = useStaticViewMonthes;
|
|
140
224
|
//# sourceMappingURL=hooks.js.map
|
package/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["src/hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { addMonths, isEqual, max, min, startOfMonth, subMonths } from 'date-fns';\n\nexport function usePopoverViewMonthes({\n dateFrom,\n dateTo,\n defaultMonth,\n resetKey,\n}: {\n defaultMonth: number;\n dateFrom: number | null;\n dateTo: number | null;\n resetKey?: number;\n}) {\n const [monthFrom, setMonthFrom] = useState<number>();\n const [monthTo, setMonthTo] = useState<number>();\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (!dateTo) {\n setMonthTo(newMonthFrom);\n }\n },\n [dateTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (!dateFrom) {\n setMonthFrom(newMonthTo);\n }\n },\n [dateFrom],\n );\n\n useEffect(() => {\n setMonthFrom(dateFrom ? startOfMonth(dateFrom).getTime() : defaultMonth);\n }, [defaultMonth, dateFrom, resetKey]);\n\n useEffect(() => {\n setMonthTo(dateTo ? startOfMonth(dateTo).getTime() : monthFrom);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dateTo, resetKey]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useStaticViewMonthes({\n selectedFrom,\n selectedTo,\n defaultMonth,\n defaultMonthPosition,\n}: {\n selectedFrom?: number;\n selectedTo?: number;\n defaultMonth: number;\n defaultMonthPosition?: 'left' | 'right';\n}) {\n /**\n * Если указана начальная дата — левый месяц равен ей, иначе используется дата конца.\n * Если обе даты не указаны, то используется дефолтный месяц\n */\n let initialMonthFrom = useMemo(\n () => startOfMonth(selectedFrom || selectedTo || defaultMonth).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n /**\n * Правый месяц должен быть как минимум на 1 месяц больше левого\n */\n let initialMonthTo = useMemo(\n () =>\n max([\n selectedTo ? startOfMonth(selectedTo) : 0,\n addMonths(initialMonthFrom, 1),\n ]).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n if (defaultMonthPosition === 'right') {\n initialMonthTo = initialMonthFrom;\n initialMonthFrom = subMonths(initialMonthFrom, 1).getTime();\n }\n\n const [monthFrom, setMonthFrom] = useState<number>(initialMonthFrom);\n const [monthTo, setMonthTo] = useState<number>(initialMonthTo);\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (monthTo && isEqual(newMonthFrom, monthTo)) {\n const nextMonth = addMonths(newMonthFrom, 1).getTime();\n\n setMonthTo(nextMonth);\n }\n },\n [monthTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (monthFrom && isEqual(newMonthTo, monthFrom)) {\n const prevMonth = subMonths(newMonthTo, 1).getTime();\n\n setMonthFrom(prevMonth);\n }\n },\n [monthFrom],\n );\n\n // eslint-disable-next-line complexity\n useEffect(() => {\n const selectedFromMonth = selectedFrom ? startOfMonth(selectedFrom).getTime() : undefined;\n const selectedToMonth = selectedTo ? startOfMonth(selectedTo).getTime() : undefined;\n\n // Проверяем, показываются ли выбранные месяцы в левой или правой части компонента\n const fromMonthOnLeft = selectedFromMonth && selectedFromMonth === monthFrom;\n const fromMonthOnRight = selectedFromMonth && selectedFromMonth === monthTo;\n const toMonthOnRight = selectedToMonth && selectedToMonth === monthTo;\n const toMonthOnLeft = selectedToMonth && selectedToMonth === monthFrom;\n const fromMonthOnScreen = fromMonthOnLeft || fromMonthOnRight;\n const toMonthOnScreen = toMonthOnLeft || toMonthOnRight;\n\n if (fromMonthOnLeft && toMonthOnLeft) {\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n\n return;\n }\n\n if (fromMonthOnRight && toMonthOnRight) {\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && selectedToMonth) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), selectedToMonth]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && !selectedToMonth && !fromMonthOnScreen) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n }\n\n if (selectedToMonth && !selectedFromMonth && !toMonthOnScreen) {\n setMonthTo(selectedToMonth);\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedFrom, selectedTo]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useSelectionProps(from?: number, to?: number, highlighted?: number) {\n return useMemo(() => {\n if (from && to) {\n return {\n rangeComplete: true,\n selectedFrom: min([from, to]).getTime(),\n selectedTo: max([from, to]).getTime(),\n };\n }\n\n const dates = [from, to, highlighted].filter((date) => date !== undefined);\n\n return {\n rangeComplete: false,\n selectedFrom: from || dates.length === 2 ? min(dates).getTime() : undefined,\n selectedTo: to || dates.length === 2 ? max(dates).getTime() : undefined,\n };\n }, [from, highlighted, to]);\n}\n"],"names":["useState","useCallback","useEffect","startOfMonth","useMemo","max","addMonths","subMonths","isEqual","min"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["src/hooks.ts"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { addMonths, isEqual, max, min, startOfMonth, subMonths } from 'date-fns';\n\nimport { isValidInputValue, parseDateString } from '@alfalab/core-components-calendar-input/shared';\nimport { isCompleteDateInput } from '@alfalab/core-components-date-input';\n\nexport function usePopoverViewMonthes({\n dateFrom,\n dateTo,\n defaultMonth,\n resetKey,\n}: {\n defaultMonth: number;\n dateFrom: number | null;\n dateTo: number | null;\n resetKey?: number;\n}) {\n const [monthFrom, setMonthFrom] = useState<number>();\n const [monthTo, setMonthTo] = useState<number>();\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (!dateTo) {\n setMonthTo(newMonthFrom);\n }\n },\n [dateTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (!dateFrom) {\n setMonthFrom(newMonthTo);\n }\n },\n [dateFrom],\n );\n\n useEffect(() => {\n setMonthFrom(dateFrom ? startOfMonth(dateFrom).getTime() : defaultMonth);\n }, [defaultMonth, dateFrom, resetKey]);\n\n useEffect(() => {\n setMonthTo(dateTo ? startOfMonth(dateTo).getTime() : monthFrom);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dateTo, resetKey]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useStaticViewMonthes({\n selectedFrom,\n selectedTo,\n defaultMonth,\n defaultMonthPosition,\n}: {\n selectedFrom?: number;\n selectedTo?: number;\n defaultMonth: number;\n defaultMonthPosition?: 'left' | 'right';\n}) {\n /**\n * Если указана начальная дата — левый месяц равен ей, иначе используется дата конца.\n * Если обе даты не указаны, то используется дефолтный месяц\n */\n let initialMonthFrom = useMemo(\n () => startOfMonth(selectedFrom || selectedTo || defaultMonth).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n /**\n * Правый месяц должен быть как минимум на 1 месяц больше левого\n */\n let initialMonthTo = useMemo(\n () =>\n max([\n selectedTo ? startOfMonth(selectedTo) : 0,\n addMonths(initialMonthFrom, 1),\n ]).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n if (defaultMonthPosition === 'right') {\n initialMonthTo = initialMonthFrom;\n initialMonthFrom = subMonths(initialMonthFrom, 1).getTime();\n }\n\n const [monthFrom, setMonthFrom] = useState<number>(initialMonthFrom);\n const [monthTo, setMonthTo] = useState<number>(initialMonthTo);\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (monthTo && isEqual(newMonthFrom, monthTo)) {\n const nextMonth = addMonths(newMonthFrom, 1).getTime();\n\n setMonthTo(nextMonth);\n }\n },\n [monthTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (monthFrom && isEqual(newMonthTo, monthFrom)) {\n const prevMonth = subMonths(newMonthTo, 1).getTime();\n\n setMonthFrom(prevMonth);\n }\n },\n [monthFrom],\n );\n\n // eslint-disable-next-line complexity\n useEffect(() => {\n const selectedFromMonth = selectedFrom ? startOfMonth(selectedFrom).getTime() : undefined;\n const selectedToMonth = selectedTo ? startOfMonth(selectedTo).getTime() : undefined;\n\n // Проверяем, показываются ли выбранные месяцы в левой или правой части компонента\n const fromMonthOnLeft = selectedFromMonth && selectedFromMonth === monthFrom;\n const fromMonthOnRight = selectedFromMonth && selectedFromMonth === monthTo;\n const toMonthOnRight = selectedToMonth && selectedToMonth === monthTo;\n const toMonthOnLeft = selectedToMonth && selectedToMonth === monthFrom;\n const fromMonthOnScreen = fromMonthOnLeft || fromMonthOnRight;\n const toMonthOnScreen = toMonthOnLeft || toMonthOnRight;\n\n if (fromMonthOnLeft && toMonthOnLeft) {\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n\n return;\n }\n\n if (fromMonthOnRight && toMonthOnRight) {\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && selectedToMonth) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), selectedToMonth]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && !selectedToMonth && !fromMonthOnScreen) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n }\n\n if (selectedToMonth && !selectedFromMonth && !toMonthOnScreen) {\n setMonthTo(selectedToMonth);\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedFrom, selectedTo]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useSelectionProps(from?: number, to?: number, highlighted?: number) {\n return useMemo(() => {\n if (from && to) {\n return {\n rangeComplete: true,\n selectedFrom: min([from, to]).getTime(),\n selectedTo: max([from, to]).getTime(),\n };\n }\n\n const dates = [from, to, highlighted].filter((date) => date !== undefined);\n\n return {\n rangeComplete: false,\n selectedFrom: from || dates.length === 2 ? min(dates).getTime() : undefined,\n selectedTo: to || dates.length === 2 ? max(dates).getTime() : undefined,\n };\n }, [from, highlighted, to]);\n}\n\ninterface UseStaticRangeAutoSwapParams {\n autoSwap: boolean;\n setInputFromValue: React.Dispatch<React.SetStateAction<string>>;\n setInputToValue: React.Dispatch<React.SetStateAction<string>>;\n toggleCorrectionFromRef: RefObject<CorrectionToggleRef>;\n toggleCorrectionToRef: RefObject<CorrectionToggleRef>;\n inputFromRef: RefObject<HTMLInputElement>;\n inputToRef: RefObject<HTMLInputElement>;\n}\n\ntype CorrectionToggleRef = { handleCorrection: () => void };\n\nexport const useStaticRangeAutoSwap = ({\n autoSwap,\n setInputFromValue,\n setInputToValue,\n toggleCorrectionFromRef,\n toggleCorrectionToRef,\n inputFromRef,\n inputToRef,\n}: UseStaticRangeAutoSwapParams) => {\n const isInternalUpdate = useRef(false);\n\n const swapDates = (newValue: string, inputFromValue: string, inputToValue: string) => {\n if (!autoSwap) return;\n\n if (\n isCompleteDateInput(newValue) &&\n isCompleteDateInput(inputToValue) &&\n parseDateString(newValue).getTime() > parseDateString(inputToValue).getTime()\n ) {\n if (inputFromValue !== inputToValue) {\n isInternalUpdate.current = true;\n setInputFromValue(inputToValue);\n setInputToValue(newValue);\n\n toggleCorrectionFromRef.current?.handleCorrection();\n toggleCorrectionToRef.current?.handleCorrection();\n\n setTimeout(() => {\n inputToRef.current?.focus();\n }, 0);\n }\n }\n if (\n isCompleteDateInput(newValue) &&\n isCompleteDateInput(inputFromValue) &&\n parseDateString(newValue).getTime() < parseDateString(inputFromValue).getTime()\n ) {\n if (inputToValue !== inputFromValue) {\n isInternalUpdate.current = true;\n setInputToValue(inputFromValue);\n setInputFromValue(newValue);\n\n toggleCorrectionFromRef.current?.handleCorrection();\n toggleCorrectionToRef.current?.handleCorrection();\n\n setTimeout(() => {\n inputFromRef.current?.focus();\n }, 0);\n }\n }\n };\n\n return { swapDates, isInternalUpdate };\n};\n\ninterface UseInputValidationParams {\n inputFromValue: string;\n inputToValue: string;\n minDate: number;\n maxDate: number;\n offDays: Array<number | Date>;\n}\n\ninterface InputValidationResult {\n inputFromError: boolean;\n inputToError: boolean;\n rangeError: boolean;\n}\n\nexport const useInputValidation = ({\n inputFromValue,\n inputToValue,\n minDate,\n maxDate,\n offDays,\n}: UseInputValidationParams): InputValidationResult => {\n const [validationResult, setValidationResult] = useState<InputValidationResult>({\n inputFromError: false,\n inputToError: false,\n rangeError: false,\n });\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 rangeError = false;\n\n const parsedDateFrom = isInputFromValueComplete ? parseDateString(inputFromValue) : null;\n const parsedDateTo = isInputToValueComplete ? parseDateString(inputToValue) : null;\n\n const isParsedDateFromValid =\n parsedDateFrom &&\n !Number.isNaN(parsedDateFrom.getTime()) &&\n isValidInputValue(inputFromValue, minDate, maxDate, offDays);\n const isParsedDateToValid =\n parsedDateTo &&\n !Number.isNaN(parsedDateTo.getTime()) &&\n isValidInputValue(inputToValue, minDate, maxDate, offDays);\n\n if (\n isParsedDateFromValid &&\n isParsedDateToValid &&\n parsedDateFrom.getTime() > parsedDateTo.getTime()\n ) {\n rangeError = true;\n }\n\n setValidationResult({\n inputFromError: individualInputFromError || rangeError,\n inputToError: individualInputToError || rangeError,\n rangeError,\n });\n }, [inputFromValue, inputToValue, minDate, maxDate, offDays]);\n\n return validationResult;\n};\n"],"names":["useState","useCallback","useEffect","startOfMonth","useMemo","max","addMonths","subMonths","isEqual","min","useRef","isCompleteDateInput","parseDateString","isValidInputValue"],"mappings":"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"}
|
package/modern/Component.d.ts
CHANGED
package/modern/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,MAAM,aAAa,GAA2B,CAAC,EAClD,gBAAgB,GAAG,QAAQ,EAC3B,GAAG,SAAS,EACf,KAAI;AACD,IAAA,MAAM,IAAI,GAAG,gBAAgB,KAAK,SAAS,GAAG,oBAAoB,GAAG,mBAAmB;AAExF,IAAA,OAAO,KAAC,CAAA,aAAA,CAAA,IAAI,EAAK,EAAA,GAAA,SAAS,GAAI;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
|
-
const styles = {"component":"calendar-
|
|
3
|
+
const 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,eAAe,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,eAAe,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/modern/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/modern/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/modern/shared';
|
|
4
|
+
import { isCompleteDateInput } from '@alfalab/core-components-date-input/modern';
|
|
3
5
|
|
|
4
6
|
function usePopoverViewMonthes({ dateFrom, dateTo, defaultMonth, resetKey, }) {
|
|
5
7
|
const [monthFrom, setMonthFrom] = useState();
|
|
@@ -125,6 +127,81 @@ function useSelectionProps(from, to, highlighted) {
|
|
|
125
127
|
};
|
|
126
128
|
}, [from, highlighted, to]);
|
|
127
129
|
}
|
|
130
|
+
const useStaticRangeAutoSwap = ({ autoSwap, setInputFromValue, setInputToValue, toggleCorrectionFromRef, toggleCorrectionToRef, inputFromRef, inputToRef, }) => {
|
|
131
|
+
const isInternalUpdate = useRef(false);
|
|
132
|
+
const swapDates = (newValue, inputFromValue, inputToValue) => {
|
|
133
|
+
if (!autoSwap)
|
|
134
|
+
return;
|
|
135
|
+
if (isCompleteDateInput(newValue) &&
|
|
136
|
+
isCompleteDateInput(inputToValue) &&
|
|
137
|
+
parseDateString(newValue).getTime() > parseDateString(inputToValue).getTime()) {
|
|
138
|
+
if (inputFromValue !== inputToValue) {
|
|
139
|
+
isInternalUpdate.current = true;
|
|
140
|
+
setInputFromValue(inputToValue);
|
|
141
|
+
setInputToValue(newValue);
|
|
142
|
+
toggleCorrectionFromRef.current?.handleCorrection();
|
|
143
|
+
toggleCorrectionToRef.current?.handleCorrection();
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
inputToRef.current?.focus();
|
|
146
|
+
}, 0);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (isCompleteDateInput(newValue) &&
|
|
150
|
+
isCompleteDateInput(inputFromValue) &&
|
|
151
|
+
parseDateString(newValue).getTime() < parseDateString(inputFromValue).getTime()) {
|
|
152
|
+
if (inputToValue !== inputFromValue) {
|
|
153
|
+
isInternalUpdate.current = true;
|
|
154
|
+
setInputToValue(inputFromValue);
|
|
155
|
+
setInputFromValue(newValue);
|
|
156
|
+
toggleCorrectionFromRef.current?.handleCorrection();
|
|
157
|
+
toggleCorrectionToRef.current?.handleCorrection();
|
|
158
|
+
setTimeout(() => {
|
|
159
|
+
inputFromRef.current?.focus();
|
|
160
|
+
}, 0);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
return { swapDates, isInternalUpdate };
|
|
165
|
+
};
|
|
166
|
+
const useInputValidation = ({ inputFromValue, inputToValue, minDate, maxDate, offDays, }) => {
|
|
167
|
+
const [validationResult, setValidationResult] = useState({
|
|
168
|
+
inputFromError: false,
|
|
169
|
+
inputToError: false,
|
|
170
|
+
rangeError: false,
|
|
171
|
+
});
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
const isInputFromValueComplete = isCompleteDateInput(inputFromValue);
|
|
174
|
+
const isInputToValueComplete = isCompleteDateInput(inputToValue);
|
|
175
|
+
let individualInputFromError = false;
|
|
176
|
+
let individualInputToError = false;
|
|
177
|
+
if (isInputFromValueComplete) {
|
|
178
|
+
individualInputFromError = !isValidInputValue(inputFromValue, minDate, maxDate, offDays);
|
|
179
|
+
}
|
|
180
|
+
if (isInputToValueComplete) {
|
|
181
|
+
individualInputToError = !isValidInputValue(inputToValue, minDate, maxDate, offDays);
|
|
182
|
+
}
|
|
183
|
+
let rangeError = false;
|
|
184
|
+
const parsedDateFrom = isInputFromValueComplete ? parseDateString(inputFromValue) : null;
|
|
185
|
+
const parsedDateTo = isInputToValueComplete ? parseDateString(inputToValue) : null;
|
|
186
|
+
const isParsedDateFromValid = parsedDateFrom &&
|
|
187
|
+
!Number.isNaN(parsedDateFrom.getTime()) &&
|
|
188
|
+
isValidInputValue(inputFromValue, minDate, maxDate, offDays);
|
|
189
|
+
const isParsedDateToValid = parsedDateTo &&
|
|
190
|
+
!Number.isNaN(parsedDateTo.getTime()) &&
|
|
191
|
+
isValidInputValue(inputToValue, minDate, maxDate, offDays);
|
|
192
|
+
if (isParsedDateFromValid &&
|
|
193
|
+
isParsedDateToValid &&
|
|
194
|
+
parsedDateFrom.getTime() > parsedDateTo.getTime()) {
|
|
195
|
+
rangeError = true;
|
|
196
|
+
}
|
|
197
|
+
setValidationResult({
|
|
198
|
+
inputFromError: individualInputFromError || rangeError,
|
|
199
|
+
inputToError: individualInputToError || rangeError,
|
|
200
|
+
rangeError,
|
|
201
|
+
});
|
|
202
|
+
}, [inputFromValue, inputToValue, minDate, maxDate, offDays]);
|
|
203
|
+
return validationResult;
|
|
204
|
+
};
|
|
128
205
|
|
|
129
|
-
export { usePopoverViewMonthes, useSelectionProps, useStaticViewMonthes };
|
|
206
|
+
export { useInputValidation, usePopoverViewMonthes, useSelectionProps, useStaticRangeAutoSwap, useStaticViewMonthes };
|
|
130
207
|
//# sourceMappingURL=hooks.js.map
|
package/modern/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../src/hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { addMonths, isEqual, max, min, startOfMonth, subMonths } from 'date-fns';\n\nexport function usePopoverViewMonthes({\n dateFrom,\n dateTo,\n defaultMonth,\n resetKey,\n}: {\n defaultMonth: number;\n dateFrom: number | null;\n dateTo: number | null;\n resetKey?: number;\n}) {\n const [monthFrom, setMonthFrom] = useState<number>();\n const [monthTo, setMonthTo] = useState<number>();\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (!dateTo) {\n setMonthTo(newMonthFrom);\n }\n },\n [dateTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (!dateFrom) {\n setMonthFrom(newMonthTo);\n }\n },\n [dateFrom],\n );\n\n useEffect(() => {\n setMonthFrom(dateFrom ? startOfMonth(dateFrom).getTime() : defaultMonth);\n }, [defaultMonth, dateFrom, resetKey]);\n\n useEffect(() => {\n setMonthTo(dateTo ? startOfMonth(dateTo).getTime() : monthFrom);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dateTo, resetKey]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useStaticViewMonthes({\n selectedFrom,\n selectedTo,\n defaultMonth,\n defaultMonthPosition,\n}: {\n selectedFrom?: number;\n selectedTo?: number;\n defaultMonth: number;\n defaultMonthPosition?: 'left' | 'right';\n}) {\n /**\n * Если указана начальная дата — левый месяц равен ей, иначе используется дата конца.\n * Если обе даты не указаны, то используется дефолтный месяц\n */\n let initialMonthFrom = useMemo(\n () => startOfMonth(selectedFrom || selectedTo || defaultMonth).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n /**\n * Правый месяц должен быть как минимум на 1 месяц больше левого\n */\n let initialMonthTo = useMemo(\n () =>\n max([\n selectedTo ? startOfMonth(selectedTo) : 0,\n addMonths(initialMonthFrom, 1),\n ]).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n if (defaultMonthPosition === 'right') {\n initialMonthTo = initialMonthFrom;\n initialMonthFrom = subMonths(initialMonthFrom, 1).getTime();\n }\n\n const [monthFrom, setMonthFrom] = useState<number>(initialMonthFrom);\n const [monthTo, setMonthTo] = useState<number>(initialMonthTo);\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (monthTo && isEqual(newMonthFrom, monthTo)) {\n const nextMonth = addMonths(newMonthFrom, 1).getTime();\n\n setMonthTo(nextMonth);\n }\n },\n [monthTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (monthFrom && isEqual(newMonthTo, monthFrom)) {\n const prevMonth = subMonths(newMonthTo, 1).getTime();\n\n setMonthFrom(prevMonth);\n }\n },\n [monthFrom],\n );\n\n // eslint-disable-next-line complexity\n useEffect(() => {\n const selectedFromMonth = selectedFrom ? startOfMonth(selectedFrom).getTime() : undefined;\n const selectedToMonth = selectedTo ? startOfMonth(selectedTo).getTime() : undefined;\n\n // Проверяем, показываются ли выбранные месяцы в левой или правой части компонента\n const fromMonthOnLeft = selectedFromMonth && selectedFromMonth === monthFrom;\n const fromMonthOnRight = selectedFromMonth && selectedFromMonth === monthTo;\n const toMonthOnRight = selectedToMonth && selectedToMonth === monthTo;\n const toMonthOnLeft = selectedToMonth && selectedToMonth === monthFrom;\n const fromMonthOnScreen = fromMonthOnLeft || fromMonthOnRight;\n const toMonthOnScreen = toMonthOnLeft || toMonthOnRight;\n\n if (fromMonthOnLeft && toMonthOnLeft) {\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n\n return;\n }\n\n if (fromMonthOnRight && toMonthOnRight) {\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && selectedToMonth) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), selectedToMonth]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && !selectedToMonth && !fromMonthOnScreen) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n }\n\n if (selectedToMonth && !selectedFromMonth && !toMonthOnScreen) {\n setMonthTo(selectedToMonth);\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedFrom, selectedTo]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useSelectionProps(from?: number, to?: number, highlighted?: number) {\n return useMemo(() => {\n if (from && to) {\n return {\n rangeComplete: true,\n selectedFrom: min([from, to]).getTime(),\n selectedTo: max([from, to]).getTime(),\n };\n }\n\n const dates = [from, to, highlighted].filter((date) => date !== undefined);\n\n return {\n rangeComplete: false,\n selectedFrom: from || dates.length === 2 ? min(dates).getTime() : undefined,\n selectedTo: to || dates.length === 2 ? max(dates).getTime() : undefined,\n };\n }, [from, highlighted, to]);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["../src/hooks.ts"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { addMonths, isEqual, max, min, startOfMonth, subMonths } from 'date-fns';\n\nimport { isValidInputValue, parseDateString } from '@alfalab/core-components-calendar-input/shared';\nimport { isCompleteDateInput } from '@alfalab/core-components-date-input';\n\nexport function usePopoverViewMonthes({\n dateFrom,\n dateTo,\n defaultMonth,\n resetKey,\n}: {\n defaultMonth: number;\n dateFrom: number | null;\n dateTo: number | null;\n resetKey?: number;\n}) {\n const [monthFrom, setMonthFrom] = useState<number>();\n const [monthTo, setMonthTo] = useState<number>();\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (!dateTo) {\n setMonthTo(newMonthFrom);\n }\n },\n [dateTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (!dateFrom) {\n setMonthFrom(newMonthTo);\n }\n },\n [dateFrom],\n );\n\n useEffect(() => {\n setMonthFrom(dateFrom ? startOfMonth(dateFrom).getTime() : defaultMonth);\n }, [defaultMonth, dateFrom, resetKey]);\n\n useEffect(() => {\n setMonthTo(dateTo ? startOfMonth(dateTo).getTime() : monthFrom);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dateTo, resetKey]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useStaticViewMonthes({\n selectedFrom,\n selectedTo,\n defaultMonth,\n defaultMonthPosition,\n}: {\n selectedFrom?: number;\n selectedTo?: number;\n defaultMonth: number;\n defaultMonthPosition?: 'left' | 'right';\n}) {\n /**\n * Если указана начальная дата — левый месяц равен ей, иначе используется дата конца.\n * Если обе даты не указаны, то используется дефолтный месяц\n */\n let initialMonthFrom = useMemo(\n () => startOfMonth(selectedFrom || selectedTo || defaultMonth).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n /**\n * Правый месяц должен быть как минимум на 1 месяц больше левого\n */\n let initialMonthTo = useMemo(\n () =>\n max([\n selectedTo ? startOfMonth(selectedTo) : 0,\n addMonths(initialMonthFrom, 1),\n ]).getTime(),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n if (defaultMonthPosition === 'right') {\n initialMonthTo = initialMonthFrom;\n initialMonthFrom = subMonths(initialMonthFrom, 1).getTime();\n }\n\n const [monthFrom, setMonthFrom] = useState<number>(initialMonthFrom);\n const [monthTo, setMonthTo] = useState<number>(initialMonthTo);\n\n const handleMonthFromChange = useCallback(\n (newMonthFrom: number) => {\n setMonthFrom(newMonthFrom);\n\n if (monthTo && isEqual(newMonthFrom, monthTo)) {\n const nextMonth = addMonths(newMonthFrom, 1).getTime();\n\n setMonthTo(nextMonth);\n }\n },\n [monthTo],\n );\n\n const handleMonthToChange = useCallback(\n (newMonthTo: number) => {\n setMonthTo(newMonthTo);\n\n if (monthFrom && isEqual(newMonthTo, monthFrom)) {\n const prevMonth = subMonths(newMonthTo, 1).getTime();\n\n setMonthFrom(prevMonth);\n }\n },\n [monthFrom],\n );\n\n // eslint-disable-next-line complexity\n useEffect(() => {\n const selectedFromMonth = selectedFrom ? startOfMonth(selectedFrom).getTime() : undefined;\n const selectedToMonth = selectedTo ? startOfMonth(selectedTo).getTime() : undefined;\n\n // Проверяем, показываются ли выбранные месяцы в левой или правой части компонента\n const fromMonthOnLeft = selectedFromMonth && selectedFromMonth === monthFrom;\n const fromMonthOnRight = selectedFromMonth && selectedFromMonth === monthTo;\n const toMonthOnRight = selectedToMonth && selectedToMonth === monthTo;\n const toMonthOnLeft = selectedToMonth && selectedToMonth === monthFrom;\n const fromMonthOnScreen = fromMonthOnLeft || fromMonthOnRight;\n const toMonthOnScreen = toMonthOnLeft || toMonthOnRight;\n\n if (fromMonthOnLeft && toMonthOnLeft) {\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n\n return;\n }\n\n if (fromMonthOnRight && toMonthOnRight) {\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && selectedToMonth) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), selectedToMonth]).getTime());\n\n return;\n }\n\n if (selectedFromMonth && !selectedToMonth && !fromMonthOnScreen) {\n setMonthFrom(selectedFromMonth);\n setMonthTo(max([addMonths(selectedFromMonth, 1), monthTo]).getTime());\n }\n\n if (selectedToMonth && !selectedFromMonth && !toMonthOnScreen) {\n setMonthTo(selectedToMonth);\n setMonthFrom(min([subMonths(selectedToMonth, 1), monthFrom]).getTime());\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedFrom, selectedTo]);\n\n return {\n monthFrom,\n monthTo,\n handleMonthFromChange,\n handleMonthToChange,\n };\n}\n\nexport function useSelectionProps(from?: number, to?: number, highlighted?: number) {\n return useMemo(() => {\n if (from && to) {\n return {\n rangeComplete: true,\n selectedFrom: min([from, to]).getTime(),\n selectedTo: max([from, to]).getTime(),\n };\n }\n\n const dates = [from, to, highlighted].filter((date) => date !== undefined);\n\n return {\n rangeComplete: false,\n selectedFrom: from || dates.length === 2 ? min(dates).getTime() : undefined,\n selectedTo: to || dates.length === 2 ? max(dates).getTime() : undefined,\n };\n }, [from, highlighted, to]);\n}\n\ninterface UseStaticRangeAutoSwapParams {\n autoSwap: boolean;\n setInputFromValue: React.Dispatch<React.SetStateAction<string>>;\n setInputToValue: React.Dispatch<React.SetStateAction<string>>;\n toggleCorrectionFromRef: RefObject<CorrectionToggleRef>;\n toggleCorrectionToRef: RefObject<CorrectionToggleRef>;\n inputFromRef: RefObject<HTMLInputElement>;\n inputToRef: RefObject<HTMLInputElement>;\n}\n\ntype CorrectionToggleRef = { handleCorrection: () => void };\n\nexport const useStaticRangeAutoSwap = ({\n autoSwap,\n setInputFromValue,\n setInputToValue,\n toggleCorrectionFromRef,\n toggleCorrectionToRef,\n inputFromRef,\n inputToRef,\n}: UseStaticRangeAutoSwapParams) => {\n const isInternalUpdate = useRef(false);\n\n const swapDates = (newValue: string, inputFromValue: string, inputToValue: string) => {\n if (!autoSwap) return;\n\n if (\n isCompleteDateInput(newValue) &&\n isCompleteDateInput(inputToValue) &&\n parseDateString(newValue).getTime() > parseDateString(inputToValue).getTime()\n ) {\n if (inputFromValue !== inputToValue) {\n isInternalUpdate.current = true;\n setInputFromValue(inputToValue);\n setInputToValue(newValue);\n\n toggleCorrectionFromRef.current?.handleCorrection();\n toggleCorrectionToRef.current?.handleCorrection();\n\n setTimeout(() => {\n inputToRef.current?.focus();\n }, 0);\n }\n }\n if (\n isCompleteDateInput(newValue) &&\n isCompleteDateInput(inputFromValue) &&\n parseDateString(newValue).getTime() < parseDateString(inputFromValue).getTime()\n ) {\n if (inputToValue !== inputFromValue) {\n isInternalUpdate.current = true;\n setInputToValue(inputFromValue);\n setInputFromValue(newValue);\n\n toggleCorrectionFromRef.current?.handleCorrection();\n toggleCorrectionToRef.current?.handleCorrection();\n\n setTimeout(() => {\n inputFromRef.current?.focus();\n }, 0);\n }\n }\n };\n\n return { swapDates, isInternalUpdate };\n};\n\ninterface UseInputValidationParams {\n inputFromValue: string;\n inputToValue: string;\n minDate: number;\n maxDate: number;\n offDays: Array<number | Date>;\n}\n\ninterface InputValidationResult {\n inputFromError: boolean;\n inputToError: boolean;\n rangeError: boolean;\n}\n\nexport const useInputValidation = ({\n inputFromValue,\n inputToValue,\n minDate,\n maxDate,\n offDays,\n}: UseInputValidationParams): InputValidationResult => {\n const [validationResult, setValidationResult] = useState<InputValidationResult>({\n inputFromError: false,\n inputToError: false,\n rangeError: false,\n });\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 rangeError = false;\n\n const parsedDateFrom = isInputFromValueComplete ? parseDateString(inputFromValue) : null;\n const parsedDateTo = isInputToValueComplete ? parseDateString(inputToValue) : null;\n\n const isParsedDateFromValid =\n parsedDateFrom &&\n !Number.isNaN(parsedDateFrom.getTime()) &&\n isValidInputValue(inputFromValue, minDate, maxDate, offDays);\n const isParsedDateToValid =\n parsedDateTo &&\n !Number.isNaN(parsedDateTo.getTime()) &&\n isValidInputValue(inputToValue, minDate, maxDate, offDays);\n\n if (\n isParsedDateFromValid &&\n isParsedDateToValid &&\n parsedDateFrom.getTime() > parsedDateTo.getTime()\n ) {\n rangeError = true;\n }\n\n setValidationResult({\n inputFromError: individualInputFromError || rangeError,\n inputToError: individualInputToError || rangeError,\n rangeError,\n });\n }, [inputFromValue, inputToValue, minDate, maxDate, offDays]);\n\n return validationResult;\n};\n"],"names":[],"mappings":"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"}
|
package/modern/views/index.css
CHANGED
|
@@ -1,32 +1,44 @@
|
|
|
1
1
|
:root {
|
|
2
2
|
--gap-s: 12px;
|
|
3
3
|
--gap-m: 16px;
|
|
4
|
+
--gap-2xl: 32px;
|
|
4
5
|
--gap-0: 0px;
|
|
5
6
|
--gap-12: var(--gap-s);
|
|
6
7
|
--gap-16: var(--gap-m);
|
|
8
|
+
--gap-32: var(--gap-2xl);
|
|
7
9
|
}
|
|
8
10
|
:root {
|
|
9
11
|
--calendar-inner-width: 280px;
|
|
10
12
|
}
|
|
11
|
-
.calendar-
|
|
13
|
+
.calendar-range__component_q8vzh {
|
|
12
14
|
display: flex;
|
|
13
15
|
}
|
|
14
|
-
.calendar-
|
|
16
|
+
.calendar-range__component_q8vzh button[aria-selected='true'] {
|
|
15
17
|
cursor: pointer;
|
|
16
18
|
}
|
|
17
|
-
.calendar-
|
|
19
|
+
.calendar-range__component_q8vzh *[class*='errorIcon_'] {
|
|
18
20
|
display: none;
|
|
19
21
|
}
|
|
20
|
-
.calendar-
|
|
22
|
+
.calendar-range__component_q8vzh *[class*='calendarIcon_'] {
|
|
21
23
|
margin-right: var(--gap-0);
|
|
22
24
|
}
|
|
23
|
-
.calendar-
|
|
25
|
+
.calendar-range__static_q8vzh {
|
|
26
|
+
flex-direction: column;
|
|
27
|
+
}
|
|
28
|
+
.calendar-range__static_q8vzh .calendar-range__calendar_q8vzh {
|
|
24
29
|
width: var(--calendar-inner-width);
|
|
25
30
|
}
|
|
26
|
-
.calendar-
|
|
31
|
+
.calendar-range__static_q8vzh .calendar-range__calendar_q8vzh > div:first-child {
|
|
27
32
|
padding: var(--gap-16) var(--gap-0) var(--gap-12);
|
|
28
33
|
}
|
|
29
|
-
.calendar-
|
|
34
|
+
.calendar-range__inputsContainer_q8vzh {
|
|
35
|
+
display: flex;
|
|
36
|
+
}
|
|
37
|
+
.calendar-range__calendarContainers_q8vzh {
|
|
38
|
+
display: flex;
|
|
39
|
+
gap: var(--gap-32);
|
|
40
|
+
}
|
|
41
|
+
.calendar-range__calendarContainer_q8vzh {
|
|
30
42
|
width: var(--calendar-inner-width);
|
|
31
43
|
display: flex;
|
|
32
44
|
justify-content: center;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './index.css';
|
|
2
2
|
|
|
3
|
-
const styles = {"component":"calendar-
|
|
3
|
+
const styles = {"component":"calendar-range__component_q8vzh","static":"calendar-range__static_q8vzh","calendar":"calendar-range__calendar_q8vzh","inputsContainer":"calendar-range__inputsContainer_q8vzh","calendarContainers":"calendar-range__calendarContainers_q8vzh","calendarContainer":"calendar-range__calendarContainer_q8vzh"};
|
|
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/views/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\n & button[aria-selected='true'] {\n cursor: pointer;\n }\n\n & *[class*='errorIcon_'] {\n display: none;\n }\n\n & *[class*='calendarIcon_'] {\n margin-right: var(--gap-0);\n }\n}\n\n.static {\n & .calendar {\n width: var(--calendar-inner-width);\n\n & > div:first-child {\n padding: var(--gap-16) var(--gap-0) var(--gap-12);\n }\n }\n}\n\n.calendarContainer {\n width: var(--calendar-inner-width);\n display: flex;\n justify-content: center;\n}\n"],"names":[],"mappings":";;AAEgB,eAAe,CAAC,WAAW,CAAC,iCAAiC,CAAC,QAAQ,CAAC,8BAA8B,CAAC,UAAU,CAAC,gCAAgC,CAAC,mBAAmB,CAAC,yCAAyC,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"index.module.css.js","sources":["../src/views/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\n & button[aria-selected='true'] {\n cursor: pointer;\n }\n\n & *[class*='errorIcon_'] {\n display: none;\n }\n\n & *[class*='calendarIcon_'] {\n margin-right: var(--gap-0);\n }\n}\n\n.static {\n flex-direction: column;\n\n & .calendar {\n width: var(--calendar-inner-width);\n\n & > div:first-child {\n padding: var(--gap-16) var(--gap-0) var(--gap-12);\n }\n }\n}\n\n.inputsContainer {\n display: flex;\n}\n\n.calendarContainers {\n display: flex;\n gap: var(--gap-32);\n}\n\n.calendarContainer {\n width: var(--calendar-inner-width);\n display: flex;\n justify-content: center;\n}\n"],"names":[],"mappings":";;AAEgB,eAAe,CAAC,WAAW,CAAC,iCAAiC,CAAC,QAAQ,CAAC,8BAA8B,CAAC,UAAU,CAAC,gCAAgC,CAAC,iBAAiB,CAAC,uCAAuC,CAAC,oBAAoB,CAAC,0CAA0C,CAAC,mBAAmB,CAAC,yCAAyC,CAAC;;;;"}
|
package/modern/views/static.d.ts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { type FC } from 'react';
|
|
2
|
+
import { type CalendarInputProps } from '@alfalab/core-components-calendar-input/modern';
|
|
2
3
|
import { type CalendarRangeProps } from '../Component';
|
|
3
|
-
|
|
4
|
+
type DateInputProps = Omit<CalendarInputProps, 'onCalendarOpen' | 'onCalendarClose' | 'onChange'>;
|
|
5
|
+
interface CalendarRangeStaticProps extends Omit<CalendarRangeProps, 'calendarPosition' | 'inputFromProps' | 'inputToProps'> {
|
|
4
6
|
/**
|
|
5
7
|
* Отображать начальный месяц слева или справа (влияет только на начальный рендер)
|
|
6
8
|
*/
|
|
7
9
|
defaultMonthPosition?: 'left' | 'right';
|
|
8
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Пропсы для инпута начальной даты диапазона
|
|
12
|
+
*/
|
|
13
|
+
inputFromProps?: DateInputProps;
|
|
14
|
+
/**
|
|
15
|
+
* Пропсы для инпута конечной даты диапазона
|
|
16
|
+
*/
|
|
17
|
+
inputToProps?: DateInputProps;
|
|
18
|
+
}
|
|
9
19
|
export declare const CalendarRangeStatic: FC<CalendarRangeStaticProps>;
|
|
20
|
+
export {};
|