UNPKG

core-graphics

Version:

A core library for creating shape-based graphic editors

180 lines (151 loc) 7.9 kB
'use strict'; 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; } }