UNPKG

react-day-picker

Version:

Customizable Date Picker for React

41 lines 1.69 kB
import React from "react"; import { addToRange, dateMatchModifiers } from "../utils/index.js"; import { rangeIncludesDate } from "../utils/rangeIncludesDate.js"; export function useRange(props, dateLib) { const { disabled, excludeDisabled, selected: initiallySelected, required, onSelect } = props; const [selected, setSelected] = React.useState(initiallySelected); // Update the selected date if the `selected` prop changes. React.useEffect(() => { setSelected(initiallySelected); }, [initiallySelected]); const isSelected = (date) => selected && rangeIncludesDate(selected, date, false, dateLib); const select = (triggerDate, modifiers, e) => { const { min, max } = props; const newRange = triggerDate ? addToRange(triggerDate, selected, min, max, required, dateLib) : undefined; if (newRange?.from && newRange.to) { let newDate = newRange.from; while (dateLib.differenceInCalendarDays(newRange.to, newDate) > 0) { newDate = dateLib.addDays(newDate, 1); if (excludeDisabled && disabled && dateMatchModifiers(newDate, disabled, dateLib)) { // if a disabled days is found, the range is reset newRange.from = triggerDate; newRange.to = undefined; break; } } } setSelected(newRange); onSelect?.(newRange, triggerDate, modifiers, e); return newRange; }; return { selected, select, isSelected }; } //# sourceMappingURL=useRange.js.map