/**
 * @file EntityFormBuilder
 * @desc Form表单绑定实体使用，和模型表单有区别
 */
/// <reference types="react" />
import { BaseSchemaBuilder } from './SchemaBuilder';
import { Manager } from '../base/Manager';
import { SharedContext } from './SharedContext';
import { ApiStrategyInterface } from './ApiStrategyInterface';
import type { ModelItem, FeatType, ModelEntityApiSchema, ExtraField } from '../type';
export declare enum DSFeatureEnum {
    List = "List",
    Insert = "Insert",
    View = "View",
    Edit = "Edit",
    Delete = "Delete",
    BulkEdit = "BulkEdit",
    BulkDelete = "BulkDelete",
    Import = "Import",
    Export = "Export",
    SimpleQuery = "SimpleQuery",
    FuzzyQuery = "FuzzyQuery",
    AdvancedQuery = "AdvancedQuery"
}
/** 表单操作 */
type EntityFormOperatorValue = 'cancel' | 'reset' | 'submit';
interface EntityFormOperator {
    label: string;
    value: EntityFormOperatorValue;
    order: number;
    schema: Record<string, any>;
}
interface EntityFormBuilderOptions {
    /** 功能场景 */
    feat: Extract<FeatType, 'Insert' | 'Edit' | 'BulkEdit' | 'View'>;
    /** 支持新增的字段集合 */
    insertFields?: ExtraField[];
    /** 支持编辑的字段集合 */
    editFields?: ExtraField[];
    /** 支持批量编辑字段集合 */
    bulkEditFields?: ExtraField[];
    /** 支持查看字段集合 */
    viewFields?: ExtraField[];
    /** 操作栏支持的功能 */
    operators: EntityFormOperator[];
    /** 初始化API过滤条件, 格式支持ConditionBuilder，构建JsonQL API时需要转化 */
    filters?: ModelEntityApiSchema['filters'];
}
export declare class EntityFormSchemaBuilder extends BaseSchemaBuilder<EntityFormBuilderOptions> {
    readonly model: ModelItem;
    readonly apiStrategy: ApiStrategyInterface;
    readonly manager: Manager;
    readonly sharedContext: SharedContext;
    static id: string;
    options?: EntityFormBuilderOptions;
    ApiIdentifier: 'model-entity';
    constructor(model: ModelItem, apiStrategy: ApiStrategyInterface, manager: Manager, sharedContext: SharedContext);
    makeDefaultOptions(): Promise<EntityFormBuilderOptions>;
    /** 重新构建时从Schema中解析初始化配置, 不同于模型组件的是，配置项信息直接放在对应功能区的schema中，不再需要$$m了 */
    guessOptionsFromSchema(schema: any): Promise<EntityFormBuilderOptions | {
        feat: any;
        dsType: "model-entity";
        insertFields: ExtraField[] | undefined;
        editFields: ExtraField[] | undefined;
        bulkEditFields: ExtraField[] | undefined;
        operators: any;
        filters: any;
    }>;
    /** 从Schema中提取指定功能场景的可用字段集合 */
    extractFieldsBySchema(fields: {
        id: string;
        [propName: string]: any;
    }[], feat: FeatType): Promise<ExtraField[]>;
    getFeatKey(feat: FeatType): Extract<keyof EntityFormBuilderOptions, 'insertFields' | 'editFields' | 'bulkEditFields'>;
    getFields(options: EntityFormBuilderOptions): ExtraField[];
    apiStrategyFnMap: (feat: Exclude<EntityFormBuilderOptions['feat'], 'View'>) => any;
    /** 构建提交API */
    buildApi(options: EntityFormBuilderOptions): Promise<any>;
    /** 构建初始化API */
    buildInitApi(options: EntityFormBuilderOptions): Promise<{
        filters?: import("amis").ConditionValue | undefined;
        limit: string;
        jsonql?: any;
        vars?: any[] | undefined;
        sourceType?: string | undefined;
        runtimeQuery?: Record<string, string> | undefined;
        config?: {
            withCredentials?: boolean | undefined;
            cancelExecutor?: ((cancel: Function) => void) | undefined;
        } | undefined;
        originUrl?: string | undefined;
        graphql?: string | undefined;
        operationName?: string | undefined;
        body?: import("amis").PlainObject | undefined;
        query?: import("amis").PlainObject | undefined;
        mockResponse?: {
            status: number;
            data?: any;
            delay?: number | undefined;
        } | undefined;
        adaptor?: import("amis").ResponseAdaptor | undefined;
        requestAdaptor?: import("amis").RequestAdaptor | undefined;
        context?: any;
        filterEmptyQuery?: boolean | undefined;
        downloadFileName?: string | undefined;
        method?: string | undefined;
        url: string;
        data?: {
            [propName: string]: any;
        } | undefined;
        convertKeyToPath?: boolean | undefined;
        responseData?: {
            [propName: string]: any;
        } | undefined;
        attachDataToQuery?: boolean | undefined;
        dataType?: "form" | "json" | "form-data" | undefined;
        responseType?: "blob" | undefined;
        headers?: {
            [propName: string]: string | number;
        } | undefined;
        sendOn?: string | undefined;
        replaceData?: boolean | undefined;
        concatDataFields?: string | string[] | undefined;
        autoRefresh?: boolean | undefined;
        trackExpression?: string | undefined;
        cache?: number | undefined;
        forceAppendDataToQuery?: boolean | undefined;
        qsOptions?: {
            arrayFormat?: "repeat" | "indices" | "brackets" | "comma" | undefined;
            indices?: boolean | undefined;
            allowDots?: boolean | undefined;
        } | undefined;
        silent?: boolean | undefined;
        messages?: {
            success?: string | undefined;
            failed?: string | undefined;
        } | undefined;
        action?: FeatType | undefined;
        origin?: "sdk" | "saas" | undefined;
        strategy?: "restful" | "jsonql" | undefined;
        scene?: "list" | "suggestion" | "autoFill" | "options" | undefined;
        entity?: {
            value: string;
            label: string;
            dsId: string;
            dsKey: string;
            dsLabel: string;
            mId: string;
            mKey: string;
            mLabel: string;
        } | undefined;
        select?: import("../type").SelectField[] | undefined;
        orders?: {
            field: string;
            order: boolean;
        }[] | undefined;
    }>;
    /** 构建操作区域 */
    buildOperators(options: EntityFormBuilderOptions, componentId: string): Promise<{
        type: string;
        label: string;
        onEvent: {
            click: {
                actions: {
                    actionType: EntityFormOperatorValue;
                    componentId: string;
                }[];
            };
        };
    }[]>;
    /** 新增 */
    buildInsertSchema(options: EntityFormBuilderOptions): Promise<(false | {
        name: string;
        fieldId: string;
        relationBuildSetting: any;
        row: number;
        type: string;
        detectField?: string | undefined;
        visibleOn?: string | undefined;
        hiddenOn?: string | undefined;
        disabledOn?: string | undefined;
        staticOn?: string | undefined;
        visible?: boolean | undefined;
        hidden?: boolean | undefined;
        disabled?: boolean | undefined;
        static?: boolean | undefined;
        children?: JSX.Element | ((props: any, schema?: any) => JSX.Element) | null | undefined;
        definitions?: import("amis").Definitions | undefined;
        animations?: import("amis").AnimationsProps | undefined;
    } | undefined)[]>;
    buildBulkEditSchema(options: EntityFormBuilderOptions): Promise<(false | {
        /** 批量修改不应该限制必填 */
        required: boolean;
        name: string;
        fieldId: string;
        relationBuildSetting: any;
        row: number;
        type: string;
        detectField?: string | undefined;
        visibleOn?: string | undefined;
        hiddenOn?: string | undefined;
        disabledOn?: string | undefined;
        staticOn?: string | undefined;
        visible?: boolean | undefined;
        hidden?: boolean | undefined;
        disabled?: boolean | undefined;
        static?: boolean | undefined;
        children?: JSX.Element | ((props: any, schema?: any) => JSX.Element) | null | undefined;
        definitions?: import("amis").Definitions | undefined;
        animations?: import("amis").AnimationsProps | undefined;
    } | undefined)[]>;
    /** 编辑 */
    buildEditSchema(options: EntityFormBuilderOptions): Promise<(false | {
        name: string;
        fieldId: string;
        relationBuildSetting: any;
        row: number;
        type: string;
        detectField?: string | undefined;
        visibleOn?: string | undefined;
        hiddenOn?: string | undefined;
        disabledOn?: string | undefined;
        staticOn?: string | undefined;
        visible?: boolean | undefined;
        hidden?: boolean | undefined;
        disabled?: boolean | undefined;
        static?: boolean | undefined;
        children?: JSX.Element | ((props: any, schema?: any) => JSX.Element) | null | undefined;
        definitions?: import("amis").Definitions | undefined;
        animations?: import("amis").AnimationsProps | undefined;
    } | undefined)[]>;
    /** 查看 */
    buildViewSchema(options: EntityFormBuilderOptions): Promise<(false | {
        name: string;
        fieldId: string;
        relationBuildSetting: any;
        row: number;
        type: string;
        detectField?: string | undefined;
        visibleOn?: string | undefined;
        hiddenOn?: string | undefined;
        disabledOn?: string | undefined;
        staticOn?: string | undefined;
        visible?: boolean | undefined;
        hidden?: boolean | undefined;
        disabled?: boolean | undefined;
        static?: boolean | undefined;
        children?: JSX.Element | ((props: any, schema?: any) => JSX.Element) | null | undefined;
        definitions?: import("amis").Definitions | undefined;
        animations?: import("amis").AnimationsProps | undefined;
    } | undefined)[]>;
    /**
     * 替换主体字段的name，对于深层嵌套场景，将当前字段值变成路径模式
     * 如：c => a.b.c
     * 如果当前字段为关系字段，其子表字段保持不变
     * 如：c.name => a.b.c.name
     *
     * @param nameField schemaBuilder 生成的 schema 中 name 字段
     * @param field 字段信息
     */
    normalizeSchemaName(nameField: string, field: ExtraField): string;
    builderFnMap: (feat: EntityFormBuilderOptions['feat']) => any;
    /** 基于当前 Schema 重新构建API */
    rebuildApi(schema: any, options?: EntityFormBuilderOptions, sharedContext?: SharedContext): Promise<any>;
    build(options: EntityFormBuilderOptions, 
    /** 原始Schema */
    pristineSchema?: any, sharedContext?: SharedContext): Promise<any>;
}
export {};
