@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.
Files changed (68) hide show
  1. package/Component.d.ts +4 -0
  2. package/Component.js.map +1 -1
  3. package/components/divider/index.css +8 -8
  4. package/components/divider/index.module.css.js +1 -1
  5. package/components/divider/index.module.css.js.map +1 -1
  6. package/cssm/Component.d.ts +4 -0
  7. package/cssm/Component.js.map +1 -1
  8. package/cssm/components/divider/index.module.css +1 -1
  9. package/cssm/hooks.d.ts +31 -0
  10. package/cssm/hooks.js +84 -0
  11. package/cssm/hooks.js.map +1 -1
  12. package/cssm/views/index.module.css +12 -0
  13. package/cssm/views/static.d.ts +13 -2
  14. package/cssm/views/static.js +93 -50
  15. package/cssm/views/static.js.map +1 -1
  16. package/esm/Component.d.ts +4 -0
  17. package/esm/Component.js.map +1 -1
  18. package/esm/components/divider/index.css +8 -8
  19. package/esm/components/divider/index.module.css.js +1 -1
  20. package/esm/components/divider/index.module.css.js.map +1 -1
  21. package/esm/hooks.d.ts +31 -0
  22. package/esm/hooks.js +84 -2
  23. package/esm/hooks.js.map +1 -1
  24. package/esm/views/index.css +19 -7
  25. package/esm/views/index.module.css.js +1 -1
  26. package/esm/views/index.module.css.js.map +1 -1
  27. package/esm/views/static.d.ts +13 -2
  28. package/esm/views/static.js +93 -50
  29. package/esm/views/static.js.map +1 -1
  30. package/hooks.d.ts +31 -0
  31. package/hooks.js +84 -0
  32. package/hooks.js.map +1 -1
  33. package/modern/Component.d.ts +4 -0
  34. package/modern/Component.js.map +1 -1
  35. package/modern/components/divider/index.css +8 -8
  36. package/modern/components/divider/index.module.css.js +1 -1
  37. package/modern/components/divider/index.module.css.js.map +1 -1
  38. package/modern/hooks.d.ts +31 -0
  39. package/modern/hooks.js +79 -2
  40. package/modern/hooks.js.map +1 -1
  41. package/modern/views/index.css +19 -7
  42. package/modern/views/index.module.css.js +1 -1
  43. package/modern/views/index.module.css.js.map +1 -1
  44. package/modern/views/static.d.ts +13 -2
  45. package/modern/views/static.js +88 -45
  46. package/modern/views/static.js.map +1 -1
  47. package/moderncssm/Component.d.ts +4 -0
  48. package/moderncssm/Component.js.map +1 -1
  49. package/moderncssm/components/divider/index.module.css +1 -1
  50. package/moderncssm/hooks.d.ts +31 -0
  51. package/moderncssm/hooks.js +79 -2
  52. package/moderncssm/hooks.js.map +1 -1
  53. package/moderncssm/views/index.module.css +13 -0
  54. package/moderncssm/views/static.d.ts +13 -2
  55. package/moderncssm/views/static.js +88 -45
  56. package/moderncssm/views/static.js.map +1 -1
  57. package/package.json +2 -1
  58. package/src/Component.tsx +5 -0
  59. package/src/components/divider/index.module.css +1 -1
  60. package/src/hooks.ts +150 -1
  61. package/src/views/index.module.css +11 -0
  62. package/src/views/static.tsx +188 -92
  63. package/views/index.css +19 -7
  64. package/views/index.module.css.js +1 -1
  65. package/views/index.module.css.js.map +1 -1
  66. package/views/static.d.ts +13 -2
  67. package/views/static.js +90 -47
  68. 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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"}
@@ -89,5 +89,9 @@ export type CalendarRangeProps = {
89
89
  * Дополнительный класс для контейнера календаря
90
90
  */
91
91
  calendarContainerClassName?: string;
92
+ /**
93
+ * Автоподмена дат
94
+ */
95
+ autoSwap?: boolean;
92
96
  };
93
97
  export declare const CalendarRange: FC<CalendarRangeProps>;
@@ -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":";;;;AA8GO,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;;;;"}
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-range__component_1sn79 {
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-range__component_1sn79:after {
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-range__outer_1sn79 {
31
+ .calendar-range__outer_a3a4p {
32
32
  position: relative;
33
33
  top: var(--gap-24);
34
34
  }
35
- .calendar-range__size48_1sn79 {
35
+ .calendar-range__size48_a3a4p {
36
36
  height: var(--size-s-height);
37
37
  }
38
- .calendar-range__size56_1sn79 {
38
+ .calendar-range__size56_a3a4p {
39
39
  height: var(--size-m-height);
40
40
  }
41
- .calendar-range__size64_1sn79 {
41
+ .calendar-range__size64_a3a4p {
42
42
  height: var(--size-l-height);
43
43
  }
44
- .calendar-range__size72_1sn79 {
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-range__component_1sn79","outer":"calendar-range__outer_1sn79","size48":"calendar-range__size48_1sn79","size56":"calendar-range__size56_1sn79","size64":"calendar-range__size64_1sn79","size72":"calendar-range__size72_1sn79"};
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
@@ -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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"}
@@ -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-range__component_cda4k {
13
+ .calendar-range__component_q8vzh {
12
14
  display: flex;
13
15
  }
14
- .calendar-range__component_cda4k button[aria-selected='true'] {
16
+ .calendar-range__component_q8vzh button[aria-selected='true'] {
15
17
  cursor: pointer;
16
18
  }
17
- .calendar-range__component_cda4k *[class*='errorIcon_'] {
19
+ .calendar-range__component_q8vzh *[class*='errorIcon_'] {
18
20
  display: none;
19
21
  }
20
- .calendar-range__component_cda4k *[class*='calendarIcon_'] {
22
+ .calendar-range__component_q8vzh *[class*='calendarIcon_'] {
21
23
  margin-right: var(--gap-0);
22
24
  }
23
- .calendar-range__static_cda4k .calendar-range__calendar_cda4k {
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-range__static_cda4k .calendar-range__calendar_cda4k > div:first-child {
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-range__calendarContainer_cda4k {
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-range__component_cda4k","static":"calendar-range__static_cda4k","calendar":"calendar-range__calendar_cda4k","calendarContainer":"calendar-range__calendarContainer_cda4k"};
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;;;;"}
@@ -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
- export type CalendarRangeStaticProps = Omit<CalendarRangeProps, 'calendarPosition'> & {
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 {};