Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Conversation as IConversation } from '../interfaces/conversation';
- import { ConversationData } from '../interfaces/conversation-data';
- import { MessageData } from '../interfaces/message-data';
- import { User } from '../interfaces/user';
- import { MyUser } from '../interfaces/my-user';
- import { MessageRecipient as IRec } from '../interfaces/message-recipient';
- import { BehaviorSubject, Observable, Subject, ReplaySubject} from 'rxjs';
- export class Conversation implements IConversation {
- myId: number;
- data: ConversationData;
- unreadCount: number = 0;
- lastMessage: MessageData;
- messages: Map<number, MessageData> = new Map();
- users: Map<number, User> = new Map();
- newMessage$: Subject<MessageData> = new Subject();
- loadingMessage$: Subject<MessageData> = new Subject();
- removeMessage$: Subject<number> = new Subject();
- lastMessage$: ReplaySubject<MessageData> = new ReplaySubject(1);
- unreadCount$: BehaviorSubject<number> = new BehaviorSubject(this.unreadCount);
- newUser$: Subject<User> = new Subject();
- removeUser$: Subject<number> = new Subject();
- consctructor(data: ConversationData, messages: MessageData[] = [], myId: number) {
- this.data = data;
- this.myId = myId;
- messages.forEach((message: MessageData) => {
- this.loadingMessageHandle(message);
- });
- this.newMessage$.subscribe((message: MessageData) => {
- this.newMessageHandler(message);
- });
- this.removeMessage$.subscribe((id: number) => this.messages.delete(id));
- this.newUser$.subscribe((u: User) => this.users.set(u.Id, u));
- this.removeUser$.subscribe((id: number) => this.users.delete(id));
- }
- newMessageHandler(message: MessageData) {
- this.messages.set(message.Id, message);
- this.setLastMessage(message, true);
- this.unreadCount$.next(++this.unreadCount);
- }
- loadingMessageHandle(message: MessageData) {
- this.messages.set(message.Id, message);
- this.setLastMessage(message);
- this.unreadCount += +!!message.Recipients.find((r: IRec) => {
- return r.RecipientId === this.myId && r.Status === 1;
- });
- this.unreadCount$.next(++this.unreadCount);
- }
- setLastMessage(message: MessageData, newMessage: boolean = false) {
- if (newMessage || (message.SenderId && !this.lastMessage)) {
- this.lastMessage = message;
- this.lastMessage$.next(message);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement