UNPKG

@gorpacrate/core-graphics

Version:

A core library for creating shape-based graphic editors

54 lines 2.39 kB
"use strict"; 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