core-graphics
Version:
A core library for creating shape-based graphic editors
141 lines (119 loc) • 5.72 kB
JavaScript
'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.default = rubberBandStateReducer;
exports.rubberBandEnterReducer = rubberBandEnterReducer;
exports.rubberBandStateUpdateReducer = rubberBandStateUpdateReducer;
exports.rubberBandFinishingReducer = rubberBandFinishingReducer;
var _rubberBand = require('../../utils/rubber-band');
var _data = require('../../utils/data');
var _editorEvents = require('../editor-events');
var _modes = require('../../declarations/modes');
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; } }
var REDUCERS = [rubberBandEnterReducer, rubberBandStateUpdateReducer, rubberBandFinishingReducer];
function rubberBandStateReducer(currentState, ev) {
return REDUCERS.reduce(function (res, fn) {
return fn(res, ev);
}, currentState);
}
// entering
function rubberBandEnterReducer(currentState, ev) {
var mode = currentState.mode;
if ((0, _modes.isSelectMode)(mode)) {
var mouse = currentState.mouse;
if (mouse.down && (0, _editorEvents.isEditorInputEvent)(ev) && (0, _editorEvents.isMouseMoveEvent)(ev)) {
// enter mode
var lastDownX = mouse.lastDownX;
var lastDownY = mouse.lastDownY;
var _ev$payload = ev.payload;
var x = _ev$payload.x;
var y = _ev$payload.y;
var nextMode = (0, _modes.modeRubberbandSelection)({
pStart: { x: lastDownX, y: lastDownY },
pEnd: { x: x, y: y },
newlySelectedShapes: [],
previouslySelectedShapes: []
});
return i.assoc(currentState, 'mode', nextMode);
}
return currentState;
}
if ((0, _modes.isSelectedMode)(mode)) {
var _mouse = currentState.mouse;
var modifierKeys = currentState.modifierKeys;
if (_mouse.down && modifierKeys[_editorEvents.SceneModifierKey.Shift] && (0, _editorEvents.isEditorInputEvent)(ev) && (0, _editorEvents.isMouseMoveEvent)(ev)) {
// enter mode
var ids = mode.payload.ids;
var _lastDownX = _mouse.lastDownX;
var _lastDownY = _mouse.lastDownY;
var _ev$payload2 = ev.payload;
var _x = _ev$payload2.x;
var _y = _ev$payload2.y;
var _nextMode = (0, _modes.modeRubberbandSelection)({
pStart: { x: _lastDownX, y: _lastDownY },
pEnd: { x: _x, y: _y },
newlySelectedShapes: [],
previouslySelectedShapes: ids
});
return i.assoc(currentState, 'mode', _nextMode);
}
return currentState;
}
return currentState;
}
//updating
function rubberBandStateUpdateReducer(currentState, ev) {
var mode = currentState.mode;
if ((0, _modes.isRubberBandSelectionMode)(mode)) {
var mouse = currentState.mouse;
if (mouse.down && (0, _editorEvents.isEditorInputEvent)(ev) && (0, _editorEvents.isMouseMoveEvent)(ev)) {
var _ret = function () {
var _ev$payload3 = ev.payload;
var x = _ev$payload3.x;
var y = _ev$payload3.y;
var _mode$payload = mode.payload;
var pStart = _mode$payload.pStart;
var pEnd = _mode$payload.pEnd;
var shapesDeclarations = currentState.shapesDeclarations;
var _currentState$scene = currentState.scene;
var shapes = _currentState$scene.shapes;
var shapesOrder = _currentState$scene.shapesOrder;
var shapesData = shapesOrder.map(function (id) {
return shapes[id];
});
var selectedShapes = (0, _rubberBand.getShapesSelectedWithRubberBand)({
pStart: pStart, pEnd: pEnd, shapesData: shapesData, shapesDeclarations: shapesDeclarations
});
var nextMode = i.merge(mode, {
payload: {
pEnd: { x: x, y: y },
newlySelectedShapes: selectedShapes
}
});
return {
v: i.assoc(currentState, 'mode', nextMode)
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
return currentState;
}
return currentState;
}
// finishing
function rubberBandFinishingReducer(currentState, ev) {
var mode = currentState.mode;
if ((0, _modes.isRubberBandSelectionMode)(mode) && (0, _editorEvents.isEditorInputEvent)(ev) && ((0, _editorEvents.isMouseUpEvent)(ev) || (0, _editorEvents.isMouseLeaveEvent)(ev))) {
var _mode$payload2 = mode.payload;
var newlySelectedShapes = _mode$payload2.newlySelectedShapes;
var previouslySelectedShapes = _mode$payload2.previouslySelectedShapes;
var selected = (0, _data.uniq)(previouslySelectedShapes.concat(newlySelectedShapes));
var newMode = (0, _modes.modeSelected)(selected);
return i.assoc(currentState, 'mode', newMode);
}
return currentState;
}