UNPKG

amis-model-design

Version:

amis模型设计器

270 lines (269 loc) 10.7 kB
/** * @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 {};