36 lines
818 B
JavaScript
36 lines
818 B
JavaScript
import Service, { inject as service } from "@ember/service";
|
|
import { isTesting } from "discourse-common/config/environment";
|
|
import { bind } from "discourse-common/utils/decorators";
|
|
|
|
export default class ChatMessageVisibilityObserver extends Service {
|
|
@service chat;
|
|
|
|
observer = new IntersectionObserver(this._observerCallback, {
|
|
root: document,
|
|
rootMargin: "-10px",
|
|
});
|
|
|
|
willDestroy() {
|
|
this.observer.disconnect();
|
|
}
|
|
|
|
@bind
|
|
_observerCallback(entries) {
|
|
entries.forEach((entry) => {
|
|
entry.target.dataset.visible = entry.isIntersecting;
|
|
|
|
if (entry.isIntersecting && !isTesting()) {
|
|
this.chat.updateLastReadMessage();
|
|
}
|
|
});
|
|
}
|
|
|
|
observe(element) {
|
|
this.observer.observe(element);
|
|
}
|
|
|
|
unobserve(element) {
|
|
this.observer.unobserve(element);
|
|
}
|
|
}
|