Skip to content

Instantly share code, notes, and snippets.

@Ibro
Created May 6, 2017 10:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ibro/ce4a1b5a24dfc5f482179ac37cffc2be to your computer and use it in GitHub Desktop.
Save Ibro/ce4a1b5a24dfc5f482179ac37cffc2be to your computer and use it in GitHub Desktop.
RxJS Socket.IO Angular Chat - Angular Component - Coding Blast - www.codingblast.com
import {Component, OnInit} from '@angular/core';
import {ChatService} from '../chat.service';
import * as moment from 'moment';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/skipWhile';
import 'rxjs/add/operator/scan';
import 'rxjs/add/operator/takeWhile';
import 'rxjs/add/operator/throttleTime';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
message: string;
messages: string[] = [];
secretCode: string;
endConversationCode: string;
constructor(private chatService: ChatService) {
this.secretCode = 'DONT TELL';
this.endConversationCode = 'BYE BYE';
}
sendMessage() {
this.chatService.sendMessage(this.message);
this.message = '';
}
ngOnInit() {
this.chatService
.getMessages()
.distinctUntilChanged()
.filter((message) => message.trim().length > 0)
.throttleTime(1000)
.takeWhile((message) => message !== this.endConversationCode)
.skipWhile((message) => message !== this.secretCode)
.scan((acc: string, message: string, index: number) =>
`${message}(${index + 1})`
, 1)
.subscribe((message: string) => {
const currentTime = moment().format('hh:mm:ss a');
const messageWithTimestamp = `${currentTime}: ${message}`;
this.messages.push(messageWithTimestamp);
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment