浏览代码

Add saveScrollPosition method on ChatContent

JC Brand 4 年之前
父节点
当前提交
279a3c3413
共有 3 个文件被更改,包括 14 次插入14 次删除
  1. 1 8
      src/plugins/minimize/utils.js
  2. 3 5
      src/shared/chat/baseview.js
  3. 10 1
      src/shared/chat/chat-content.js

+ 1 - 8
src/plugins/minimize/utils.js

@@ -153,14 +153,7 @@ export function minimize (ev, model) {
     }
     // save the scroll position to restore it on maximize
     const view = _converse.chatboxviews.get(model.get('jid'));
-    const scroll = view.querySelector('.chat-content__messages')?.scrollTop;
-    if (scroll) {
-        if (model.collection && model.collection.browserStorage) {
-            model.save({ scroll });
-        } else {
-            model.set({ scroll });
-        }
-    }
+    view.querySelector('.chat-content__messages')?.saveScrollPosition();
     model.setChatState(_converse.INACTIVE);
     u.safeSave(model, {
         'hidden': true,

+ 3 - 5
src/shared/chat/baseview.js

@@ -106,14 +106,12 @@ export default class BaseChatView extends ElementView {
     _markScrolled (ev) {
         let scrolled = true;
         let scrollTop = null;
-        const msgs_container = this.querySelector('.chat-content__messages');
-        const is_at_bottom =
-            msgs_container.scrollTop + msgs_container.clientHeight >= msgs_container.scrollHeight - 62; // sigh...
-
+        const is_at_bottom = ev.target.scrollTop + ev.target.clientHeight >= ev.target.scrollHeight - 62; // sigh...
         if (is_at_bottom) {
             scrolled = false;
             this.onScrolledDown();
-        } else if (msgs_container.scrollTop === 0) {
+        } else if (ev.target.scrollTop === 0) {
+            scrollTop = ev.target.scrollTop;
             /**
              * Triggered once the chat's message area has been scrolled to the top
              * @event _converse#chatBoxScrolledUp

+ 10 - 1
src/shared/chat/chat-content.js

@@ -1,9 +1,11 @@
 import './message-history';
 import debounce from 'lodash/debounce';
 import { CustomElement } from 'shared/components/element.js';
-import { _converse, api } from '@converse/headless/core';
+import { _converse, api, converse } from '@converse/headless/core';
 import { html } from 'lit';
 
+const { u } = converse;
+
 export default class ChatContent extends CustomElement {
 
     static get properties () {
@@ -56,6 +58,13 @@ export default class ChatContent extends CustomElement {
         this.debouncedMaintainScroll();
     }
 
+    saveScrollPosition () {
+        const scrollTop = this.scrollTop;
+        if (scrollTop) {
+            u.safeSave(this.model, { 'scrolled': true, scrollTop });
+        }
+    }
+
     maintainScrollPosition () {
         if (this.was_scrolled_up) {
             const pos = this.model.get('scrollTop');