* fix: Combined Hotkeys for special characters * add record method to hotkey manager * fix record plugin * remove unused component * add record to modal props * rename record method * replace handlers to use hotkeyRecord * fix combined keys * change expected result count from 18 to 17 * autoformat * Remove duplicate test, that was testing the wrong things; fix label; update configs * Revert "Remove duplicate test, that was testing the wrong things; fix label; update configs" This reverts commit 4292f4fe67351962d61cae623b920dcbd87dd71d. * Fix the record plugin's registration * fix exposed record method usage * adding logging for info level items * Hotkey definitions don't need to be globally reactive; use localstorage/appconfig as sources of truth; not redux * Tidy up test * Remove unused code from UserPreferencesForm * Log info when we run a command * fix hotkey preference restore * use application configured hotkeys if there are no user preferred * Avoid logging circular ref * Fix callouts * Fix small issue with array * Fix langua issue after refactor and merge * Refactor on recordCurrentCombo as Rodrigo did before * Separating components in 2 files * WIP Refactor to simplify the user preferences and move into each form the save and controll functionalities * Remove context * Remove unused import * Initial work on Field treatment * Refactor General preferences * Small refactor removing type from HotkeyField * small update on style * Refactor and layout fixed * Make hotkeys preferences working with old hotkeys row * Move error handling out of hotkey row/input component * WIP custom form * Moving validation function to component * Exposing hotkeyRecord as it does not depend on HotkeyManager Class * Making hotkeyField as much detached possible from parent component * Small refactors * Refactor on user preferences * Clean up into the changes * Small fix to let save working * Style finish * move about docs into about folder * Fix double tap on single keys * Style refactor * Remove log * Fix log issues on unit tests * Fix unit test breaking on ohif/core index * Fixing hotkeys unpause unit test issue * Rename file to adopt lowercase * Rename file to adopt lowercase * Fixing callouts * Big refactor miving some of the components into viewer and creating small components into ohif/ui * Typo on folder name * Updating ohif ui docs * Remove comments * Fix binding of combo keys * Fix some cypress tests failures * Fixing onCancel button * Fixing e2e tests * Small style update * Fixing unit tests failing after fix issue * Remove some not used code * Remove left over after debug * Adding prevent default on hotkeys events * Fixinf existing hotkeys validator with 3 keys pressed * Exposing hotkeys as root level on ohif-core * Clean up * Exposing all availableLanguages with labels and fixing an issue on language switcher * Fixing e2e cypress tests * Preveinting some simple errors * Treating error once we try to set hotkey definitions * Adding ui notification on setHotkeys errors * Implementing a service queue request to hold until functions are implemented * Making sure toFixed is only called on Numbers Co-authored-by: Danny Brown <danny.ri.brown@gmail.com> Co-authored-by: Gustavo André Lelis <galelis@gmail.com>
83 lines
2.1 KiB
JavaScript
83 lines
2.1 KiB
JavaScript
import React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { hotkeys } from '@ohif/core';
|
|
|
|
/**
|
|
* Take the pressed key array and return the readable string for the keys
|
|
*
|
|
* @param {Array} [keys=[]]
|
|
* @returns {string} string representation of an array of keys
|
|
*/
|
|
const formatKeysForInput = (keys = []) => keys.join('+');
|
|
|
|
/**
|
|
* formats given keys sequence to insert the modifier keys in the first index of the array
|
|
* @param {string} sequence keys sequence from MouseTrap Record -> "shift+left"
|
|
* @returns {Array} keys in array-format -> ['shift','left']
|
|
*/
|
|
const getKeys = ({ sequence, modifier_keys }) => {
|
|
const keysArray = sequence.join(' ').split('+');
|
|
let keys = [];
|
|
let modifiers = [];
|
|
keysArray.forEach(key => {
|
|
if (modifier_keys && modifier_keys.includes(key)) {
|
|
modifiers.push(key);
|
|
} else {
|
|
keys.push(key);
|
|
}
|
|
});
|
|
return [...modifiers, ...keys];
|
|
};
|
|
|
|
/**
|
|
* HotkeyField
|
|
* Renders a hotkey input
|
|
*
|
|
* @param {object} props component props
|
|
* @param {Array[]} props.keys array of keys to be controlled by this field
|
|
* @param {function} props.handleChange Callback function to communicate parent once value is changed
|
|
* @param {string} props.classNames string caontaining classes to be added in the input field
|
|
* @param {Array[]} props.modifier_keys
|
|
*/
|
|
function HotkeyField({ keys, handleChange, classNames, modifier_keys }) {
|
|
const inputValue = formatKeysForInput(keys);
|
|
|
|
const onInputKeyDown = event => {
|
|
event.stopPropagation();
|
|
event.preventDefault();
|
|
|
|
hotkeys.record(sequence => {
|
|
const keys = getKeys({ sequence, modifier_keys });
|
|
hotkeys.unpause();
|
|
handleChange(keys);
|
|
});
|
|
};
|
|
|
|
const onFocus = () => {
|
|
hotkeys.pause();
|
|
hotkeys.startRecording();
|
|
};
|
|
|
|
return (
|
|
<input
|
|
readOnly={true}
|
|
type="text"
|
|
value={inputValue}
|
|
className={classNames}
|
|
onKeyDown={onInputKeyDown}
|
|
onFocus={onFocus}
|
|
/>
|
|
);
|
|
}
|
|
|
|
HotkeyField.propTypes = {
|
|
keys: PropTypes.array.isRequired,
|
|
handleChange: PropTypes.func.isRequired,
|
|
classNames: PropTypes.string,
|
|
modifier_keys: PropTypes.array,
|
|
allowed_keys: PropTypes.array,
|
|
};
|
|
|
|
export { HotkeyField };
|