UNPKG

@abbl/material-calendar

Version:

Calendar component build with React and Material-UI

104 lines 3.9 kB
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