UNPKG

@gorpacrate/core-graphics

Version:

A core library for creating shape-based graphic editors

98 lines 4.88 kB
"use strict"; exports.__esModule = true; var i = require("icepick"); var declarations_1 = require("../../declarations"); var modes_1 = require("../../helpers/modes"); var input_1 = require("../events/input"); function selectStateReducer(currentState, ev) { var mode = currentState.mode, mouse = currentState.mouse, modifierKeys = currentState.modifierKeys; if (declarations_1.isSelectMode(mode)) { if (input_1.isEditorInputEvent(ev) && input_1.isShapeMouseDownEvent(ev) && (ev.payload.button === input_1.ButtonType.Left)) { var id = ev.payload.id; return i.chain(currentState) .assoc('mode', declarations_1.modeSelected([id])) // ignore first cursor up event for sub-selected mode .assocIn(['mouse', 'ignoreCursorUp'], true) .value(); } return currentState; } if (declarations_1.isSelectedMode(mode)) { if (input_1.isEditorInputEvent(ev) && input_1.isBackgroundMouseDownEvent(ev) && !modifierKeys[input_1.SceneModifierKey.Shift]) { return i.assoc(currentState, 'mode', declarations_1.modeSelect()); } if (input_1.isEditorInputEvent(ev) && input_1.isShapeMouseUpEvent(ev) && (ev.payload.button === input_1.ButtonType.Left)) { // if selected and cursor already was up var scene = currentState.scene, shapesDeclarations = currentState.shapesDeclarations; if (!modifierKeys[input_1.SceneModifierKey.Shift] && declarations_1.isSelectedMode(mode) && mode.payload.ids.length === 1 && (shapesDeclarations[scene.shapes[mode.payload.ids[0]].type].hasSubSelectedMode === true) && input_1.isShapeMouseUpEvent(ev) && (!mouse.ignoreCursorUp) && ev.payload.id === mode.payload.ids[0]) { var id = ev.payload.id; return i.chain(currentState) .assoc('mode', declarations_1.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 (input_1.isEditorInputEvent(ev) && input_1.isShapeMouseDownEvent(ev) && (ev.payload.button === input_1.ButtonType.Left)) { var id_1 = ev.payload.id; if (modes_1.isShapeSelected(mode, id_1)) { // de-select shape if (currentState.modifierKeys[input_1.SceneModifierKey.Shift]) { var ids = mode.payload.ids; var newMode = declarations_1.modeSelected(i.filter(function (x) { return (x !== id_1); }, ids)); return i.assoc(currentState, 'mode', newMode); } else { // do nothing return currentState; } } else { // select one more shape if (currentState.modifierKeys[input_1.SceneModifierKey.Shift]) { var ids = mode.payload.ids; var newMode = declarations_1.modeSelected(i.push(ids, id_1)); return i.assoc(currentState, 'mode', newMode); } // select single shape return i.chain(currentState) .assoc('mode', declarations_1.modeSelected([id_1])) .assocIn(['mouse', 'ignoreCursorUp'], true) .value(); } } return currentState; } if (declarations_1.isSubSelectedMode(mode) && input_1.isEditorInputEvent(ev)) { if (input_1.isShapeMouseDownEvent(ev) && (ev.payload.button === input_1.ButtonType.Left)) { if (modifierKeys[input_1.SceneModifierKey.Shift]) { var subSelectedId = mode.payload.id; var newId = ev.payload.id; return i.chain(currentState) .assoc('mode', declarations_1.modeSelected([subSelectedId, newId])) .assocIn(['mouse', 'ignoreCursorUp'], true) .value(); } else { var newId = ev.payload.id; return i.chain(currentState) .assoc('mode', declarations_1.modeSelected([newId])) .assocIn(['mouse', 'ignoreCursorUp'], true) .value(); } } if (input_1.isBackgroundMouseDownEvent(ev) && !modifierKeys[input_1.SceneModifierKey.Shift]) { return i.assoc(currentState, 'mode', declarations_1.modeSelect()); } return currentState; } return currentState; } exports["default"] = selectStateReducer; //# sourceMappingURL=select.js.map