2022-12-12 21:52:59 +08:00

47 lines
1.4 KiB
TypeScript

import { globalContext, Hotkey as InnerHotkey } from '@alilc/lowcode-editor-core';
import { hotkeySymbol } from './symbols';
import { Disposable, HotkeyCallback, IPublicApiHotkey } from '@alilc/lowcode-types';
const innerHotkeySymbol = Symbol('innerHotkey');
export default class Hotkey implements IPublicApiHotkey {
private readonly [innerHotkeySymbol]: InnerHotkey;
get [hotkeySymbol](): InnerHotkey {
if (this.workspaceMode) {
return this[innerHotkeySymbol];
}
const workSpace = globalContext.get('workSpace');
if (workSpace.isActive) {
return workSpace.window.innerHotkey;
}
return this[innerHotkeySymbol];
}
constructor(hotkey: InnerHotkey, public name: string = 'unknown', public workspaceMode: boolean = false) {
this[innerHotkeySymbol] = hotkey;
}
get callbacks(): any {
return this[hotkeySymbol].callBacks;
}
/**
* @deprecated
*/
get callBacks() {
return this.callbacks;
}
/**
* 绑定快捷键
* @param combos 快捷键,格式如:['command + s'] 、['ctrl + shift + s'] 等
* @param callback 回调函数
* @param action
* @returns
*/
bind(combos: string[] | string, callback: HotkeyCallback, action?: string): Disposable {
this[hotkeySymbol].bind(combos, callback, action);
return () => {
this[hotkeySymbol].unbind(combos, callback, action);
};
}
}