From 2f7b62eed3242101c88399899b8ada050bb6ef1c Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 11 Apr 2019 15:25:54 +0200
Subject: [PATCH] saving of map data is done automatically on change

---
 frontend-js/src/main/js/ServerConnector.js    |  7 +++
 .../main/js/gui/admin/EditProjectDialog.js    | 62 +++++++++++--------
 .../js/gui/admin/EditProjectDialog-test.js    | 13 ----
 3 files changed, 43 insertions(+), 39 deletions(-)

diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 4dc68f08f1..c3bf75adeb 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -2305,6 +2305,13 @@ ServerConnector.updateOverlay = function (overlay) {
   return self.sendPatchRequest(self.updateOverlayUrl(queryParams), filterParams);
 };
 
+/**
+ *
+ * @param {Object} params
+ * @param {string} params.projectId
+ * @param {MapModel} params.model
+ * @return {Promise}
+ */
 ServerConnector.updateModel = function (params) {
   var self = this;
   var model = params.model;
diff --git a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js
index 7655aa702b..6c72772456 100644
--- a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js
+++ b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js
@@ -46,6 +46,13 @@ function EditProjectDialog(params) {
    */
   self._overlayById = [];
 
+  /**
+   @name EditProjectDialog#_mapsById
+   @type MapModel[]
+   @private
+   */
+  self._mapsById = [];
+
 }
 
 EditProjectDialog.prototype = Object.create(AbstractGuiElement.prototype);
@@ -365,21 +372,28 @@ EditProjectDialog.prototype._createMapsTable = function () {
       title: 'Default center y'
     }, {
       title: 'Default zoom level'
-    }, {
-      title: 'Update'
     }]
   });
 
-  $(mapsTable).on("click", "[name='saveMap']", function () {
-    var button = this;
-    GuiConnector.showProcessing("Updating");
-    return self.saveMap(parseInt($(button).attr("data"))).then(function () {
-      GuiConnector.hideProcessing();
-      GuiConnector.info("Map updated successfully");
-    }, function (error) {
-      GuiConnector.hideProcessing();
-      GuiConnector.alert(error);
-    });
+  $(mapsTable).on("change", "[name='defaultCenterX']", function () {
+    var mapId = parseInt($(this).attr("data"));
+    var map = self._mapsById[mapId];
+    map.setDefaultCenterX(parseInt($(this).val()));
+    return self.updateMap(map);
+  });
+
+  $(mapsTable).on("change", "[name='defaultCenterY']", function () {
+    var mapId = parseInt($(this).attr("data"));
+    var map = self._mapsById[mapId];
+    map.setDefaultCenterY(parseInt($(this).val()));
+    return self.updateMap(map);
+  });
+
+  $(mapsTable).on("change", "[name='defaultZoomLevel']", function () {
+    var mapId = parseInt($(this).attr("data"));
+    var map = self._mapsById[mapId];
+    map.setDefaultZoomLevel(parseInt($(this).val()));
+    return self.updateMap(map);
   });
 
   return result;
@@ -954,9 +968,9 @@ EditProjectDialog.prototype.mapToTableRow = function (map) {
   var zoomLevel = getValueOrEmpty(map.getDefaultZoomLevel());
   row[0] = id;
   row[1] = map.getName();
-  row[2] = "<input name='defaultCenterX-" + id + "' value='" + centerX + "'/>";
-  row[3] = "<input name='defaultCenterY-" + id + "' value='" + centerY + "'/>";
-  var zoomLevelSelect = "<select name='defaultZoomLevel-" + id + "' value='" + zoomLevel + "'>" +
+  row[2] = "<input name='defaultCenterX' data='" + id + "' value='" + centerX + "'/>";
+  row[3] = "<input name='defaultCenterY' data='" + id + "' value='" + centerY + "'/>";
+  var zoomLevelSelect = "<select name='defaultZoomLevel' data='" + id + "' value='" + zoomLevel + "'>" +
     "<option value=''>---</option>";
   for (var i = map.getMinZoom(); i <= map.getMaxZoom(); i++) {
     var selected = "";
@@ -967,7 +981,6 @@ EditProjectDialog.prototype.mapToTableRow = function (map) {
   }
   zoomLevelSelect += "</select>";
   row[4] = zoomLevelSelect;
-  row[5] = "<button name='saveMap' data='" + id + "'><i class=\"fa fa-save\" style=\"font-size:17px\"></i></button>";
 
   return row;
 };
@@ -1069,19 +1082,16 @@ EditProjectDialog.prototype.updateOverlay = function (overlay) {
 
 /**
  *
- * @param {number} mapId
+ * @param {MapModel} map
  * @returns {Promise}
  */
-EditProjectDialog.prototype.saveMap = function (mapId) {
+EditProjectDialog.prototype.updateMap = function (map) {
   var self = this;
-  var map = self._mapsById[mapId];
-  var centerX = parseInt($("[name='defaultCenterX-" + mapId + "']", self.getElement())[0].value);
-  var centerY = parseInt($("[name='defaultCenterY-" + mapId + "']", self.getElement())[0].value);
-  map.setDefaultCenterX(centerX);
-  map.setDefaultCenterY(centerY);
-  map.setDefaultZoomLevel($("[name='defaultZoomLevel-" + mapId + "']", self.getElement())[0].value);
-
-  return self.getServerConnector().updateModel({projectId: self.getProject().getProjectId(), model: map});
+  GuiConnector.showProcessing();
+  return self.getServerConnector().updateModel({
+    projectId: self.getProject().getProjectId(),
+    model: map
+  }).catch(GuiConnector.alert).finally(GuiConnector.hideProcessing);
 };
 
 /**
diff --git a/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js
index e2f5951c49..c888790549 100644
--- a/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js
+++ b/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js
@@ -80,19 +80,6 @@ describe('EditProjectDialog', function () {
     });
   });
 
-  it('saveMap', function () {
-    helper.loginAsAdmin();
-    var dialog;
-    return createDialog().then(function (result) {
-      dialog = result;
-      return dialog.init();
-    }).then(function () {
-      return dialog.saveMap(15781);
-    }).then(function () {
-      dialog.destroy();
-    });
-  });
-
   it('saveUser', function () {
     helper.loginAsAdmin();
     var dialog;
-- 
GitLab