Skip to content

Commit

Permalink
[fix] Checking if drawing is active when delete an editor feature (#2093
Browse files Browse the repository at this point in the history
)

- prevents accidental edit of an active input
  • Loading branch information
igorDykhta committed Jan 26, 2023
1 parent d1abf3e commit eeb50d6
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 49 deletions.
52 changes: 29 additions & 23 deletions src/components/src/editor/editor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import window from 'global/window';
import classnames from 'classnames';
import get from 'lodash.get';
import {createSelector} from 'reselect';

import FeatureActionPanelFactory, {FeatureActionPanelProps} from './feature-action-panel';
import {
EDITOR_AVAILABLE_LAYERS,
Expand All @@ -38,7 +37,9 @@ import {Filter, FeatureSelectionContext} from '@kepler.gl/types';
import {Feature} from '@nebula.gl/edit-modes';
import {Datasets} from '@kepler.gl/table';

const StyledWrapper = styled.div<{editor: any}>`
const DECKGL_RENDER_LAYER = 'default-deckgl-overlay-wrapper';

const StyledWrapper = styled.div`
position: relative;
`;

Expand Down Expand Up @@ -106,28 +107,35 @@ export default function EditorFactory(
.concat(editorFeatures)
);

isInFocus = () => document.activeElement?.id === DECKGL_RENDER_LAYER;

_onKeyPressed = (event: KeyboardEvent) => {
switch (event.keyCode) {
case KeyEvent.DOM_VK_DELETE:
case KeyEvent.DOM_VK_BACK_SPACE:
this._onDeleteSelectedFeature();
break;
case KeyEvent.DOM_VK_ESCAPE:
// reset active drawing
if (EditorLayerUtils.isDrawingActive(true, this.props.editor.mode)) {
this.props.onSetEditorMode(EDITOR_MODES.EDIT);
}

this.props.onSelect(null);
break;
default:
break;
if (this.isInFocus()) {
switch (event.keyCode) {
case KeyEvent.DOM_VK_DELETE:
case KeyEvent.DOM_VK_BACK_SPACE:
this._onDeleteSelectedFeature();
break;
case KeyEvent.DOM_VK_ESCAPE:
// reset active drawing
if (EditorLayerUtils.isDrawingActive(true, this.props.editor.mode)) {
this.props.onSetEditorMode(EDITOR_MODES.EDIT);
}

this.props.onSelect(null);
break;
default:
break;
}
}
};

_onDeleteSelectedFeature = () => {
const {editor} = this.props;
this.props.onDeleteFeature(editor.selectedFeature || {});
const {selectedFeature} = editor;
if (selectedFeature) {
this.props.onDeleteFeature(selectedFeature);
}
};

_closeFeatureAction = () => {
Expand All @@ -138,11 +146,9 @@ export default function EditorFactory(

_togglePolygonFilter = (layer: Layer) => {
const {selectedFeature} = this.props.editor;
if (!selectedFeature) {
return;
if (selectedFeature) {
this.props.onTogglePolygonFilter(layer, selectedFeature);
}

this.props.onTogglePolygonFilter(layer, selectedFeature);
};

render() {
Expand All @@ -154,7 +160,7 @@ export default function EditorFactory(
const {rightClick, position, mapIndex} = selectionContext || {};

return (
<StyledWrapper editor={editor} className={classnames('editor', className)} style={style}>
<StyledWrapper className={classnames('editor', className)} style={style}>
{Boolean(rightClick) && selectedFeature && index === mapIndex ? (
<FeatureActionPanel
selectedFeature={selectedFeature}
Expand Down
41 changes: 16 additions & 25 deletions src/components/src/map-container.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -695,30 +695,6 @@ export default function MapContainerFactory(
}
}

_renderEditorContextMenu() {
const {visState, visStateActions, index} = this.props;
const {layers, datasets, editor} = visState;

return (
<Editor
index={index}
datasets={datasets}
editor={editor}
filters={this.polygonFiltersSelector(this.props)}
layers={layers}
onDeleteFeature={visStateActions.deleteFeature}
onSelect={visStateActions.setSelectedFeature}
onTogglePolygonFilter={visStateActions.setPolygonFilterLayer}
onSetEditorMode={visStateActions.setEditorMode}
style={{
pointerEvents: 'all',
position: 'absolute',
display: editor.visible ? 'block' : 'none'
}}
/>
);
}

_onViewportChange = ({viewState}) => {
if (this.props.isExport) {
// Image export map shouldn't be interactive (otherwise this callback can
Expand Down Expand Up @@ -823,7 +799,22 @@ export default function MapContainerFactory(
>
{this._renderDeckOverlay(layersForDeck, {primaryMap: true})}
{this._renderMapboxOverlays()}
{this._renderEditorContextMenu()}
<Editor
index={index}
datasets={datasets}
editor={editor}
filters={this.polygonFiltersSelector(this.props)}
layers={layers}
onDeleteFeature={visStateActions.deleteFeature}
onSelect={visStateActions.setSelectedFeature}
onTogglePolygonFilter={visStateActions.setPolygonFilterLayer}
onSetEditorMode={visStateActions.setEditorMode}
style={{
pointerEvents: 'all',
position: 'absolute',
display: editor.visible ? 'block' : 'none'
}}
/>
</MapComponent>
{mapStyle.topMapStyle || hasGeocoderLayer ? (
<div style={MAP_STYLE.top}>
Expand Down
1 change: 0 additions & 1 deletion src/components/src/map/map-draw-panel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ function MapDrawPanelFactory(MapControlTooltip, MapControlToolbar) {
mapControls,
onToggleMapControl,
onSetEditorMode,
onToggleEditorVisibility,
actionIcons = defaultActionIcons
}) => {
const isActive = mapControls?.mapDraw?.active;
Expand Down

0 comments on commit eeb50d6

Please sign in to comment.