diff --git a/CHANGELOG b/CHANGELOG index 80dc264e4447f4e9fc4471032458452d04653dc6..76fa5f2ebe9bbf8397fc71728af26327554b1846 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -11,7 +11,7 @@ minerva (14.0.3) stable; urgency=medium * Bug fix: refresh button in overlay panel synchronise list of general and user provided data overlays (#975) * Bug fix: changing order of data overlays is reflected in info window - + * Bug fix: opening map with no available background crashed (#964) -- Piotr Gawron <piotr.gawron@uni.lu> Wed, 16 Oct 2019 9:00:00 +0200 diff --git a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js index fa82f9ca39960817509bac38fc756dc92ac38771..caa9c9529eb99e314740b55da4abd8f6e2cdd5e5 100644 --- a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js @@ -8,6 +8,7 @@ require('datatables.net-rowreorder')(); var AddOverlayDialog = require('../AddOverlayDialog'); var Panel = require('../Panel'); var PanelControlElementType = require('../PanelControlElementType'); +var ValidationError = require('../../ValidationError'); var GuiConnector = require('../../GuiConnector'); // noinspection JSUnusedLocalSymbols @@ -473,6 +474,9 @@ OverlayPanel.prototype.refresh = function (showDefault) { self.getProject().addOrUpdateDataOverlays(overlaysFromServer); if (!showDefault) { + if (overlaysFromServer.length === 0) { + return Promise.reject(new ValidationError("Project doesn't have a background defined. Please re-upload map in admin panel.")); + } var id = self.getMap().getBackgroundDataOverlay().getId(); selectedOverlay[id] = true; } diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 2ccfb1bca4c5b09012265a3054145f6d8e4471f7..e185ff683a0ee929affd1f9519045b6eb5a7059d 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -19,6 +19,7 @@ var Reaction = require('./data/Reaction'); var ReferenceGenome = require('./data/ReferenceGenome'); var SecurityError = require('../SecurityError'); var Submap = require('./Submap'); +var ValidationError = require('../ValidationError'); var Bounds = require('./canvas/Bounds'); var Point = require('./canvas/Point'); @@ -93,7 +94,7 @@ CustomMap.prototype.init = function () { var mapType = sessionData.getSelectedBackgroundOverlay(); // if we have user data overlays stored in the session then restore it var ids = sessionData.getVisibleOverlays(); - if (mapType !== undefined) { + if (mapType !== undefined && !isNaN(mapType)) { ids.push(mapType); } @@ -107,7 +108,7 @@ CustomMap.prototype.init = function () { (x === undefined || y === undefined || zoom === undefined || x === null || y === null || zoom === null )) { - autoFit= true; + autoFit = true; } return Promise.all([self.getMapCanvas().triggerListeners('resize'), @@ -124,11 +125,13 @@ CustomMap.prototype.init = function () { self.getMapCanvas().fitBounds(bounds); } - return Promise.each(ids, function (overlayId) { return self.openDataOverlay(overlayId).catch(function (e) { if (e instanceof SecurityError) { logger.debug(e.message); + if (self.getProject().getDataOverlays().length === 0) { + return Promise.reject(new ValidationError("Project doesn't have a background defined. Please re-upload map in admin panel.")); + } sessionData.setSelectedBackgroundOverlay(self.getProject().getDataOverlays()[0].getId()); } else { return Promise.reject(e); diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js index 966b31a50b0d63f98b5fcd8c56a52c0a96d93668..df238cfd1e77640d6450d8aac4ae4300b0be972c 100644 --- a/frontend-js/src/test/js/map/CustomMap-test.js +++ b/frontend-js/src/test/js/map/CustomMap-test.js @@ -19,6 +19,7 @@ var ReactionMarker = require('../../../main/js/map/marker/ReactionMarker'); var ReactionSurface = require('../../../main/js/map/surface/ReactionSurface'); var ServerConnector = require('./../ServerConnector-mock'); +var ValidationError = require('../../../main/js/ValidationError'); var logger = require('./../logger'); @@ -957,25 +958,26 @@ describe('CustomMap', function () { }); describe("init", function () { - it("invalid background overlay", function () { + it("non-existing background overlay", function () { var options = helper.createCustomMapOptions(); - ServerConnector.getSessionData(options.getProject()).setSelectedBackgroundOverlay("bla"); + ServerConnector.getSessionData(options.getProject()).setSelectedBackgroundOverlay(-1); var map = new CustomMap(options); return map.init().then(function () { - assert.false("Error expected"); - }, function () { - map.destroy(); + assert.ok(ServerConnector.getSessionData(options.getProject()).getSelectedBackgroundOverlay() > 0); + return map.destroy(); }) }); - it("non-existing background overlay", function () { + it("project without overlay", function () { var options = helper.createCustomMapOptions(); - ServerConnector.getSessionData(options.getProject()).setSelectedBackgroundOverlay(-1); + options.getProject().removeDataOverlay(options.getProject().getDataOverlays()[0]); + ServerConnector.getSessionData(options.getProject()).setVisibleOverlays([-1]); var map = new CustomMap(options); return map.init().then(function () { - assert.ok(ServerConnector.getSessionData(options.getProject()).getSelectedBackgroundOverlay() > 0); - return map.destroy(); - }) + assert.fail(); + }).catch(function(e){ + assert.ok(e instanceof ValidationError); + }); }); it("with session data overlays", function () {