@hsaadawy/ngx-chat
Version:
30 lines • 3.73 kB
JavaScript
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=