45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const NativeModules = require('react-native').NativeModules;
|
||
|
const NativeEventEmitter = require('react-native').NativeEventEmitter;
|
||
|
|
||
|
type Shortcuts = Array<{
|
||
|
shortcut?: string,
|
||
|
onPress?: ?Function,
|
||
|
}>;
|
||
|
|
||
|
class DesktopShortcuts {
|
||
|
constructor() {
|
||
|
this.shortcuts = new Map();
|
||
|
this.eventEmitter = new NativeEventEmitter(NativeModules.DesktopShortcutsManager);
|
||
|
this.eventEmitter.addListener('shortcutInvoked', this.handleShortcut.bind(this));
|
||
|
}
|
||
|
|
||
|
handleShortcut(shortcut) {
|
||
|
var fn;// = this.shortcuts.get(shortcut);
|
||
|
for (var [key, value] of this.shortcuts) {
|
||
|
if (shortcut == key) {
|
||
|
fn = value;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if (fn) {
|
||
|
fn();
|
||
|
};
|
||
|
}
|
||
|
|
||
|
register(shortcuts: Shortcuts): void {
|
||
|
//console.log('### register(shortcuts)' + JSON.stringify(shortcuts));
|
||
|
this.shortcuts = new Map();
|
||
|
|
||
|
var shortcutKeys = shortcuts.map(s => s.shortcut);
|
||
|
for (let i = 0; i < shortcuts.length; ++i) {
|
||
|
this.shortcuts.set(shortcuts[i].shortcut, shortcuts[i].onPress);
|
||
|
}
|
||
|
|
||
|
NativeModules.DesktopShortcutsManager.registerShortcuts(shortcutKeys);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = new DesktopShortcuts();
|