| import { type DateLib, defaultDateLib } from "../classes/DateLib.js"; |
| import type { DateRange } from "../types/index.js"; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export function addToRange( |
| date: Date, |
| initialRange: DateRange | undefined, |
| min = 0, |
| max = 0, |
| required = false, |
| dateLib: DateLib = defaultDateLib, |
| ): DateRange | undefined { |
| const { from, to } = initialRange || {}; |
| const { isSameDay, isAfter, isBefore } = dateLib; |
|
|
| let range: DateRange | undefined; |
|
|
| if (!from && !to) { |
| |
| range = { from: date, to: min > 0 ? undefined : date }; |
| } else if (from && !to) { |
| |
| if (isSameDay(from, date)) { |
| |
| if (min === 0) { |
| range = { from, to: date }; |
| } else if (required) { |
| range = { from, to: undefined }; |
| } else { |
| range = undefined; |
| } |
| } else if (isBefore(date, from)) { |
| |
| range = { from: date, to: from }; |
| } else { |
| |
| range = { from, to: date }; |
| } |
| } else if (from && to) { |
| |
| if (isSameDay(from, date) && isSameDay(to, date)) { |
| |
| if (required) { |
| range = { from, to }; |
| } else { |
| range = undefined; |
| } |
| } else if (isSameDay(from, date)) { |
| |
| range = { from, to: min > 0 ? undefined : date }; |
| } else if (isSameDay(to, date)) { |
| |
| range = { from: date, to: min > 0 ? undefined : date }; |
| } else if (isBefore(date, from)) { |
| |
| range = { from: date, to: to }; |
| } else if (isAfter(date, from)) { |
| |
| range = { from, to: date }; |
| } else if (isAfter(date, to)) { |
| |
| range = { from, to: date }; |
| } else { |
| throw new Error("Invalid range"); |
| } |
| } |
|
|
| |
| if (range?.from && range?.to) { |
| const diff = dateLib.differenceInCalendarDays(range.to, range.from); |
| if (max > 0 && diff > max) { |
| range = { from: date, to: undefined }; |
| } else if (min > 1 && diff < min) { |
| range = { from: date, to: undefined }; |
| } |
| } |
|
|
| return range; |
| } |
|
|