// @flow import {gt, isEqual, lt, negate, sortBy} from 'lodash/fp'; const IN = (expectedValues: Array, value: T): boolean => { return expectedValues.some(isEqual(value)); }; const NOT_IN: (expectedValues: Array, value: T) => boolean = negate(IN); const EQUALS = (expectedValues: Array, value: T): boolean => { return isEqual(expectedValues[0])(value); }; const NOT_EQUALS: (expectedValues: Array, value: T) => boolean = negate(EQUALS); const LT = (expectedValues: Array, value: T): boolean => { return lt(value)(expectedValues[0]); }; const GT = (expectedValues: Array, value: T): boolean => { return gt(value)(expectedValues[0]); }; const LTE: (expectedValues: Array, value: T) => boolean = negate(GT); const GTE: (expectedValues: Array, value: T) => boolean = negate(LT); const BETWEEN = (expectedValues: Array, value: T): boolean => { const [min: T, max: T]: Array = sortBy(v => v)(expectedValues); return GTE([min], value) && LTE([max], value); }; const NOT_BETWEEN: (expectedValues: Array, value: T) => boolean = negate(BETWEEN); const operators = { BETWEEN, EQUALS, GT, GTE, IN, LT, LTE, NOT_BETWEEN, NOT_EQUALS, NOT_IN }; export type OperatorKeys = $Keys; const checkCondition = ( operatorKey: OperatorKeys, expectedValues: Array, value: ?T ): boolean => { if (value === null || value === undefined) return false; return operators[operatorKey](expectedValues, value); }; export default checkCondition;