amis-model-design
Version:
amis模型设计器
270 lines (269 loc) • 10.7 kB
TypeScript
/**
* @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 {};