UNPKG

@gorpacrate/core-graphics

Version:

A core library for creating shape-based graphic editors

85 lines 3.65 kB
"use strict"; exports.__esModule = true; var i = require("icepick"); var modes_1 = require("../../declarations/modes"); var editor_action_1 = require("../../editor-state/editor-action"); var history_events_wrappers_1 = require("../../history/history-events-wrappers"); var grid_1 = require("../../utils/grid"); var input_1 = require("../events/input"); function getShapesMoveEventFromMode(persistedScene, mode) { var _a = mode.payload, ids = _a.ids, startX = _a.startX, startY = _a.startY, endX = _a.endX, endY = _a.endY; var dx = endX - startX; var dy = endY - startY; // single shape if (ids.length === 1) { var id = ids[0]; var shapeData = persistedScene.shapes[id]; return history_events_wrappers_1.getShapeMoveEvent({ dx: dx, dy: dy }, shapeData); } // many shapes var shapesData = ids.map(function (id) { return persistedScene.shapes[id]; }); return history_events_wrappers_1.getShapesMoveEvent({ dx: dx, dy: dy }, shapesData); } var REDUCERS = [ moveModeEnterReducer, moveModeStateReducer, movePreviewStateReducer, moveModeFinishReducer ]; function moveStateReducer(currentState, ev) { return REDUCERS.reduce(function (res, fn) { return fn(res, ev); }, currentState); } exports["default"] = moveStateReducer; // entering moving mode function moveModeEnterReducer(currentState, ev) { var mode = currentState.mode; if (modes_1.isSelectedMode(mode)) { if (!currentState.modifierKeys[input_1.SceneModifierKey.Shift] && input_1.isEditorInputEvent(ev) && currentState.mouse.down && input_1.isMouseMoveEvent(ev)) { var ids = mode.payload.ids; var _a = grid_1.snapCoordsIfNeeded(currentState.grid, currentState.mouse), mx = _a.x, my = _a.y; var _b = grid_1.snapEditorInputEventCoordsIfNeeded(currentState.grid, ev).payload, x = _b.x, y = _b.y; return i.assoc(currentState, 'mode', modes_1.modeMoving({ ids: ids, startX: mx, startY: my, endX: x, endY: y })); } return currentState; } return currentState; } // mode updates when moving function moveModeStateReducer(currentState, ev) { var mode = currentState.mode; if (modes_1.isMovingMode(mode) && input_1.isEditorInputEvent(ev) && input_1.isMouseMoveEvent(ev)) { var _a = grid_1.snapEditorInputEventCoordsIfNeeded(currentState.grid, ev).payload, x = _a.x, y = _a.y; return i.merge(currentState, { mode: { payload: { endX: x, endY: y } } }); } return currentState; } // updating previewed events function movePreviewStateReducer(currentState) { var mode = currentState.mode, persistedScene = currentState.persistedScene; if (modes_1.isMovingMode(mode) && currentState.mouse.down) { var event_1 = getShapesMoveEventFromMode(persistedScene, mode); return i.assoc(currentState, 'previewedHistoryEvents', [event_1]); } return currentState; } // finished moving function moveModeFinishReducer(currentState, ev) { var mode = currentState.mode; if (modes_1.isMovingMode(mode) && input_1.isEditorInputEvent(ev) && input_1.isMouseUpEvent(ev)) { var ids = mode.payload.ids; var historyEvent = getShapesMoveEventFromMode(currentState.persistedScene, mode); var editorAction = editor_action_1.pushHistoryEventAction(historyEvent); return i.chain(currentState) .assoc('mode', modes_1.modeSelected(ids)) .assoc('editorActionsQueue', [editorAction]) .value(); } return currentState; } //# sourceMappingURL=move.js.map