Advertisement
Guest User

Untitled

a guest
Apr 19th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { Conversation as IConversation } from '../interfaces/conversation';
  2. import { ConversationData } from '../interfaces/conversation-data';
  3. import { MessageData } from '../interfaces/message-data';
  4. import { User } from '../interfaces/user';
  5. import { MyUser } from '../interfaces/my-user';
  6. import { MessageRecipient as IRec } from '../interfaces/message-recipient';
  7.  
  8. import { BehaviorSubject, Observable, Subject, ReplaySubject} from 'rxjs';
  9.  
  10. export class Conversation implements IConversation {
  11.   myId: number;
  12.  
  13.   data: ConversationData;
  14.   unreadCount: number = 0;
  15.   lastMessage: MessageData;
  16.  
  17.   messages: Map<number, MessageData> = new Map();
  18.   users: Map<number, User> = new Map();
  19.  
  20.   newMessage$: Subject<MessageData> = new Subject();
  21.   loadingMessage$: Subject<MessageData> = new Subject();
  22.   removeMessage$: Subject<number> = new Subject();
  23.  
  24.   lastMessage$: ReplaySubject<MessageData> = new ReplaySubject(1);
  25.   unreadCount$: BehaviorSubject<number> = new BehaviorSubject(this.unreadCount);
  26.  
  27.   newUser$: Subject<User> = new Subject();
  28.   removeUser$: Subject<number> = new Subject();
  29.  
  30.   consctructor(data: ConversationData, messages: MessageData[] = [], myId: number) {
  31.     this.data = data;
  32.     this.myId = myId;
  33.  
  34.     messages.forEach((message: MessageData) => {
  35.       this.loadingMessageHandle(message);
  36.     });
  37.  
  38.     this.newMessage$.subscribe((message: MessageData) => {
  39.       this.newMessageHandler(message);
  40.     });
  41.  
  42.     this.removeMessage$.subscribe((id: number) => this.messages.delete(id));
  43.     this.newUser$.subscribe((u: User) => this.users.set(u.Id, u));
  44.     this.removeUser$.subscribe((id: number) => this.users.delete(id));
  45.   }
  46.  
  47.   newMessageHandler(message: MessageData) {
  48.     this.messages.set(message.Id, message);
  49.     this.setLastMessage(message, true);
  50.     this.unreadCount$.next(++this.unreadCount);
  51.   }
  52.  
  53.   loadingMessageHandle(message: MessageData) {
  54.     this.messages.set(message.Id, message);
  55.     this.setLastMessage(message);
  56.  
  57.     this.unreadCount += +!!message.Recipients.find((r: IRec) => {
  58.       return r.RecipientId === this.myId && r.Status === 1;
  59.     });
  60.     this.unreadCount$.next(++this.unreadCount);
  61.   }
  62.  
  63.   setLastMessage(message: MessageData, newMessage: boolean = false) {
  64.     if (newMessage || (message.SenderId && !this.lastMessage)) {
  65.       this.lastMessage = message;
  66.       this.lastMessage$.next(message);
  67.     }
  68.   }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement