import { UniqueFacetIdentifier } from '@/utils/types/UniqueFacetIdentifier';
import { QueryBundleRequest, QueryFilter } from '@sage-bionetworks/synapse-types';
import * as React from 'react';
import { ReadonlyDeep } from 'type-fest';
import { QueryChangeCommitOptions } from './useTableQueryReducer';
export type ImmutableTableQueryResult = {
    /** The ID of the table parsed from the SQL query */
    entityId?: string;
    /** The version number of the table parsed from the SQL query */
    versionNumber?: number;
    /** The current query request, which is passed on to the server for results */
    currentQueryRequest: ReadonlyDeep<QueryBundleRequest>;
    /** The next (uncommitted) query request. This will become the current query request when commitChanges is called, or the configured debounced timer elapses. */
    nextQueryRequest: ReadonlyDeep<QueryBundleRequest>;
    /** Resets the debounce timer to delay committing changes in `nextQueryRequest` */
    resetDebounceTimer: () => void;
    /** Update the currentQueryRequest to be the nextQueryRequest */
    commitChanges: () => void;
    getInitQueryRequest: () => QueryBundleRequest;
    getCurrentQueryRequest: () => QueryBundleRequest;
    setQuery: (queryRequest: React.SetStateAction<QueryBundleRequest>, commitOptions?: QueryChangeCommitOptions) => void;
    pageSize: number;
    /** The current page of results. The first page is `1` */
    currentPage: number;
    setPageSize: (pageSize: number) => void;
    /** pageNumber is 1-indexed */
    goToPage: (pageNumber: number) => void;
    /** Resets the query to the initial state, clearing all user-specified filters */
    resetQuery: () => void;
    addValueToSelectedFacet: (facet: UniqueFacetIdentifier, value: string, commitOptions?: QueryChangeCommitOptions) => void;
    /** Removes a particular selected facet from the query */
    removeSelectedFacet: (facet: UniqueFacetIdentifier | UniqueFacetIdentifier[]) => void;
    /** Removes a particular value from a selected facet. If the value is the last value in the FacetColumnRequest, the selected facet will be removed. */
    removeValueFromSelectedFacet: (facet: UniqueFacetIdentifier, value: string, commitOptions?: QueryChangeCommitOptions) => void;
    setRangeFacetValue: (facet: UniqueFacetIdentifier, min?: string, max?: string, commitOptions?: QueryChangeCommitOptions) => void;
    /** Removes a particular QueryFilter from the query */
    removeQueryFilter: (filter: QueryFilter) => void;
    /** Removes a particular value from a QueryFilter. If the value is the last value in the filter, the filter will be removed. */
    removeValueFromQueryFilter: (filter: QueryFilter, value: string) => void;
    /** If `requireConfirmationOnChange` is true, this will become true when a function that triggers a query change is invoked. */
    isConfirmingChange: boolean;
    /** If `isConfirmingChange` is true, invoke this function to complete the query change */
    onConfirmChange: () => void;
    /** If `isConfirmingChange` is true, invoke this function to cancel the query change */
    onCancelChange: () => void;
};
export type UseImmutableTableQueryOptions = {
    /** The initial table query request object */
    initQueryRequest: QueryBundleRequest;
    /** Whether the URL should update when the query is modified. */
    shouldDeepLink?: boolean;
    /** Unique index for the component on the page so URL updates do not conflict between table query components */
    componentIndex?: number;
    /** Callback invoked when the query is modified */
    onQueryChange?: (newQueryJson: string) => void;
    /** Whether to require explicit user confirmation before changing the query. */
    requireConfirmationOnChange?: boolean;
};
export declare const DEBOUNCE_DELAY_MS = 750;
/**
 * Custom hook that maintains and manages the state of a Synapse Table query.
 * @param options
 * @returns
 */
export default function useImmutableTableQuery(options: UseImmutableTableQueryOptions): ImmutableTableQueryResult;
//# sourceMappingURL=useImmutableTableQuery.d.ts.map