32 lines
935 B
TypeScript
32 lines
935 B
TypeScript
export type DateRangeValue = {start: string; end: string}
|
|
|
|
export function normalizeRange(a: string, b: string): DateRangeValue {
|
|
return a <= b ? {start: a, end: b} : {start: b, end: a}
|
|
}
|
|
|
|
export function resolveRangeBounds(
|
|
start: string | null,
|
|
end: string | null,
|
|
preview: string | null,
|
|
): {lo: string; hi: string} | null {
|
|
if (!start) return null
|
|
const other = end ?? preview
|
|
if (!other) return {lo: start, hi: start}
|
|
return start <= other ? {lo: start, hi: other} : {lo: other, hi: start}
|
|
}
|
|
|
|
export type DayRangeRole = 'none' | 'single' | 'start' | 'end' | 'in-range'
|
|
|
|
export function dayRangeRole(
|
|
iso: string,
|
|
bounds: {lo: string; hi: string} | null,
|
|
): DayRangeRole {
|
|
if (!bounds) return 'none'
|
|
const {lo, hi} = bounds
|
|
if (lo === hi) return iso === lo ? 'single' : 'none'
|
|
if (iso === lo) return 'start'
|
|
if (iso === hi) return 'end'
|
|
if (iso > lo && iso < hi) return 'in-range'
|
|
return 'none'
|
|
}
|