@abbl/material-calendar
Version:
Calendar component build with React and Material-UI
104 lines • 3.9 kB
JavaScript
var _a;
import { eachDayOfInterval, endOfWeek, getDaysInMonth, isSameDay, isSameMonth, isSameWeek, isSameYear, startOfWeek, } from 'date-fns';
export var DateRange;
(function (DateRange) {
DateRange[DateRange["DAY"] = 0] = "DAY";
DateRange[DateRange["WEEK"] = 1] = "WEEK";
DateRange[DateRange["MONTH"] = 2] = "MONTH";
DateRange[DateRange["YEAR"] = 3] = "YEAR";
DateRange[DateRange["YEARS"] = 4] = "YEARS";
})(DateRange || (DateRange = {}));
var dateRangeCheckers = (_a = {},
_a[DateRange.DAY] = isSameDay,
_a[DateRange.WEEK] = isSameWeek,
_a[DateRange.MONTH] = isSameMonth,
_a[DateRange.YEAR] = isSameYear,
_a[DateRange.YEARS] = function () { return true; },
_a);
/**
* Class used to check if closest DayRange to interval provided
* by user is filled with empty arrays.
*
* @privateRemarks
* The idea of strict DateRanges might not be the most flexible
* one, since it was made based on default views provided by calendar.
* Might need a little refractor in future if custom views will require it.
*
* @internal
*/
var EventStoragePresenceHelper = /** @class */ (function () {
function EventStoragePresenceHelper() {
}
/**
* Checks if each day in determined DateRange has array assigned to it.
*
* @param from
* @param till
* @param eventStorage
*
* @returns true if data is present.
*/
EventStoragePresenceHelper.isDataPresent = function (from, till, eventStorage) {
var dateRange = this.determineRange(from, till);
switch (dateRange) {
case DateRange.DAY:
return this.isDayPresent(from, eventStorage);
case DateRange.WEEK:
return this.isWeekPresent(from, eventStorage);
case DateRange.MONTH:
return this.isMonthPresent(from, eventStorage);
case DateRange.YEAR:
return this.isYearPresent(from);
default:
return false;
}
};
/**
* Returns first DateRange that given interval fits between.
*
* @param from
* @param till
*/
EventStoragePresenceHelper.determineRange = function (from, till) {
for (var range in DateRange) {
if (!isNaN(Number(range))) {
if (dateRangeCheckers[range](from, till)) {
return Number(range);
}
}
}
return -1;
};
/*
*
* Data parsers.
*
*/
EventStoragePresenceHelper.isDayPresent = function (date, eventStorage) {
var _a, _b;
return ((_b = (_a = eventStorage[date.getFullYear()]) === null || _a === void 0 ? void 0 : _a[date.getMonth()]) === null || _b === void 0 ? void 0 : _b[date.getDate()]) !== undefined;
};
EventStoragePresenceHelper.isWeekPresent = function (weekDay, eventStorage) {
var weekDays = eachDayOfInterval({ start: startOfWeek(weekDay), end: endOfWeek(weekDay) });
for (var _i = 0, weekDays_1 = weekDays; _i < weekDays_1.length; _i++) {
var day = weekDays_1[_i];
if (!this.isDayPresent(day, eventStorage)) {
return false;
}
}
return true;
};
EventStoragePresenceHelper.isMonthPresent = function (monthDay, eventStorage) {
var _a;
var daysInMonth = getDaysInMonth(monthDay);
var storageMonth = (_a = eventStorage[monthDay.getFullYear()]) === null || _a === void 0 ? void 0 : _a[monthDay.getMonth()];
return storageMonth && daysInMonth === Object.keys(storageMonth).length;
};
// TODO: Implement it
EventStoragePresenceHelper.isYearPresent = function (yearDay) {
throw new Error('Not implemented');
};
return EventStoragePresenceHelper;
}());
export default EventStoragePresenceHelper;
//# sourceMappingURL=EventStoragePresenceHelper.js.map