// @flow import * as React from 'react'; import classnames from 'classnames'; import { isMac } from '../../common/constants'; import type { KeyBindings, KeyCombination } from '../../common/hotkeys'; import { constructKeyCombinationDisplay, getPlatformKeyCombinations } from '../../common/hotkeys'; type Props = { // One of these two must be given. // If both is given, keyCombination will be used. keyCombination?: KeyCombination, keyBindings?: KeyBindings, // Optional className?: string, // Show fallback message if keyCombination is not given, // but keyBindings has no key combinations. useFallbackMessage?: boolean, }; class Hotkey extends React.PureComponent { render() { const { keyCombination, keyBindings, className, useFallbackMessage } = this.props; if (keyCombination == null && keyBindings == null) { console.error(`Hotkey needs one of keyCombination or keyBindings!`); return null; } let keyComb = null; if (keyCombination != null) { keyComb = keyCombination; } else if (keyBindings != null) { const keyCombs = getPlatformKeyCombinations(keyBindings); // Only take the first key combination if there is a mapping. if (keyCombs.length > 0) { keyComb = keyCombs[0]; } } let display = ''; if (keyComb != null) { display = constructKeyCombinationDisplay(keyComb, false); } const isFallback = display.length === 0 && useFallbackMessage; if (isFallback) { display = 'Not defined'; } const classes = { 'font-normal': isMac(), italic: isFallback, }; return {display}; } } export default Hotkey;