blob: e892b99d0635079b713e6fe0aaac5770f8de2c01 [file] [log] [blame]
Matteo Scandoloa62adbc2017-03-02 15:37:34 -08001import {Observable, BehaviorSubject} from 'rxjs';
2import {IXosModelStoreService} from '../../datasources/stores/model.store';
3import {IXosServiceGraph, IXosServiceModel, IXosTenantModel} from '../interfaces';
4import {IXosDebouncer} from '../../core/services/helpers/debounce.helper';
5export interface IXosServiceGraphStore {
6 get(): Observable<IXosServiceGraph>;
7}
8
9export class XosServiceGraphStore implements IXosServiceGraphStore {
10 static $inject = [
11 '$log',
12 'XosModelStore',
13 'XosDebouncer'
14 ];
15 private d3Graph = new BehaviorSubject({});
16
17 // storing locally reference to the data model
18 private services;
19 private tenants;
20
21 // debounced functions
22 private handleData;
23
24 // datastore
25 private ServiceObservable: Observable<any>;
26 private TenantObservable: Observable<any>;
27
28 constructor (
29 private $log: ng.ILogService,
30 private XosModelStore: IXosModelStoreService,
31 private XosDebouncer: IXosDebouncer
32 ) {
33
34 // we want to have a quiet period of 500ms from the last event before doing anything
35 this.handleData = this.XosDebouncer.debounce(this._handleData, 500, false);
36
37 this.ServiceObservable = this.XosModelStore.query('Service', '/core/services');
38 this.TenantObservable = this.XosModelStore.query('Service', '/core/tenants');
39
40 this.ServiceObservable
41 .subscribe(
42 (res) => {
43 this.combineData(res, 'services');
44 },
45 (err) => {
46 this.$log.error(err);
47 }
48 );
49
50 this.ServiceObservable
51 .subscribe(
52 (res) => {
53 this.combineData(res, 'tenants');
54 },
55 (err) => {
56 this.$log.error(err);
57 }
58 );
59 }
60
61 public get() {
62 return this.d3Graph.asObservable();
63 }
64
65 private combineData(data: any, type: 'services'|'tenants') {
66 switch (type) {
67 case 'services':
68 this.services = data;
69 break;
70 case 'tenants':
71 this.tenants = data;
72 break;
73 }
74 this.handleData(this.services, this.tenants);
75 }
76
77 private _handleData(services: IXosServiceModel[], tenants: IXosTenantModel[]) {
78 this.$log.log(`XosServiceGraphStore`, services, tenants);
79 }
80
81}