amis-model-design
Version:
amis模型设计器
95 lines (94 loc) • 3.45 kB
TypeScript
import { DBTable, DataSourceItem, FieldItem, ModelItem, RelationShipItem } from '../type';
export interface EventContext<P = any> {
data?: P;
[propName: string]: any;
}
/**
* 将事件上下文转成事件对象。
*/
export type PluginEvent<T, P = any> = {
context: T;
type: string;
preventDefault: () => void;
stopPropagation: () => void;
setData: (data: P) => void;
prevented?: boolean;
stoped?: boolean;
pending?: Promise<any>;
data?: P;
};
export type PluginEventFn = (e: PluginEvent<EventContext>) => false | void;
/**
* 创建事件。
* @param type
* @param context
*/
export declare function createEvent<T extends EventContext>(type: string, context: T): PluginEvent<T>;
export interface AddModelEventContext extends EventContext {
datasource: DataSourceItem;
data: ModelItem;
}
export interface UpdateModelEventContext extends AddModelEventContext {
}
export interface AddFieldsEventContext extends EventContext {
datasource: DataSourceItem;
model: ModelItem;
data: FieldItem | Array<FieldItem>;
}
export interface AddRelationEventContext extends EventContext {
datasource: DataSourceItem;
model: ModelItem;
models: ModelItem[];
data: RelationShipItem;
dbTable?: DBTable;
}
export interface RemoveFieldEventContext extends EventContext {
datasource: DataSourceItem;
model: ModelItem;
data: FieldItem;
}
export interface RemoveRelationEventContext extends AddRelationEventContext {
}
export interface RemoveModelEventContext extends EventContext {
datasource: DataSourceItem;
data: ModelItem;
}
export interface PluginEventListener {
/** 添加模型相关 */
beforeAddModel?: (event: PluginEvent<AddModelEventContext>) => false | void;
afterAddModel?: (event: PluginEvent<AddModelEventContext>) => void;
beforeUpdateModel?: (event: PluginEvent<AddModelEventContext>) => false | void;
afterUpdateModel?: (event: PluginEvent<AddModelEventContext>) => void;
/** 添加字段相关事件 */
beforeAddFields?: (event: PluginEvent<AddFieldsEventContext>) => false | void;
afterAddFields?: (event: PluginEvent<AddFieldsEventContext>) => void;
/** 删除字段 */
beforeRemoveField?: (event: PluginEvent<RemoveFieldEventContext>) => false | void;
afterRemoveField?: (event: PluginEvent<RemoveFieldEventContext>) => void;
/** 添加关系相关事件 */
beforeAddRelation?: (event: PluginEvent<AddRelationEventContext>) => false | void;
afterAddRelation?: (event: PluginEvent<AddRelationEventContext>) => void;
/** 删除关系事件 */
beforeRemoveRelation?: (event: PluginEvent<RemoveRelationEventContext>) => false | void;
afterRemoveRelation?: (event: PluginEvent<RemoveRelationEventContext>) => void;
/** 删除模型 */
beforeRemoveModel?: (event: PluginEvent<RemoveModelEventContext>) => false | void;
afterRemoveModel?: (event: PluginEvent<RemoveModelEventContext>) => void;
}
export declare class EventEmitter {
readonly listeners: Array<{
type: string;
fn: PluginEventFn;
}>;
on(event: string, fn: PluginEventFn): void;
off(event: string, fn: PluginEventFn): void;
/**
* 派发事件。
* @param type
* @param context
*/
trigger<T extends EventContext>(type: string, context: T, additionalListeners?: Array<{
type: string;
fn: PluginEventFn;
}>): PluginEvent<T>;
}