import { DuplicateFilter } from "./tools/DuplicateFilter";
import { DemoHeightFilter } from "./tools/DemoHeightFilter";
export { ClientFilter }
/**
* Class representing a client filter.
*/
class ClientFilter {
/**
* Create a client filter.
* @param {Object} settings - The dictionary containing the client filter settings.
*/
constructor(settings = {}) {
this.settings = settings;
}
/**
* Initialize filter objects based on client filter settings.
*/
_initFilter() {
const _filterObjects = i => i != null && i !== false && Object.keys(i).length !== 0;
this.registeredDataDeletionFilter = [
this.settings.demoHeightFilter?.enable && new DemoHeightFilter(this.settings.demoHeightFilter?.heightMin)
].filter(_filterObjects);
this.registeredDataManipulationFilter = [
this.settings.duplicateFilter?.enable && new DuplicateFilter('pid', true)
].filter(_filterObjects);
}
/**
* Apply the client filters on the data.
* @param {Array} data - List where filter are applied on each item.
* @returns [itemStack, itemIndexStack]
*/
filterData(data) {
this._initFilter();
const itemStack = [];
const itemIndexStack = [];
const dataCopy = structuredClone(data)
dataCopy.forEach((item, index) => {
if (item == null) {
itemStack.push(undefined)
itemIndexStack.push([index])
}
const isDeletion = this.registeredDataDeletionFilter[0]?.isFilterConditionMatched(item) || false;
if (isDeletion) {
this.registeredDataDeletionFilter[0].applyFilterMethod(index, item, itemStack, itemIndexStack)
return
}
const isModification = this.registeredDataManipulationFilter[0]?.isFilterConditionMatched(item) || false;
if (isModification) {
this.registeredDataManipulationFilter[0].applyFilterMethod(index, item, itemStack, itemIndexStack)
return
}
const isNormalDataInsert = !isDeletion & !isModification;
if (item != null) {
item['numItemsOnSlide'] = 1;
itemStack.push(item);
itemIndexStack.push([index]);
}
})
return [itemStack, itemIndexStack]
}
}