From 740d203647a4b61c426a2fb38b2aedc2e47cc7fe Mon Sep 17 00:00:00 2001 From: Eugene Burmakin Date: Mon, 2 Sep 2024 23:29:37 +0200 Subject: [PATCH] Fix a bug where the confirmation alert was shown more than once when deleting a point. --- .dockerignore | 6 ++++++ CHANGELOG.md | 4 ++++ app/javascript/controllers/maps_controller.js | 12 ++++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 25ac0a6f..fc5c0193 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,8 @@ /log /tmp + +# We need directories for import and export files, but not the files themselves. +/public/exports/* +!/public/exports/.keep +/public/imports/* +!/public/imports/.keep diff --git a/CHANGELOG.md b/CHANGELOG.md index 96a273e9..00b9be29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,10 @@ Example of a valid point in GeoJSON format: - Default exporting format is now GeoJSON instead of Owntracks-like JSON. This will allow you to use the exported data in other applications that support GeoJSON format. +### Fixed + +- Fixed a bug where the confirmation alert was shown more than once when deleting a point. + ## [0.12.3] — 2024-09-02 diff --git a/app/javascript/controllers/maps_controller.js b/app/javascript/controllers/maps_controller.js index 4a1e82cc..1e562441 100644 --- a/app/javascript/controllers/maps_controller.js +++ b/app/javascript/controllers/maps_controller.js @@ -145,8 +145,12 @@ export default class extends Controller { `; } + removeEventListeners() { + document.removeEventListener('click', this.handleDeleteClick); + } + addEventListeners() { - document.addEventListener('click', (event) => { + this.handleDeleteClick = (event) => { if (event.target && event.target.classList.contains('delete-point')) { event.preventDefault(); const pointId = event.target.getAttribute('data-id'); @@ -155,7 +159,11 @@ export default class extends Controller { this.deletePoint(pointId, this.apiKey); } } - }); + }; + + // Ensure only one listener is attached by removing any existing ones first + this.removeEventListeners(); + document.addEventListener('click', this.handleDeleteClick); } deletePoint(id, apiKey) {