1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
import { FILTER_COLUMNS, OPERATORS } from '@/lib/constants';
import type { Filter, QueryFilters, QueryOptions } from '@/lib/types';
export function parseFilterValue(param: any) {
if (typeof param === 'string') {
const operatorValues = Object.values(OPERATORS).join('|');
const regex = new RegExp(`^(${operatorValues})\\.(.*)$`);
const [, operator, value] = param.match(regex) || [];
return { operator: operator || OPERATORS.equals, value: value || param };
}
return { operator: OPERATORS.equals, value: param };
}
export function isEqualsOperator(operator: any) {
return [OPERATORS.equals, OPERATORS.notEquals].includes(operator);
}
export function isSearchOperator(operator: any) {
return [OPERATORS.contains, OPERATORS.doesNotContain].includes(operator);
}
export function filtersObjectToArray(filters: QueryFilters, options: QueryOptions = {}): Filter[] {
if (!filters) {
return [];
}
return Object.keys(filters).reduce((arr, key) => {
const filter = filters[key];
if (filter === undefined || filter === null) {
return arr;
}
if (filter?.name && filter?.value !== undefined) {
return arr.concat({ ...filter, column: options?.columns?.[key] ?? FILTER_COLUMNS[key] });
}
const { operator, value } = parseFilterValue(filter);
return arr.concat({
name: key,
column: options?.columns?.[key] ?? FILTER_COLUMNS[key],
operator,
value,
prefix: options?.prefix,
});
}, []);
}
export function filtersArrayToObject(filters: Filter[]) {
return filters.reduce((obj, filter: Filter) => {
const { name, operator, value } = filter;
obj[name] = `${operator}.${value}`;
return obj;
}, {});
}
|