Blame view

src/services/statement.base.service.ts 3.45 KB
1392e7de   Yarik   Awesome
1
  import { Headers, Http, Response } from '@angular/http';
7252ae3a   Yarik   Filters
2
  import { IGetRowsParams } from 'ag-grid/main';
1392e7de   Yarik   Awesome
3
  
a04ea953   Yarik   awe
4
  import { Observable } from 'rxjs/Observable';
1392e7de   Yarik   Awesome
5
  import 'rxjs/add/operator/toPromise';
a04ea953   Yarik   awe
6
  import 'rxjs/add/operator/map';
1392e7de   Yarik   Awesome
7
8
9
10
11
12
13
  
  export abstract class StatementBaseService {
      protected abstract url: string;
      protected headers: Headers = new Headers({'Content-Type': 'application/json'});
  
      constructor(protected http: Http) { }
  
7252ae3a   Yarik   Filters
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    //   getData2(from: number = 0, to: number = 100, sort: string = null): Promise<any[]> {
    //       let url: string = this.url;
    //       url += '?from=' + from + '&to=' + to;
    //       if (sort) {
    //           url += '&sort=' + sort;
    //       }
    //       return this.http.get(url)
    //           .toPromise()
    //           .then((response: Response) => this.parseModels(response.json()))
    //     .catch(this.handleError);
    // }
  
    getData(params: IGetRowsParams): Observable<any[]> {
      let sort: string = null;
      if (params.sortModel.length) {
        sort = this.parseSort(params.sortModel[0]);
      }
      let url: string = this.url;
      url += '?from=' + params.startRow + '&to=' + params.endRow;
      if (sort) {
1392e7de   Yarik   Awesome
34
35
              url += '&sort=' + sort;
          }
7252ae3a   Yarik   Filters
36
37
38
39
40
41
      let filter: string = this.parseFilter(params.filterModel);
      if (filter) {
        url += '&filter=' + filter;
      }
      return this.http.get(url)
                .map((response: Response) => this.parseModels(response.json()));
1392e7de   Yarik   Awesome
42
43
    }
  
1392e7de   Yarik   Awesome
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
    update(id: number, data: string): Promise<any> {
      return this.http.post(this.url + '/update?id=' + id, data, { headers: this.headers })
        .toPromise()
        .then((response: Response) => response.json())
        .catch(this.handleError);
    }
  
    create(data: string): Promise<any> {
      return this.http.post(this.url + '/create', data, { headers: this.headers })
        .toPromise()
        .then((response: Response) => this.parseModel(response.json()))
        .catch(this.handleError);
    }
  
    delete(id: number): Promise<any> {
      return this.http.delete(this.url + '/delete?id=' + id, { headers: this.headers })
        .toPromise()
        .then((response: Response) => response.json())
        .catch(this.handleError);
    }
  
026fffbd   Yarik   Awesome
65
66
    public abstract createModel(): Object;
  
1392e7de   Yarik   Awesome
67
68
69
70
71
    protected handleError(error: any): Promise<any> {
      console.error('An error occured', error);
      return Promise.reject(error.message || error);
    }
  
7252ae3a   Yarik   Filters
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
    protected parseSort(sort: any): string {
        if (sort.colId && sort.sort) {
            let result = sort.colId;
            if (sort.sort === 'desc') {
                result = '-' + result;
            }
            return result;
        }
        return null;
    }
  
    protected parseFilter(filter: Object): string {
      let result: string = '';
      for (let property in filter) {
        let value: string = filter[property].filter;
        let operator: string = filter[property].type;
        let symbol: string;
        switch (operator) {
          case 'contains':
            symbol = '*';
            break;
          case 'equals':
            symbol = '=';
            break;
fb475cb7   Yarik   Observable
96
          case 'notEquals':
7252ae3a   Yarik   Filters
97
98
            symbol = '!';
            break;
fb475cb7   Yarik   Observable
99
          case 'startsWith':
7252ae3a   Yarik   Filters
100
101
            symbol = '^';
            break;
fb475cb7   Yarik   Observable
102
          case 'endsWith':
7252ae3a   Yarik   Filters
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
            symbol = '$';
            break;
          default:
        }
        if (symbol.length) {
          result += property + symbol + value + ';';
        }
      }
      if (result.length) {
        return result;
      } else {
        return null;
      }
    }
  
1392e7de   Yarik   Awesome
118
119
120
    protected abstract parseModels(json: any): any[];
    protected abstract parseModel(json: any): any;
  }