UNPKG

right-angled

Version:

Lightweight and easy to use angular data grids. Integrates with your markup and styles rather than generating its own.

57 lines 8.19 kB
import { Directive, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "../providers/buffered-pager"; import * as i2 from "../providers/list"; export class InfiniteDirective { constructor(elementRef, bufferedPager, list, renderer) { this.elementRef = elementRef; this.bufferedPager = bufferedPager; this.list = list; this.renderer = renderer; } ngOnChanges(changes) { if (this.scrollListener) { this.scrollListener(); } if (changes.targetElement && changes.targetElement.currentValue) { this.scrollListener = this.renderer.listen(this.targetElement, 'scroll', () => { if (this.list.busy || false === this.bufferedPager.canLoadMore) { return; } const targetTop = this.targetElement.getBoundingClientRect().top; const targetHeight = this.targetElement.clientHeight; const elementPosition = this.elementRef.nativeElement.getBoundingClientRect().top; if (targetTop + targetHeight >= elementPosition) { this.list.loadData(); } }); } else { this.scrollListener = this.renderer.listen('window', 'scroll', () => { if (this.list.busy || false === this.bufferedPager.canLoadMore) { return; } const windowHeight = document.documentElement.clientHeight; const elementPosition = this.elementRef.nativeElement.getBoundingClientRect().top; if (elementPosition - windowHeight <= 0) { this.list.loadData(); } }); } } ngOnDestroy() { this.scrollListener(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InfiniteDirective, deps: [{ token: i0.ElementRef }, { token: i1.RTBufferedPager }, { token: i2.RTList }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: InfiniteDirective, selector: "[rtInfinite]", inputs: { targetElement: ["rtInfinite", "targetElement"] }, usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InfiniteDirective, decorators: [{ type: Directive, args: [{ selector: '[rtInfinite]' }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.RTBufferedPager }, { type: i2.RTList }, { type: i0.Renderer2 }]; }, propDecorators: { targetElement: [{ type: Input, args: ['rtInfinite'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmlnaHQtYW5nbGVkL3NyYy9saWIvbGlzdHMvcGFnaW5nL2luZmluaXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBaUQsTUFBTSxlQUFlLENBQUM7Ozs7QUFPNUcsTUFBTSxPQUFPLGlCQUFpQjtJQUcxQixZQUFvQixVQUFzQixFQUFVLGFBQThCLEVBQVUsSUFBWSxFQUFVLFFBQW1CO1FBQWpILGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFHLENBQUM7SUFDbEksV0FBVyxDQUFDLE9BQXlDO1FBQ3hELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUU7WUFDN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQzFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO29CQUM1RCxPQUFPO2lCQUNWO2dCQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUM7Z0JBQ2pFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO2dCQUNyRCxNQUFNLGVBQWUsR0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQTZCLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUM7Z0JBQ25HLElBQUksU0FBUyxHQUFHLFlBQVksSUFBSSxlQUFlLEVBQUU7b0JBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQ3hCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDaEUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7b0JBQzVELE9BQU87aUJBQ1Y7Z0JBQ0QsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7Z0JBQzNELE1BQU0sZUFBZSxHQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBNkIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztnQkFDbkcsSUFBSSxlQUFlLEdBQUcsWUFBWSxJQUFJLENBQUMsRUFBRTtvQkFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDeEI7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUNNLFdBQVc7UUFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQzsrR0FwQ1EsaUJBQWlCO21HQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBSDdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGNBQWM7aUJBQzNCOzRLQUUrQixhQUFhO3NCQUF4QyxLQUFLO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUlRMaXN0IH0gZnJvbSAnLi4vcHJvdmlkZXJzL2xpc3QnO1xyXG5pbXBvcnQgeyBSVEJ1ZmZlcmVkUGFnZXIgfSBmcm9tICcuLi9wcm92aWRlcnMvYnVmZmVyZWQtcGFnZXInO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tydEluZmluaXRlXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEluZmluaXRlRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gICAgQElucHV0KCdydEluZmluaXRlJykgcHVibGljIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgcHVibGljIHNjcm9sbExpc3RlbmVyOiBhbnk7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgYnVmZmVyZWRQYWdlcjogUlRCdWZmZXJlZFBhZ2VyLCBwcml2YXRlIGxpc3Q6IFJUTGlzdCwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7fVxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgdGFyZ2V0RWxlbWVudD86IFNpbXBsZUNoYW5nZSB9KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbmdlcy50YXJnZXRFbGVtZW50ICYmIGNoYW5nZXMudGFyZ2V0RWxlbWVudC5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMudGFyZ2V0RWxlbWVudCwgJ3Njcm9sbCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3QuYnVzeSB8fCBmYWxzZSA9PT0gdGhpcy5idWZmZXJlZFBhZ2VyLmNhbkxvYWRNb3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFRvcCA9IHRoaXMudGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRIZWlnaHQgPSB0aGlzLnRhcmdldEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VG9wICsgdGFyZ2V0SGVpZ2h0ID49IGVsZW1lbnRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5sb2FkRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdzY3JvbGwnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saXN0LmJ1c3kgfHwgZmFsc2UgPT09IHRoaXMuYnVmZmVyZWRQYWdlci5jYW5Mb2FkTW9yZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50UG9zaXRpb24gLSB3aW5kb3dIZWlnaHQgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdC5sb2FkRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==