import { IWebComponentInstance } from "../../../";
import { MediaItem, ImageItem, VideoItem, ImageInformation, MediaPickerEnums, VideoInformation, MediaPickerImageTransformationResult, MediaPickerVideo } from "../../../models";
import "./GridViewMediaProviderComponent.css";
import { MultiSelectMediaProviderComponentBase } from "./MultiSelectMediaProviderComponentBase";
export interface GridViewMediaProviderComponentProps {
}
export interface GridViewMediaProviderComponentSlots<MediaItemType extends MediaItem> {
    mediaSelectionTop?: () => JSX.Element;
    mediaSelectionBottom?: () => JSX.Element;
    mediaGridItemHover?: (item: MediaItemType) => JSX.Element;
    mediaGridItemOverlay?: (item: MediaItemType) => JSX.Element;
    customSlot?: () => JSX.Element;
}
export declare abstract class GridViewMediaProviderComponent extends MultiSelectMediaProviderComponentBase implements IWebComponentInstance, GridViewMediaProviderComponentProps {
    /**
     * Get media items by search keyword
     * @param searchKeyword
     */
    abstract getMediaItems(searchKeyword: string): Promise<Array<ImageItem | VideoItem>>;
    /**
     * Get more media items when reached the last item in grid while scrolling
     * @param lastLoadedIndex
     */
    abstract getMoreMediaItems(lastLoadedIndex: number): Promise<Array<ImageItem | VideoItem>>;
    /**
     * Return the information for selected media item in grid
     * @param mediaItem
     */
    abstract getMediaInfo(mediaItem: ImageItem | VideoItem): Promise<ImageInformation | VideoInformation>;
    /**
     * Manipulate the image result if needed before it is saved. Initiate the video result after video item is selected.
     * @param resultToBeSaved
     */
    abstract beforeSaved(resultToBeSaved: MediaPickerImageTransformationResult | VideoInformation): Promise<MediaPickerImageTransformationResult | MediaPickerVideo>;
    protected gridViewSlots: GridViewMediaProviderComponentSlots<MediaItem>;
    private allResults;
    private mediaGridItems;
    protected displayPageSize: number;
    protected enableLoadMoreButton: boolean;
    protected searchStatus: MediaPickerEnums.MediaSearchStatus;
    protected enableNoResultText: boolean;
    private isShowRetryGetSelectedImageInfoDialog;
    private gridComponentKey;
    private imageItemToRetryDownload;
    private isRetryingGetSelectedImageInfo;
    private isUpdatingInfiniteScroll;
    private noMoreResult;
    private gridViewStyles;
    private isLoadingMore;
    constructor();
    protected selectGridItem(mediaItem: ImageItem | VideoItem): void;
    protected setAllItems(mediaItems: Array<ImageItem | VideoItem>): void;
    protected setEmptyResultHandler(): void;
    protected setSearchStatus(status: MediaPickerEnums.MediaSearchStatus): void;
    private retryToGetSelectedImageInfo;
    private handleSelectedMediaItem;
    onImageTransformResultChanged(transformationResult: MediaPickerImageTransformationResult): void;
    private getMediaItemChunks;
    private onGridViewSearch;
    private appendGridItems;
    private onGridViewScroll;
    private renderRetryGetImageInfoDialog;
    private renderGridViewItemSelection;
    private closeRetryGetImageInfoDialog;
    protected renderLoadMoreButton(onClickButton: (e: Event) => Promise<void>): VueTsxSupport.JSX.Element;
    protected renderGridViewProvider(): VueTsxSupport.JSX.Element;
}
