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
JavaScript
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==