| | 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; |
| | } |
| |
|