import { Component, OnInit } from '@angular/core';
import { RdPopOver } from '../../base/rdPopOver';
import { RdLib } from '../../base/rdLib';
import { Grid } from '../grid/grid';
import { GridWithProvider } from '../grid/gridWithProvider';
import { ServiceProviderClientSide } from '../serviceProvider/serviceProviderClientSide';
import { ServiceProviderServerSide } from '../serviceProvider/serviceProviderServerSide';
@Component({
template: `
`
})
export class PopoverGridSearchOnData extends RdPopOver implements OnInit {
text: string;
grid: Grid | GridWithProvider;
orginalList = [];
placeholder = RdLib.localization.translateEn("Search Text");
ngOnInit() {
this.shading = false;
}
onOpen = function (grid: Grid | GridWithProvider) {
this.grid = grid;
if (this.grid instanceof Grid) {
this.orginalList = [...this.grid.originalList];
}
else if (this.grid instanceof GridWithProvider) {
/** ClientSidePagingResponse may have ResultList or not */
let originalResponse = this.grid.provider.content.response.originalResponse;
this.orginalList = originalResponse.ResultList ? [...originalResponse.ResultList] : [...originalResponse];
}
}
filter(searchText: string) {
let filteredList = this.orginalList.filter((item) => {
for (const value of Object.values(item)) {
item.isMatched = false;
switch (typeof value) {
case "string": item.isMatched = this.filterProcess(value.toString(), searchText); break;
case "number":
/** for date */
if (value.toString().length == 14) item.isMatched = this.filterProcess(RdLib.typeOperations.longToString(value), searchText);
else item.isMatched = this.filterProcess(value.toString(), searchText);
break;
case "boolean": item.isMatched = this.filterProcess(value ? "true" : "false", searchText); break;
}
if (item.isMatched) break;
}
return item.isMatched;
});
this.setGridItems(filteredList);
}
filterProcess(value: string, searchText: string): boolean {
return !!value.match(new RegExp(searchText.trim(), 'gi'));
}
reset() {
this.text = null;
this.setGridItems(this.orginalList, true);
}
setGridItems(list: Array