import { ViewContainerRef, EnvironmentInjector, Injector } from '@angular/core';
import { IFilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';
import { IPagingState } from '../data-operations/paging-state.interface';
import { GridColumnDataType } from '../data-operations/data-util';
import { IGroupingState } from '../data-operations/groupby-state.interface';
import { GridSelectionRange } from './common/types';
import { ISortingExpression } from '../data-operations/sorting-strategy';
import { GridType, IPinningConfig } from './common/grid.interface';
import { IPivotConfiguration } from './pivot-grid/pivot-grid.interface';
import * as i0 from "@angular/core";
export interface IGridState {
    columns?: IColumnState[];
    filtering?: IFilteringExpressionsTree;
    advancedFiltering?: IFilteringExpressionsTree;
    paging?: IPagingState;
    moving?: boolean;
    sorting?: ISortingExpression[];
    groupBy?: IGroupingState;
    cellSelection?: GridSelectionRange[];
    rowSelection?: any[];
    columnSelection?: string[];
    rowPinning?: any[];
    pinningConfig?: IPinningConfig;
    expansion?: any[];
    rowIslands?: IGridStateCollection[];
    id?: string;
    pivotConfiguration?: IPivotConfiguration;
}
export interface IGridStateCollection {
    id: string;
    parentRowID: any;
    state: IGridState;
}
export interface IGridStateOptions {
    columns?: boolean;
    filtering?: boolean;
    advancedFiltering?: boolean;
    sorting?: boolean;
    groupBy?: boolean;
    paging?: boolean;
    cellSelection?: boolean;
    rowSelection?: boolean;
    columnSelection?: boolean;
    rowPinning?: boolean;
    pinningConfig?: boolean;
    expansion?: boolean;
    rowIslands?: boolean;
    moving?: boolean;
    pivotConfiguration?: boolean;
}
export interface IColumnState {
    pinned: boolean;
    sortable: boolean;
    filterable: boolean;
    editable: boolean;
    sortingIgnoreCase: boolean;
    filteringIgnoreCase: boolean;
    headerClasses: string;
    headerGroupClasses: string;
    maxWidth: string;
    groupable: boolean;
    hidden: boolean;
    dataType: GridColumnDataType;
    hasSummary: boolean;
    field: string;
    width: any;
    header: string;
    resizable: boolean;
    searchable: boolean;
    columnGroup: boolean;
    /**
     * @deprecated
     */
    parent?: any;
    key: string;
    parentKey: string;
    disableHiding: boolean;
    disablePinning: boolean;
    collapsible?: boolean;
    expanded?: boolean;
    visibleWhenCollapsed?: boolean;
}
export type GridFeatures = keyof IGridStateOptions;
export declare class IgxGridStateBaseDirective {
    grid: GridType;
    protected viewRef: ViewContainerRef;
    protected envInjector: EnvironmentInjector;
    protected injector: Injector;
    private featureKeys;
    private state;
    private currGrid;
    protected _options: IGridStateOptions;
    private FEATURES;
    /**
     *  An object with options determining if a certain feature state should be saved.
     * ```html
     * <igx-grid [igxGridState]="options"></igx-grid>
     * ```
     * ```typescript
     * public options = {selection: false, advancedFiltering: false};
     * ```
     */
    get options(): IGridStateOptions;
    set options(value: IGridStateOptions);
    /**
     * @hidden
     */
    constructor(grid: GridType, viewRef: ViewContainerRef, envInjector: EnvironmentInjector, injector: Injector);
    /**
     * Gets the state of a feature or states of all grid features, unless a certain feature is disabled through the `options` property.
     *
     * @param `serialize` determines whether the returned object will be serialized to JSON string. Default value is true.
     * @param `feature` string or array of strings determining the features to be added in the state. If skipped, all features are added.
     * @returns Returns the serialized to JSON string IGridState object, or the non-serialized IGridState object.
     * ```html
     * <igx-grid [igxGridState]="options"></igx-grid>
     * ```
     * ```typescript
     * @ViewChild(IgxGridStateDirective, { static: true }) public state;
     * let state = this.state.getState(); // returns string
     * let state = this.state(false) // returns `IGridState` object
     * ```
     */
    protected getStateInternal(serialize?: boolean, features?: GridFeatures | GridFeatures[]): IGridState | string;
    /**
     * Restores grid features' state based on the IGridState object passed as an argument.
     *
     * @param IGridState object to restore state from.
     * @returns
     * ```html
     * <igx-grid [igxGridState]="options"></igx-grid>
     * ```
     * ```typescript
     * @ViewChild(IgxGridStateDirective, { static: true }) public state;
     * this.state.setState(gridState);
     * ```
     */
    protected setStateInternal(state: IGridState, features?: GridFeatures | GridFeatures[]): void;
    /**
     * Builds an IGridState object.
     */
    private buildState;
    /**
     * The method that calls corresponding methods to restore features from the passed IGridState object.
     */
    private restoreGridState;
    private restoreFeatures;
    /**
     * Returns a collection of all grid features.
     */
    private applyFeatures;
    /**
     * This method restores complex objects in the pivot dimensions
     * Like the IgxPivotDateDimension and filters.
     */
    private restoreDimensions;
    /**
     * This method restores the IgxPivotDateDimension with its default functions and resource strings.
     */
    private restoreDateDimension;
    /**
     * Returns if this is a IgxPivotDateDimension.
     */
    private isDateDimension;
    /**
     * This method restores complex objects in the pivot values.
     * Like the default aggregator methods.
     */
    private restoreValues;
    /**
     * This method builds a FilteringExpressionsTree from a provided object.
     */
    private createExpressionsTreeFromObject;
    /**
     * Returns the filtering logic function for a given dataType and condition (contains, greaterThan, etc.)
     */
    private generateFilteringCondition;
    protected stringifyCallback(key: string, val: any): any;
    private getColumnGroupKey;
    private getFeature;
    static ɵfac: i0.ɵɵFactoryDeclaration<IgxGridStateBaseDirective, [{ optional: true; host: true; }, null, null, null]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<IgxGridStateBaseDirective, never, never, { "options": { "alias": "options"; "required": false; }; }, {}, never, never, false, never>;
}
