kitchen-simulator
Version:
It is a kitchen simulator (self-contained micro-frontend).
101 lines • 4.61 kB
JavaScript
import { MODE_IDLE, MODE_3D_FIRST_PERSON, MODE_3D_VIEW, MODE_SNAPPING, KEYBOARD_BUTTON_CODE, MODE_IDLE_3D, MODE_ROTATING_ITEM_3D, MODE_DRAGGING_ITEM_3D, MODE_DRAWING_ITEM_3D, MODE_DRAWING_ITEM } from "../constants";
import { rollback, undo, redo, recreate, uncreate, remove, toggleSnap, copyProperties, pasteProperties, shift2doff, shift2don } from "../actions/project-actions";
export default function keyboard() {
return function (store, stateExtractor) {
window.addEventListener('keydown', function (event) {
var state = stateExtractor(store.getState());
var mode = state.get('mode');
switch (event.keyCode) {
case KEYBOARD_BUTTON_CODE.BACKSPACE:
case KEYBOARD_BUTTON_CODE.DELETE:
{
if ([MODE_IDLE, MODE_3D_FIRST_PERSON, MODE_3D_VIEW, MODE_IDLE_3D, MODE_ROTATING_ITEM_3D, MODE_DRAGGING_ITEM_3D].includes(mode)) store.dispatch(remove());
break;
}
case KEYBOARD_BUTTON_CODE.ESC:
{
store.dispatch(rollback());
break;
}
case KEYBOARD_BUTTON_CODE.Z:
{
if (event.getModifierState('Control') || event.getModifierState('Meta')) store.dispatch(undo());
break;
}
case KEYBOARD_BUTTON_CODE.Q:
{
if (event.getModifierState('Control') || event.getModifierState('Meta')) store.dispatch(redo());
break;
}
case KEYBOARD_BUTTON_CODE.ALT:
{
if (MODE_SNAPPING.includes(mode)) store.dispatch(toggleSnap(state.snapMask.merge({
SNAP_POINT: false,
SNAP_LINE: false,
SNAP_SEGMENT: false,
SNAP_GRID: false,
SNAP_GUIDE: false,
tempSnapConfiguartion: state.snapMask.toJS()
})));
break;
}
case KEYBOARD_BUTTON_CODE.C:
{
var selectedLayer = state.getIn(['scene', 'selectedLayer']);
var selected = state.getIn(['scene', 'layers', selectedLayer, 'selected']);
if ((mode === MODE_IDLE || mode === MODE_3D_VIEW) && (selected.holes.size || selected.areas.size || selected.items.size || selected.lines.size)) {
if (selected.holes.size) {
var hole = state.getIn(['scene', 'layers', selectedLayer, 'holes', selected.holes.get(0)]);
store.dispatch(copyProperties(hole.get('properties')));
} else if (selected.areas.size) {
var area = state.getIn(['scene', 'layers', selectedLayer, 'areas', selected.areas.get(0)]);
store.dispatch(copyProperties(area.properties));
} else if (selected.items.size) {
var item = state.getIn(['scene', 'layers', selectedLayer, 'items', selected.items.get(0)]);
store.dispatch(copyProperties(item.properties));
} else if (selected.lines.size) {
var line = state.getIn(['scene', 'layers', selectedLayer, 'lines', selected.lines.get(0)]);
store.dispatch(copyProperties(line.properties));
}
}
break;
}
case KEYBOARD_BUTTON_CODE.V:
{
store.dispatch(pasteProperties());
break;
}
case KEYBOARD_BUTTON_CODE.SHIFT:
{
if (['TEXTAREA', 'INPUT'].includes(document.activeElement.tagName) === false) {
if ([MODE_DRAWING_ITEM_3D, MODE_IDLE_3D].includes(mode)) store.dispatch(recreate());else if ([MODE_DRAWING_ITEM, MODE_IDLE].includes(mode)) store.dispatch(shift2doff());
}
break;
}
}
});
window.addEventListener('keyup', function (event) {
var state = stateExtractor(store.getState());
var mode = state.get('mode');
switch (event.keyCode) {
case KEYBOARD_BUTTON_CODE.ALT:
{
if (MODE_SNAPPING.includes(mode)) store.dispatch(toggleSnap(state.snapMask.merge(state.snapMask.get('tempSnapConfiguartion'))));
break;
}
case KEYBOARD_BUTTON_CODE.CTRL:
{
// store.dispatch(setAlterateState());
break;
}
case KEYBOARD_BUTTON_CODE.SHIFT:
{
if (['TEXTAREA', 'INPUT'].includes(document.activeElement.tagName) === false) {
if ([MODE_DRAWING_ITEM_3D, MODE_IDLE_3D].includes(mode)) store.dispatch(uncreate());else if ([MODE_DRAWING_ITEM, MODE_IDLE].includes(mode)) store.dispatch(shift2don());
}
break;
}
}
});
};
}