-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
filterTypes.js
137 lines (115 loc) · 3.16 KB
/
filterTypes.js
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
export const text = (rows, ids, filterValue) => {
rows = rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return String(rowValue)
.toLowerCase()
.includes(String(filterValue).toLowerCase())
})
})
return rows
}
text.autoRemove = val => !val
export const exactText = (rows, ids, filterValue) => {
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return rowValue !== undefined
? String(rowValue).toLowerCase() === String(filterValue).toLowerCase()
: true
})
})
}
exactText.autoRemove = val => !val
export const exactTextCase = (rows, ids, filterValue) => {
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return rowValue !== undefined
? String(rowValue) === String(filterValue)
: true
})
})
}
exactTextCase.autoRemove = val => !val
export const includes = (rows, ids, filterValue) => {
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return rowValue.includes(filterValue)
})
})
}
includes.autoRemove = val => !val || !val.length
export const includesAll = (rows, ids, filterValue) => {
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return (
rowValue &&
rowValue.length &&
filterValue.every(val => rowValue.includes(val))
)
})
})
}
includesAll.autoRemove = val => !val || !val.length
export const includesSome = (rows, ids, filterValue) => {
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return (
rowValue &&
rowValue.length &&
filterValue.some(val => rowValue.includes(val))
)
})
})
}
includesSome.autoRemove = val => !val || !val.length
export const includesValue = (rows, ids, filterValue) => {
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return filterValue.includes(rowValue)
})
})
}
includesValue.autoRemove = val => !val || !val.length
export const exact = (rows, ids, filterValue) => {
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return rowValue === filterValue
})
})
}
exact.autoRemove = val => typeof val === 'undefined'
export const equals = (rows, ids, filterValue) => {
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
// eslint-disable-next-line eqeqeq
return rowValue == filterValue
})
})
}
equals.autoRemove = val => val == null
export const between = (rows, ids, filterValue) => {
let [min, max] = filterValue || []
min = typeof min === 'number' ? min : -Infinity
max = typeof max === 'number' ? max : Infinity
if (min > max) {
const temp = min
min = max
max = temp
}
return rows.filter(row => {
return ids.some(id => {
const rowValue = row.values[id]
return rowValue >= min && rowValue <= max
})
})
}
between.autoRemove = val =>
!val || (typeof val[0] !== 'number' && typeof val[1] !== 'number')