From 4953db79d7bf5cf7705d0e5072802d6ac40063f6 Mon Sep 17 00:00:00 2001 From: Aleksandr Shoronov Date: Tue, 7 Jan 2025 13:07:22 +0200 Subject: [PATCH] Fix disable dragPan after second click on feature Closes #1328 --- src/modes/direct_select.js | 6 +++++- test/direct_select.test.js | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/modes/direct_select.js b/src/modes/direct_select.js index 32f0a3483..a27749d41 100644 --- a/src/modes/direct_select.js +++ b/src/modes/direct_select.js @@ -28,7 +28,9 @@ DirectSelect.fireActionable = function(state) { }; DirectSelect.startDragging = function(state, e) { - state.initialDragPanState = this.map.dragPan.isEnabled(); + if (state.initialDragPanState == null) { + state.initialDragPanState = this.map.dragPan.isEnabled(); + } this.map.dragPan.disable(); state.canDragMove = true; @@ -39,6 +41,8 @@ DirectSelect.stopDragging = function(state) { if (state.canDragMove && state.initialDragPanState === true) { this.map.dragPan.enable(); } + + state.initialDragPanState = null; state.dragMoving = false; state.canDragMove = false; state.dragMoveLocation = null; diff --git a/test/direct_select.test.js b/test/direct_select.test.js index 36da5f6b2..9fff47511 100644 --- a/test/direct_select.test.js +++ b/test/direct_select.test.js @@ -53,6 +53,33 @@ test('direct_select', async (t) => { } }); + await t.test('direct_select - double click should not disable enabled dragPan', async () => { + const ids = Draw.add(getGeoJSON('polygon')); + + Draw.changeMode(Constants.modes.DIRECT_SELECT, { + featureId: ids[0] + }); + + await afterNextRender(); + + spy(map.dragPan, 'enable'); + spy(map.dragPan, 'disable'); + + + for (let i = 0; i < 2; i++) { + map.fire('mousedown', makeMouseEvent(35, 25)); + await afterNextRender(); + } + + map.fire('mousemove', makeMouseEvent(0, 0)); + + assert.equal(map.dragPan.enable.callCount, 1, 'dragPan.enable called'); + + map.dragPan.enable.restore(); + map.dragPan.disable.restore(); + }); + + await t.test('direct_select - should fire correct actionable when no vertices selected', async () => { const ids = Draw.add(getGeoJSON('polygon')); Draw.changeMode(Constants.modes.SIMPLE_SELECT, {