Remove confirm delete for features and datalayers (#2603)

Now that we have granular undo, I'd say we can simplify the delete
process.
This commit is contained in:
Yohan Boniface 2025-04-07 18:24:25 +02:00 committed by GitHub
commit f1f18ed518
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 12 additions and 39 deletions

View file

@ -61,7 +61,7 @@ export default class Browser {
DomEvent.on(zoom_to, 'click', viewFeature) DomEvent.on(zoom_to, 'click', viewFeature)
DomEvent.on(title, 'click', viewFeature) DomEvent.on(title, 'click', viewFeature)
DomEvent.on(edit, 'click', feature.edit, feature) DomEvent.on(edit, 'click', feature.edit, feature)
DomEvent.on(del, 'click', feature.confirmDelete, feature) DomEvent.on(del, 'click', feature.del, feature)
// HOTFIX. Remove when this is released: // HOTFIX. Remove when this is released:
// https://github.com/Leaflet/Leaflet/pull/9052 // https://github.com/Leaflet/Leaflet/pull/9052
DomEvent.disableClickPropagation(row) DomEvent.disableClickPropagation(row)

View file

@ -278,7 +278,8 @@ class Feature {
<i class="icon icon-24 icon-delete"></i>${translate('Delete')} <i class="icon icon-24 icon-delete"></i>${translate('Delete')}
</button>`) </button>`)
button.addEventListener('click', () => { button.addEventListener('click', () => {
this.confirmDelete().then(() => this._umap.editPanel.close()) this.del()
this._umap.editPanel.close()
}) })
container.appendChild(button) container.appendChild(button)
} }
@ -363,17 +364,6 @@ class Feature {
return popup.loadContent() return popup.loadContent()
} }
async confirmDelete() {
const confirmed = await this._umap.dialog.confirm(
translate('Are you sure you want to delete the feature?')
)
if (confirmed) {
this.del()
return true
}
return false
}
del(sync) { del(sync) {
this.isDirty = true this.isDirty = true
this._umap._leafletMap.closePopup() this._umap._leafletMap.closePopup()
@ -518,7 +508,7 @@ class Feature {
icon: 'icon-edit', icon: 'icon-edit',
}, },
{ {
action: () => this.confirmDelete(), action: () => this.del(),
title: translate('Delete this feature'), title: translate('Delete this feature'),
icon: 'icon-delete', icon: 'icon-delete',
}, },
@ -673,7 +663,7 @@ class Feature {
}, },
{ {
label: translate('Delete this feature'), label: translate('Delete this feature'),
action: () => this.confirmDelete(), action: () => this.del(),
}, },
{ {
label: translate('Clone this feature'), label: translate('Clone this feature'),

View file

@ -1237,23 +1237,14 @@ export class DataLayer {
translate('Delete layer') translate('Delete layer')
) )
if (this.isReadOnly()) { if (this.isReadOnly()) {
DomUtil.addClass(container, 'readonly') container.classList.add('readonly')
} else { } else {
DomEvent.on(edit, 'click', this.edit, this) edit.addEventListener('click', () => this.edit())
DomEvent.on(table, 'click', this.tableEdit, this) table.addEventListener('click', () => this.tableEdit())
DomEvent.on( remove.addEventListener('click', () => {
remove, if (!this.isVisible()) return
'click', this.del()
function () { })
if (!this.isVisible()) return
this._umap.dialog
.confirm(translate('Are you sure you want to delete this layer?'))
.then(() => {
this.del()
})
},
this
)
} }
DomEvent.on(toggle, 'click', () => this.toggle()) DomEvent.on(toggle, 'click', () => this.toggle())
DomEvent.on(zoomTo, 'click', this.zoomTo, this) DomEvent.on(zoomTo, 'click', this.zoomTo, this)

View file

@ -348,7 +348,6 @@ def test_should_redraw_list_on_feature_delete(live_server, openmap, page, bootst
buttons = page.locator(".umap-browser .datalayer li .icon-delete") buttons = page.locator(".umap-browser .datalayer li .icon-delete")
expect(buttons).to_have_count(3) expect(buttons).to_have_count(3)
buttons.first.click() buttons.first.click()
page.locator("dialog").get_by_role("button", name="OK").click()
expect(buttons).to_have_count(2) expect(buttons).to_have_count(2)
page.locator(".edit-undo").click() page.locator(".edit-undo").click()
expect(buttons).to_have_count(3) expect(buttons).to_have_count(3)

View file

@ -61,7 +61,6 @@ def test_cancel_deleting_datalayer_should_restore(
expect(markers).to_have_count(1) expect(markers).to_have_count(1)
page.get_by_role("button", name="Manage layers").click() page.get_by_role("button", name="Manage layers").click()
page.locator(".panel.right").get_by_title("Delete layer").click() page.locator(".panel.right").get_by_title("Delete layer").click()
page.get_by_role("button", name="OK").click()
expect(markers).to_have_count(0) expect(markers).to_have_count(0)
expect(page.get_by_text("test datalayer")).to_be_hidden() expect(page.get_by_text("test datalayer")).to_be_hidden()
page.locator(".edit-undo").click() page.locator(".edit-undo").click()
@ -203,7 +202,6 @@ def test_deleting_datalayer_should_remove_from_browser_and_layers_list(
expect(panel.get_by_text("test datalayer")).to_be_visible() expect(panel.get_by_text("test datalayer")).to_be_visible()
expect(edit_panel.get_by_text("test datalayer")).to_be_visible() expect(edit_panel.get_by_text("test datalayer")).to_be_visible()
page.locator(".panel.right").get_by_title("Delete layer").click() page.locator(".panel.right").get_by_title("Delete layer").click()
page.get_by_role("button", name="OK").click()
expect(panel.get_by_text("test datalayer")).to_be_hidden() expect(panel.get_by_text("test datalayer")).to_be_hidden()
expect(edit_panel.get_by_text("test datalayer")).to_be_hidden() expect(edit_panel.get_by_text("test datalayer")).to_be_hidden()
@ -217,7 +215,6 @@ def test_deleting_datalayer_should_remove_from_caption(
page.get_by_role("button", name="Manage layers").click() page.get_by_role("button", name="Manage layers").click()
expect(panel.get_by_text("test datalayer")).to_be_visible() expect(panel.get_by_text("test datalayer")).to_be_visible()
page.locator(".panel.right").get_by_title("Delete layer").click() page.locator(".panel.right").get_by_title("Delete layer").click()
page.get_by_role("button", name="OK").click()
expect(panel.get_by_text("test datalayer")).to_be_hidden() expect(panel.get_by_text("test datalayer")).to_be_hidden()

View file

@ -241,7 +241,6 @@ def test_can_delete_datalayer(live_server, map, login, datalayer):
expect(markers).to_have_count(1) expect(markers).to_have_count(1)
page.get_by_role("button", name="Manage layers").click() page.get_by_role("button", name="Manage layers").click()
page.locator(".panel.right").get_by_title("Delete layer").click() page.locator(".panel.right").get_by_title("Delete layer").click()
page.get_by_role("button", name="OK").click()
with page.expect_response(re.compile(r".*/datalayer/delete/.*")): with page.expect_response(re.compile(r".*/datalayer/delete/.*")):
page.get_by_role("button", name="Save").click() page.get_by_role("button", name="Save").click()
expect(markers).to_have_count(0) expect(markers).to_have_count(0)

View file

@ -86,7 +86,6 @@ def test_websocket_connection_can_sync_markers(new_page, asgi_live_server, tilel
# Delete a marker from peer A and check it's been deleted on peer B # Delete a marker from peer A and check it's been deleted on peer B
a_first_marker.click(button="right") a_first_marker.click(button="right")
peerA.get_by_role("button", name="Delete this feature").click() peerA.get_by_role("button", name="Delete this feature").click()
peerA.locator("dialog").get_by_role("button", name="OK").click()
expect(a_marker_pane).to_have_count(1) expect(a_marker_pane).to_have_count(1)
expect(b_marker_pane).to_have_count(1) expect(b_marker_pane).to_have_count(1)
@ -166,7 +165,6 @@ def test_websocket_connection_can_sync_polygons(context, asgi_live_server, tilel
# Delete a polygon from peer A and check it's been deleted on peer B # Delete a polygon from peer A and check it's been deleted on peer B
a_polygon.click(button="right") a_polygon.click(button="right")
peerA.get_by_role("button", name="Delete this feature").click() peerA.get_by_role("button", name="Delete this feature").click()
peerA.locator("dialog").get_by_role("button", name="OK").click()
expect(a_polygons).to_have_count(0) expect(a_polygons).to_have_count(0)
expect(b_polygons).to_have_count(0) expect(b_polygons).to_have_count(0)
@ -485,7 +483,6 @@ def test_should_sync_datalayers_delete(new_page, asgi_live_server, tilelayer):
# Delete "datalayer 2" in peerA # Delete "datalayer 2" in peerA
peerA.locator(".datalayer").get_by_role("button", name="Delete layer").first.click() peerA.locator(".datalayer").get_by_role("button", name="Delete layer").first.click()
peerA.get_by_role("button", name="OK").click()
expect(peerA.locator(".panel").get_by_text("datalayer 2")).to_be_hidden() expect(peerA.locator(".panel").get_by_text("datalayer 2")).to_be_hidden()
expect(peerB.locator(".panel").get_by_text("datalayer 2")).to_be_hidden() expect(peerB.locator(".panel").get_by_text("datalayer 2")).to_be_hidden()