Project

General

Profile

1
import {Injectable} from "@angular/core";
2
import {HttpClient} from "@angular/common/http";
3
import {BehaviorSubject, Observable} from "rxjs";
4
import {Indicator, Section, Stakeholder, StakeholderInfo} from "../entities/stakeholder";
5
import {HelperFunctions} from "../../utils/HelperFunctions.class";
6
import {map} from "rxjs/operators";
7

    
8
let maps: string[] = ['parameters', 'filters'];
9

    
10
@Injectable({
11
  providedIn: "root"
12
})
13
export class StakeholderService {
14

    
15
  private stakeholderSubject: BehaviorSubject<Stakeholder> = null;
16

    
17
  constructor(private http: HttpClient) {
18
    this.stakeholderSubject = new BehaviorSubject<Stakeholder>(null);
19
  }
20

    
21
  getStakeholder(url: string, alias:string): Observable<Stakeholder> {
22
    /*return new BehaviorSubject<Stakeholder>(
23
      StakeholderCreator.createFunderFromDefaultProfile("ec","funder","ec__________::EC",
24
        "European Commission","EC",
25
        false,"ec",true,true)).asObservable();*/
26
    return this.http.get<Stakeholder>(url + '/stakeholder/' + encodeURIComponent(alias)).pipe(map(stakeholder => {
27
      return this.formalize(stakeholder);
28
    }));
29
  }
30

    
31
  getAllStakeholders(url: string, type: string = null): Observable<Stakeholder[]> {
32
    return this.http.get<Stakeholder[]>(url + '/stakeholder/all' + ((type)?('?type=' + type):'')).pipe(map(stakeholders => {
33
      return this.formalize(stakeholders);
34
    }));
35
  }
36

    
37
  getStakeholders(url: string, type: string = null): Observable<(Stakeholder & StakeholderInfo)[]> {
38
    return this.http.get<Stakeholder[]>(url + '/stakeholder' + ((type)?('?type=' + type):'')).pipe(map(stakeholders => {
39
      return this.formalize(stakeholders);
40
    }));
41
  }
42

    
43
  getDefaultStakeholders(url: string, type: string = null): Observable<Stakeholder[]> {
44
    return this.http.get<Stakeholder[]>(url + '/stakeholder/default' + ((type)?('?type=' + type):'')).pipe(map(stakeholders => {
45
      return this.formalize(stakeholders);
46
    }));
47
  }
48

    
49
  buildStakeholder(url: string, stakeholder: Stakeholder): Observable<Stakeholder> {
50
    return this.http.post<Stakeholder>(url + '/build-stakeholder', stakeholder).pipe(map(stakeholder => {
51
      return this.formalize(stakeholder);
52
    }));
53
  }
54

    
55
  saveStakeholder(url: string, stakeholder: Stakeholder): Observable<Stakeholder> {
56
    return this.http.post<Stakeholder>(url + '/stakeholder/save', stakeholder).pipe(map(stakeholder => {
57
      return this.formalize(stakeholder);
58
    }));
59
  }
60

    
61
  toggleStatus(url: string, path: string[]): Observable<boolean> {
62
    return this.http.post<boolean>(url + '/' + path.join('/') + '/toggle-status', null);
63
  }
64

    
65
  toggleAccess(url: string, path: string[]): Observable<boolean> {
66
    return this.http.post<boolean>(url + '/' + path.join('/') + '/toggle-access', null);
67
  }
68

    
69
  saveElement(url: string, element: any, path: string[] = []): Observable<any> {
70
    path = HelperFunctions.encodeArray(path);
71
    return this.http.post<any>(url + ((path.length > 0)?'/':'') + path.join('/') +
72
      '/save', element).pipe(map(element => {
73
        return this.formalize(element);
74
    }));
75
  }
76
  
77
  saveSection(url: string, element: any, path: string[] = [], index: number = -1): Observable<Section> {
78
    path = HelperFunctions.encodeArray(path);
79
    return this.http.post<Section>(url + ((path.length > 0)?'/':'') + path.join('/') +
80
      '/save/' + index, element).pipe(map(element => {
81
      return this.formalize(element);
82
    }));
83
  }
84

    
85
  deleteElement(url: string, path: string[]): Observable<any> {
86
    path = HelperFunctions.encodeArray(path);
87
    return this.http.delete<any>(url + '/' + path.join('/') + '/delete');
88
  }
89

    
90
  reorderIndicators(url: string, path: string[], indicatorIds: string[], type: string = 'chart'): Observable<Indicator[]> {
91
    path = HelperFunctions.encodeArray(path);
92
    return this.http.post<Indicator[]>(url + '/' + path.join('/') + '/' + type + '/reorder', indicatorIds).pipe(map(indicators => {
93
      return this.formalize(indicators);
94
    }));
95
  }
96

    
97
  getStakeholderAsObservable(): Observable<Stakeholder> {
98
    return this.stakeholderSubject.asObservable();
99
  }
100

    
101
  get stakeholder(): Stakeholder {
102
    return this.stakeholderSubject.getValue();
103
  }
104

    
105
  setStakeholder(stakeholder: Stakeholder) {
106
    this.stakeholderSubject.next(stakeholder);
107
  }
108

    
109
  private formalize(element: any) {
110
    return HelperFunctions.copy(element);
111
  }
112
}
    (1-1/1)