blob: 1a2b0ab24f243dccbd002fdadec2eaaf2bbcdd9b [file] [log] [blame]
Matteo Scandolo035c5932016-12-14 09:55:15 -08001import {BehaviorSubject} from 'rxjs';
2import * as _ from 'lodash';
3import {IWSEvent} from '../websocket/global';
4
5export interface IStoreHelpersService {
6 updateCollection(event: IWSEvent, subject: BehaviorSubject<any>): BehaviorSubject<any>;
7}
8
9export class StoreHelpers {
10 public updateCollection(event: IWSEvent, subject: BehaviorSubject<any>): BehaviorSubject<any> {
11 const collection: any[] = subject.value;
12 const index: number = _.findIndex(collection, (i) => {
Matteo Scandolo63e43eb2016-12-14 14:18:53 -080013 // NOTE evaluate to use event.msg.pk
Matteo Scandolo035c5932016-12-14 09:55:15 -080014 return i.id === event.msg.object.id;
15 });
16 const exist: boolean = index > -1;
17 const isDeleted: boolean = _.includes(event.msg.changed_fields, 'deleted');
18 // remove
19 if (exist && isDeleted) {
20 _.remove(collection, {id: event.msg.object.id});
21 }
22 // Replace item at index using native splice
23 else if (exist && !isDeleted) {
24 collection.splice(index, 1, event.msg.object);
25 }
26 // if the element is not deleted add it
27 else if (!exist && !isDeleted) {
28 collection.push(event.msg.object);
29 }
30
31 subject.next(collection);
32
33 return subject;
34 }
35}