@gorpacrate/core-graphics
Version:
A core library for creating shape-based graphic editors
54 lines • 2.39 kB
JavaScript
;
exports.__esModule = true;
var i = require("icepick");
var declarations_1 = require("../../declarations");
var modes_1 = require("../../helpers/modes");
var editor_events_1 = require("../editor-events");
var REDUCERS = [
contextMenuLeaveReducer,
contextMenuEnterReducer,
contextMenuModeStateReducer
];
function contextMenuStateReducer(currentState, ev) {
return REDUCERS.reduce(function (res, fn) { return fn(res, ev); }, currentState);
}
exports["default"] = contextMenuStateReducer;
function contextMenuEnterReducer(currentState, ev) {
var mode = currentState.mode, mouse = currentState.mouse;
if (declarations_1.isMovingViewportMode(mode)) {
return currentState;
}
if (editor_events_1.isEditorInputEvent(ev) && editor_events_1.isShapeMouseDownEvent(ev) && (ev.payload.button === editor_events_1.ButtonType.Right)) {
var x = mouse.x, y = mouse.y;
var id = ev.payload.id;
if (declarations_1.isSelectedMode(mode) && modes_1.isShapeSelected(mode, id)) {
var ids = mode.payload.ids;
var nextContextMenuState = { open: true, x: x, y: y, target: declarations_1.shapesContextMenuTarget(ids) };
return i.assoc(currentState, 'contextMenu', nextContextMenuState);
}
else {
var nextContextMenuState = { open: true, x: x, y: y, target: declarations_1.shapesContextMenuTarget([id]) };
var nextMode = declarations_1.modeSelected([id]);
return i.chain(currentState)
.assoc('contextMenu', nextContextMenuState)
.assoc('mode', nextMode)
.value();
}
}
return currentState;
}
function contextMenuModeStateReducer(currentState, ev) {
if (editor_events_1.isEditorContextMenuEvent(ev) && editor_events_1.isSetContextMenuEvent(ev)) {
var value = ev.payload.value;
return i.assoc(currentState, 'contextMenu', value);
}
return currentState;
}
function contextMenuLeaveReducer(currentState, ev) {
var contextMenu = currentState.contextMenu;
if (contextMenu.open && editor_events_1.isEditorInputEvent(ev) && (editor_events_1.isBackgroundMouseDownEvent(ev) || editor_events_1.isShapeMouseDownEvent(ev))) {
return i.merge(currentState, { contextMenu: { open: false } });
}
return currentState;
}
//# sourceMappingURL=context-menu.js.map