UNPKG

core-graphics

Version:

A core library for creating shape-based graphic editors

114 lines (96 loc) 5.59 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.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; }