Permalink
Browse files

Step 8.4: Added new chat component

  • Loading branch information...
dotansimha authored and darkbasic committed Jan 24, 2017
1 parent f5918b6 commit 94ec41a7f08c312fb0fb2253c7a92f25e6ad4db9
Showing with 85 additions and 0 deletions.
  1. +85 −0 src/pages/chats/new-chat.ts
@@ -0,0 +1,85 @@
import { Component, OnInit } from '@angular/core';
import { Chats, Users } from 'api/collections';
import { User } from 'api/models';
import { AlertController, ViewController } from 'ionic-angular';
import { MeteorObservable } from 'meteor-rxjs';
import { _ } from 'meteor/underscore';
import { Observable, Subscription } from 'rxjs';
@Component({
selector: 'new-chat',
templateUrl: 'new-chat.html'
})
export class NewChatComponent implements OnInit {
senderId: string;
users: Observable<User[]>;
usersSubscription: Subscription;
constructor(
private alertCtrl: AlertController,
private viewCtrl: ViewController
) {
this.senderId = Meteor.userId();
}
ngOnInit() {
this.loadUsers();
}
addChat(user): void {
MeteorObservable.call('addChat', user._id).subscribe({
next: () => {
this.viewCtrl.dismiss();
},
error: (e: Error) => {
this.viewCtrl.dismiss().then(() => {
this.handleError(e);
});
}
});
}
loadUsers(): void {
this.users = this.findUsers();
}
findUsers(): Observable<User[]> {
// Find all belonging chats
return Chats.find({
memberIds: this.senderId
}, {
fields: {
memberIds: 1
}
})
// Invoke merge-map with an empty array in case no chat found
.startWith([])
.mergeMap((chats) => {
// Get all userIDs who we're chatting with
const receiverIds = _.chain(chats)
.pluck('memberIds')
.flatten()
.concat(this.senderId)
.value();
// Find all users which are not in belonging chats
return Users.find({
_id: { $nin: receiverIds }
})
// Invoke map with an empty array in case no user found
.startWith([]);
});
}
handleError(e: Error): void {
console.error(e);
const alert = this.alertCtrl.create({
buttons: ['OK'],
message: e.message,
title: 'Oops!'
});
alert.present();
}
}

0 comments on commit 94ec41a

Please sign in to comment.