import { Observable } from 'rxjs';
import { SdFilterOperator } from '../../models/grid-column.model';
export declare class SdGridMaterialQuickFilter {
    code: string;
    columnFilter: {
        [field: string]: any;
    };
    externalFilter: {
        [field: string]: any;
    };
    filterDef: {
        [field: string]: any;
    };
}
export interface SdGridMaterialFilterConfiguration {
    inlineColumn: Record<string, boolean>;
    inlineExternal: Record<string, boolean>;
    inlineFilterDef: Record<string, boolean>;
}
export interface SdGridMaterialFilterValue {
    columnOperator?: Record<string, SdFilterOperator>;
    columnFilter?: Record<string, any>;
    externalFilter?: Record<string, any>;
    filterDef?: Record<string, any>;
    notReload?: boolean;
}
export interface SdGridMaterialFilterRequest {
    columnOperator: Record<string, SdFilterOperator>;
    rawColumnFilter: Record<string, any>;
    rawExternalFilter: Record<string, any>;
    rawFilterDef: Record<string, any>;
    pageNumber: number;
    pageSize: number;
    orderBy: string;
    orderDirection: 'asc' | 'desc' | '';
    isExported?: boolean;
}
export interface SdGridMaterialFilterOption {
    key?: string;
    cacheFilter?: boolean;
    disabled?: boolean;
    externalFilters?: SdGridMaterialExternalFilter[];
    inlineColumn?: boolean;
    sorts?: string[];
    enableCollapse?: boolean;
}
export declare type SdGridMaterialExternalFilter = TextFilter | DateFilter | DateTimeFilter | DateRangeFilter | NumberFilter | ValuesFilter | BoolFilter;
interface BaseFilter {
    field: string;
    title: string;
    defaultShowing?: boolean;
    disabled?: boolean;
}
interface TextFilter extends BaseFilter {
    type: 'string';
    default?: string;
}
interface DateFilter extends BaseFilter {
    type: 'date';
    default?: Date | string;
    minDate?: string | Date;
    maxDate?: string | Date;
}
interface DateTimeFilter extends BaseFilter {
    type: 'datetime';
    default?: Date | string;
    minDate?: string | Date;
    maxDate?: string | Date;
}
interface DateRangeFilter extends BaseFilter {
    type: 'daterange';
    enableTime?: boolean;
    minDate?: string | Date;
    maxDate?: string | Date;
    default?: {
        from?: Date | string;
        to?: Date | string;
    };
}
interface NumberFilter extends BaseFilter {
    type: 'number';
    default?: number;
}
interface ValuesFilter extends BaseFilter {
    type: 'values';
    option?: {
        items: any[] | ((searchText?: string) => Promise<any[]>);
        valueField: string;
        displayField: string;
        selection?: 'AUTOCOMPLETE' | 'MULTIPLE' | 'MULTIPLEAUTOCOMPLETE';
        selectAll?: boolean;
    };
    default?: string | string[];
}
interface BoolFilter extends BaseFilter {
    type: 'bool';
    option?: {
        displayOnTrue?: string;
        displayOnFalse?: string;
    };
    default?: boolean;
}
export interface SdGridMaterialFilterRegister {
    configuration: {
        get: () => SdGridMaterialFilterConfiguration;
        set: (configuration: Partial<SdGridMaterialFilterConfiguration>) => SdGridMaterialFilterConfiguration;
        remove: () => void;
        observer: Observable<SdGridMaterialFilterConfiguration>;
    };
    value: {
        get: () => SdGridMaterialFilterValue;
        set: (value: Partial<SdGridMaterialFilterValue>) => SdGridMaterialFilterValue;
        remove: () => void;
        observer: Observable<SdGridMaterialFilterValue>;
    };
}
export {};
