@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
233 lines (232 loc) • 9.19 kB
JavaScript
;
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