UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

233 lines (232 loc) 9.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertStringToDate = convertStringToDate; exports.correctV1Format = correctV1Format; exports.dayOffset = dayOffset; exports.formatDate = formatDate; exports.formatDateRange = formatDateRange; exports.getCalendar = getCalendar; exports.getFormatOptions = getFormatOptions; exports.getMonth = getMonth; exports.getWeek = getWeek; exports.isDisabled = isDisabledCalc; exports.makeDayObject = makeDayObject; exports.toRange = toRange; require("core-js/modules/es.string.replace.js"); require("core-js/modules/web.dom-collections.iterator.js"); var _subMonths = _interopRequireDefault(require("date-fns/subMonths")); var _addMonths = _interopRequireDefault(require("date-fns/addMonths")); var _isWithinInterval = _interopRequireDefault(require("date-fns/isWithinInterval")); var _isValid = _interopRequireDefault(require("date-fns/isValid")); var _isAfter = _interopRequireDefault(require("date-fns/isAfter")); var _isBefore = _interopRequireDefault(require("date-fns/isBefore")); var _isSameDay = _interopRequireDefault(require("date-fns/isSameDay")); var _isToday = _interopRequireDefault(require("date-fns/isToday")); var _isSameMonth = _interopRequireDefault(require("date-fns/isSameMonth")); var _addDays = _interopRequireDefault(require("date-fns/addDays")); var _startOfWeek = _interopRequireDefault(require("date-fns/startOfWeek")); var _getDay = _interopRequireDefault(require("date-fns/getDay")); var _startOfMonth = _interopRequireDefault(require("date-fns/startOfMonth")); var _getDaysInMonth = _interopRequireDefault(require("date-fns/getDaysInMonth")); var _toDate = _interopRequireDefault(require("date-fns/toDate")); var _parseISO = _interopRequireDefault(require("date-fns/parseISO")); var _parse = _interopRequireDefault(require("date-fns/parse")); var _startOfDay = _interopRequireDefault(require("date-fns/startOfDay")); var _componentHelper = require("../../shared/component-helper"); var _defaults = require("../../shared/defaults"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const calendarCache = {}; function makeDayObject(date, _ref) { let { startDate, endDate, hoverDate, minDate, maxDate, month } = _ref; const range = getRange(startDate, endDate, hoverDate); const isLastMonth = (0, _isSameMonth.default)((0, _subMonths.default)(date, 1), month); const isNextMonth = (0, _isSameMonth.default)((0, _addMonths.default)(date, 1), month); const isStartDate = isStartDateCalc(date, range); const isEndDate = isEndDateCalc(date, range); const isWithinSelection = isWithinSelectionCalc(date, startDate, endDate); const isPreview = isPreviewCalc(date, startDate, endDate, hoverDate); const isDisabled = isDisabledCalc(date, minDate, maxDate); return { date, isToday: (0, _isToday.default)(date), isLastMonth, isNextMonth, isStartDate, isEndDate, isWithinSelection, isPreview, isDisabled, isSelectable: !isLastMonth && !isNextMonth && !isDisabled, isInactive: isLastMonth || isNextMonth || isDisabled }; } function getCalendar(month) { let weekStartsOn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; let { onlyMonth = false, hideNextMonthWeek = false } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; const cacheKey = month.toISOString(); const thisMonth = getMonth(month); if (onlyMonth) { return calendarCache[cacheKey] = [...thisMonth]; } if (calendarCache[cacheKey]) { return calendarCache[cacheKey]; } const firstDay = (7 + (0, _getDay.default)((0, _startOfMonth.default)(month)) - weekStartsOn) % 7; const lastMonth = getMonth((0, _subMonths.default)(month, 1), (0, _getDaysInMonth.default)((0, _subMonths.default)(month, 1)) - firstDay); let fillCount = -1; if (hideNextMonthWeek) { fillCount = 35 - (thisMonth.length + firstDay); } if (fillCount < 0) { fillCount = 42 - (thisMonth.length + firstDay); } const nextMonth = getMonth((0, _addMonths.default)(month, 1), 0, fillCount > -1 ? fillCount : 0); return calendarCache[cacheKey] = [...lastMonth, ...thisMonth, ...nextMonth]; } function dayOffset(dayName) { const week = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']; return dayName ? week.indexOf(dayName.toLowerCase()) : 0; } function toRange(startDate, endDate) { if ((0, _isBefore.default)(endDate, startDate)) { const _startDate = startDate; startDate = endDate; endDate = _startDate; } return { startDate, endDate }; } function getRange(startDate, endDate, hoverDate) { if (startDate && endDate) { return toRange(startDate, endDate); } else if (startDate && hoverDate) { return toRange(startDate, hoverDate); } else { return toRange(startDate, startDate); } } function getWeek(weekStartsOn) { const startDay = (0, _startOfWeek.default)(new Date(), { weekStartsOn }); return Array(7).fill(1).map((value, i) => (0, _addDays.default)(startDay, i)); } function getMonth(month) { let skip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; let limit = arguments.length > 2 ? arguments[2] : undefined; const startDay = (0, _startOfMonth.default)(month); let size = (0, _getDaysInMonth.default)(month) - skip; size = Math.min(Math.max(size, 0), limit > -1 ? limit : size); size = size < 0 ? 0 : size; return Array(size).fill(1).map((value, i) => (0, _addDays.default)(startDay, i + skip)); } function isWithinSelectionCalc(date, startDate, endDate) { const { startDate: start, endDate: end } = toRange(startDate, endDate); return startDate && endDate ? (0, _isValid.default)(start) && (0, _isValid.default)(end) && (0, _isWithinInterval.default)(date, { start, end }) : false; } function isDisabledCalc(date, minDate, maxDate) { return minDate && (0, _isBefore.default)((0, _startOfDay.default)(date), (0, _startOfDay.default)(minDate)) || maxDate && (0, _isAfter.default)((0, _startOfDay.default)(date), (0, _startOfDay.default)(maxDate)); } function isStartDateCalc(date, range) { return range.startDate && (0, _isSameDay.default)(date, range.startDate); } function isEndDateCalc(date, range) { return range.endDate && (0, _isSameDay.default)(date, range.endDate); } function isPreviewCalc(date, startDate, endDate, hoverDate) { const { startDate: start, endDate: end } = toRange(startDate, hoverDate); return startDate && !endDate && (0, _isValid.default)(start) && (0, _isValid.default)(end) && (0, _isWithinInterval.default)(date, { start, end }); } function correctV1Format(date) { if (/YYYY/.test(date) && /DD/.test(date)) { (0, _componentHelper.warn)('You are using "YYYY-MM-DD" as the dateFormat or returnFormat? Please use "yyyy-MM-dd" instead!'); date = date.replace(/DD/, 'dd').replace(/YYYY/, 'yyyy'); } return date; } function convertStringToDate(date) { let { dateFormat = null } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!date) { return null; } let dateObject; dateObject = typeof date === 'string' ? (0, _parseISO.default)(date) : (0, _toDate.default)(date); if (typeof date === 'string' && dateFormat && !(0, _isValid.default)(dateObject)) { dateFormat = correctV1Format(dateFormat); dateObject = (0, _parse.default)(date, dateFormat, new Date()); } if (!(0, _isValid.default)(dateObject)) { (0, _componentHelper.warn)('convertStringToDate got invalid date:', date); return null; } return dateObject; } function formatDate(dateValue) { let { locale = _defaults.LOCALE, variant = 'numeric', formatOptions = undefined } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const options = formatOptions !== null && formatOptions !== void 0 ? formatOptions : getFormatOptions(variant); const date = convertStringToDate(dateValue); return typeof Intl !== 'undefined' ? new Intl.DateTimeFormat(locale, options).format(date) : date.toLocaleString(locale, options); } function formatDateRange(dates) { let { locale = _defaults.LOCALE, variant = 'numeric', formatOptions = undefined } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const options = formatOptions !== null && formatOptions !== void 0 ? formatOptions : getFormatOptions(variant); const startDate = convertStringToDate(dates.startDate); const endDate = convertStringToDate(dates.endDate); if (typeof Intl !== 'undefined') { return new Intl.DateTimeFormat(locale, options).formatRange(startDate, endDate); } const startDateString = startDate.toLocaleString(locale, options); const endDateString = endDate.toLocaleString(locale, options); return `${startDateString}-${endDateString}`; } function getFormatOptions(variant) { if (variant === 'numeric') { return { day: '2-digit', month: '2-digit', year: 'numeric' }; } return { day: 'numeric', month: variant, year: 'numeric' }; } //# sourceMappingURL=DatePickerCalc.js.map