import { Subject } from 'rxjs';
import { ImmutableAugmentedItem, ItemsAddedPayload, ItemsRemovedPayload, Item } from '../stores/items-store/interfaces';
import { NbOfItemsPerPageChangedPayload, NbOfTotalPagesChangedPayload, PageNbChangedPayload, PaginatedItemsChangedPayload } from './interfaces';
import { SearchedItemsChangedPayload } from '../searcher/searcher/interfaces';
import { SortingOptionsChangedPayload } from '../sorter/interfaces';
import { Searcher } from '../searcher/searcher/searcher';
/**
 * Handles pagination of items
 */
export declare class Paginator<T extends Item<T>> {
    protected readonly getSearchResults: Searcher<T>['getMutableItems'];
    protected readonly $itemsRemoved: Subject<ItemsRemovedPayload<T>>;
    protected readonly $itemsAdded: Subject<ItemsAddedPayload<T>>;
    protected readonly $searchedItemsChanged: Subject<SearchedItemsChangedPayload<T>>;
    protected readonly $sortingOptionsChanged: Subject<SortingOptionsChangedPayload<T>>;
    protected _paginatedItems: Readonly<ImmutableAugmentedItem<T>[]>;
    protected _pageNb: number;
    protected _nbOfItemsPerPage: number;
    protected _nbOfTotalPages: number;
    readonly $pageNbChanged: Subject<PageNbChangedPayload<T>>;
    readonly $nbOfItemsPerPageChanged: Subject<NbOfItemsPerPageChangedPayload<T>>;
    readonly $nbOfTotalPagesChanged: Subject<NbOfTotalPagesChangedPayload<T>>;
    readonly $paginatedItemsChanged: Subject<PaginatedItemsChangedPayload<T>>;
    constructor(getSearchResults: Searcher<T>['getMutableItems'], $itemsRemoved: Subject<ItemsRemovedPayload<T>>, $itemsAdded: Subject<ItemsAddedPayload<T>>, $searchedItemsChanged: Subject<SearchedItemsChangedPayload<T>>, $sortingOptionsChanged: Subject<SortingOptionsChangedPayload<T>>);
    /**
     * Returns the current page number
     */
    getPageNb(): number;
    /**
     * Sets the current page number
     */
    setPageNb(nb: number): void;
    /**
     * Returns the number of items per page
     */
    getNbOfItemsPerPage(): number;
    /**
     * Sets the number of items per page
     */
    setNbOfItemsPerPage(nb: number): void;
    /**
     * Returns the total number of pages
     */
    getNbOfPages(): number;
    /**
     * Returns the current page index
     */
    getPageIndex(): number;
    /**
     * Returns the total number of items
     */
    getPageSize(): number;
    /**
     * Returns the current page items
     */
    getItems(): Readonly<ImmutableAugmentedItem<T>[]>;
    /**
     * Updates the current page items
     */
    protected updatePageItemsInternal(): void;
    /**
     * Updates the number of items per page
     */
    protected updateItemsPerPage(nb: number): void;
    /**
     * Updates the current page number
     */
    protected updatePageNb(nb: number): void;
    /**
     * Updates the number of total pages
     */
    protected updateNbOfTotalPages(): void;
    /**
     * Updates the current page items
     */
    protected handleItemsRemoved(): void;
    /**
     * Updates the current page items
     */
    protected handleItemsAdded(): void;
    /**
     * Updates the current page items
     */
    protected handleItemsSearched(): void;
    /**
     * Updates the current page items
     */
    protected handleItemsSorted(): void;
    /**
     * Updates the current page items
     */
    protected raiseNbOfItemsPerPageChanged(prevNbOfItemsPerPage: number): void;
    /**
     * Updates the current page items
     */
    protected raiseNbOfTotalPagesChanged(prevNbOfTotalPages: number): void;
    /**
     * Updates the current page items
     */
    protected raisePageNbChanged(prevPageNb: number): void;
    /**
     * Updates the current page items
     */
    protected raisePaginatedItemsChanged(prevPaginatedItems: Readonly<ImmutableAugmentedItem<T>[]>): void;
}
