UNPKG

@mui/x-date-pickers-pro

Version:

The Pro plan edition of the MUI X Date and Time Picker components.

75 lines (74 loc) 2.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateRangeChange = calculateRangeChange; exports.calculateRangePreview = calculateRangePreview; exports.resolveReferenceDate = resolveReferenceDate; var _internals = require("@mui/x-date-pickers/internals"); function resolveReferenceDate(referenceDate, rangePosition) { if (Array.isArray(referenceDate)) { return rangePosition === 'start' ? referenceDate[0] : referenceDate[1]; } return referenceDate; } function calculateRangeChange({ adapter, range, newDate: selectedDate, rangePosition, allowRangeFlip = false, shouldMergeDateAndTime = false, referenceDate }) { const start = !adapter.isValid(range[0]) ? null : range[0]; const end = !adapter.isValid(range[1]) ? null : range[1]; if (shouldMergeDateAndTime && selectedDate) { // If there is a date already selected, then we want to keep its time if (start && rangePosition === 'start') { selectedDate = (0, _internals.mergeDateAndTime)(adapter, selectedDate, start); } if (end && rangePosition === 'end') { selectedDate = (0, _internals.mergeDateAndTime)(adapter, selectedDate, end); } } const newSelectedDate = referenceDate && selectedDate && shouldMergeDateAndTime ? (0, _internals.mergeDateAndTime)(adapter, selectedDate, resolveReferenceDate(referenceDate, rangePosition)) : selectedDate; if (rangePosition === 'start') { const truthyResult = allowRangeFlip ? { nextSelection: 'start', newRange: [end, newSelectedDate] } : { nextSelection: 'end', newRange: [newSelectedDate, null] }; return Boolean(end) && adapter.isAfter(newSelectedDate, end) ? truthyResult : { nextSelection: 'end', newRange: [newSelectedDate, end] }; } const truthyResult = allowRangeFlip ? { nextSelection: 'end', newRange: [newSelectedDate, start] } : { nextSelection: 'end', newRange: [newSelectedDate, null] }; return Boolean(start) && adapter.isBeforeDay(newSelectedDate, start) ? truthyResult : { nextSelection: 'start', newRange: [start, newSelectedDate] }; } function calculateRangePreview(options) { if (options.newDate == null) { return [null, null]; } const [start, end] = options.range; const { newRange } = calculateRangeChange(options); if (!start || !end) { return newRange; } const [previewStart, previewEnd] = newRange; return options.rangePosition === 'end' ? [end, previewEnd] : [previewStart, start]; }