Skip to content

Commit 604329d

Browse files
committed
Added scroll to bottom when page loads and when new message is inserted
1 parent 1e79c86 commit 604329d

File tree

7 files changed

+52
-5
lines changed

7 files changed

+52
-5
lines changed

.idea/.gitignore

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/restheart-webchat.iml

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
<div class="message-container">
1+
<div class="message-container" #container >
22

33
<app-message *ngFor="let message of (messages$ | async)" [message]="message"></app-message>
44

5+
<div #flag></div>
6+
57
</div>
Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component, OnInit } from '@angular/core';
1+
import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core';
22
import {MessageService} from "../../services/message.service";
33
import {Message} from "../../models/message";
44
import {Observable} from "rxjs";
@@ -8,15 +8,26 @@ import {Observable} from "rxjs";
88
templateUrl: './messages-container.component.html',
99
styleUrls: ['./messages-container.component.scss']
1010
})
11-
export class MessagesContainerComponent implements OnInit {
11+
export class MessagesContainerComponent implements OnInit, AfterViewInit {
1212

13+
@ViewChild('flag') private flag: ElementRef<HTMLDivElement>;
1314
messages$: Observable<Message[]>;
1415

1516
constructor(private messageService: MessageService) { }
1617

1718
ngOnInit(): void {
18-
this.messages$ = this.messageService.getChatMessages();
19+
this.messageService.onMessageSent$.subscribe(() => this.scrollBottom('smooth', 150));
20+
this.messages$ = this.messageService.getChatMessages();
21+
}
22+
23+
ngAfterViewInit(): void {
24+
this.scrollBottom();
25+
}
1926

27+
scrollBottom(behavior: ScrollBehavior = "auto", delay: number = 70): void {
28+
setTimeout(() => {
29+
this.flag.nativeElement.scrollIntoView({block: "end", behavior: behavior})
30+
}, delay);
2031
}
2132

2233
}

client/src/app/services/message.service.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import { map } from "rxjs/operators";
1212
})
1313
export class MessageService {
1414

15+
private onMessageSent: Subject<string> = new Subject();
16+
onMessageSent$ = this.onMessageSent.asObservable();
17+
1518
private configuration: WebSocketSubjectConfig<Message> = {
1619
url: environment.MESSAGE_FEED,
1720
openObserver: {
@@ -52,7 +55,7 @@ export class MessageService {
5255
sendMessage(body: string): void {
5356
const message: Message = { body, timestamp: new Date(), nickname: this.userService.getCurrentUser() };
5457

55-
this.http.post(environment.MESSAGE_URL, message).subscribe();
58+
this.http.post(environment.MESSAGE_URL, message).subscribe(() => this.onMessageSent.next('sent'));
5659
}
5760

5861

0 commit comments

Comments
 (0)