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, IndicatorPath, Section, Stakeholder} from "../utils/entities/stakeholder";
5
import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
6
import {map} from "rxjs/operators";
7
import {StakeholderCreator} from "../utils/entities/stakeholderCreator";
8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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