UNPKG

timeperiodjs

Version:
74 lines (73 loc) 3.35 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const DateFilter_1 = __importDefault(require("../filters/DateFilter")); const Period_1 = __importDefault(require("../Period")); const PeriodConstants_1 = require("../PeriodConstants"); const PeriodTimeChanger_1 = __importDefault(require("../PeriodTimeChanger")); const DateSorter_1 = __importDefault(require("../sorters/DateSorter")); class IPeriod { constructor(start, end) { this._start = new Date(start); this._end = new Date(end); this._timeChanger = new PeriodTimeChanger_1.default(this._start, this._end); } getDates() { return [new Date(this._start), new Date(this._end)]; } getOverlappingDates(dates) { return dates.filter(date => date >= this._start && date <= this._end); } isDateOverlapping(date) { return this.getOverlappingDates([date]).length > 0; } isPeriodOverlapping(period, conf) { return this.getOverlappingPeriods([period], conf).length > 0; } // eslint-disable-next-line class-methods-use-this getOverlappingPeriods(periods, conf) { if (conf === null || conf === void 0 ? void 0 : conf.onlyFullOverlaps) { return periods.filter(period => period.start >= this._start && period.end <= this._end); } return periods.filter(period => period.end >= this._start && period.start <= this._end); } comparePeriod(period) { const periodComparisonsDTO = []; const allDates = new DateSorter_1.default([...this.getDates(), ...period.getDates()]).sort(); const dates = new DateFilter_1.default(allDates).filterDuplicates(); const conf = { onlyFullOverlaps: true, }; let lastEntry; for (let i = 0; i < dates.length; i++) { const date = dates[i]; if (lastEntry) { const tempPeriod = new Period_1.default(lastEntry, date); const periodComparisonDTO = { status: PeriodConstants_1.PeriodComparisonStatuses.EXACT, start: tempPeriod.start, end: tempPeriod.end }; if (this.isPeriodOverlapping(tempPeriod, conf) && !period.isPeriodOverlapping(tempPeriod, conf)) periodComparisonDTO.status = PeriodConstants_1.PeriodComparisonStatuses.REMOVED; else if (!this.isPeriodOverlapping(tempPeriod, conf) && period.isPeriodOverlapping(tempPeriod, conf)) periodComparisonDTO.status = PeriodConstants_1.PeriodComparisonStatuses.ADDED; periodComparisonsDTO.push(periodComparisonDTO); } lastEntry = new Date(date); } return periodComparisonsDTO; } cutBoundaries(periods) { return this.getOverlappingPeriods(periods).map(period => { if (period._start < this._start) period.setStart = this._start; if (period._end > this._end) period.setEnd = this._end; return period; }); } } exports.default = IPeriod;