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
@@ -38,7 +38,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 class="container-width-100" *ngFor="let msg of messages" #scrollMe>
<div class="container-width-100" *ngFor="let msg of messages; let last = last" #scrollMe>
<div *ngIf="msg.t != 'r'" class='incoming-{{msg.u.username!=loggedUser.me.username}} max-width-45'>
<div class="title">
<ion-label>{{msg.u.name}}</ion-label>
@@ -46,6 +46,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, OnChanges, OnInit, Input, SimpleChanges, Output, EventEmitter, ViewChild, ElementRef, AfterViewChecked} from '@angular/core';
import { Component, OnChanges, OnInit, Input, SimpleChanges, Output, EventEmitter, ViewChild, ElementRef, AfterViewChecked, AfterViewInit, OnDestroy} from '@angular/core';
import { ActionSheetController, AnimationController, MenuController, ModalController, 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 { ChatOptionsFeaturesPage } from 'src/app/modals/chat-options-features/ch
templateUrl: './group-messages.page.html',
styleUrls: ['./group-messages.page.scss'],
})
export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy {
showLoader: boolean;
isGroupCreated:boolean;
loggedUser: any;
@@ -30,6 +30,11 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
members:any;
loggedUserChat:any;
scrollingOnce:boolean = true;
private scrollChangeCallback: () => void;
currentPosition: any;
startPosition: number;
@Input() roomId:string;
@Output() closeAllDesktopComponents:EventEmitter<any> = new EventEmitter<any>();
@Output() showEmptyContainer:EventEmitter<any> = new EventEmitter<any>();
@@ -54,8 +59,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
this.isGroupCreated = true;
}
ngOnChanges(changes: SimpleChanges): void {
this.getRoomInfo();
this.scrollToBottom();
//this.getRoomInfo();
//this.scrollToBottom();
}
ngOnInit() {
@@ -63,18 +68,49 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
this.getRoomInfo();
this.serverLongPull();
console.log(this.roomId);
this.setStatus('online');
}
ngAfterViewChecked() {
//this.scrollToBottom();
setStatus(status:string){
let body = {
message: '',
status: status,
}
this.chatService.setUserStatus(body).subscribe(res => {
console.log(res);
})
}
scrollToBottom(): void {
try {
this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;
if(this.scrollingOnce){
this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;
}
} catch(err) { }
finally {
}
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() {
this.setStatus('away');
window.removeEventListener('scroll', this.scrollChangeCallback, true);
}
openGroupContactsPage(){
@@ -101,9 +137,9 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
get watch(){
this.getRoomInfo();
console.log('here watching');
return this.roomId;
}
getRoomInfo(){
this.showLoader = true;
this.chatService.getRoomInfo(this.roomId).subscribe(room=>{
@@ -112,7 +148,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
this.roomName = this.room.name.split('-').join(' ');
}
this.getGroupContacts(this.room);
this.loadGroupMessages(this.room);
//this.loadGroupMessages(this.room);
this.showLoader = false;
});
}
@@ -136,13 +172,14 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
});
}
}
loadGroupMessages(room:any){
console.log('here'+room.t);
loadGroupMessages(roomId){
//console.log('here'+room.t);
this.showLoader = true;
//If group is private call getGroupMembers
if(room.t === 'p'){
console.log('private');
/* if(room.t === 'p'){
console.log('private'); */
this.chatService.getPrivateGroupMessages(this.roomId).subscribe(res=>{
console.log(res);
@@ -152,15 +189,16 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
this.showLoader = false;
});
}
/* } */
//Otherwise call getChannelMembers for públic groups
else{
/* else{
this.chatService.getPublicGroupMessages(this.roomId).subscribe(res=>{
console.log(res);
this.messages = res['messages'].reverse();
});
}
} */
}
sendMessage(){
let body = {
@@ -172,7 +210,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
this.chatService.sendMessage(body).subscribe(res=> {
/* this.loadGroupMessages(); */
this.getRoomInfo();
//this.getRoomInfo();
this.scrollingOnce = true;
});
this.message = "";
}
@@ -244,7 +283,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
this.roomName = res.data.name.split('-').join(' ');
console.log(this.roomName);
this.getRoomInfo();
//this.getRoomInfo();
this.loadGroupMessages(this.roomId);
//this.modalController.dismiss();
};
@@ -277,7 +317,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
popover.onDidDismiss().then(res=>{
console.log(res);
if(res.data){
this.getRoomInfo();
this.loadGroupMessages(this.roomId);
//this.getRoomInfo();
//this.modalController.dismiss();
};
@@ -314,7 +355,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewChecked {
await modal.present();
modal.onDidDismiss().then(()=>{
this.getRoomInfo();
//this.getRoomInfo();
this.loadGroupMessages(this.roomId)
});
}
@@ -407,7 +449,8 @@ export class GroupMessagesPage implements OnInit, OnChanges, 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"){
@@ -31,7 +31,7 @@
</ion-refresher-content>
</ion-refresher>
<div class="messages" #scrollMe>
<div class="container-width-100" *ngFor="let msg of messages">
<div class="container-width-100" *ngFor="let msg of messages; let last = last">
<div class='incoming-{{msg.u.username!=loggedUser.me.username}} max-width-45'>
<div class="title">
<ion-label>{{msg.u.name}}</ion-label>
@@ -39,6 +39,7 @@
</div>
<div>
<ion-label>{{msg.msg}}</ion-label>
{{last ? scrollToBottom() : ''}}
</div>
</div>
</div>
+45 -12
View File
@@ -1,4 +1,4 @@
import { AfterViewChecked, Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';
import { AfterViewChecked, AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';
import { AnimationController, ModalController, 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 { ChatOptionsFeaturesPage } from 'src/app/modals/chat-options-features/ch
templateUrl: './messages.page.html',
styleUrls: ['./messages.page.scss'],
})
export class MessagesPage implements OnInit, AfterViewChecked, OnChanges {
export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy {
showLoader: boolean;
@ViewChild('scrollMe') private myScrollContainer: ElementRef;
@@ -37,7 +37,11 @@ export class MessagesPage implements OnInit, AfterViewChecked, OnChanges {
@Output() openNewEventPage:EventEmitter<any> = new EventEmitter<any>();
connection = connection
connection = connection;
scrollingOnce:boolean = true;
private scrollChangeCallback: () => void;
currentPosition: any;
startPosition: number;
constructor(
public popoverController: PopoverController,
@@ -70,11 +74,17 @@ export class MessagesPage implements OnInit, AfterViewChecked, OnChanges {
console.log(this.roomId);
console.log("Chat route", this.route.url)
this.setStatus('online');
}
ngOnDestroy(){
this.checktimeOut = false;
console.log('On Destroy')
setStatus(status:string){
let body = {
message: '',
status: status,
}
this.chatService.setUserStatus(body).subscribe(res => {
console.log(res);
})
}
notImplemented(){
@@ -93,16 +103,38 @@ export class MessagesPage implements OnInit, AfterViewChecked, OnChanges {
ev.target.complete();
}
ngAfterViewChecked() {
//this.scrollToBottom();
}
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) { }
finally {
}
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() {
this.checktimeOut = false;
this.setStatus('away');
window.removeEventListener('scroll', this.scrollChangeCallback, true);
}
openBookMeetingComponent(){
@@ -125,6 +157,7 @@ export class MessagesPage implements OnInit, AfterViewChecked, OnChanges {
}
this.chatService.sendMessage(body).subscribe(res=> {
this.scrollingOnce = true;
});
this.message = "";
}