UNPKG

angular-calendar-timeline

Version:

A timeline for angular that shows events on a timeline board in different modes: days, weeks, and months.

106 lines 13.4 kB
export class ItemsIterator { constructor() { this._items = []; } get items() { return this._items; } setItems(items) { this._items = items; this._validate(); this._createItemsLevels(); } isEmpty() { return !this._items?.length; } getFirstItem(onlyVisible) { let firstItem = null; this.forEach((item, parent) => { if (!item.startDate || !item.endDate) { return; } if (!firstItem || new Date(firstItem.startDate).getTime() > new Date(item.startDate).getTime()) { firstItem = item; } }, onlyVisible); return firstItem; } getLastItem(onlyVisible) { let lastItem = null; this.forEach((item, parent) => { if (!item.startDate || !item.endDate) { return; } if (!lastItem || new Date(lastItem.endDate).getTime() < new Date(item.endDate).getTime()) { lastItem = item; } }, onlyVisible); return lastItem; } forEach(handler, onlyVisible = false) { function iterateAll(items, parent) { (items ?? []).forEach(item => { handler(item, parent); iterateAll(item.streamItems ?? [], item); if (!onlyVisible || item.childrenItemsExpanded) { iterateAll(item.childrenItems ?? [], item); } }); } iterateAll(this._items, null); } _createItemsLevels() { this.forEach((item, parent) => { if (item.streamItems) { item._streamLevels = this._createItemLevels(item); } }); } _createItemLevels(item) { const levels = []; item.streamItems.forEach(item => { let isLevelFound = false; let currentLevelIndex = 0; while (!isLevelFound) { const levelItems = levels[currentLevelIndex]; if (!levelItems) { levels[currentLevelIndex] = [item]; isLevelFound = true; break; } const isItemCollides = levelItems.some(levelItem => this._isItemsCollides(levelItem, item)); if (!isItemCollides) { levels[currentLevelIndex].push(item); isLevelFound = true; break; } currentLevelIndex++; } }); return levels; } _isItemsCollides(item1, item2) { const item1Start = item1._left; const item1End = item1._left + item1._width; const item2Start = item2._left; const item2End = item2._left + item2._width; return item1Start === item2Start || item1End === item2End || item1End > item2Start && item1Start < item2End || item2End > item1Start && item2Start < item1End; } _validate() { this.forEach((item) => { if ((item.startDate && !item.endDate) || (item.endDate && !item.startDate)) { this._removeItemDates(item); } if (item.streamItems) { this._removeItemDates(item); } }); } _removeItemDates(item) { delete item.startDate; delete item.endDate; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtaXRlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNhbGVuZGFyLXRpbWVsaW5lL3NyYy9saWIvaXRlbXMtaXRlcmF0b3IvaXRlbXMtaXRlcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFDVSxXQUFNLEdBQW9CLEVBQUUsQ0FBQztJQThIdkMsQ0FBQztJQTVIQyxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFzQjtRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQVksQ0FBQyxXQUFvQjtRQUMvQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckMsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDL0YsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQyxFQUFFLFdBQVcsQ0FB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QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGltZWxpbmVJdGVtLCBJSXRlbXNJdGVyYXRvciB9IGZyb20gXCIuLi9tb2RlbHNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtc0l0ZXJhdG9yIGltcGxlbWVudHMgSUl0ZW1zSXRlcmF0b3Ige1xyXG4gIHByaXZhdGUgX2l0ZW1zOiBJVGltZWxpbmVJdGVtW10gPSBbXTtcclxuXHJcbiAgZ2V0IGl0ZW1zKCk6IElUaW1lbGluZUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XHJcbiAgfVxyXG5cclxuICBzZXRJdGVtcyhpdGVtczogSVRpbWVsaW5lSXRlbVtdKSB7XHJcbiAgICB0aGlzLl9pdGVtcyA9IGl0ZW1zO1xyXG4gICAgdGhpcy5fdmFsaWRhdGUoKTtcclxuICAgIHRoaXMuX2NyZWF0ZUl0ZW1zTGV2ZWxzKCk7XHJcbiAgfVxyXG5cclxuICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9pdGVtcz8ubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rmlyc3RJdGVtKG9ubHlWaXNpYmxlOiBib29sZWFuKTogSVRpbWVsaW5lSXRlbSB7XHJcbiAgICBsZXQgZmlyc3RJdGVtID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmZvckVhY2goKGl0ZW0sIHBhcmVudCkgPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0uc3RhcnREYXRlIHx8ICFpdGVtLmVuZERhdGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZmlyc3RJdGVtIHx8IG5ldyBEYXRlKGZpcnN0SXRlbS5zdGFydERhdGUpLmdldFRpbWUoKSA+IG5ldyBEYXRlKGl0ZW0uc3RhcnREYXRlKS5nZXRUaW1lKCkpIHtcclxuICAgICAgICBmaXJzdEl0ZW0gPSBpdGVtO1xyXG4gICAgICB9XHJcbiAgICB9LCBvbmx5VmlzaWJsZSk7XHJcblxyXG4gICAgcmV0dXJuIGZpcnN0SXRlbTtcclxuICB9XHJcblxyXG4gIGdldExhc3RJdGVtKG9ubHlWaXNpYmxlOiBib29sZWFuKTogSVRpbWVsaW5lSXRlbSB7XHJcbiAgICBsZXQgbGFzdEl0ZW0gPSBudWxsO1xyXG5cclxuICAgIHRoaXMuZm9yRWFjaCgoaXRlbSwgcGFyZW50KSA9PiB7XHJcbiAgICAgIGlmICghaXRlbS5zdGFydERhdGUgfHwgIWl0ZW0uZW5kRGF0ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFsYXN0SXRlbSB8fCBuZXcgRGF0ZShsYXN0SXRlbS5lbmREYXRlKS5nZXRUaW1lKCkgPCBuZXcgRGF0ZShpdGVtLmVuZERhdGUpLmdldFRpbWUoKSkge1xyXG4gICAgICAgIGxhc3RJdGVtID0gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfSwgb25seVZpc2libGUpO1xyXG5cclxuICAgIHJldHVybiBsYXN0SXRlbTtcclxuICB9XHJcblxyXG4gIGZvckVhY2goaGFuZGxlcjogKGl0ZW06IElUaW1lbGluZUl0ZW0sIHBhcmVudDogKElUaW1lbGluZUl0ZW0gfCBudWxsKSkgPT4gdm9pZCwgb25seVZpc2libGUgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgZnVuY3Rpb24gaXRlcmF0ZUFsbChpdGVtczogSVRpbWVsaW5lSXRlbVtdLCBwYXJlbnQ6IElUaW1lbGluZUl0ZW0gfCBudWxsKTogdm9pZCB7XHJcbiAgICAgIChpdGVtcyA/PyBbXSkuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBoYW5kbGVyKGl0ZW0sIHBhcmVudCk7XHJcbiAgICAgICAgaXRlcmF0ZUFsbChpdGVtLnN0cmVhbUl0ZW1zID8/IFtdLCBpdGVtKTtcclxuICAgICAgICBpZiAoIW9ubHlWaXNpYmxlIHx8IGl0ZW0uY2hpbGRyZW5JdGVtc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICBpdGVyYXRlQWxsKGl0ZW0uY2hpbGRyZW5JdGVtcyA/PyBbXSwgaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpdGVyYXRlQWxsKHRoaXMuX2l0ZW1zLCBudWxsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUl0ZW1zTGV2ZWxzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JFYWNoKChpdGVtLCBwYXJlbnQpID0+IHtcclxuICAgICAgaWYgKGl0ZW0uc3RyZWFtSXRlbXMpIHtcclxuICAgICAgICBpdGVtLl9zdHJlYW1MZXZlbHMgPSB0aGlzLl9jcmVhdGVJdGVtTGV2ZWxzKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUl0ZW1MZXZlbHMoaXRlbTogSVRpbWVsaW5lSXRlbSk6IElUaW1lbGluZUl0ZW1bXVtdIHtcclxuICAgIGNvbnN0IGxldmVsczogSVRpbWVsaW5lSXRlbVtdW10gPSBbXTtcclxuXHJcbiAgICBpdGVtLnN0cmVhbUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGxldCBpc0xldmVsRm91bmQgPSBmYWxzZTtcclxuICAgICAgbGV0IGN1cnJlbnRMZXZlbEluZGV4ID0gMDtcclxuICAgICAgICB3aGlsZSAoIWlzTGV2ZWxGb3VuZCkge1xyXG5cclxuICAgICAgICBjb25zdCBsZXZlbEl0ZW1zID0gbGV2ZWxzW2N1cnJlbnRMZXZlbEluZGV4XTtcclxuICAgICAgICBpZiAoIWxldmVsSXRlbXMpIHtcclxuICAgICAgICAgIGxldmVsc1tjdXJyZW50TGV2ZWxJbmRleF0gPSBbaXRlbV07XHJcbiAgICAgICAgICBpc0xldmVsRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpc0l0ZW1Db2xsaWRlcyA9IGxldmVsSXRlbXMuc29tZShsZXZlbEl0ZW0gPT4gdGhpcy5faXNJdGVtc0NvbGxpZGVzKGxldmVsSXRlbSwgaXRlbSkpO1xyXG4gICAgICAgIGlmICghaXNJdGVtQ29sbGlkZXMpIHtcclxuICAgICAgICAgIGxldmVsc1tjdXJyZW50TGV2ZWxJbmRleF0ucHVzaChpdGVtKTtcclxuICAgICAgICAgIGlzTGV2ZWxGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN1cnJlbnRMZXZlbEluZGV4Kys7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIGxldmVscztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzSXRlbXNDb2xsaWRlcyhpdGVtMTogSVRpbWVsaW5lSXRlbSwgaXRlbTI6IElUaW1lbGluZUl0ZW0pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGl0ZW0xU3RhcnQgPSBpdGVtMS5fbGVmdDtcclxuICAgIGNvbnN0IGl0ZW0xRW5kID0gaXRlbTEuX2xlZnQgKyBpdGVtMS5fd2lkdGg7XHJcbiAgICBjb25zdCBpdGVtMlN0YXJ0ID0gaXRlbTIuX2xlZnQ7XHJcbiAgICBjb25zdCBpdGVtMkVuZCA9IGl0ZW0yLl9sZWZ0ICsgaXRlbTIuX3dpZHRoO1xyXG5cclxuICAgIHJldHVybiBpdGVtMVN0YXJ0ID09PSBpdGVtMlN0YXJ0IHx8IGl0ZW0xRW5kID09PSBpdGVtMkVuZCB8fFxyXG4gICAgICBpdGVtMUVuZCA+IGl0ZW0yU3RhcnQgJiYgaXRlbTFTdGFydCA8IGl0ZW0yRW5kIHx8XHJcbiAgICAgIGl0ZW0yRW5kID4gaXRlbTFTdGFydCAmJiBpdGVtMlN0YXJ0IDwgaXRlbTFFbmQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92YWxpZGF0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9yRWFjaCgoaXRlbTogSVRpbWVsaW5lSXRlbSkgPT4ge1xyXG4gICAgICBpZiAoKGl0ZW0uc3RhcnREYXRlICYmICFpdGVtLmVuZERhdGUpIHx8IChpdGVtLmVuZERhdGUgJiYgIWl0ZW0uc3RhcnREYXRlKSkge1xyXG4gICAgICAgIHRoaXMuX3JlbW92ZUl0ZW1EYXRlcyhpdGVtKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGl0ZW0uc3RyZWFtSXRlbXMpIHtcclxuICAgICAgICB0aGlzLl9yZW1vdmVJdGVtRGF0ZXMoaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlSXRlbURhdGVzKGl0ZW06IElUaW1lbGluZUl0ZW0pOiB2b2lkIHtcclxuICAgIGRlbGV0ZSBpdGVtLnN0YXJ0RGF0ZTtcclxuICAgIGRlbGV0ZSBpdGVtLmVuZERhdGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==