fastlion-amis
Version:
一种MIS页面生成工具
76 lines (65 loc) • 1.57 kB
text/typescript
import {ListenerAction, ListenerContext} from '../actions/Action';
// 事件监听器
export interface EventListeners {
[propName: string]: {
weight?: number; // 权重
actions: ListenerAction[]; // 执行的动作集
};
}
// 事件动作属性
export interface OnEventProps {
onEvent?: {
[propName: string]: {
weight?: number; // 权重
actions: ListenerAction[]; // 执行的动作集
};
};
}
// 渲染器事件监听器
export interface RendererEventListener {
renderer: ListenerContext;
type: string;
weight: number;
actions: ListenerAction[];
}
// 将事件上下文转成事件对象
export type RendererEvent<T, P = any> = {
context: T;
type: string;
prevented?: boolean; // 阻止原有动作执行
stoped?: boolean; // 阻止后续动作执行
data?: P;
preventDefault: () => void;
stopPropagation: () => void;
setData: (data: P) => void;
};
export interface RendererEventContext {
data?: any;
[propName: string]: any;
}
// 创建渲染器事件对象
export function createRendererEvent<T extends RendererEventContext>(
type: string,
context: T
): RendererEvent<T> {
const rendererEvent = {
context,
type,
prevented: false,
stoped: false,
preventDefault() {
rendererEvent.prevented = true;
},
stopPropagation() {
rendererEvent.stoped = true;
},
get data() {
return rendererEvent.context.data;
},
setData(data: any) {
rendererEvent.context.data = data;
}
};
return rendererEvent;
}
export default {};