Check if the loaded filter definition has the valid format

Fixes an issue where malformated or old filter-definition where considered
to be valid filters which could cause some issues
This commit is contained in:
Sean Engelhardt 2019-05-22 12:06:59 +02:00
parent d2b81e2a28
commit bd4da53255
1 changed files with 24 additions and 1 deletions

View File

@ -122,7 +122,7 @@ export abstract class BaseFilterListService<V extends BaseViewModel> {
public async initFilters(inputData: Observable<V[]>): Promise<void> {
const storedFilter = await this.store.get<OsFilter[]>('filter_' + this.name);
if (storedFilter) {
if (storedFilter && this.isOsFilter(storedFilter)) {
this.filterDefinitions = storedFilter;
} else {
this.filterDefinitions = this.getFilterDefinitions();
@ -139,6 +139,29 @@ export abstract class BaseFilterListService<V extends BaseViewModel> {
});
}
/**
* Checks if the (stored) filter list matches the current definition of OsFilter
*
* @param storedFilter
* @returns boolean
*/
private isOsFilter(storedFilter: OsFilter[]): boolean {
if (Array.isArray(storedFilter) && storedFilter.length) {
return storedFilter.every(filter => {
// Interfaces do not exist at runtime. Manually check if the
// Required information of the interface are present
return (
filter.hasOwnProperty('options') &&
filter.hasOwnProperty('property') &&
filter.options.length &&
!!filter.property
);
});
} else {
return false;
}
}
/**
* Enforce children implement a method that returns actual filter definitions
*/