From f989e82940b761a6d026221abbc52bac7cc08a2f Mon Sep 17 00:00:00 2001
From: florent <flavelle@neogeo.fr>
Date: Thu, 28 Apr 2022 11:44:48 +0200
Subject: [PATCH] fix drawing on mobile

---
 src/assets/styles/base.css              |  1 +
 src/assets/styles/openlayers-custom.css |  7 ---
 src/components/Map/EditingToolbar.vue   | 57 ++++++++++++++++++++-----
 src/services/edition-service.js         |  2 +-
 4 files changed, 48 insertions(+), 19 deletions(-)

diff --git a/src/assets/styles/base.css b/src/assets/styles/base.css
index df8db274..5383b368 100644
--- a/src/assets/styles/base.css
+++ b/src/assets/styles/base.css
@@ -36,6 +36,7 @@ body {
   width: 100%;
   height: 100%;
   min-height: 250px;
+  touch-action: none; /* workaround for modifying feature on mobile */
 }
 
 #app-footer {
diff --git a/src/assets/styles/openlayers-custom.css b/src/assets/styles/openlayers-custom.css
index 34f063f7..13cc3441 100644
--- a/src/assets/styles/openlayers-custom.css
+++ b/src/assets/styles/openlayers-custom.css
@@ -34,13 +34,6 @@
   background-color: #ebebeb;
 }
 
-.editionToolbar {
-  border: 2px solid rgba(0,0,0,.2);
-  background-clip: padding-box;
-  padding: 0;
-  right: 5px;
-}
-
 /* .leaflet-bar {
   box-shadow: none !important;
 }
diff --git a/src/components/Map/EditingToolbar.vue b/src/components/Map/EditingToolbar.vue
index 3ea23915..3465c628 100644
--- a/src/components/Map/EditingToolbar.vue
+++ b/src/components/Map/EditingToolbar.vue
@@ -3,7 +3,7 @@
     <div v-if="showDrawTool">
       <div class="leaflet-bar">
         <a
-          class="leaflet-draw-draw-polygon"
+          class="leaflet-draw-draw-polygon active"
           title="Dessiner un polygone"
         >
           <img
@@ -26,12 +26,20 @@
     </div>
     <div v-if="!showDrawTool">
       <div class="leaflet-bar">
-        <a @click="update">
+        <a
+          :class="{ active: isEditing }"
+          @click="update"
+        >
           <i class="edit outline icon" />
-          <span class="sr-only">Modifier l'objet</span></a>
-        <a @click="deleteObj">
+          <span class="sr-only">Modifier l'objet</span>
+        </a>
+        <a
+          :class="{ active: isDeleting }"
+          @click="deleteObj"
+        >
           <i class="trash alternate outline icon" />
-          <span class="sr-only">Supprimer l'objet</span></a>
+          <span class="sr-only">Supprimer l'objet</span>
+        </a>
       </div>
     </div>
   </div>
@@ -47,21 +55,35 @@ export default {
   data() {
     return {
       editionService: editionService,
+      isEditing: false,
+      isDeleting: false
     };
   },
 
   computed: {
     showDrawTool() {
       return this.editionService && this.editionService.editing_feature === undefined;
+    },
+  },
+
+  watch: {
+    showDrawTool(newValue) {
+      if (!newValue && !this.isEditing && !this.isDeleting) {
+        this.isEditing = true;
+      }
     }
   },
 
   methods: {
-    update(){
+    update() {
       editionService.activeUpdateFeature();
+      this.isDeleting = false;
+      this.isEditing = true;
     },
-    deleteObj(){
+    deleteObj() {
       editionService.activeDeleteFeature();
+      this.isEditing = false;
+      this.isDeleting = true;
     },
 
   }
@@ -73,13 +95,13 @@ export default {
 .editionToolbar{
   position: absolute;
   top: 80px;
-  right: 5px;
-}
-.leaflet-bar {
+  right: 6px;
   border: 2px solid rgba(0,0,0,.2);
+  border-radius: 4px;
   background-clip: padding-box;
   padding: 0;
-  border-radius: 2px;
+}
+.leaflet-bar {
 
   a:first-child {
     border-top-left-radius: 2px;
@@ -112,6 +134,19 @@ export default {
     }
   }
 
+  .active {
+    background-color: rgba(255, 145, 0, 0.904);
+    color: #fff;
+
+    i {
+      font-weight: bold;
+    }
+
+    img {
+      filter: invert(100%) sepia(0%) saturate(7500%) hue-rotate(282deg) brightness(105%) contrast(100%);
+    }
+  }
+
   .list-image-type {
     height: 20px;
     vertical-align: middle;
diff --git a/src/services/edition-service.js b/src/services/edition-service.js
index fdb63c61..1595d4f6 100644
--- a/src/services/edition-service.js
+++ b/src/services/edition-service.js
@@ -124,7 +124,7 @@ const editionService = {
 
     // On mobile stop drawing when selecting a drawn point
     if (isMobile) {
-      this.selectForUpdate.once('select', () => {
+      this.selectForUpdate.on('select', () => {
         if (this.draw.getActive() && this.draw.sketchCoords_.length > 2) {
           this.draw.finishDrawing();
         }
-- 
GitLab