import * as React from 'react';
import { II18nLocaleUpload } from '../../i18n';
import { IAbstractMultiUploadProps, IUploadChangeDetail, IUploadFileItem, IUploadItemProps } from '../types';
import AbstractUpload from './AbstractUpload';
export interface IAbstractMultiUploadState<UPLOAD_ITEM extends IUploadFileItem> {
    fileList: Array<UPLOAD_ITEM>;
}
declare abstract class AbstractMultiUpload<UPLOAD_ITEM extends IUploadFileItem, ON_UPLOAD_SUCCESS_RETURN, UPLOAD_ITEM_COMP_PROPS extends IUploadItemProps<UPLOAD_ITEM>, P extends IAbstractMultiUploadProps<UPLOAD_ITEM, ON_UPLOAD_SUCCESS_RETURN, UPLOAD_ITEM_COMP_PROPS>> extends AbstractUpload<UPLOAD_ITEM, ON_UPLOAD_SUCCESS_RETURN, UPLOAD_ITEM_COMP_PROPS, P, IAbstractMultiUploadState<UPLOAD_ITEM>> {
    constructor(props: P);
    static getDerivedStateFromProps(nextProps: IAbstractMultiUploadProps<IUploadFileItem, any, IUploadItemProps<IUploadFileItem>>): {
        fileList: IUploadFileItem[];
    };
    get isControlled(): boolean;
    get fileList(): UPLOAD_ITEM[];
    get remainAmount(): number;
    getUploadItem(id: string): UPLOAD_ITEM | null;
    updateFileList: (list: UPLOAD_ITEM[], detail?: IUploadChangeDetail<UPLOAD_ITEM>, cb?: () => void) => void;
    deleteUploadItem: (deleteItem: UPLOAD_ITEM) => void;
    retryUploadItem: (retryItem: UPLOAD_ITEM) => void;
    updateUploadItem: (updateItemId: string, overrideProps: Partial<UPLOAD_ITEM>) => void;
    onTriggerUploadFile: (file: File) => Promise<void>;
    protected abstract createNewUploadFileItem(file: File): UPLOAD_ITEM | Promise<UPLOAD_ITEM>;
    protected abstract renderUploadList(i18n: II18nLocaleUpload): React.ReactNode;
}
export default AbstractMultiUpload;
