From 3f7f3e0f4fe6877ffaac5bf0054ece2e8ba6e996 Mon Sep 17 00:00:00 2001
From: richard-loafle <44828666+richard-loafle@users.noreply.github.com>
Date: Tue, 11 Feb 2020 18:07:42 +0900
Subject: [PATCH] bug of scroll to bottom is fixed
---
.../lib/components/messages.component.html | 7 ++-
.../lib/components/messages.component.scss | 4 ++
.../src/lib/components/messages.component.ts | 47 ++++++++++++-------
3 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.html b/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.html
index b6c5d898..9c8a0da5 100644
--- a/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.html
+++ b/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.html
@@ -87,5 +87,10 @@
fxFlexFill
class="chat-messages-buffer-container disappear"
>
-
+
diff --git a/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.scss b/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.scss
index 684a8ad0..1d375809 100644
--- a/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.scss
+++ b/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.scss
@@ -160,6 +160,10 @@ $tablet-l-width: 1024px;
opacity: 0 !important;
}
+.show {
+ opacity: 1 !important;
+}
+
.disappear {
display: none !important;
}
diff --git a/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.ts b/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.ts
index 2a0a7e85..6a259953 100644
--- a/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.ts
+++ b/projects/ucap-webmessenger-ui-chat/src/lib/components/messages.component.ts
@@ -120,6 +120,9 @@ export class MessagesComponent implements OnInit, OnDestroy {
@ViewChild('chatMessagesBufferContainer', { static: false })
chatMessagesBufferContainer: ElementRef;
+ @ViewChildren(PerfectScrollbarDirective)
+ psDirectiveRefList: QueryList;
+
@ViewChild(VirtualScrollerComponent, { static: false })
private virtualScroller: VirtualScrollerComponent;
@@ -404,22 +407,7 @@ export class MessagesComponent implements OnInit, OnDestroy {
}
storeScrollPosition() {
- this.storedScrollItem = this.eventList[
- this.virtualScroller.viewPortInfo.startIndex
- ];
-
- const chatMessageBox = this.chatMessageBoxList.find(
- el =>
- el.message.seq ===
- this.eventList[this.virtualScroller.viewPortInfo.startIndex].seq
- );
- if (!!chatMessageBox) {
- this.storedScrollItemOffsetTop =
- chatMessageBox.offsetTop -
- this.virtualScroller.viewPortInfo.scrollStartPosition;
- } else {
- this.storedScrollItemOffsetTop = 0;
- }
+ this.storedScrollItemOffsetTop = this.getOffsetTop();
}
swapScrollTo(
@@ -457,11 +445,19 @@ export class MessagesComponent implements OnInit, OnDestroy {
preSwapScroll(useHide: boolean, useSwap: boolean) {
if (useSwap && !this.swapped) {
+ this.chatMessagesBufferContainer.nativeElement.classList.add('hide');
+
this.chatMessagesBuffer.nativeElement.innerHTML = this.chatMessagesContainer.nativeElement.innerHTML;
- this.chatMessagesBuffer.nativeElement.scrollTop = this.chatMessagesContainer.nativeElement.scrollTop;
this.chatMessagesBufferContainer.nativeElement.classList.remove(
'disappear'
);
+
+ this.chatMessagesBuffer.nativeElement.scrollTop = this.virtualScroller[
+ // tslint:disable-next-line: no-string-literal
+ 'element'
+ ].nativeElement.scrollTop;
+ this.chatMessagesBufferContainer.nativeElement.classList.remove('hide');
+
this.swapped = true;
}
@@ -702,4 +698,21 @@ export class MessagesComponent implements OnInit, OnDestroy {
item2: Info
// tslint:disable-next-line: semicolon
): boolean => !!item1 && !!item2 && item1.seq === item2.seq;
+
+ private getOffsetTop(): number {
+ this.storedScrollItem = this.eventList[
+ this.virtualScroller.viewPortInfo.startIndex
+ ];
+
+ const chatMessageBox = this.chatMessageBoxList.find(
+ el =>
+ el.message.seq ===
+ this.eventList[this.virtualScroller.viewPortInfo.startIndex].seq
+ );
+
+ return !!chatMessageBox
+ ? chatMessageBox.offsetTop -
+ this.virtualScroller.viewPortInfo.scrollStartPosition
+ : 0;
+ }
}