core-graphics
Version:
A core library for creating shape-based graphic editors
180 lines (151 loc) • 7.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
exports.getShapesChangeOrderHistoryEvent = getShapesChangeOrderHistoryEvent;
exports.getMoveShapesEvent = getMoveShapesEvent;
exports.default = shapesStateReducer;
var _declarations = require('../../declarations');
var _historyEventsWrappers = require('../../history/history-events-wrappers');
var _historyEvent = require('../../history/history-event');
var _uniqueId = require('../../utils/unique-id');
var _uniqueId2 = _interopRequireDefault(_uniqueId);
var _shapes = require('../events/shapes');
var _editorAction6 = require('../../editor-state/editor-action');
var _data = require('../../utils/data');
var _icepick = require('icepick');
var i = _interopRequireWildcard(_icepick);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getShapesChangeOrderParams(ev) {
if ((0, _shapes.isSendShapesForwardEvent)(ev)) {
return { relative: true, value: 1 };
}
if ((0, _shapes.isSendShapesBackwardEvent)(ev)) {
return { relative: true, value: -1 };
}
if ((0, _shapes.isSendShapesToBackEvent)(ev)) {
return { relative: false, value: 0 };
}
if ((0, _shapes.isSendShapesToFrontEvent)(ev)) {
return { relative: false, value: -1 };
}
}
function getShapesChangeOrderHistoryEvent(shapesOrder, ev) {
var ids = ev.payload.ids;
var _getShapesChangeOrder = getShapesChangeOrderParams(ev);
var relative = _getShapesChangeOrder.relative;
var value = _getShapesChangeOrder.value;
return (0, _editorAction6.pushHistoryEventAction)((0, _historyEventsWrappers.getShapesChangeOrderEvent)({ shapesIds: ids, shapesOrder: shapesOrder, relative: relative, value: value }));
}
// TODO de-duplitate with move and with [single / many]
function getMoveShapesEvent(scene, ids, dp) {
var dx = dp.dx;
var dy = dp.dy;
// single shape
if (ids.length === 1) {
var id = ids[0];
var shapeData = scene.shapes[id];
return (0, _historyEventsWrappers.getShapeMoveEvent)({ dx: dx, dy: dy }, shapeData);
}
// many shapes
var shapesData = ids.map(function (id) {
return scene.shapes[id];
});
return (0, _historyEventsWrappers.getShapesMoveEvent)({ dx: dx, dy: dy }, shapesData);
}
function shapesStateReducer(currentState, ev) {
if (!(0, _shapes.isEditorShapeEvent)(ev)) {
return currentState;
} else {
if ((0, _shapes.isAddShapeEditorEvent)(ev)) {
var id = (0, _uniqueId2.default)();
var shapeData = i.assoc(ev.payload.shapeData, 'id', id);
var previewedEvent = (0, _historyEvent.shapeAddEvent)(shapeData);
var queued = i.chain(currentState).assoc('editorActionsQueue', i.push(currentState.editorActionsQueue, (0, _editorAction6.pushHistoryEventAction)((0, _historyEvent.shapeAddEvent)(shapeData)))).assoc('previewedHistoryEvents', [previewedEvent]).value();
if (ev.payload.selectWhenAdded) {
return i.assoc(queued, 'mode', (0, _declarations.modeSelected)([id]));
}
return queued;
}
if ((0, _shapes.isRemoveShapesEvent)(ev)) {
var _ret = function () {
var shapesOrder = currentState.persistedScene.shapesOrder;
var ids = ev.payload.ids;
var filteredIds = ids.filter(function (id) {
return (0, _data.hasInArr)(id, shapesOrder);
});
if (filteredIds.length === 0) {
// nothing to remove
return {
v: currentState
};
}
var editorAction = (0, _editorAction6.pushHistoryEventAction)((0, _historyEventsWrappers.getShapesRemoveEvent)(filteredIds));
var queued = i.assoc(currentState, 'editorActionsQueue', i.push(currentState.editorActionsQueue, editorAction));
var mode = currentState.mode;
if ((0, _declarations.isSelectedMode)(mode)) {
var _ret2 = function () {
var ids = mode.payload.ids;
var filteredIds = ids.filter(function (id) {
return !(0, _data.hasInArr)(id, ids);
});
if (filteredIds.length === 0) {
return {
v: {
v: i.assoc(queued, 'mode', (0, _declarations.modeSelect)())
}
};
}
return {
v: {
v: i.assoc(queued, 'mode', (0, _declarations.modeSelected)(filteredIds))
}
};
}();
if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v;
}
return {
v: queued
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
var mode = currentState.mode;
if ((0, _shapes.isRemoveSelectedShapesEvent)(ev) && (0, _declarations.isSelectedMode)(mode)) {
var _ids = mode.payload.ids;
var _editorAction = (0, _editorAction6.pushHistoryEventAction)((0, _historyEventsWrappers.getShapesRemoveEvent)(_ids));
return i.assoc(currentState, 'editorActionsQueue', [_editorAction]);
}
if ((0, _shapes.isRemoveAllShapesEvent)(ev)) {
var _editorAction2 = (0, _editorAction6.pushHistoryEventAction)((0, _historyEvent.eraseAllEvent)());
return i.assoc(currentState, 'editorActionsQueue', [_editorAction2]);
}
if ((0, _shapes.isUpdateShapeCustomParamsEvent)(ev)) {
var _ev$payload = ev.payload;
var _id = _ev$payload.id;
var value = _ev$payload.value;
var _shapeData = currentState.scene.shapes[_id];
if (!_shapeData) {
return currentState;
}
var newShapeData = i.assoc(_shapeData, 'customParams', value);
var _editorAction3 = (0, _editorAction6.pushHistoryEventAction)((0, _historyEvent.shapeUpdateEvent)(_id, newShapeData));
return i.assoc(currentState, 'editorActionsQueue', [_editorAction3]);
}
if ((0, _shapes.isMoveSelectedShapesEvent)(ev) && (0, _declarations.isSelectedMode)(mode)) {
var _ev$payload2 = ev.payload;
var dx = _ev$payload2.dx;
var dy = _ev$payload2.dy;
var _ids2 = mode.payload.ids;
var _editorAction4 = (0, _editorAction6.pushHistoryEventAction)(getMoveShapesEvent(currentState.persistedScene, _ids2, { dx: dx, dy: dy }));
return i.assoc(currentState, 'editorActionsQueue', [_editorAction4]);
}
if ((0, _shapes.isChangeShapesOrderEvent)(ev)) {
var _editorAction5 = getShapesChangeOrderHistoryEvent(currentState.persistedScene.shapesOrder, ev);
return i.assoc(currentState, 'editorActionsQueue', [_editorAction5]);
}
return currentState;
}
}