UNPKG

@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
/**----------------------------------------------------------------------------------------- * 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 }; }