core-graphics
Version:
A core library for creating shape-based graphic editors
114 lines (96 loc) • 5.59 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.default = selectStateReducer;
var _modes = require('../../helpers/modes');
var _input = require('../events/input');
var _modes2 = 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; } }
function selectStateReducer(currentState, ev) {
var mode = currentState.mode;
var mouse = currentState.mouse;
var modifierKeys = currentState.modifierKeys;
if ((0, _modes2.isSelectMode)(mode)) {
if ((0, _input.isEditorInputEvent)(ev) && (0, _input.isShapeMouseDownEvent)(ev) && ev.payload.button === _input.ButtonType.Left) {
var id = ev.payload.id;
return i.chain(currentState).assoc('mode', (0, _modes2.modeSelected)([id])).assocIn(['mouse', 'ignoreCursorUp'], true).value();
}
return currentState;
}
if ((0, _modes2.isSelectedMode)(mode)) {
if ((0, _input.isEditorInputEvent)(ev) && (0, _input.isBackgroundMouseDownEvent)(ev) && !modifierKeys[_input.SceneModifierKey.Shift]) {
return i.assoc(currentState, 'mode', (0, _modes2.modeSelect)());
}
if ((0, _input.isEditorInputEvent)(ev) && (0, _input.isShapeMouseUpEvent)(ev) && ev.payload.button === _input.ButtonType.Left) {
// if selected and cursor already was up
var _mode = currentState.mode;
var scene = currentState.scene;
var shapesDeclarations = currentState.shapesDeclarations;
if (!modifierKeys[_input.SceneModifierKey.Shift] && (0, _modes2.isSelectedMode)(_mode) && _mode.payload.ids.length === 1 && shapesDeclarations[scene.shapes[_mode.payload.ids[0]].type].hasSubSelectedMode === true && (0, _input.isShapeMouseUpEvent)(ev) && !mouse.ignoreCursorUp && ev.payload.id === _mode.payload.ids[0]) {
var _id = ev.payload.id;
return i.chain(currentState).assoc('mode', (0, _modes2.modeSubSelected)(_id)).assocIn(['mouse', 'ignoreCursorUp'], false).value();
} else {
// stop ignoring cursor up event for sub-selected mode
return i.assocIn(currentState, ['mouse', 'ignoreCursorUp'], false);
}
}
if ((0, _input.isEditorInputEvent)(ev) && (0, _input.isShapeMouseDownEvent)(ev) && ev.payload.button === _input.ButtonType.Left) {
var _ret = function () {
var id = ev.payload.id;
if ((0, _modes.isShapeSelected)(mode, id)) {
// de-select shape
if (currentState.modifierKeys[_input.SceneModifierKey.Shift]) {
var ids = mode.payload.ids;
var newMode = (0, _modes2.modeSelected)(i.filter(function (x) {
return x !== id;
}, ids));
return {
v: i.assoc(currentState, 'mode', newMode)
};
} else {
// do nothing
return {
v: currentState
};
}
} else {
// select one more shape
if (currentState.modifierKeys[_input.SceneModifierKey.Shift]) {
var _ids = mode.payload.ids;
var _newMode = (0, _modes2.modeSelected)(i.push(_ids, id));
return {
v: i.assoc(currentState, 'mode', _newMode)
};
}
// select single shape
return {
v: i.chain(currentState).assoc('mode', (0, _modes2.modeSelected)([id])).assocIn(['mouse', 'ignoreCursorUp'], true).value()
};
}
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
return currentState;
}
if ((0, _modes2.isSubSelectedMode)(mode) && (0, _input.isEditorInputEvent)(ev)) {
if ((0, _input.isShapeMouseDownEvent)(ev) && ev.payload.button === _input.ButtonType.Left) {
if (modifierKeys[_input.SceneModifierKey.Shift]) {
var subSelectedId = mode.payload.id;
var newId = ev.payload.id;
return i.chain(currentState).assoc('mode', (0, _modes2.modeSelected)([subSelectedId, newId])).assocIn(['mouse', 'ignoreCursorUp'], true).value();
} else {
var _newId = ev.payload.id;
return i.chain(currentState).assoc('mode', (0, _modes2.modeSelected)([_newId])).assocIn(['mouse', 'ignoreCursorUp'], true).value();
}
}
if ((0, _input.isBackgroundMouseDownEvent)(ev) && !modifierKeys[_input.SceneModifierKey.Shift]) {
return i.assoc(currentState, 'mode', (0, _modes2.modeSelect)());
}
return currentState;
}
return currentState;
}