@ecomplus/search-engine
Version:
JS lib to handle products search with E-Com Plus stores
23 lines (22 loc) • 787 B
JavaScript
export default (self, field, prop, value, occur) => {
// abstraction to set or remove filter by field IDs/names
const newProp = field !== null ? `${field}.${prop}` : prop
if (Array.isArray(value)) {
// setup new filter object
const filter = { terms: {} }
filter.terms[newProp] = value
// remove concurrent filter and merge the new
let concurrentProp
if (field !== null) {
concurrentProp = `${field}.${(prop === '_id' ? 'name' : '_id')}`
} else {
// product SKUs or IDs
concurrentProp = prop === '_id' ? 'sku' : '_id'
}
return self.removeFilter(concurrentProp, occur).mergeFilter(filter, occur)
} else if (value === null) {
// just remove respective filter
return self.removeFilter(newProp, occur)
}
return self
}