import * as React from 'react';
import { AsynchronousJobStatus, QueryBundleRequest, QueryResultBundle } from '../utils/synapseTypes/';
import { SynapseClientError } from '../utils/SynapseClient';
/**
 * TODO: SWC-5612 - Replace token prop with SynapseContext.accessToken
 *
 * This wasn't done because Enzyme's shallow renderer is not currently
 * compatible with the `contextType` field in the React 16+ context API.
 *
 * This can be fixed by rewriting tests to not rely on the shallow renderer.
 *
 * See here: https://github.com/enzymejs/enzyme/issues/1553
 */
export declare type QueryWrapperProps = {
    visibleColumnCount?: number;
    initQueryRequest: QueryBundleRequest;
    rgbIndex?: number;
    token?: string;
    facet?: string;
    unitDescription?: string;
    facetAliases?: Record<string, string>;
    loadNow?: boolean;
    showBarChart?: boolean;
    componentIndex?: number;
    shouldDeepLink?: boolean;
    hiddenColumns?: string[];
    lockedFacet?: LockedFacet;
    defaultShowFacetVisualization?: boolean;
    children?: (queryWrapperChildProps: QueryWrapperChildProps) => React.ReactNode | React.ReactNode[];
};
export declare type TopLevelControlsState = {
    showFacetVisualization: boolean;
    showFacetFilter: boolean;
    showColumnFilter: boolean;
    showSearchBar: boolean;
    showDownloadConfirmation: boolean;
    showColumnSelectDropdown: boolean;
};
export declare type SearchQuery = {
    columnName: string;
    searchText: string;
};
export declare type QueryWrapperState = {
    isAllFilterSelectedForFacet: Record<string, boolean>;
    data: QueryResultBundle | undefined;
    isLoadingNewData: boolean;
    isLoading: boolean;
    lastQueryRequest: QueryBundleRequest;
    hasMoreData: boolean;
    lastFacetSelection: FacetSelection;
    chartSelectionIndex: number;
    asyncJobStatus?: AsynchronousJobStatus;
    facetAliases?: Record<string, string>;
    loadNowStarted: boolean;
    topLevelControlsState?: TopLevelControlsState;
    isColumnSelected: string[];
    selectedRowIndices?: number[];
    error: SynapseClientError | undefined;
};
export declare type LockedFacet = {
    facet?: string;
    value?: string;
};
export declare type FacetSelection = {
    columnName: string;
    facetValue: string;
    selector: string;
};
export declare type QueryWrapperChildProps = {
    isAllFilterSelectedForFacet?: Record<string, boolean>;
    isLoading?: boolean;
    token?: string;
    entityId?: string;
    isLoadingNewData?: boolean;
    executeQueryRequest?: (param: QueryBundleRequest) => void;
    executeInitialQueryRequest?: () => void;
    getNextPageOfData?: (queryRequest: QueryBundleRequest) => void;
    getLastQueryRequest?: () => QueryBundleRequest;
    getInitQueryRequest?: () => QueryBundleRequest;
    data?: QueryResultBundle;
    facet?: string;
    updateParentState?: <K extends keyof QueryWrapperState>(param: Pick<QueryWrapperState, K>) => void;
    rgbIndex?: number;
    unitDescription?: string;
    facetAliases?: Record<string, string>;
    lastFacetSelection?: FacetSelection;
    chartSelectionIndex?: number;
    asyncJobStatus?: AsynchronousJobStatus;
    showBarChart?: boolean;
    hasMoreData?: boolean;
    topLevelControlsState?: TopLevelControlsState;
    isColumnSelected?: string[];
    selectedRowIndices?: number[];
    error?: SynapseClientError | undefined;
    lockedFacet?: LockedFacet;
};
export declare const QUERY_FILTERS_EXPANDED_CSS: string;
export declare const QUERY_FILTERS_COLLAPSED_CSS: string;
/**
 * Class wraps around any Synapse views that are dependent on a query bundle
 * Those classes then take in as props:
 *
 * @class QueryWrapper
 * @extends {React.Component}
 */
export default class QueryWrapper extends React.Component<QueryWrapperProps, QueryWrapperState> {
    private componentIndex;
    constructor(props: QueryWrapperProps);
    /**
     * Compute default query request
     *
     * @memberof QueryWrapper
     */
    componentDidMount(): void;
    /**
     * @memberof QueryWrapper
     */
    componentDidUpdate(prevProps: QueryWrapperProps): void;
    /**
     * Pass down a deep clone (so no side affects on the child's part) of the
     * last query request made
     *
     * @returns
     * @memberof QueryWrapper
     */
    getLastQueryRequest(): QueryBundleRequest;
    /**
     * Pass down a deep clone (so no side affects on the child's part) of the
     * first query request made
     *
     * @returns
     * @memberof QueryWrapper
     */
    getInitQueryRequest(): QueryBundleRequest;
    /**
     * Execute the given query
     *
     * @param {*} queryRequest Query request as specified by
     *                         https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/Query.html
     * @memberof QueryWrapper
     */
    executeQueryRequest(queryRequest: QueryBundleRequest): Promise<void>;
    /**
     * Grab the next page of data, pulling in 25 more rows.
     *
     * @param {*} queryRequest Query request as specified by
     *                         https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/Query.html
     * @memberof QueryWrapper
     */
    getNextPageOfData(queryRequest: QueryBundleRequest): Promise<void>;
    /**
     * Execute the initial query passed into the component
     *
     * @param {*} queryRequest Query request as specified by
     *                         https://rest-docs.synapse.org/rest/org/sagebionetworks/repo/model/table/Query.html
     * @memberof QueryWrapper
     */
    executeInitialQueryRequest(initQueryRequest?: QueryBundleRequest): void;
    updateParentState<K extends keyof QueryWrapperState>(update: Pick<QueryWrapperState, K>): void;
    /**
     * remove a particular facet name (e.g. study) and its all possible values based on the parameter specified in the url
     * this is to remove the facet from the charts, search and filter.
     * @return data: QueryResultBundle
     */
    removeLockedFacetData(): QueryResultBundle | undefined;
    /**
     * Render the children without any formatting
     */
    render(): JSX.Element;
}
