/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import findAndSpliceAll from "../helpers/array/findAndSpliceAll"; import LazyLoadQueueIntersector, { LazyLoadElement } from "./lazyLoadQueueIntersector"; import VisibilityIntersector, { OnVisibilityChange } from "./visibilityIntersector"; export default class LazyLoadQueueRepeat extends LazyLoadQueueIntersector { private _queue: Map = new Map(); constructor(parallelLimit?: number, protected onVisibilityChange?: OnVisibilityChange) { super(parallelLimit); this.intersector = new VisibilityIntersector((target, visible) => { const spliced = findAndSpliceAll(this.queue, (i) => i.div === target); if(visible) { const items = spliced.length ? spliced : [this._queue.get(target)]; items.forEach((item) => { this.queue.unshift(item || this._queue.get(target)); }); } this.onVisibilityChange && this.onVisibilityChange(target, visible); this.setProcessQueueTimeout(); }); } public clear() { super.clear(); this._queue.clear(); } /* public async processItem(item: LazyLoadElement) { //await super.processItem(item); await LazyLoadQueueBase.prototype.processItem.call(this, item); if(this.lazyLoadMedia.length) { this.processQueue(); } } */ public observe(el: LazyLoadElement) { this._queue.set(el.div, el); this.intersector.observe(el.div); } }