UNPKG

@gorpacrate/core-graphics

Version:

A core library for creating shape-based graphic editors

119 lines 6.05 kB
"use strict"; exports.__esModule = true; var i = require("icepick"); var invariant = require("invariant"); var declarations_1 = require("../../declarations"); var history_event_1 = require("../../history/history-event"); var history_events_wrappers_1 = require("../../history/history-events-wrappers"); var data_1 = require("../../utils/data"); var unique_id_1 = require("../../utils/unique-id"); var editor_action_1 = require("../editor-action"); var shapes_1 = require("../events/shapes"); function getShapesChangeOrderParams(ev) { if (shapes_1.isSendShapesForwardEvent(ev)) { return { relative: true, value: 1 }; } if (shapes_1.isSendShapesBackwardEvent(ev)) { return { relative: true, value: -1 }; } if (shapes_1.isSendShapesToBackEvent(ev)) { return { relative: false, value: 0 }; } if (shapes_1.isSendShapesToFrontEvent(ev)) { return { relative: false, value: -1 }; } return invariant(false, 'invalid change order event'); } function getShapesChangeOrderHistoryEvent(shapesOrder, ev) { var ids = ev.payload.ids; var _a = getShapesChangeOrderParams(ev), relative = _a.relative, value = _a.value; return editor_action_1.pushHistoryEventAction(history_events_wrappers_1.getShapesChangeOrderEvent({ shapesIds: ids, shapesOrder: shapesOrder, relative: relative, value: value })); } exports.getShapesChangeOrderHistoryEvent = getShapesChangeOrderHistoryEvent; // TODO de-duplitate with move and with [single / many] function getMoveShapesEvent(scene, ids, dp) { var dx = dp.dx, dy = dp.dy; // single shape if (ids.length === 1) { var id = ids[0]; var shapeData = scene.shapes[id]; return history_events_wrappers_1.getShapeMoveEvent({ dx: dx, dy: dy }, shapeData); } // many shapes var shapesData = ids.map(function (id) { return scene.shapes[id]; }); return history_events_wrappers_1.getShapesMoveEvent({ dx: dx, dy: dy }, shapesData); } exports.getMoveShapesEvent = getMoveShapesEvent; function shapesStateReducer(currentState, ev) { if (!shapes_1.isEditorShapeEvent(ev)) { return currentState; } else { if (shapes_1.isAddShapeEditorEvent(ev)) { var id = unique_id_1["default"](); var shapeData = i.assoc(ev.payload.shapeData, 'id', id); var previewedEvent = history_event_1.shapeAddEvent(shapeData); var queued = i.chain(currentState) .assoc('editorActionsQueue', i.push(currentState.editorActionsQueue, editor_action_1.pushHistoryEventAction(history_event_1.shapeAddEvent(shapeData)))) .assoc('previewedHistoryEvents', [previewedEvent]) .value(); if (ev.payload.selectWhenAdded) { return i.assoc(queued, 'mode', declarations_1.modeSelected([id])); } return queued; } if (shapes_1.isRemoveShapesEvent(ev)) { var shapesOrder_1 = currentState.persistedScene.shapesOrder; var ids = ev.payload.ids; var filteredIds = ids.filter(function (id) { return data_1.hasInArr(id, shapesOrder_1); }); if (filteredIds.length === 0) { // nothing to remove return currentState; } var editorAction = editor_action_1.pushHistoryEventAction(history_events_wrappers_1.getShapesRemoveEvent(filteredIds)); var queued = i.assoc(currentState, 'editorActionsQueue', i.push(currentState.editorActionsQueue, editorAction)); if (declarations_1.isSelectedMode(currentState.mode)) { var modeIds_1 = currentState.mode.payload.ids; var filteredModeIds = modeIds_1.filter(function (id) { return !data_1.hasInArr(id, modeIds_1); }); if (filteredModeIds.length === 0) { return i.assoc(queued, 'mode', declarations_1.modeSelect()); } return i.assoc(queued, 'mode', declarations_1.modeSelected(filteredModeIds)); } return queued; } var mode = currentState.mode; if (shapes_1.isRemoveSelectedShapesEvent(ev) && declarations_1.isSelectedMode(mode)) { var ids = mode.payload.ids; var editorAction = editor_action_1.pushHistoryEventAction(history_events_wrappers_1.getShapesRemoveEvent(ids)); return i.assoc(currentState, 'editorActionsQueue', [editorAction]); } if (shapes_1.isRemoveAllShapesEvent(ev)) { var editorAction = editor_action_1.pushHistoryEventAction(history_event_1.eraseAllEvent()); return i.assoc(currentState, 'editorActionsQueue', [editorAction]); } if (shapes_1.isUpdateShapeCustomParamsEvent(ev)) { var _a = ev.payload, id = _a.id, value = _a.value; var shapeData = currentState.scene.shapes[id]; if (!shapeData) { return currentState; } var newShapeData = i.assoc(shapeData, 'customParams', value); var editorAction = editor_action_1.pushHistoryEventAction(history_event_1.shapeUpdateEvent(id, newShapeData)); return i.assoc(currentState, 'editorActionsQueue', [editorAction]); } if (shapes_1.isMoveSelectedShapesEvent(ev) && declarations_1.isSelectedMode(mode)) { var _b = ev.payload, dx = _b.dx, dy = _b.dy; var ids = mode.payload.ids; var editorAction = editor_action_1.pushHistoryEventAction(getMoveShapesEvent(currentState.persistedScene, ids, { dx: dx, dy: dy })); return i.assoc(currentState, 'editorActionsQueue', [editorAction]); } if (shapes_1.isChangeShapesOrderEvent(ev)) { var editorAction = getShapesChangeOrderHistoryEvent(currentState.persistedScene.shapesOrder, ev); return i.assoc(currentState, 'editorActionsQueue', [editorAction]); } return currentState; } } exports["default"] = shapesStateReducer; //# sourceMappingURL=shapes.js.map