@gorpacrate/core-graphics
Version:
A core library for creating shape-based graphic editors
85 lines • 3.65 kB
JavaScript
;
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