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