import { GridFilters } from './DataState';
import { ColumnResizing, IdType, SortingRule } from 'react-table';
import { DataQuery, DataQueryResult } from './DataQuery';
import { Identifiable, UrlState } from '@custis/common';
import { ExpandMode, FilterMapping, IHiddenColumn, SortingMapping, TFilterWithId, TTableColumn, TTableRowMode } from './models';
import { RefObject } from 'react';
import { FixedSizeList } from 'react-window';
import { GridDataStore, GridStateStore } from './stores';
import { PaginationService } from './services';
import { ColumnService } from './services/ColumnService';
export declare abstract class GridStore<TItem extends Identifiable & {
    children?: TItem[];
}, TFilter, TSorting, TResultAdditionalInfo = undefined> {
    private lsStatekey;
    private filterMapper;
    private sortingMapper;
    pagingService: PaginationService<TItem>;
    private filterService;
    columnService: ColumnService<TItem, TFilter, TSorting>;
    private readonly storageService;
    protected abortController?: AbortController;
    gridStateStore: GridStateStore<TItem, TFilter, TSorting>;
    gridData: GridDataStore<TItem, TResultAdditionalInfo>;
    urlState?: UrlState<DataQuery<TFilter, TSorting>>;
    protected constructor(lsStatekey: string);
    toggleRowSelected?: (rowId: IdType<TItem>, set?: boolean) => void;
    rowCanBeSelected: (row: TItem) => boolean;
    getSubRow: ((originalRow: TItem, relativeIndex?: number) => TItem[]) | undefined;
    fixedSizeList?: RefObject<FixedSizeList>;
    nonVirtualList?: RefObject<HTMLDivElement>;
    init(): void;
    setSelection(id: string, value: boolean): void;
    toggleSelectAll(value: boolean): void;
    get isAllSelected(): boolean;
    loadResizing(): void;
    setColumnsResizing(resizing: ColumnResizing | undefined): void;
    setColumnOrder(columnOrder: IdType<TItem>[]): void;
    get gridState(): GridStateStore<TItem, TFilter, TSorting>;
    get result(): DataQueryResult<TItem, TResultAdditionalInfo>;
    setChecked(id: string, value: boolean): void;
    setExpanded(id: number | string, value: boolean): void;
    toggleAllExpand(mode: ExpandMode): void;
    saveHiddenColumnsToLocalStorage(columns: IHiddenColumn<TItem>[]): void;
    saveExpanded(values: Record<string, boolean>): void;
    toggleHiddenColumn(columnId?: IdType<TItem>, visible?: boolean, touched?: boolean): void;
    toggleAllHiddenColumns(value: boolean): void;
    getColumnVisibility(columnId?: IdType<TItem>): IHiddenColumn<TItem> | undefined;
    get expandedKey(): string;
    get expandAllKey(): string;
    get checkedKey(): string;
    get hiddenKey(): string;
    get orderKey(): string;
    get stateKey(): string;
    setPaging(pageSize: number, pageIndex: number): void;
    setFilters(filters: GridFilters<TItem>): void;
    updateFilters(filter: Record<string, unknown>): void;
    setSorting(sortBy: SortingRule<TSorting>[]): void;
    setHighlightedRowId(id: string | undefined): void;
    abstract executeQuery(query: DataQuery<TFilterWithId<TFilter>, TSorting>, signal?: AbortSignal): Promise<DataQueryResult<TItem, TResultAdditionalInfo>>;
    get filterMapping(): FilterMapping<TItem, TFilter>;
    get sortingMapping(): SortingMapping<TItem, TSorting>;
    loadData(): Promise<void>;
    loadCheckedRows(): void;
    loadExpandedRows(): void;
    loadHiddenColumns(): void;
    loadOrderColumns(columns: TTableColumn<TItem, TFilter, TSorting>[], hasGridSelectionColumn: boolean): void;
    changeTableMode(value: TTableRowMode): void;
    onHideEditRow(): void;
    get areAllColumnsHidden(): boolean;
    onNewRowChange(row: Partial<TItem>): void;
    onEditRowChange(row: Partial<TItem>): void;
    setUrlState(urlState: UrlState<DataQuery<TFilter, TSorting>>): void;
    createRow(): void;
    createSubRow(newRowId: number): void;
    get hiddenColumns(): IdType<TItem>[];
    highlightModificatedRow(id?: number): Promise<void>;
    resetGrid(): void;
    highlightCells(key: string, value: string): void;
    subscribeCopyEvent(): void;
    unsubscribeCopyEvent(): void;
    resetFilters(filters?: TFilter): void;
    private copyHighlightedCells;
    get highlightedItem(): TItem | undefined;
    private getSafeFromJSON;
}
