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