import { PromiseOr, RecursivePartial } from '@jscrpt/common';
import { Observable } from 'rxjs';
import { GridOptions } from '../gridOptions/gridOptions.interface';
import { GridPlugin } from '../gridPlugin/gridPlugin.interface';
import { GridAction, GridFunction } from '../../misc/types';
import { GridPluginType } from '../../misc/enums';
import { ContentRenderer, DataLoader, GridInitializer, MetadataSelector, NoDataRenderer, Ordering, Paging, RowSelector } from '../plugins';
/**
 * Public API for grid
 */
export interface Grid {
    /**
     * Occurs every time when grid is initialized or reinitialized, if value is false grid was not initialized yet or is being reinitialized
     */
    readonly initialized: Observable<boolean>;
    /**
     * Occurs everytime when plugins options initialization changes, if value is false plugins options were not initialized yet, or are being reinitialized
     */
    readonly pluginsOptionsInitialized: Observable<boolean>;
    /**
     * Gets or sets grid options
     */
    get gridOptions(): GridOptions;
    set gridOptions(value: RecursivePartial<GridOptions>);
    /**
     * Initialize component, automatically called once if not blocked by options
     * @param force - Indication that all plugins should be fully reinitialized, even thou nothing has changed
     */
    initialize(force: boolean): PromiseOr<void>;
    /**
     * Initialize options, automaticaly called during init phase, but can be used to reinitialize GridOptions
     */
    initOptions(): PromiseOr<void>;
    /**
     * Gets instance of plugin by its id
     * @param pluginId - Id of plugin, use constants
     */
    getPlugin(pluginId: GridPluginType.ContentRenderer): ContentRenderer;
    getPlugin(pluginId: GridPluginType.DataLoader): DataLoader;
    getPlugin(pluginId: GridPluginType.GridInitializer): GridInitializer;
    getPlugin(pluginId: GridPluginType.MetadataSelector): MetadataSelector;
    getPlugin(pluginId: GridPluginType.NoDataRenderer): NoDataRenderer;
    getPlugin(pluginId: GridPluginType.Ordering): Ordering;
    getPlugin(pluginId: GridPluginType.Paging): Paging;
    getPlugin(pluginId: GridPluginType.RowSelector): RowSelector;
    getPlugin<PluginInstance extends GridPlugin>(pluginId: GridPluginType): PluginInstance;
    /**
     * Sets GridPluginInstances into GridPlugin
     * @param plugin - Grid plugin to be filled with grid GridPluginInstances
     */
    setGridPluginInstances(plugin: GridPlugin): void;
    /**
     * Executes actions on grid
     * @param actions - Array of actions that are executed over grid
     */
    execute(...actions: GridAction[]): PromiseOr<void>;
    /**
     * Executes function on grid and returns result
     * @param func - Function that is executed and its result is returned
     */
    executeAndReturn<TResult>(func: GridFunction<TResult>): TResult;
}
//# sourceMappingURL=grid.interface.d.ts.map