cheetah-framework
Version:
Cheetah Framework JS used in all our applications
50 lines (41 loc) • 1.17 kB
JavaScript
export default class GridFilters {
constructor (model, values = {}) {
this.values = { ...this.constructor.defaultValues, ...values }
this.model = model
this.handlers = this.getHandlers()
}
static get defaultValues () {
return {}
}
init (params, defaults) {
defaults = defaults || {}
Object.keys(this.values).forEach(key => {
this.values[key] = params.filters?.[key] ?? (defaults[key]?.length ? defaults[key] : this.values[key])
})
}
clear () {
Object.keys(this.values).forEach(key => {
this.values[key] = this.constructor.defaultValues[key]
})
}
getFiltersObject () {
return Object.keys(this.values).map(filter => ({
key: filter,
value: this.values[filter],
handler: this.handlers[filter]
}))
}
getCriteria () {
return this.getFiltersObject().map(filter => filter.handler()).filter(filter => !!filter)
}
getQuery () {
return _.pickBy(this.values, val => !_.isEmpty(val) || typeof val === 'number')
}
serialize () {
const query = this.getQuery()
return _.isEmpty(query) ? null : JSON.stringify(query)
}
getHandlers () {
return {}
}
}