Hotkeys.jsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React from 'react';
  2. import HotkeysDetector from '../HotkeysDetector/HotkeysDetector';
  3. import StaffCredit from '../StaffCredit/StaffCredit';
  4. import MirrorMode from '../MirrorMode/MirrorMode';
  5. import PageCreate from '../PageHotkeys/PageCreate';
  6. import PageEdit from '../PageHotkeys/PageEdit';
  7. export default class Hotkeys extends React.Component {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. view: [],
  12. };
  13. this.supportClasses = [
  14. StaffCredit,
  15. MirrorMode,
  16. PageCreate,
  17. PageEdit,
  18. ];
  19. this.keymap = this.keymapSet();
  20. this.deleteRender = this.deleteRender.bind(this);
  21. this.hotkeyList = this.hotkeyList();
  22. this.onDetected = this.onDetected.bind(this);
  23. this.keymapSet = this.keymapSet.bind(this);
  24. }
  25. // delete the instance in state.view
  26. deleteRender(instance) {
  27. const viewCopy = this.state.view.slice();
  28. const index = viewCopy.lastIndexOf(instance);
  29. viewCopy.splice(index, 1);
  30. this.setState({
  31. view: viewCopy,
  32. });
  33. return null;
  34. }
  35. // this function generates keymap depending on what keys were selected in this.hotkeyCommand
  36. keymapSet() {
  37. let keymap = this.hotkeyList();
  38. keymap = keymap.flat();
  39. keymap = new Set(keymap);
  40. return Array.from(keymap);
  41. }
  42. // this function generates list of all the hotkeys command
  43. hotkeyList() {
  44. const hotkeyList = this.supportClasses.map((value) => {
  45. return value.getHotkeyStroke();
  46. });
  47. return hotkeyList;
  48. }
  49. // activates when one of the hotkey strokes gets determined from HotkeysDetector
  50. onDetected(strokeDetermined) {
  51. let viewDetermined = this.supportClasses.filter((value) => {
  52. return strokeDetermined.toString() === value.getHotkeyStroke().toString();
  53. });
  54. viewDetermined = viewDetermined.map((value) => {
  55. return value.getComponent(this.deleteRender);
  56. });
  57. this.setState({
  58. view: this.state.view.concat(viewDetermined).flat(),
  59. });
  60. }
  61. render() {
  62. return (
  63. <React.Fragment>
  64. <HotkeysDetector onDetected={stroke => this.onDetected(stroke)} keymap={this.keymap} hotkeyList={this.hotkeyList} />
  65. {this.state.view}
  66. </React.Fragment>
  67. );
  68. }
  69. }