@progress/kendo-angular-dateinputs
Version:
Kendo UI for Angular Date Inputs Package - Everything you need to add date selection functionality to apps (DatePicker, TimePicker, DateInput, DateRangePicker, DateTimePicker, Calendar, and MultiViewCalendar).
51 lines (50 loc) • 2.55 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
/**
* Handles range selection logic for Calendar components.
*
* This function manages the selection state when the Calendar is in range selection mode,
* determining which end of the range is active and updating the selection range accordingly.
*
* @param date - The date being selected
* @param selectionRange - The current selection range object
* @param activeRangeEnd - Which end of the range is currently active ('start' or 'end')
* @param allowReverse - Whether to allow reverse selection (end date before start date)
* @returns An object containing the updated activeRangeEnd and selectionRange
*
* @hidden
*/
export function handleRangeSelection(date, selectionRange, activeRangeEnd, allowReverse = false) {
if ((activeRangeEnd === 'start' && selectionRange.start?.getTime() === date?.getTime() && ((allowReverse && !selectionRange.end) || !allowReverse)) ||
(activeRangeEnd === 'end' && selectionRange.end?.getTime() === date?.getTime())) {
return { activeRangeEnd: activeRangeEnd, selectionRange: selectionRange };
}
if (allowReverse) {
if (activeRangeEnd === 'start' && selectionRange.start?.getTime() !== date?.getTime()) {
selectionRange.start = date;
activeRangeEnd = 'end';
}
else if (activeRangeEnd === 'end' && selectionRange.end?.getTime() !== date?.getTime()) {
selectionRange.end = date;
activeRangeEnd = 'start';
}
}
if (!allowReverse) {
if (activeRangeEnd === 'start' && date > selectionRange.end ||
activeRangeEnd === 'end' && date < selectionRange.start) {
selectionRange = { start: date, end: null };
activeRangeEnd = 'end';
}
else if (activeRangeEnd === 'start' && date <= selectionRange.end) {
selectionRange.start = date;
activeRangeEnd = 'end';
}
else if (activeRangeEnd === 'end' && date >= selectionRange.start && date.getTime() !== selectionRange.end?.getTime()) {
selectionRange.end = date;
activeRangeEnd = 'start';
}
}
return { activeRangeEnd: activeRangeEnd, selectionRange: selectionRange };
}