import { ApFormSearchFormPopoverSorterItem } from '../../ap-form';
import { Recordable } from '../../type';
export interface SaveDataSource {
    /** 获取表单数据 */
    getSearchFormValues?: (transform?: boolean) => (Partial<Recordable> & Recordable<any>) | undefined;
    /** 设置表单数据 */
    setSearchFormValues?: (values: Partial<Recordable>) => void;
    /** 提交 */
    submit?: () => void;
    /** 表格submitWith,非表格则和submit传递一致函数即可 */
    submitWith?: () => void;
    /** 重置 */
    reset?: () => void;
    /** 获取表单排序 */
    getSearchFormSorterItems?: () => ApFormSearchFormPopoverSorterItem[];
    /** 设置表单排序 */
    setSearchFormSorterItems?: (sortedItems: ApFormSearchFormPopoverSorterItem[]) => void;
    /** 重置表单排序 */
    resetSearchFormSorterItems?: () => void;
    /** 是否转换搜索表单,默认为 false */
    searchFormTransform?: boolean;
    /**
     * searchForm的model,用于当searchFormModel变更时触发url参数更新
     */
    searchFormModel?: any;
}
export interface ViewCacheOption {
    /** 获取视图列表 */
    getViewList?: (option: {
        tableKey: string;
    }) => Promise<ViewListModel[]>;
    /** 添加视图 */
    addView?: (option: {
        tableKey: string;
        viewName: string;
        viewKey: string;
        viewConfig?: Recordable;
        isDefault?: boolean;
    }) => Promise<void>;
    /** 设置视图 */
    changeView?: (option: {
        tableKey: string;
        viewName: string;
        viewKey: string;
        viewConfig?: Recordable;
        isDefault?: boolean;
    }) => Promise<void>;
    /** 删除视图 */
    removeView?: (option: {
        tableKey: string;
        viewKey: string;
    }) => Promise<void>;
}
export interface ViewListModel {
    viewKey: string;
    viewName: string;
    viewConfig?: Recordable;
    isDefault?: boolean;
}
export interface ApViewUrlQueryOwnerContext {
    tableKey: string;
}
export interface ApViewUrlQueryContext extends ApViewUrlQueryOwnerContext {
    ownerKey?: string;
    defaultQuery: Recordable;
}
export interface ApViewUrlQueryWriteContext extends ApViewUrlQueryContext {
    defaultSetQuery: (params: Record<string, string>) => void;
}
export interface ApViewUrlQueryAdapter {
    /**
     * 返回当前 ApView 实例所属的稳定 ownerKey。
     * 组件内部会在首次获取成功后缓存它，避免异步回写时误用当前激活页上下文。
     */
    resolveOwnerKey?: (context: ApViewUrlQueryOwnerContext) => string | undefined;
    /**
     * 自定义读取 URL/query 的来源；未提供时使用浏览器当前地址。
     */
    getQuery?: (context: ApViewUrlQueryContext) => Recordable;
    /**
     * 自定义写入 URL/query 的行为；未提供时直接写浏览器当前地址。
     */
    setQuery?: (params: Record<string, string>, context: ApViewUrlQueryWriteContext) => void;
}
export interface ApViewConfig {
    apViewQuerySync?: ApViewUrlQueryAdapter;
}
export interface ApViewProps {
    /**
     * 表格唯一标识
     */
    tableKey: string;
    /**
     * 表格数据来源
     */
    saveDataSource?: SaveDataSource;
    /**
     * 视图缓存配置
     */
    viewCacheOption?: ViewCacheOption;
    /**
     * 视图最大保存数
     */
    maxViewNum?: number;
    /**
     * 指定默认视图为系统视图
     */
    isDefaultSystemView?: boolean;
    /**
     * 指定初始化默认视图为系统视图(仅初始化生效)
     */
    isFirstDefaultSystemView?: boolean;
    /**
     * 是否手动发起第一次网络请求,默认为 false
     */
    manual?: boolean;
    /**
     * 表单项为空时的状态数据,适用于为空时其值不为undefined的情况
     */
    emptyData?: Recordable;
    /**
     * 视图额外需要被设置的参数Key
     */
    extraParams?: string[];
    /**
     * 是否将参数保存在url，默认为 true，设置为 false 后，searchForm 将不会将参数保存在url上
     */
    sendToUrl?: boolean;
    /**
     * 是否在第一次进入页面时将参数保存在url回显在 searchForm，默认为 true，设置为 false 后，第一次进入页面时 searchForm 将不会将参数保存在url上
     */
    initToUrl?: boolean;
    /** 额外的保存在url的参数 */
    extraUrlParams?: () => Recordable;
    /**
     * 当前 ApView 实例的 URL 同步桥接；优先级高于 ConfigProvider.apView.apViewQuerySync。
     */
    apViewQuerySync?: ApViewUrlQueryAdapter;
}
export interface ApViewExpose {
    setFirstDefaultSystemView: (value: boolean) => void;
    setInitToUrl: (value: boolean) => void;
    getMountedData: () => Recordable;
}
