mirror of
https://github.com/umap-project/umap.git
synced 2025-04-28 19:42:36 +02:00
fix: prevent feature.edit to be called twice on polygon/line end edit
When finishing drawing a polygon/line, Leaflet.Editable will send both `editable:drawing:end` and `editable:drawing:commit`. In normal flow, we only need to listen to the later, and we only need to listen for the former in the case of pressing escape while drawing.
This commit is contained in:
parent
71b55e7759
commit
b36c03a203
2 changed files with 17 additions and 13 deletions
|
@ -666,7 +666,7 @@ const ControlsMixin = {
|
||||||
const connectedPeersCount = L.DomUtil.createButton(
|
const connectedPeersCount = L.DomUtil.createButton(
|
||||||
'leaflet-control-connected-peers',
|
'leaflet-control-connected-peers',
|
||||||
rightContainer,
|
rightContainer,
|
||||||
'',
|
''
|
||||||
)
|
)
|
||||||
L.DomEvent.on(connectedPeersCount, 'mouseover', () => {
|
L.DomEvent.on(connectedPeersCount, 'mouseover', () => {
|
||||||
this.tooltip.open({
|
this.tooltip.open({
|
||||||
|
@ -1182,17 +1182,6 @@ U.Editable = L.Editable.extend({
|
||||||
initialize: function (map, options) {
|
initialize: function (map, options) {
|
||||||
L.Editable.prototype.initialize.call(this, map, options)
|
L.Editable.prototype.initialize.call(this, map, options)
|
||||||
this.on('editable:drawing:click editable:drawing:move', this.drawingTooltip)
|
this.on('editable:drawing:click editable:drawing:move', this.drawingTooltip)
|
||||||
this.on('editable:drawing:end', (event) => {
|
|
||||||
this.map.tooltip.close()
|
|
||||||
// Leaflet.Editable will delete the drawn shape if invalid
|
|
||||||
// (eg. line has only one drawn point)
|
|
||||||
// So let's check if the layer has no more shape
|
|
||||||
if (!event.layer.feature.hasGeom()) {
|
|
||||||
event.layer.feature.del()
|
|
||||||
} else {
|
|
||||||
event.layer.feature.edit()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// Layer for items added by users
|
// Layer for items added by users
|
||||||
this.on('editable:drawing:cancel', (event) => {
|
this.on('editable:drawing:cancel', (event) => {
|
||||||
if (event.layer instanceof U.LeafletMarker) event.layer.feature.del()
|
if (event.layer instanceof U.LeafletMarker) event.layer.feature.del()
|
||||||
|
@ -1322,4 +1311,19 @@ U.Editable = L.Editable.extend({
|
||||||
L.DomEvent.stop(e)
|
L.DomEvent.stop(e)
|
||||||
e.cancel()
|
e.cancel()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onEscape: function () {
|
||||||
|
this.once('editable:drawing:end', (event) => {
|
||||||
|
this.map.tooltip.close()
|
||||||
|
// Leaflet.Editable will delete the drawn shape if invalid
|
||||||
|
// (eg. line has only one drawn point)
|
||||||
|
// So let's check if the layer has no more shape
|
||||||
|
if (!event.layer.feature.hasGeom()) {
|
||||||
|
event.layer.feature.del()
|
||||||
|
} else {
|
||||||
|
event.layer.feature.edit()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.stopDrawing()
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -563,7 +563,7 @@ U.Map = L.Map.extend({
|
||||||
if (this.importer.dialog.visible) {
|
if (this.importer.dialog.visible) {
|
||||||
this.importer.dialog.close()
|
this.importer.dialog.close()
|
||||||
} else if (this.editEnabled && this.editTools.drawing()) {
|
} else if (this.editEnabled && this.editTools.drawing()) {
|
||||||
this.editTools.stopDrawing()
|
this.editTools.onEscape()
|
||||||
} else if (this.measureTools.enabled()) {
|
} else if (this.measureTools.enabled()) {
|
||||||
this.measureTools.stopDrawing()
|
this.measureTools.stopDrawing()
|
||||||
} else if (this.fullPanel?.isOpen()) {
|
} else if (this.fullPanel?.isOpen()) {
|
||||||
|
|
Loading…
Reference in a new issue