fix scrolling

This commit is contained in:
tiago.kayaya
2021-08-23 16:31:06 +01:00
parent 276febdf71
commit e0f68c9706
10 changed files with 242 additions and 56 deletions
@@ -39,7 +39,7 @@
<ion-label>Esta conversa passou a grupo</ion-label><br />
<ion-label>A conversa original mantêm-se como chat individual</ion-label>
</div>
<div *ngFor="let msg of messages" >
<div *ngFor="let msg of messages; let last = last" >
<div *ngIf="msg.t != 'r'" class='incoming-{{msg.u.username!=loggedUser.me.username}}'>
<div class="title">
<ion-label>{{msg.u.name}}</ion-label>
@@ -47,6 +47,7 @@
</div>
<div>
<ion-label>{{msg.msg}}</ion-label>
{{last ? scrollToBottom() : ''}}
</div>
</div>
<div *ngIf="msg.t == 'r'" class="info-text">
@@ -1,4 +1,4 @@
import { Component, ElementRef, OnInit, ViewChild, AfterViewChecked } from '@angular/core';
import { Component, ElementRef, OnInit, ViewChild, AfterViewChecked, AfterViewInit, OnDestroy } from '@angular/core';
import { ActionSheetController, MenuController, ModalController, NavParams, PopoverController } from '@ionic/angular';
import { AlertService } from 'src/app/services/alert.service';
import { AuthService } from 'src/app/services/auth.service';
@@ -16,7 +16,7 @@ import { EditGroupPage } from '../edit-group/edit-group.page';
templateUrl: './group-messages.page.html',
styleUrls: ['./group-messages.page.scss'],
})
export class GroupMessagesPage implements OnInit, AfterViewChecked {
export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy {
showLoader: boolean;
isGroupCreated:boolean;
loggedUser: any;
@@ -33,6 +33,11 @@ export class GroupMessagesPage implements OnInit, AfterViewChecked {
loggedUserChat:any;
eventSelectedDate: Date = new Date();
scrollingOnce:boolean = true;
private scrollChangeCallback: () => void;
currentPosition: any;
startPosition: number;
@ViewChild('scrollMe') private myScrollContainer: ElementRef;
constructor(
@@ -57,15 +62,48 @@ export class GroupMessagesPage implements OnInit, AfterViewChecked {
this.getRoomInfo();
this.scrollToBottom();
this.serverLongPull();
this.setStatus('online');
}
ngAfterViewChecked() {
//this.scrollToBottom();
setStatus(status:string){
let body = {
message: '',
status: status,
}
this.chatService.setUserStatus(body).subscribe(res => {
console.log(res);
})
}
ngAfterViewInit() {
this.scrollChangeCallback = () => this.onContentScrolled(event);
window.addEventListener('scroll', this.scrollChangeCallback, true);
}
onContentScrolled(e) {
this.startPosition = e.srcElement.scrollTop;
let scroll = e.srcElement.scrollTop;
if (scroll > this.currentPosition) {
//this.showButton = false;
//alert('BOTTOM');
} else {
//this.showButton = true;
//alert('UP');
this.scrollingOnce = false;
}
this.currentPosition = scroll;
}
ngOnDestroy() {
window.removeEventListener('scroll', this.scrollChangeCallback, true);
}
scrollToBottom(): void {
try {
this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;
if(this.scrollingOnce){
this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;
//this.scrollingOnce = false;
}
} catch(err) { }
}
@@ -181,6 +219,7 @@ export class GroupMessagesPage implements OnInit, AfterViewChecked {
this.chatService.sendMessage(body).subscribe(res=> {
this.getRoomInfo();
this.scrollingOnce = true;
},(error) => {
@@ -302,7 +341,8 @@ export class GroupMessagesPage implements OnInit, AfterViewChecked {
// Show Error
//showMessage(response.statusText);
//this.loadMessages()
this.messages = res['messages'].filter(data => data.t != 'au');
let msgOnly = res['messages'].filter(data => data.t != 'au');
this.messages = msgOnly.reverse();
console.log(this.messages);
// Reconnect in one second
if(this.route.url != "/home/chat"){