import { SuspendableObject, AdaptablePredicate } from '../../types';
import { TypeHint } from './Types';
/**
 * Defines a Filter applied on a Column using a Predicate
 */
export interface ColumnFilter extends SuspendableObject {
    /**
     * Column where Filter should be applied
     */
    ColumnId: string;
    /**
     * `AdaptablePredicate` which AdaptableQL will evaluate when the Filter is run
     */
    Predicates: ColumnFilterPredicate[];
    /**
     * Logic used when combining multiple Predicates ('AND'|'OR')
     * @defaultValue 'AND'
     */
    PredicatesOperator?: PredicatesOperator;
}
/**
 * A Predicate used in Column Filtering
 */
export interface ColumnFilterPredicate extends AdaptablePredicate {
    PredicateId: TypeHint<string, SystemFilterPredicateId>;
}
/**
 * Logic used to join multiple Predicates
 */
export type PredicatesOperator = 'AND' | 'OR';
/**
 * Array containing all System Filter Predicates
 */
export type SystemFilterPredicateIds = SystemFilterPredicateId[];
/**
 * List of System Predicates available for Filters
 */
export type SystemFilterPredicateId = 'In' | 'NotIn' | 'Blanks' | 'NonBlanks' | 'Equals' | 'NotEquals' | 'GreaterThan' | 'LessThan' | 'Positive' | 'Negative' | 'Zero' | 'Between' | 'NotBetween' | 'Is' | 'IsNot' | 'Contains' | 'NotContains' | 'StartsWith' | 'EndsWith' | 'Regex' | 'Today' | 'Yesterday' | 'Tomorrow' | 'ThisWeek' | 'ThisMonth' | 'ThisQuarter' | 'ThisYear' | 'InPast' | 'InFuture' | 'Before' | 'After' | 'InRange' | 'On' | 'NotOn' | 'NextWorkDay' | 'LastWorkDay' | 'WorkDay' | 'Holiday' | 'True' | 'False' | 'BooleanToggle';
