149 lines
3.1 KiB
TypeScript
149 lines
3.1 KiB
TypeScript
![]() |
import { View } from '../chart';
|
|||
|
import { ActionCallback, IAction, IInteractionContext } from '../interface';
|
|||
|
import Interaction from './interaction';
|
|||
|
/** 交互环节的定义 */
|
|||
|
export interface InteractionStep {
|
|||
|
/**
|
|||
|
* 触发事件,支持 view,chart 的各种事件,也支持 document、window 的事件
|
|||
|
*/
|
|||
|
trigger: string;
|
|||
|
/**
|
|||
|
* 是否可以触发 action
|
|||
|
* @param context - 交互的上下文
|
|||
|
*/
|
|||
|
isEnable?: (context: IInteractionContext) => boolean;
|
|||
|
/**
|
|||
|
* 反馈,支持三种方式:
|
|||
|
* - action:method : action 的名字和方法的组合
|
|||
|
* - [’action1:method1‘, ’action2:method‘]
|
|||
|
* - ActionCallback: 回调函数
|
|||
|
*/
|
|||
|
action: string | string[] | ActionCallback;
|
|||
|
/**
|
|||
|
* 回调函数,action 执行后执行
|
|||
|
*/
|
|||
|
callback?: (context: IInteractionContext) => void;
|
|||
|
/**
|
|||
|
* @private
|
|||
|
* 不需要用户传入,通过上面的属性计算出来的属性
|
|||
|
*/
|
|||
|
actionObject?: ActionObject | ActionObject[];
|
|||
|
/**
|
|||
|
* 在一个环节内是否只允许执行一次
|
|||
|
*/
|
|||
|
once?: boolean;
|
|||
|
/**
|
|||
|
* 是否增加节流
|
|||
|
*/
|
|||
|
throttle?: ThrottleOption;
|
|||
|
/**
|
|||
|
* 是否延迟
|
|||
|
*/
|
|||
|
debounce?: DebounceOption;
|
|||
|
}
|
|||
|
/**
|
|||
|
* debounce 的配置
|
|||
|
*/
|
|||
|
export interface DebounceOption {
|
|||
|
/**
|
|||
|
* 等待时间
|
|||
|
*/
|
|||
|
wait: number;
|
|||
|
/**
|
|||
|
* 是否马上执行
|
|||
|
*/
|
|||
|
immediate?: boolean;
|
|||
|
}
|
|||
|
/**
|
|||
|
* throttle 的配置
|
|||
|
*/
|
|||
|
export interface ThrottleOption {
|
|||
|
/**
|
|||
|
* 等待时间
|
|||
|
*/
|
|||
|
wait: number;
|
|||
|
/**
|
|||
|
* 马上就执行
|
|||
|
*/
|
|||
|
leading?: boolean;
|
|||
|
/**
|
|||
|
* 执行完毕后再执行一次
|
|||
|
*/
|
|||
|
trailing?: boolean;
|
|||
|
}
|
|||
|
/** 缓存 action 对象,仅用于当前文件 */
|
|||
|
interface ActionObject {
|
|||
|
/**
|
|||
|
* 缓存的 action
|
|||
|
*/
|
|||
|
action: IAction;
|
|||
|
/**
|
|||
|
* action 的方法
|
|||
|
*/
|
|||
|
methodName: string;
|
|||
|
}
|
|||
|
/** 交互的所有环节 */
|
|||
|
export interface InteractionSteps {
|
|||
|
/**
|
|||
|
* 显示交互可以进行
|
|||
|
*/
|
|||
|
showEnable?: InteractionStep[];
|
|||
|
/**
|
|||
|
* 交互开始
|
|||
|
*/
|
|||
|
start?: InteractionStep[];
|
|||
|
/**
|
|||
|
* 交互持续
|
|||
|
*/
|
|||
|
processing?: InteractionStep[];
|
|||
|
/**
|
|||
|
* 交互结束
|
|||
|
*/
|
|||
|
end?: InteractionStep[];
|
|||
|
/**
|
|||
|
* 交互回滚
|
|||
|
*/
|
|||
|
rollback?: InteractionStep[];
|
|||
|
}
|
|||
|
/**
|
|||
|
* 支持语法的交互类
|
|||
|
*/
|
|||
|
export default class GrammarInteraction extends Interaction {
|
|||
|
private steps;
|
|||
|
/** 当前执行到的阶段 */
|
|||
|
currentStepName: string;
|
|||
|
/**
|
|||
|
* 当前交互的上下文
|
|||
|
*/
|
|||
|
context: IInteractionContext;
|
|||
|
private callbackCaches;
|
|||
|
private emitCaches;
|
|||
|
constructor(view: View, steps: InteractionSteps);
|
|||
|
/**
|
|||
|
* 初始化
|
|||
|
*/
|
|||
|
init(): void;
|
|||
|
/**
|
|||
|
* 清理资源
|
|||
|
*/
|
|||
|
destroy(): void;
|
|||
|
/**
|
|||
|
* 绑定事件
|
|||
|
*/
|
|||
|
protected initEvents(): void;
|
|||
|
/**
|
|||
|
* 清理绑定的事件
|
|||
|
*/
|
|||
|
protected clearEvents(): void;
|
|||
|
private initContext;
|
|||
|
private isAllowStep;
|
|||
|
private isAllowExcute;
|
|||
|
private enterStep;
|
|||
|
private afterExecute;
|
|||
|
private getKey;
|
|||
|
private getActionCallback;
|
|||
|
private bindEvent;
|
|||
|
private offEvent;
|
|||
|
}
|
|||
|
export {};
|