UI: Improve page link default search function

This commit is contained in:
Igor Kulikov 2020-04-14 11:34:22 +03:00
parent 4832f85f5d
commit 88ff9f4d19

View File

@ -21,25 +21,43 @@ import { SortDirection } from '@angular/material/sort';
export const MAX_SAFE_PAGE_SIZE = 2147483647;
export type PageLinkSearchFunction<T> = (entity: T, textSearch: string) => boolean;
export type PageLinkSearchFunction<T> = (entity: T, textSearch: string, searchProperty?: string) => boolean;
const defaultPageLinkSearchFunction: PageLinkSearchFunction<any> =
(entity: any, textSearch: string) => {
export function defaultPageLinkSearchFunction(searchProperty?: string): PageLinkSearchFunction<any> {
return (entity, textSearch) => defaultPageLinkSearch(entity, textSearch, searchProperty);
}
const defaultPageLinkSearch: PageLinkSearchFunction<any> =
(entity: any, textSearch: string, searchProperty?: string) => {
if (textSearch === null || !textSearch.length) {
return true;
}
const expected = ('' + textSearch).toLowerCase();
for (const key of Object.keys(entity)) {
const val = entity[key];
if (val !== null) {
if (val !== Object(val)) {
const actual = ('' + val).toLowerCase();
if (actual.indexOf(expected) !== -1) {
return true;
if (searchProperty && searchProperty.length) {
if (Object.prototype.hasOwnProperty.call(entity, searchProperty)) {
const val = entity[searchProperty];
if (val !== null) {
if (val !== Object(val)) {
const actual = ('' + val).toLowerCase();
if (actual.indexOf(expected) !== -1) {
return true;
}
}
} else if (isObject(val)) {
if (defaultPageLinkSearchFunction(val, textSearch)) {
return true;
}
}
} else {
for (const key of Object.keys(entity)) {
const val = entity[key];
if (val !== null) {
if (val !== Object(val)) {
const actual = ('' + val).toLowerCase();
if (actual.indexOf(expected) !== -1) {
return true;
}
} else if (isObject(val)) {
if (defaultPageLinkSearch(val, textSearch)) {
return true;
}
}
}
}
@ -103,7 +121,7 @@ export class PageLink {
}
public filterData<T>(data: Array<T>,
searchFunction: PageLinkSearchFunction<T> = defaultPageLinkSearchFunction): PageData<T> {
searchFunction: PageLinkSearchFunction<T> = defaultPageLinkSearchFunction()): PageData<T> {
const pageData = emptyPageData<T>();
pageData.data = [...data];
if (this.textSearch && this.textSearch.length) {