UNPKG

@cbinsights/fds

Version:
93 lines (80 loc) 2.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValidUserDate = exports.getYearRange = exports.getDisabledDays = void 0; // capture groups for M and D work with or without a leading zero. // Y component requires 4 digits for all formats. var DATE_PATTERN_MAP = { MDY: /^(0?[1-9]|1[0-2])[/](0?[1-9]|[12]\d|3[01])[/]\d{4}$/, DMY: /^(0?[1-9]|[12]\d|3[01])[/](0?[1-9]|1[0-2])[/]\d{4}$/, YMD: /^\d{4}[/](0?[1-9]|1[0-2])[/](0?[1-9]|[12]\d|3[01])$/ }; /** * Returns a range of years to show in date picker. The range will expand to include * the selected date, if a date has been selected. * * @param {Number} currentYear YYYY * @param {Number} pastYears number of prior years in range * @param {Number} futureYears number of future years in range * @param {Date} minDate lower bound of selectable dates * @param {Date} maxDate upper bound of selectable dates * @param {Date} selectedDate currently selected date from DateInput * @returns {Object} { startYear: YYYY, endYear: YYYY } */ var getYearRange = function getYearRange(currentYear, pastYears, futureYears, minDate, maxDate, selectedDate) { // use min/max dates if specified // fall back relative past/future years from current date var startYear = minDate && minDate.getFullYear() || new Date(currentYear - pastYears, 0).getFullYear(); var endYear = maxDate && maxDate.getFullYear() + 1 || new Date(currentYear + futureYears + 1, 11).getFullYear(); var selectedYear = selectedDate instanceof Date && selectedDate.getFullYear(); // Expand range to include selected year if out of range if (selectedYear && selectedYear < startYear) { startYear = selectedYear; } if (selectedYear && selectedYear > endYear) { endYear = selectedYear + 1; } return { startYear: startYear, endYear: endYear }; }; exports.getYearRange = getYearRange; var getDisabledDays = function getDisabledDays(minDate, maxDate) { var days; if (minDate) { if (maxDate) { days = { before: minDate, after: maxDate }; } else { days = { before: minDate }; } } else if (maxDate) { days = { after: maxDate }; } return days; }; /** * Checks user-entered date strings for validity and completeness. * * dayjs eagerly parses dates (starting with a single number!), so * we must wait for a user to finish typing something that looks like * a full date. * * We use patterns that accept a date string with or without a leading zero. * * @param {String} inputValue * @param {String} dateFormat (MDY/DMY/YMD) * @returns {Boolean} */ exports.getDisabledDays = getDisabledDays; var isValidUserDate = function isValidUserDate(inputValue, dateFormat) { return DATE_PATTERN_MAP[dateFormat].test(inputValue); }; exports.isValidUserDate = isValidUserDate;