@antv/g2
Version:
the Grammar of Graphics in Javascript
50 lines (44 loc) • 1.57 kB
text/typescript
import { clone, isPlainObject, lowerCase, mix } from '@antv/util';
import { View } from '../chart';
import { LooseObject } from '../interface';
import GrammarInteraction, { InteractionSteps } from './grammar-interaction';
import { InteractionConstructor } from './interaction';
const Interactions: LooseObject = {};
/**
* 根据交互行为名字获取对应的交互类
* @param name 交互名字
* @returns 交互类
*/
export function getInteraction(name: string): InteractionSteps | InteractionConstructor {
return Interactions[lowerCase(name)];
}
/**
* 注册交互行为
* @param name 交互行为名字
* @param interaction 交互类
*/
export function registerInteraction(name: string, interaction: InteractionSteps | InteractionConstructor) {
Interactions[lowerCase(name)] = interaction;
}
/**
* 创建交互实例
* @param name 交互名
* @param view 交互应用的 View 实例
* @param cfg 交互行为配置
*/
export function createInteraction(name: string, view: View, cfg?: LooseObject) {
const interaciton = getInteraction(name);
if (!interaciton) {
return null;
}
if (isPlainObject(interaciton)) {
// 如果不 clone 则会多个 interaction 实例共享 step 的定义
const steps = mix(clone(interaciton), cfg) as InteractionSteps;
return new GrammarInteraction(view, steps);
} else {
const cls = interaciton as InteractionConstructor;
return new cls(view, cfg);
}
}
export { default as Interaction } from './interaction';
export { Action, registerAction, getActionClass } from './action';