export function getFiltersSetter()

in web/src/shared/helpers/set-filters.ts [5:38]


export function getFiltersSetter<T>(
    filtersState: FilterWithDocumentExtraOption<keyof T>[],
    setFiltersState: React.Dispatch<React.SetStateAction<FilterWithDocumentExtraOption<keyof T>[]>>
) {
    return (filtersToAdd: (FilterWithDocumentExtraOption<keyof T> | null)[]) => {
        let resultFilters: FilterWithDocumentExtraOption<keyof T>[] = [...filtersState];

        if (filtersToAdd.length === 0) {
            setFiltersState([]);
            return;
        }

        filtersToAdd.forEach((filter) => {
            if (!filter) {
                return;
            }
            const existedFilterIndex = resultFilters.findIndex(
                ({ field, operator }) => field === filter.field && operator === filter.operator
            );
            if (existedFilterIndex > -1) {
                if (filter.value) {
                    resultFilters[existedFilterIndex].value = filter.value;
                } else {
                    resultFilters.splice(existedFilterIndex);
                }
            } else {
                if (filter.value) {
                    resultFilters.push(filter);
                }
            }
        });
        setFiltersState(resultFilters);
    };
}