From 7252ae3a5df05ab664429536a1982745357a9c48 Mon Sep 17 00:00:00 2001 From: yarik Date: Mon, 13 Feb 2017 19:31:04 +0200 Subject: [PATCH] Filters --- src/models/statement.base.ts | 34 +++++++++++++++++++++++++++------- src/services/statement.base.service.ts | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 100 insertions(+), 21 deletions(-) diff --git a/src/models/statement.base.ts b/src/models/statement.base.ts index ce17ef1..e769673 100644 --- a/src/models/statement.base.ts +++ b/src/models/statement.base.ts @@ -2,6 +2,8 @@ import { AfterViewInit, OnInit } from '@angular/core'; import { TdLoadingService } from '@covalent/core'; import { GridOptions, IGetRowsParams, IRowModel, RowNode } from 'ag-grid/main'; import { StatementBaseService } from '../services/statement.base.service'; +import { Subject } from 'rxjs/Subject'; +import { Observable } from 'rxjs/Observable'; export abstract class StatementBase implements AfterViewInit, OnInit { protected columnDefs: any[]; @@ -62,16 +64,34 @@ export abstract class StatementBase implements AfterViewInit, OnInit { this.isBootstrapping = false; } - protected setRowData(): {} { +// protected setRowData2(): {} { +// let dataSource: {} = { +// rowCount: null, +// getRows: (params: IGetRowsParams) => { +// let sort: string = null; +// if (params.sortModel.length) { +// sort = this.parseSort(params.sortModel[0]); +// } +// this.service.getData(params.startRow, params.endRow, sort).then((data: any) => { +// if (!data.length) { +// data = [this.createModel()]; +// } +// let lastRow: number = -1; +// if (data.length <= params.endRow) { +// lastRow = data.length; +// } +// params.successCallback(data, lastRow); +// }); +// }, +// }; +// return dataSource; +// } + + protected setRowData(): {} { let dataSource: {} = { rowCount: null, getRows: (params: IGetRowsParams) => { - console.log(params); - let sort: string = null; - if (params.sortModel.length) { - sort = this.parseSort(params.sortModel[0]); - } - this.service.getData(params.startRow, params.endRow, sort).then((data: any) => { + this.service.getData(params).subscribe((data: any[]) => { if (!data.length) { data = [this.createModel()]; } diff --git a/src/services/statement.base.service.ts b/src/services/statement.base.service.ts index 620142b..312e1da 100644 --- a/src/services/statement.base.service.ts +++ b/src/services/statement.base.service.ts @@ -1,4 +1,5 @@ import { Headers, Http, Response } from '@angular/http'; +import { IGetRowsParams } from 'ag-grid/main'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/toPromise'; @@ -10,24 +11,36 @@ export abstract class StatementBaseService { constructor(protected http: Http) { } - getData(from: number = 0, to: number = 100, sort: string = null): Promise { - let url: string = this.url; - url += '?from=' + from + '&to=' + to; - if (sort) { + // getData2(from: number = 0, to: number = 100, sort: string = null): Promise { + // 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 { + 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) { url += '&sort=' + sort; } - return this.http.get(url) - .toPromise() - .then((response: Response) => this.parseModels(response.json())) - .catch(this.handleError); + let filter: string = this.parseFilter(params.filterModel); + if (filter) { + url += '&filter=' + filter; + } + return this.http.get(url) + .map((response: Response) => this.parseModels(response.json())); } - // search(term: string): Observable { - // return this.http - // .get(`app/heroes/?name=${term}`) - // .map(response => response.json().data as any[]); - // } - update(id: number, data: string): Promise { return this.http.post(this.url + '/update?id=' + id, data, { headers: this.headers }) .toPromise() @@ -56,6 +69,52 @@ export abstract class StatementBaseService { return Promise.reject(error.message || error); } + 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; + case 'not equals': + symbol = '!'; + break; + case 'starts with': + symbol = '^'; + break; + case 'ends with': + symbol = '$'; + break; + default: + } + if (symbol.length) { + result += property + symbol + value + ';'; + } + } + if (result.length) { + return result; + } else { + return null; + } + } + protected abstract parseModels(json: any): any[]; protected abstract parseModel(json: any): any; } -- libgit2 0.21.4