import { CollectionState, FiltersMap, SortOrder, WixPatternsContainer } from '@wix/bex-core';
import { ToolbarCollectionState } from './ToolbarCollectionState';
import { MultiLevelSortingStateDragAndDrop } from './MultiLevelSortingDragAndDrop';
import { Column } from '../model';
import type { ReactNode } from 'react';
export interface SortableColumn {
    key: string;
    columnId: string;
    name: ReactNode;
    direction: SortOrder;
}
export interface MultiLevelSortingStateParams<T, F extends FiltersMap> {
    readonly table: ToolbarCollectionState<T, F>;
    readonly container: WixPatternsContainer;
    readonly modalsContainerRef: {
        current: HTMLElement | null | undefined;
    };
}
export declare class MultiLevelSortingState<T, F extends FiltersMap> {
    table: ToolbarCollectionState<T, F>;
    container: WixPatternsContainer;
    sortingCollection: CollectionState<SortableColumn, FiltersMap>;
    dragAndDrop: MultiLevelSortingStateDragAndDrop<T, F>;
    orderedSortableColumns: import("mobx").IObservableArray<SortableColumn>;
    touchedColumnId: string;
    lastManuallyAddedColumnId: string | null;
    constructor(props: MultiLevelSortingStateParams<T, F>);
    get sortableColumns(): Column[];
    get sortableColumnsMap(): Map<string, Column>;
    get hasAvailableSortingColumns(): boolean;
    get sortListSize(): number;
    get availableColumns(): Set<string>;
    get currentSortOrder(): {
        fieldName: string;
        order: SortOrder;
    }[];
    get reportBI(): import("@wix/bex-core").ReportBI;
    private getNextAvailableSortableColumn;
    private toSortQuery;
    private isDifferentFromSortState;
    getAvailableOptions(columnId: string): {
        id: string;
        value: string;
    }[];
    addSort({ column, order, manual, }?: {
        column?: Column;
        order?: SortOrder;
        manual?: boolean;
    }): void;
    removeSort(columnId: string): void;
    changeSortOrder(sortableColumnId: string, direction: SortOrder): void;
    replaceSort(oldColumnId: string, newColumnId: string): void;
    onSortStateChange: () => void;
    sort(): void;
    reportSidePanelOpen(): void;
    reportSidePanelClose({ origin, }?: {
        origin?: 'X Button' | 'Sort CTA';
    }): void;
    init(): () => void;
}
//# sourceMappingURL=MultiLevelSortingState.d.ts.map