Updating observable on webscoket event
Change-Id: I8325785b8d40b646ea67f28b61b8d603803a571e
diff --git a/src/app/services/stores/instance.store.ts b/src/app/services/stores/instance.store.ts
new file mode 100644
index 0000000..a87630c
--- /dev/null
+++ b/src/app/services/stores/instance.store.ts
@@ -0,0 +1,54 @@
+/// <reference path="../../../../typings/index.d.ts"/>
+
+import {Injectable} from '@angular/core';
+import {BehaviorSubject} from 'rxjs/Rx';
+import {IInstance} from '../../interfaces/instance.interface';
+import {InstanceService} from '../rest/instance.service';
+import * as _ from 'lodash';
+import {IWSEvent} from '../../interfaces/ws.interface';
+import {GlobalEvent} from '../websockets/websocket.global';
+
+@Injectable()
+export class InstanceStore {
+ private _instances: BehaviorSubject<IInstance[]> = new BehaviorSubject([]);
+ constructor(private instanceService: InstanceService, private globalEvent: GlobalEvent) {
+ this.loadInitialData();
+ this.globalEvent.list()
+ .filter((e: IWSEvent) => {
+ console.log('filter', e);
+ return e.model === 'Instance';
+ })
+ .subscribe(
+ (event: IWSEvent) => {
+
+ const collection = this._instances.value;
+
+ const exist = _.find(collection, (i) => {
+ return i.id === event.msg.object.id;
+ });
+
+ // remove in order to update
+ if (exist) {
+ _.remove(collection, {id: event.msg.object.id});
+ }
+ collection.push(event.msg.object);
+ this._instances.next(collection);
+ }
+ );
+ }
+
+ loadInitialData() {
+ this.instanceService.query()
+ .subscribe(
+ res => {
+ this._instances.next(res);
+ },
+ err => console.log('Error retrieving Instances', err)
+ );
+ }
+
+ query() {
+ return this._instances.asObservable();
+ }
+
+}