Catalog alignment
[sdc.git] / catalog-ui / src / app / ng2 / services / plugins.service.ts
1 import {Inject, Injectable} from '@angular/core';
2 import {Observable} from 'rxjs/Observable';
3 import {Http, Response} from '@angular/http';
4 import {IApi, IAppConfigurtaion, Plugin, PluginsConfiguration} from "app/models";
5 import {ISdcConfig, SdcConfigToken} from "../config/sdc-config.config";
6
7 @Injectable()
8 export class PluginsService {
9
10     public configuration: IAppConfigurtaion;
11     public api: IApi;
12     private baseUrl;
13
14     constructor(private http: Http, @Inject(SdcConfigToken) private sdcConfig: ISdcConfig) {
15         this.api = this.sdcConfig.api;
16         this.baseUrl = this.api.root + this.sdcConfig.api.component_api_root;
17     }
18
19     public getPluginByStateUrl = (stateUrl: string) => {
20         let pluginKey: any = _.findKey(PluginsConfiguration.plugins, (pluginConfig: Plugin) => {
21             return pluginConfig.pluginStateUrl === stateUrl;
22         });
23
24         return PluginsConfiguration.plugins[pluginKey];
25     };
26
27     public isPluginDisplayedInContext = (plugin: Plugin, userRole: string, contextType: string) => {
28         return plugin.pluginDisplayOptions["context"] &&
29             plugin.pluginDisplayOptions["context"].displayRoles.includes(userRole) &&
30             plugin.pluginDisplayOptions["context"].displayContext.indexOf(contextType) !== -1
31     };
32
33     public isPluginOnline = (pluginId: string): Observable<boolean> => {
34         let url: string = this.api.no_proxy_root + this.api.GET_plugin_online_state.replace(':pluginId', pluginId);
35         return this.http.get(url).map((res: Response) => {
36             return res.json()
37         })
38             .catch(error => Observable.of(false));
39     }
40 }