import { type FileActionUploadApiResponseRecord, type FileMode } from '../typings';
export declare type FileVersionStrategy = 'latest' | 'all';
export declare type FileVersionCache = FileActionUploadApiResponseRecord;
export interface FileVersionCaches {
    actualId?: FileVersionCache[];
}
/**
 * 编辑/立即更新模式需要向后端提供双向绑定的 fileactualids
 *
 * 1. 编辑模式数据结构：(为了后端管理文件版本)
 * [{
 *    actualId: '',
 *    moduleCode: '',
 *    versionList: [{
 *      ...file
 *    }]
 * }]
 *
 * 2. 立即更新模式数据结构：
 * [file.actualId]
 *
 * 其中当组件进入编辑/立即更新模式后，数据初始化完成先组建数据结构：
 * [{ actualId: '' }]
 * 编辑模式下，当用户进入行编辑前/打开version弹窗前/点击更新按钮前，请求 filehistorylist 将数据维护至 versionlist 中此时打开 version 弹窗直接从缓存取数据即可
 *
 * 3. 缓存载入的时机是在编辑/立即更新模式下 queryfile/queryfilelist，后端返回的数据中每条数据为 verions:1 接口返回后调用 createAllFileCaches
 *
 * 4. 文件版本列表数据载入的时机是在编辑/立即更新模式下第一次点击该行中版本/更新按钮会请求 querfilehstory 将其载入缓存，详情查看 filetable.vue 中的 beforeReadFileCaches
 *
 * 5. 删除该行文件数据缓存的时机是在编辑/立即更新模式下点击删除按钮后触发，调用 deleteFileCaches
 */
export declare class VersionCaches {
    caches: {
        [key: string]: FileVersionCache[] | undefined;
    };
    /** 控制版本个数只增一次 */
    actualidCaches: Set<string>;
    static controller: VersionCaches;
    static getInstance(): VersionCaches;
    private filterCacheKeys;
    constructor(caches?: {
        [key: string]: FileVersionCache[] | undefined;
    }, 
    /** 控制版本个数只增一次 */
    actualidCaches?: Set<string>);
    /**
     * 对数据源（全部文件数据）做缓存，filetable/fileupload/fileuploadlink
     * @param files
     * @param mode
     */
    createAllFileCaches(files: FileActionUploadApiResponseRecord[], mode?: FileMode): void;
    /**
     * 对单一文件做缓存
     * @param _file
     * @param _histories
     * @returns
     */
    createFileCaches(_file: FileActionUploadApiResponseRecord, _histories: FileActionUploadApiResponseRecord[]): FileActionUploadApiResponseRecord[] | undefined;
    /**
     * 为单一文件新增一条缓存数据
     * 这里需要注意的是编辑模式下更新文件（接口返回的数据）版本只加一次
     * 立即更新模式下不论是本地上传还是接口返回的文件数据每次更新版本都会加一次
     * @param updatedFile
     * @returns
     */
    createFileCache(updatedFile: FileActionUploadApiResponseRecord, mode: FileMode): void;
    readFileCaches(actualId: string): FileActionUploadApiResponseRecord[] | undefined;
    /** 按照后端要求的数据结构返回 */
    getCaches(): {
        actualId: string;
        moduleCode: string | undefined;
        versionList: FileActionUploadApiResponseRecord[];
    }[];
    /**
     * 更新单一文件全部缓存
     * @param updatedFile
     * @returns
     */
    updateFileCaches(updatedFile: FileActionUploadApiResponseRecord): void;
    /**
     * 文件删除成功后删除该文件的缓存
     * @param actualId
     * @returns
     */
    deleteFileCaches(actualId: string): void;
    /**
     * 清空所有缓存
     */
    deleteAllFileCaches(): void;
    /**
     * 后端返回的 history 数组中的数据按照版本号由小到大排列
     * 最后一条数据即最新版本
     * @param actualId
     * @returns
     */
    readFileCacheLatestVersion(actualId: string): FileActionUploadApiResponseRecord | undefined;
    /**
     * 更新缓存中的版本号
     * @param updatedFile
     * @returns
     */
    updateFileCacheVersion(updatedFile: FileActionUploadApiResponseRecord): void;
    /**
     * 表格行编辑前、version 列弹窗出现前、update 按钮点击前需要先判断缓存是否为空
     * 如果为空则请求该文件的 filehistory 进行缓存
     * 如果不为空则什么都不做
     * @returns
     */
    isCachesEmpty(): boolean;
    /**
     * 保留缓存需要的属性
     * @param file
     * @returns
     */
    buildCache(file: FileActionUploadApiResponseRecord): FileActionUploadApiResponseRecord;
    serialize<T>(data: T): T;
}
export declare const VersionCachesSingleton: VersionCaches;
