-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcreate-filter.js
43 lines (37 loc) · 931 Bytes
/
create-filter.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
import tokenize from 'tokenize-db-station-name'
const createFilter = (sel) => {
if (sel === 'all') return () => true
const props = Object.keys(sel)
const selTokens = 'string' === typeof sel.name
? tokenize(sel.name)
: []
const filter = (s) => {
for (let i = 0; i < props.length; i++) {
const prop = props[i]
if (prop === 'name') {
const sTokens = tokenize(s.name)
// check if selTokens is a subset of sTokens
for (let i = 0; i < selTokens.length; i++) {
if (sTokens.indexOf(selTokens[i]) < 0) return false
}
} else if (prop === 'latitude') {
if (
s.location &&
s.location.latitude !== sel.latitude
) return false
} else if (prop === 'longitude') {
if (
s.location &&
s.location.longitude !== sel.longitude
) return false
} else if (s[prop] !== sel[prop]) {
return false
}
}
return true
}
return filter
}
export {
createFilter,
}