src/services/messages.service.ts
Properties |
|
Methods |
|
constructor()
|
Defined in src/services/messages.service.ts:26
|
Public addMessage | ||||||||
addMessage(message: Message)
|
||||||||
Defined in src/services/messages.service.ts:48
|
||||||||
Parameters :
Returns :
void
|
Public create |
create:
|
Type : Subject<Message>
|
Defined in src/services/messages.service.ts:26
|
Public messages |
messages:
|
Type : ReplaySubject<[]>
|
Defined in src/services/messages.service.ts:18
|
Private messagesList |
messagesList:
|
Type : Message[]
|
Defined in src/services/messages.service.ts:13
|
Public newMessages |
newMessages:
|
Type : Subject<Message>
|
Defined in src/services/messages.service.ts:15
|
Public updates |
updates:
|
Type : Subject<any>
|
Defined in src/services/messages.service.ts:23
|
import { User } from '../models/user';
import { Message } from '../models/message';
import { Injectable } from '@angular/core';
import { Observable, Subject, ReplaySubject } from 'rxjs/Rx';
const initialMessages: Message[] = [];
type IMessagesOperation = (messages: Message[]) => Message[];
@Injectable()
export class MessagesService {
private messagesList: Message[] = [];
// a stream that publishes new messages only once
public newMessages: Subject<Message> = new Subject<Message>();
// `messages` is a stream that emits an array of the most up to date messages
public messages: ReplaySubject<Message[]> = new ReplaySubject<Message[]>(1);
// `updates` receives _operations_ to be applied to our `messages`
// it's a way we can perform changes on *all* messages (that are currently
// stored in `messages`)
public updates: Subject<any> = new Subject<any>();
// action streams
public create: Subject<Message> = new Subject<Message>();
// public markThreadAsRead: Subject<any> = new Subject<any>();
constructor() {
// recois des operation, et les fais sur la liste interne, puis diffuse le resultat sur messages
this.updates.subscribe((ope) => {
this.messagesList = ope(this.messagesList);
console.log(this.messagesList);
this.messages.next(this.messagesList);
});
this.newMessages
.map(function(message: Message): IMessagesOperation {
return (messages: Message[]) => {
return messages.concat(message);
};
})
.subscribe(this.updates);
}
// an imperative function call to this action stream
public addMessage(message: Message): void {
this.newMessages.next(message);
}
}