import React, { useState } from 'react';
import HotkeysDetector from './HotkeysDetector';
import ShowStaffCredit from './Subscribers/ShowStaffCredit';
import SwitchToMirrorMode from './Subscribers/SwitchToMirrorMode';
import ShowShortcutsModal from './Subscribers/ShowShortcutsModal';
import CreatePage from './Subscribers/CreatePage';
import EditPage from './Subscribers/EditPage';
// define supported components list
const SUPPORTED_COMPONENTS = [
ShowStaffCredit,
SwitchToMirrorMode,
ShowShortcutsModal,
CreatePage,
EditPage,
];
const KEY_SET = new Set();
const STROKE_SET = new Set();
const STROKE_TO_COMPONENT_MAP = {};
SUPPORTED_COMPONENTS.forEach((comp) => {
const strokes = comp.getHotkeyStrokes();
strokes.forEach((stroke) => {
// register key
stroke.forEach(key => KEY_SET.add(key));
// register stroke
STROKE_SET.add(stroke);
// register component
const componentList = STROKE_TO_COMPONENT_MAP[stroke] || [];
componentList.push(comp);
STROKE_TO_COMPONENT_MAP[stroke.toString()] = componentList;
});
});
const HotkeysManager = (props) => {
const [view, setView] = useState([]);
/**
* delete the instance in state.view
*/
const deleteRender = (instance) => {
const index = view.lastIndexOf(instance);
const newView = view.slice(); // shallow copy
newView.splice(index, 1);
setView(newView);
};
/**
* activates when one of the hotkey strokes gets determined from HotkeysDetector
*/
const onDetected = (strokeDetermined) => {
const key = (Math.random() * 1000).toString();
const components = STROKE_TO_COMPONENT_MAP[strokeDetermined.toString()];
const newViews = components.map(Component => (
));
setView(view.concat(newViews).flat());
};
return (
<>
onDetected(stroke)}
keySet={KEY_SET}
strokeSet={STROKE_SET}
/>
{view}
>
);
};
export default HotkeysManager;