This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/plugins/chat/assets/javascripts/discourse/services/chat-message-visibility-observer.js
Roman Rizzi 0a5f548635
DEV: Move discourse-chat to the core repo. (#18776)
As part of this move, we are also renaming `discourse-chat` to `chat`.
2022-11-02 10:41:30 -03:00

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);
}
}