cheetah-framework
Version:
Cheetah Framework JS used in all our applications
54 lines (43 loc) • 1.37 kB
JavaScript
import { Model } from '@cheetah/models/Model'
import ArrayMutator from '@cheetah/models/mutators/ArrayMutator'
import Criterion from '@cheetah/models/Criterion'
const OPERATORS = {
AND: 'and',
OR: 'or'
}
class Criteria extends Model {
setCriteriaAttribute (criteria) {
this._attributes['criteria'] = new ArrayMutator(criteria, criteriaOrCriterion => {
if (criteriaOrCriterion instanceof Criteria || criteriaOrCriterion instanceof Criterion) {
return criteriaOrCriterion
}
if (
criteriaOrCriterion.criteria &&
_.includes(_.values(OPERATORS), criteriaOrCriterion.operator) &&
!this.relationCriterionCheck(criteriaOrCriterion)
) {
return new Criteria(criteriaOrCriterion)
}
return new Criterion(criteriaOrCriterion)
})
}
get defaultValue () {
return {
operator: OPERATORS.AND,
criteria: []
}
}
add (criteriaOrCriterion) {
this.criteria.push(criteriaOrCriterion)
}
removeByIndex (index) {
this.criteria.splice(index, 1)
}
relationCriterionCheck (criteriaOrCriterion) {
return _.get(criteriaOrCriterion, 'aggregators.0.aggregation') ||
_.includes(_.values(Criterion.RELATION_TYPE_OPERATORS), criteriaOrCriterion.type)
}
}
Criteria.OPERATORS = OPERATORS
Criteria.allOperators = _.values(OPERATORS)
export default Criteria