terra-date-picker
Version:
The terra-date-picker component provides users a way to enter or select a date from the date picker.
428 lines (399 loc) • 12.9 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.addDays = addDays;
exports.addMonths = addMonths;
exports.addWeeks = addWeeks;
exports.addYears = addYears;
exports.allDaysDisabledAfter = allDaysDisabledAfter;
exports.allDaysDisabledBefore = allDaysDisabledBefore;
exports.cloneDate = cloneDate;
exports.dateValues = void 0;
exports.equals = equals;
exports.formatDate = formatDate;
exports.getDate = getDate;
exports.getDay = getDay;
exports.getDayOfWeekCode = getDayOfWeekCode;
exports.getDaysDiff = getDaysDiff;
exports.getDefaultLocale = getDefaultLocale;
exports.getDefaultLocaleData = getDefaultLocaleData;
exports.getEffectiveMaxDate = getEffectiveMaxDate;
exports.getEffectiveMinDate = getEffectiveMinDate;
exports.getEndOfMonth = getEndOfMonth;
exports.getEndOfWeek = getEndOfWeek;
exports.getHightLightDaysMap = getHightLightDaysMap;
exports.getLocaleData = getLocaleData;
exports.getLocaleDataForLocale = getLocaleDataForLocale;
exports.getLocalizedDateForScreenReader = getLocalizedDateForScreenReader;
exports.getMonth = getMonth;
exports.getMonthFromDate = getMonthFromDate;
exports.getMonthInLocale = getMonthInLocale;
exports.getStartOfDate = getStartOfDate;
exports.getStartOfDay = getStartOfDay;
exports.getStartOfMonth = getStartOfMonth;
exports.getStartOfWeek = getStartOfWeek;
exports.getWeek = getWeek;
exports.getWeekdayMinInLocale = getWeekdayMinInLocale;
exports.getWeekdayShortInLocale = getWeekdayShortInLocale;
exports.getYear = getYear;
exports.isAfter = isAfter;
exports.isBefore = isBefore;
exports.isDate = isDate;
exports.isDayDisabled = isDayDisabled;
exports.isDayInRange = isDayInRange;
exports.isMoment = isMoment;
exports.isSameDay = isSameDay;
exports.isSameMonth = isSameMonth;
exports.localizeDate = localizeDate;
exports.newDate = newDate;
exports.newDateWithTimeZone = newDateWithTimeZone;
exports.now = now;
exports.parseDate = parseDate;
exports.registerLocale = registerLocale;
exports.safeDateFormat = safeDateFormat;
exports.setMonth = setMonth;
exports.setYear = setYear;
exports.subtractDays = subtractDays;
exports.subtractMonths = subtractMonths;
exports.subtractWeeks = subtractWeeks;
exports.subtractYears = subtractYears;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
var _DateUtil = _interopRequireDefault(require("../DateUtil"));
var dayOfWeekCodes = {
1: 'mon',
2: 'tue',
3: 'wed',
4: 'thu',
5: 'fri',
6: 'sat',
7: 'sun'
};
// These functions are not exported so
// that we avoid magic strings like 'days'
function set(date, unit, to) {
return date.set(unit, to);
}
function add(date, amount, unit) {
return date.add(amount, unit);
}
function subtract(date, amount, unit) {
return date.subtract(amount, unit);
}
function get(date, unit) {
return date.get(unit);
}
function getStartOf(date, unit) {
return date.startOf(unit);
}
function getEndOf(date, unit) {
return date.endOf(unit);
}
function getDiff(date1, date2, unit) {
return date1.diff(date2, unit);
}
function isSame(date1, date2, unit) {
return date1.isSame(date2, unit);
}
// ** Date Constructors **
function newDate(point) {
return (0, _momentTimezone.default)(point);
}
function newDateWithTimeZone(timeZone) {
return (0, _momentTimezone.default)().tz(timeZone);
}
function now(timeZone) {
if (timeZone == null) {
return newDate();
}
return newDateWithTimeZone(timeZone);
}
function cloneDate(date) {
return date.clone();
}
function parseDate(value, _ref) {
var dateFormat = _ref.dateFormat,
locale = _ref.locale;
var m = (0, _momentTimezone.default)(value, dateFormat, locale || _momentTimezone.default.locale(), true);
// Only support dates between 01/01/1900 and 12/31/2010 because the year dropdown only allows 1900 - 2100.
if (m.isValid() && _DateUtil.default.isBetweenMinMaxDate(m.format('YYYY-MM-DD'))) {
return m;
}
return null;
}
// ** Date "Reflection" **
function isMoment(date) {
return _momentTimezone.default.isMoment(date);
}
function isDate(date) {
return _momentTimezone.default.isDate(date);
}
// ** Date Formatting **
function formatDate(date, format) {
return date.format(format);
}
function safeDateFormat(date, _ref2) {
var dateFormat = _ref2.dateFormat,
locale = _ref2.locale;
return date && date.clone().locale(locale || _momentTimezone.default.locale()).format(Array.isArray(dateFormat) ? dateFormat[0] : dateFormat) || '';
}
// ** Date Setters **
function setMonth(date, month) {
return set(date, 'month', month);
}
function setYear(date, year) {
return set(date, 'year', year);
}
// ** Date Getters **
// Returns day of week
function getDay(date) {
return get(date, 'day');
}
function getWeek(date) {
return get(date, 'week');
}
function getMonth(date) {
return get(date, 'month');
}
function getYear(date) {
return get(date, 'year');
}
// Returns day of month
function getDate(date) {
return get(date, 'date');
}
function getDayOfWeekCode(day) {
return dayOfWeekCodes[day.isoWeekday()];
}
// *** Start of ***
function getStartOfDay(date) {
return getStartOf(date, 'day');
}
function getStartOfWeek(date) {
return getStartOf(date, 'week');
}
function getStartOfMonth(date) {
return getStartOf(date, 'month');
}
function getStartOfDate(date) {
return getStartOf(date, 'date');
}
// *** End of ***
function getEndOfWeek(date) {
return getEndOf(date, 'week');
}
function getEndOfMonth(date) {
return getEndOf(date, 'month');
}
// ** Date Math **
// *** Addition ***
function addDays(date, amount) {
return add(date, amount, 'days');
}
function addWeeks(date, amount) {
return add(date, amount, 'weeks');
}
function addMonths(date, amount) {
return add(date, amount, 'months');
}
function addYears(date, amount) {
return add(date, amount, 'years');
}
// *** Subtraction ***
function subtractDays(date, amount) {
return subtract(date, amount, 'days');
}
function subtractWeeks(date, amount) {
return subtract(date, amount, 'weeks');
}
function subtractMonths(date, amount) {
return subtract(date, amount, 'months');
}
function subtractYears(date, amount) {
return subtract(date, amount, 'years');
}
// ** Date Comparison **
function isBefore(date1, date2) {
return date1.isBefore(date2);
}
function isAfter(date1, date2) {
return date1.isAfter(date2);
}
function equals(date1, date2) {
return date1.isSame(date2);
}
function isSameMonth(date1, date2) {
return isSame(date1, date2, 'month');
}
function isSameDay(moment1, moment2) {
if (moment1 && moment2) {
return moment1.isSame(moment2, 'day');
} else {
return !moment1 && !moment2;
}
}
function isDayInRange(day, startDate, endDate) {
var before = startDate.clone().startOf('day').subtract(1, 'seconds');
var after = endDate.clone().startOf('day').add(1, 'seconds');
return day.clone().startOf('day').isBetween(before, after);
}
// *** Diffing ***
function getDaysDiff(date1, date2) {
return getDiff(date1, date2, 'days');
}
// ** Date Localization **
function localizeDate(date, locale) {
return date.clone().locale(locale || _momentTimezone.default.locale());
}
function getDefaultLocale() {
return _momentTimezone.default.locale();
}
function getDefaultLocaleData() {
return _momentTimezone.default.localeData();
}
function registerLocale(localeName, localeData) {
_momentTimezone.default.defineLocale(localeName, localeData);
}
function getLocaleData(date) {
return date.localeData();
}
function getLocaleDataForLocale(locale) {
return _momentTimezone.default.localeData(locale);
}
function getWeekdayMinInLocale(locale, date) {
return locale.weekdaysMin(date);
}
function getWeekdayShortInLocale(locale, date) {
return locale.weekdaysShort(date);
}
// TODO what is this format exactly?
function getMonthInLocale(locale, date, format) {
return locale.months(date, format);
}
// ** Utils for some components **
function isDayDisabled(day) {
var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
minDate = _ref3.minDate,
maxDate = _ref3.maxDate,
excludeDates = _ref3.excludeDates,
includeDates = _ref3.includeDates,
filterDate = _ref3.filterDate;
return minDate && day && day.isBefore(minDate, 'day') || maxDate && day && day.isAfter(maxDate, 'day') || excludeDates && day && excludeDates.some(function (excludeDate) {
return isSameDay(day, excludeDate);
}) || includeDates && day && !includeDates.some(function (includeDate) {
return isSameDay(day, includeDate);
}) || filterDate && day && !filterDate(day.clone()) || false;
}
function allDaysDisabledBefore(day, unit) {
var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
minDate = _ref4.minDate,
includeDates = _ref4.includeDates;
var dateBefore = day.clone().subtract(1, unit);
return minDate && dateBefore.isBefore(minDate, unit) || includeDates && includeDates.every(function (includeDate) {
return dateBefore.isBefore(includeDate, unit);
}) || false;
}
function allDaysDisabledAfter(day, unit) {
var _ref5 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
maxDate = _ref5.maxDate,
includeDates = _ref5.includeDates;
var dateAfter = day.clone().add(1, unit);
return maxDate && dateAfter.isAfter(maxDate, unit) || includeDates && includeDates.every(function (includeDate) {
return dateAfter.isAfter(includeDate, unit);
}) || false;
}
function getEffectiveMinDate(_ref6) {
var minDate = _ref6.minDate,
includeDates = _ref6.includeDates;
if (includeDates && minDate) {
return _momentTimezone.default.min(includeDates.filter(function (includeDate) {
return minDate.isSameOrBefore(includeDate, 'day');
}));
} else if (includeDates) {
return _momentTimezone.default.min(includeDates);
} else {
return minDate;
}
}
function getEffectiveMaxDate(_ref7) {
var maxDate = _ref7.maxDate,
includeDates = _ref7.includeDates;
if (includeDates && maxDate) {
return _momentTimezone.default.max(includeDates.filter(function (includeDate) {
return maxDate.isSameOrAfter(includeDate, 'day');
}));
} else if (includeDates) {
return _momentTimezone.default.max(includeDates);
} else {
return maxDate;
}
}
function getHightLightDaysMap() {
var highlightDates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var defaultClassName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'react-datepicker-day--highlighted';
var dateClasses = new WeakMap();
for (var i = 0, len = highlightDates.length; i < len; i++) {
var obj = highlightDates[i];
if (isMoment(obj)) {
var key = obj.format('MM.DD.YYYY');
var classNamesArr = dateClasses.get(key) || [];
if (!classNamesArr.includes(defaultClassName)) {
classNamesArr.push(defaultClassName);
dateClasses.set(key, classNamesArr);
}
} else if ((0, _typeof2.default)(obj) === 'object') {
var keys = Object.keys(obj);
var className = keys[0];
var arrOfMoments = obj[keys[0]];
if (typeof className === 'string' && arrOfMoments.constructor === Array) {
for (var k = 0, _len = arrOfMoments.length; k < _len; k++) {
var _key = arrOfMoments[k].format('MM.DD.YYYY');
var _classNamesArr = dateClasses.get(_key) || [];
if (!_classNamesArr.includes(className)) {
_classNamesArr.push(className);
dateClasses.set(_key, _classNamesArr);
}
}
}
}
}
return dateClasses;
}
/**
* Gets the localized date in the long month/day/year format (i.e; January 15, 2019).
* If the date is disabled, the translated string for Disabled is appended to the date string.
* @param {Moment} date - The moment date to get the localized string.
* @param {Object} props - The date props.
* @return {string} - The localized date string. The string is empty if date is null or invalid.
*/
function getLocalizedDateForScreenReader(date, props) {
var intl = props.intl,
locale = props.locale;
var localizedDateLabel = '';
if (date && date.isValid()) {
var localizedDate = localizeDate(date, locale);
localizedDateLabel = localizedDate.format('dddd, LL');
if (intl && isDayDisabled(date, props)) {
localizedDateLabel = localizedDateLabel.concat(' ', intl.formatMessage({
id: 'Terra.datePicker.disabled'
}));
}
}
return localizedDateLabel;
}
function getMonthFromDate(date, props) {
var intl = props.intl,
locale = props.locale;
var month = '';
if (date && date.isValid()) {
var localizedDate = localizeDate(date, locale);
month = localizedDate.format('MMMM');
}
return month;
}
var dateValues = exports.dateValues = {
MONTH: 'month',
YEAR: 'year'
};