import { Row, Column, ColumnSearchType } from './index'; import { isNumber, isArray } from "util"; export class Filter { public static search(rows: Row[],columns: Column[]): Row[] { return rows.filter(row => { let count = 0; for (let i = 0; i < columns.length; i++) { let search = columns[i].search.value; if(search) { let value = row.cells[i].Value; value = (value ? (isNumber(value) ? value.toString() : value) : ''); if (columns[i].search.enable) { switch(columns[i].search.type) { case ColumnSearchType.Text: if(value.toLowerCase().indexOf(search.toLowerCase()) > -1) count++; break; case ColumnSearchType.Select: if(value.toLowerCase() == search.toLowerCase()) count++; break; } } } else count++; } return columns.length == count; }) } public static sort(rows: Row[],columnIndex: number,ascending: boolean): Row[] { columnIndex = (isNumber(columnIndex) ? columnIndex : 0); return rows.sort((n1, n2) => { let value1 = n1.cells[columnIndex].Value; let value2 = n2.cells[columnIndex].Value; if (value1 > value2) return (ascending ? 1 : -1); if (value1 < value2) return (ascending ? -1 : 1); return 0; }); } public static paging(array: Row[],from: number,count: number): Row[] { let temp: Row[] = []; for (let i = from - 1, to = i + count, length = array.length; i < to && i < length; i++) temp.push(array[i]); return temp; } }