Blame view

src/services/statement.base.service.ts 4.2 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) { }
  
a619dba6   Yarik   HZ
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
      getData(params: IGetRowsParams): Promise<any[]> {
        let sort: string = null;
        if (params.sortModel.length) {
          sort = this.parseSort(params.sortModel[0]);
        }
        let url: string = this.url;
        url += '?from=' + params.startRow + '&perPage=' + (params.endRow - params.startRow);
        if (sort) {
                url += '&sort=' + sort;
            }
        let filter: string = this.parseFilter(params.filterModel);
        if (filter) {
          url += '&filter=' + filter;
        }
        return this.http.get(url)
                .toPromise()
                .then((response: Response) => {
                  let data: any[] = this.parseModels(response.json());
                  if (!data.length) {
                        data = [this.createModel()];
                    }
                  let lastRow: number = -1;
5691a577   Administrator   virtual page fix
36
37
                  if (data.length < (params.endRow-params.startRow)) {
                        lastRow = params.startRow+data.length;
a619dba6   Yarik   HZ
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
                    }
                  params.successCallback(data, lastRow);
                  return data;
                })
                .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 + '&perPage=' + (params.endRow - params.startRow);
    //   if (sort) {
7252ae3a   Yarik   Filters
53
54
    //           url += '&sort=' + sort;
    //       }
a619dba6   Yarik   HZ
55
56
57
58
59
60
    //   let filter: string = this.parseFilter(params.filterModel);
    //   if (filter) {
    //     url += '&filter=' + filter;
    //   }
    //   return this.http.get(url)
    //             .map((response: Response) => this.parseModels(response.json()));
7252ae3a   Yarik   Filters
61
62
    // }
  
1392e7de   Yarik   Awesome
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
    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
84
85
    public abstract createModel(): Object;
  
1392e7de   Yarik   Awesome
86
87
88
89
90
    protected handleError(error: any): Promise<any> {
      console.error('An error occured', error);
      return Promise.reject(error.message || error);
    }
  
7252ae3a   Yarik   Filters
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    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
115
          case 'notEquals':
7252ae3a   Yarik   Filters
116
117
            symbol = '!';
            break;
fb475cb7   Yarik   Observable
118
          case 'startsWith':
7252ae3a   Yarik   Filters
119
120
            symbol = '^';
            break;
fb475cb7   Yarik   Observable
121
          case 'endsWith':
7252ae3a   Yarik   Filters
122
123
124
125
126
            symbol = '$';
            break;
          default:
        }
        if (symbol.length) {
366f081e   Yarik   Filters
127
          result += symbol + property + '_' + value + ';';
7252ae3a   Yarik   Filters
128
129
130
131
132
133
134
135
136
        }
      }
      if (result.length) {
        return result;
      } else {
        return null;
      }
    }
  
1392e7de   Yarik   Awesome
137
138
139
    protected abstract parseModels(json: any): any[];
    protected abstract parseModel(json: any): any;
  }