UNPKG

axiom-react-calendar

Version:

A component for picking dates or date periods for your React application.

560 lines (474 loc) 17.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); /* Simple getters - getting a property of a given point in time */ var getYear = exports.getYear = function getYear(date) { if (date instanceof Date) { return date.getFullYear(); } if (typeof date === 'number') { return date; } var year = parseInt(date, 10); if (typeof date === 'string' && !Number.isNaN(year)) { return year; } throw new Error('Failed to get year from date: ' + date + '.'); }; var getMonth = exports.getMonth = function getMonth(date) { return date.getMonth() + 1; }; var getMonthIndex = exports.getMonthIndex = function getMonthIndex(date) { return date.getMonth(); }; var getDay = exports.getDay = function getDay(date) { return date.getDate(); }; var getDayOfWeek = exports.getDayOfWeek = function getDayOfWeek(date) { var calendarType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ISO 8601'; var weekday = date.getDay(); switch (calendarType) { case 'ISO 8601': // Shifts days of the week so that Monday is 0, Sunday is 6 return (weekday + 6) % 7; case 'US': return weekday; default: throw new Error('Unsupported calendar type.'); } }; /* Complex getters - getting a property somehow related to a given point in time */ var getBeginOfCenturyYear = exports.getBeginOfCenturyYear = function getBeginOfCenturyYear(date) { var year = getYear(date) - 1; return year + -year % 100 + 1; }; var getBeginOfCentury = exports.getBeginOfCentury = function getBeginOfCentury(date) { var beginOfCenturyYear = getBeginOfCenturyYear(date); return new Date(beginOfCenturyYear, 0, 1); }; var getEndOfCentury = exports.getEndOfCentury = function getEndOfCentury(date) { var beginOfCenturyYear = getBeginOfCenturyYear(date); return new Date(beginOfCenturyYear + 100, 0, 1, 0, 0, 0, -1); }; var getCenturyRange = exports.getCenturyRange = function getCenturyRange(date) { return [getBeginOfCentury(date), getEndOfCentury(date)]; }; var getBeginOfPreviousCentury = exports.getBeginOfPreviousCentury = function getBeginOfPreviousCentury(date) { var previousCenturyYear = getYear(date) - 100; return getBeginOfCentury(previousCenturyYear); }; var getEndOfPreviousCentury = exports.getEndOfPreviousCentury = function getEndOfPreviousCentury(date) { var previousCenturyYear = getYear(date) - 100; return getEndOfCentury(previousCenturyYear); }; var getBeginOfNextCentury = exports.getBeginOfNextCentury = function getBeginOfNextCentury(date) { var nextCenturyYear = getYear(date) + 100; return getBeginOfCentury(nextCenturyYear); }; var getBeginOfDecadeYear = exports.getBeginOfDecadeYear = function getBeginOfDecadeYear(date) { var year = getYear(date) - 1; return year + -year % 10 + 1; }; var getBeginOfDecade = exports.getBeginOfDecade = function getBeginOfDecade(date) { var beginOfDecadeYear = getBeginOfDecadeYear(date); return new Date(beginOfDecadeYear, 0, 1); }; var getEndOfDecade = exports.getEndOfDecade = function getEndOfDecade(date) { var beginOfDecadeYear = getBeginOfDecadeYear(date); return new Date(beginOfDecadeYear + 10, 0, 1, 0, 0, 0, -1); }; var getDecadeRange = exports.getDecadeRange = function getDecadeRange(date) { return [getBeginOfDecade(date), getEndOfDecade(date)]; }; var getBeginOfPreviousDecade = exports.getBeginOfPreviousDecade = function getBeginOfPreviousDecade(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10; var previousDecadeYear = getBeginOfDecadeYear(date) - offset; return getBeginOfDecade(previousDecadeYear); }; var getEndOfPreviousDecade = exports.getEndOfPreviousDecade = function getEndOfPreviousDecade(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10; var previousDecadeYear = getBeginOfDecadeYear(date) - offset; return getEndOfDecade(previousDecadeYear); }; var getBeginOfNextDecade = exports.getBeginOfNextDecade = function getBeginOfNextDecade(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10; var nextDecadeYear = getBeginOfDecadeYear(date) + offset; return getBeginOfDecade(nextDecadeYear); }; /** * Returns the beginning of a given year. * * @param {Date} date Date. */ var getBeginOfYear = exports.getBeginOfYear = function getBeginOfYear(date) { var year = getYear(date); return new Date(year, 0, 1); }; /** * Returns the end of a given year. * * @param {Date} date Date. */ var getEndOfYear = exports.getEndOfYear = function getEndOfYear(date) { var year = getYear(date); return new Date(year + 1, 0, 1, 0, 0, 0, -1); }; /** * Returns an array with the beginning and the end of a given year. * * @param {Date} date Date. */ var getYearRange = exports.getYearRange = function getYearRange(date) { return [getBeginOfYear(date), getEndOfYear(date)]; }; var getBeginOfPreviousYear = exports.getBeginOfPreviousYear = function getBeginOfPreviousYear(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var previousYear = getYear(date) - offset; return getBeginOfYear(previousYear); }; var getEndOfPreviousYear = exports.getEndOfPreviousYear = function getEndOfPreviousYear(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var previousYear = getYear(date) - offset; return getEndOfYear(previousYear); }; var getBeginOfNextYear = exports.getBeginOfNextYear = function getBeginOfNextYear(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var nextYear = getYear(date) + offset; return getBeginOfYear(nextYear); }; /** * Returns the beginning of a given month. * * @param {Date} date Date. */ var getBeginOfMonth = exports.getBeginOfMonth = function getBeginOfMonth(date) { var year = getYear(date); var monthIndex = getMonthIndex(date); return new Date(year, monthIndex, 1); }; /** * Returns the end of a given month. * * @param {Date} date Date. */ var getEndOfMonth = exports.getEndOfMonth = function getEndOfMonth(date) { var year = getYear(date); var monthIndex = getMonthIndex(date); return new Date(year, monthIndex + 1, 1, 0, 0, 0, -1); }; /** * Returns the beginning of a given week. * * @param {Date} date Date. * @param {String} calendarType Calendar type. Can be ISO 8601 or US. */ var getBeginOfWeek = exports.getBeginOfWeek = function getBeginOfWeek(date) { var calendarType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ISO 8601'; var year = getYear(date); var monthIndex = getMonthIndex(date); var day = date.getDate() - getDayOfWeek(date, calendarType); return new Date(year, monthIndex, day); }; /** * Returns an array with the beginning and the end of a given month. * * @param {Date} date Date. */ var getMonthRange = exports.getMonthRange = function getMonthRange(date) { return [getBeginOfMonth(date), getEndOfMonth(date)]; }; var getDifferentMonth = function getDifferentMonth(date, offset) { var year = getYear(date); var previousMonthIndex = getMonthIndex(date) + offset; return new Date(year, previousMonthIndex, 1); }; var getBeginOfPreviousMonth = exports.getBeginOfPreviousMonth = function getBeginOfPreviousMonth(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var previousMonth = getDifferentMonth(date, -offset); return getBeginOfMonth(previousMonth); }; var getEndOfPreviousMonth = exports.getEndOfPreviousMonth = function getEndOfPreviousMonth(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var previousMonth = getDifferentMonth(date, -offset); return getEndOfMonth(previousMonth); }; var getBeginOfNextMonth = exports.getBeginOfNextMonth = function getBeginOfNextMonth(date) { var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var nextMonth = getDifferentMonth(date, offset); return getBeginOfMonth(nextMonth); }; var getBeginOfDay = exports.getBeginOfDay = function getBeginOfDay(date) { var year = getYear(date); var monthIndex = getMonthIndex(date); var day = getDay(date); return new Date(year, monthIndex, day); }; var getEndOfDay = exports.getEndOfDay = function getEndOfDay(date) { var year = getYear(date); var monthIndex = getMonthIndex(date); var day = getDay(date); return new Date(year, monthIndex, day + 1, 0, 0, 0, -1); }; /** * Returns an array with the beginning and the end of a given day. * * @param {Date} date Date. */ var getDayRange = exports.getDayRange = function getDayRange(date) { return [getBeginOfDay(date), getEndOfDay(date)]; }; /** * Gets week number according to ISO 8601 or US standard. * In ISO 8601 week 1 is the one with January 4. * In US calendar week 1 is the one with January 1. * * @param {Date} date Date. * @param {String} calendarType Calendar type. Can be ISO 8601 or US. */ var getWeekNumber = exports.getWeekNumber = function getWeekNumber(date) { var calendarType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'ISO 8601'; var beginOfWeek = getBeginOfWeek(date, calendarType); var year = getYear(date) + 1; var dayInWeekOne = void 0; var beginOfFirstWeek = void 0; // Look for the first week one that does not come after a given date do { dayInWeekOne = new Date(year, 0, calendarType === 'ISO 8601' ? 4 : 1); beginOfFirstWeek = getBeginOfWeek(dayInWeekOne, calendarType); year -= 1; } while (date - beginOfFirstWeek < 0); return Math.round((beginOfWeek - beginOfFirstWeek) / (8.64e7 * 7)) + 1; }; /** * Returns the beginning of a given range. * * @param {String} rangeType Range type (e.g. 'day') * @param {Date} date Date. */ var getBegin = exports.getBegin = function getBegin(rangeType, date) { switch (rangeType) { case 'century': return getBeginOfCentury(date); case 'decade': return getBeginOfDecade(date); case 'year': return getBeginOfYear(date); case 'month': return getBeginOfMonth(date); case 'day': return getBeginOfDay(date); default: throw new Error('Invalid rangeType: ' + rangeType); } }; var getBeginPrevious = exports.getBeginPrevious = function getBeginPrevious(rangeType, date) { switch (rangeType) { case 'century': return getBeginOfPreviousCentury(date); case 'decade': return getBeginOfPreviousDecade(date); case 'year': return getBeginOfPreviousYear(date); case 'month': return getBeginOfPreviousMonth(date); default: throw new Error('Invalid rangeType: ' + rangeType); } }; var getBeginNext = exports.getBeginNext = function getBeginNext(rangeType, date) { switch (rangeType) { case 'century': return getBeginOfNextCentury(date); case 'decade': return getBeginOfNextDecade(date); case 'year': return getBeginOfNextYear(date); case 'month': return getBeginOfNextMonth(date); default: throw new Error('Invalid rangeType: ' + rangeType); } }; var getBeginPrevious2 = exports.getBeginPrevious2 = function getBeginPrevious2(rangeType, date) { switch (rangeType) { case 'decade': return getBeginOfPreviousDecade(date, 100); case 'year': return getBeginOfPreviousYear(date, 10); case 'month': return getBeginOfPreviousMonth(date, 12); default: throw new Error('Invalid rangeType: ' + rangeType); } }; var getBeginNext2 = exports.getBeginNext2 = function getBeginNext2(rangeType, date) { switch (rangeType) { case 'decade': return getBeginOfNextDecade(date, 100); case 'year': return getBeginOfNextYear(date, 10); case 'month': return getBeginOfNextMonth(date, 12); default: throw new Error('Invalid rangeType: ' + rangeType); } }; /** * Returns the end of a given range. * * @param {String} rangeType Range type (e.g. 'day') * @param {Date} date Date. */ var getEnd = exports.getEnd = function getEnd(rangeType, date) { switch (rangeType) { case 'century': return getEndOfCentury(date); case 'decade': return getEndOfDecade(date); case 'year': return getEndOfYear(date); case 'month': return getEndOfMonth(date); case 'day': return getEndOfDay(date); default: throw new Error('Invalid rangeType: ' + rangeType); } }; var getEndPrevious = exports.getEndPrevious = function getEndPrevious(rangeType, date) { switch (rangeType) { case 'century': return getEndOfPreviousCentury(date); case 'decade': return getEndOfPreviousDecade(date); case 'year': return getEndOfPreviousYear(date); case 'month': return getEndOfPreviousMonth(date); default: throw new Error('Invalid rangeType: ' + rangeType); } }; var getEndPrevious2 = exports.getEndPrevious2 = function getEndPrevious2(rangeType, date) { switch (rangeType) { case 'decade': return getEndOfPreviousDecade(date, 100); case 'year': return getEndOfPreviousYear(date, 10); case 'month': return getEndOfPreviousMonth(date, 12); default: throw new Error('Invalid rangeType: ' + rangeType); } }; /** * Returns an array with the beginning and the end of a given range. * * @param {String} rangeType Range type (e.g. 'day') * @param {Date} date Date. */ var getRange = exports.getRange = function getRange(rangeType, date) { switch (rangeType) { case 'century': return getCenturyRange(date); case 'decade': return getDecadeRange(date); case 'year': return getYearRange(date); case 'month': return getMonthRange(date); case 'day': return getDayRange(date); default: throw new Error('Invalid rangeType: ' + rangeType); } }; /** * Creates a range out of two values, ensuring they are in order and covering entire period ranges. * * @param {String} rangeType Range type (e.g. 'day') * @param {Date} date1 First date. * @param {Date} date2 Second date. */ var getValueRange = exports.getValueRange = function getValueRange(rangeType, date1, date2) { var rawNextValue = [date1, date2].sort(function (a, b) { return a.getTime() > b.getTime(); }); return [getBegin(rangeType, rawNextValue[0]), getEnd(rangeType, rawNextValue[1])]; }; /** * Returns a number of days in a month of a given date. * * @param {Date} date Date. */ var getDaysInMonth = exports.getDaysInMonth = function getDaysInMonth(date) { var year = getYear(date); var monthIndex = getMonthIndex(date); return new Date(year, monthIndex + 1, 0).getDate(); }; var toYearLabel = function toYearLabel(_ref) { var _ref2 = _slicedToArray(_ref, 2), start = _ref2[0], end = _ref2[1]; return getYear(start) + ' \u2013 ' + getYear(end); }; /** * Returns a string labelling a century of a given date. * For example, for 2017 it will return 2001-2100. * * @param {Date|String|Number} date Date or a year as a string or as a number. */ var getCenturyLabel = exports.getCenturyLabel = function getCenturyLabel(date) { return toYearLabel(getCenturyRange(date)); }; /** * Returns a string labelling a century of a given date. * For example, for 2017 it will return 2011-2020. * * @param {Date|String|Number} date Date or a year as a string or as a number. */ var getDecadeLabel = exports.getDecadeLabel = function getDecadeLabel(date) { return toYearLabel(getDecadeRange(date)); }; /** * Returns a boolean determining whether a given date is on Saturday or Sunday. * * @param {Date} date Date. */ var isWeekend = exports.isWeekend = function isWeekend(date) { var weekday = getDayOfWeek(date); return weekday >= 5; }; /** * Returns local month in ISO-like format (YYYY-MM). */ var getISOLocalMonth = exports.getISOLocalMonth = function getISOLocalMonth(value) { if (!value) { return value; } var date = new Date(value); if (Number.isNaN(date.getTime())) { throw new Error('Invalid date: ' + value); } var year = getYear(date); var month = ('0' + getMonth(date)).slice(-2); return year + '-' + month; }; /** * Returns local date in ISO-like format (YYYY-MM-DD). */ var getISOLocalDate = exports.getISOLocalDate = function getISOLocalDate(value) { if (!value) { return value; } var date = new Date(value); if (Number.isNaN(date.getTime())) { throw new Error('Invalid date: ' + value); } var year = getYear(date); var month = ('0' + getMonth(date)).slice(-2); var day = ('0' + getDay(date)).slice(-2); return year + '-' + month + '-' + day; };