@gorpacrate/core-graphics
Version:
A core library for creating shape-based graphic editors
98 lines • 4.88 kB
JavaScript
"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