UNPKG

@hsaadawy/ngx-chat

Version:
30 lines 3.73 kB
import { Directive, ElementRef, EventEmitter, Output } from '@angular/core'; export class IntersectionObserverDirective { constructor(el) { this.el = el; this.ngxChatIntersectionObserver = new EventEmitter(); this.intersectionObserver = new IntersectionObserver((entries) => { this.ngxChatIntersectionObserver.emit(entries[0]); }, { // even if user is not pixel-perfect at the bottom of a chat message list we still want to // react to new messages, hence we have a buffer of 150px around the bottom of the chat message list rootMargin: '150px 0px 150px 0px', }); this.intersectionObserver.observe(el.nativeElement); } ngOnDestroy() { this.intersectionObserver.disconnect(); } } IntersectionObserverDirective.decorators = [ { type: Directive, args: [{ selector: '[ngxChatIntersectionObserver]', },] } ]; IntersectionObserverDirective.ctorParameters = () => [ { type: ElementRef } ]; IntersectionObserverDirective.propDecorators = { ngxChatIntersectionObserver: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJzZWN0aW9uLW9ic2VydmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BhenpuZXR3b3JrL25neC1jaGF0L3NyYy9saWIvZGlyZWN0aXZlcy9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLdkYsTUFBTSxPQUFPLDZCQUE2QjtJQU90QyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUpsQyxnQ0FBMkIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSzdDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLG9CQUFvQixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLEVBQUU7WUFDQywwRkFBMEY7WUFDMUYsb0dBQW9HO1lBQ3BHLFVBQVUsRUFBRSxxQkFBcUI7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0MsQ0FBQzs7O1lBdkJKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsK0JBQStCO2FBQzVDOzs7WUFKbUIsVUFBVTs7OzBDQU96QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW25neENoYXRJbnRlcnNlY3Rpb25PYnNlcnZlcl0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgbmd4Q2hhdEludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIHByaXZhdGUgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubmd4Q2hhdEludGVyc2VjdGlvbk9ic2VydmVyLmVtaXQoZW50cmllc1swXSk7XHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAvLyBldmVuIGlmIHVzZXIgaXMgbm90IHBpeGVsLXBlcmZlY3QgYXQgdGhlIGJvdHRvbSBvZiBhIGNoYXQgbWVzc2FnZSBsaXN0IHdlIHN0aWxsIHdhbnQgdG9cclxuICAgICAgICAgICAgLy8gcmVhY3QgdG8gbmV3IG1lc3NhZ2VzLCBoZW5jZSB3ZSBoYXZlIGEgYnVmZmVyIG9mIDE1MHB4IGFyb3VuZCB0aGUgYm90dG9tIG9mIHRoZSBjaGF0IG1lc3NhZ2UgbGlzdFxyXG4gICAgICAgICAgICByb290TWFyZ2luOiAnMTUwcHggMHB4IDE1MHB4IDBweCcsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKGVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=