From 1a26d41b58abef0480f1d41afbeb3b04579ddaad Mon Sep 17 00:00:00 2001 From: temi Date: Fri, 31 May 2024 16:03:12 +1000 Subject: [PATCH] - reordered components in survey offline page - sorted site by name - site modal dialog is scrollable - downloaded sites added to offline map list --- grails-app/assets/javascripts/pwa-index.js | 40 ++++++++++- grails-app/assets/javascripts/pwa-messages.js | 2 +- grails-app/i18n/messages.properties | 7 +- grails-app/views/bioActivity/pwa.gsp | 67 +++++++++---------- 4 files changed, 77 insertions(+), 39 deletions(-) diff --git a/grails-app/assets/javascripts/pwa-index.js b/grails-app/assets/javascripts/pwa-index.js index adf3bb96e..090055811 100644 --- a/grails-app/assets/javascripts/pwa-index.js +++ b/grails-app/assets/javascripts/pwa-index.js @@ -353,6 +353,20 @@ function OfflineViewModel(config) { }); } + self.checkSiteInOfflineDownload = function (data) { + var deferred = $.Deferred(); + entities.getMaps().then(function (result) { + var maps = result.data; + var found = maps.find(function (map) { + return map.name === data.name; + }); + + deferred.resolve(!!found, data); + }, deferred.reject); + + return deferred.promise(); + } + self.getBoundsArray = function (bounds) { return [{lat: bounds.getNorth(), lng:bounds.getWest()}, {lat: bounds.getSouth(), lng:bounds.getEast()}]; } @@ -456,6 +470,11 @@ function OfflineViewModel(config) { self.currentStage(self.stages.sites); self.sitesStatus(self.statuses.doing); alaMap.registerListener('dataload', callback); + sites.sort(function (a, b) { + var aName = (a.name || "").trim(), + bName = (b.name || "").trim(); + return aName.localeCompare(bName) + }); if (sites.length > MAX_SITES_DOWNLOADABLE) { var selectionModel = new SiteSelectionViewModel(sites); @@ -480,7 +499,8 @@ function OfflineViewModel(config) { wmsFeatureUrl: overlayLayersMapControlConfig.wmsFeatureUrl, wmsLayerUrl: overlayLayersMapControlConfig.wmsLayerUrl, maxZoom: MAX_ZOOM - }); + }), + bounds; // so that layer zooms beyond default max zoom of 18 geoJsonLayer.options.maxZoom = MAX_ZOOM; @@ -501,11 +521,29 @@ function OfflineViewModel(config) { tileLoadedPromise = $.Deferred(); mapImpl.setZoom(zoom, {animate: false}); timer(MAP_LOAD_TIMEOUT, tileLoadedPromise); + if (zoom === MIN_ZOOM) + bounds = mapImpl.getBounds(); await tileLoadedPromise.promise(); } + // save site to offline map list + self.checkSiteInOfflineDownload({ + name: site.name, + bounds: self.getBoundsArray(bounds) + }).then(function (found, data) { + if (!found) { + entities.saveMap({ + name: data.name, + bounds: data.bounds, + baseMapUrl: config.baseMapUrl + }).then(function (result) { + self.getOfflineMaps(); + }); + } + }) alaMap.clearLayers(); self.numberOfSiteTilesDownloaded(self.numberOfSiteTilesDownloaded() + 1); + bounds = null; } alaMap.removeListener('dataload', callback); diff --git a/grails-app/assets/javascripts/pwa-messages.js b/grails-app/assets/javascripts/pwa-messages.js index 82483779f..b85b3aed2 100644 --- a/grails-app/assets/javascripts/pwa-messages.js +++ b/grails-app/assets/javascripts/pwa-messages.js @@ -1,5 +1,5 @@ window.addEventListener('message', function(event) { - var origins = [fcConfig.originUrl, fcConfig.pwaAppUrl] + var origins = [fcConfig.originUrl, fcConfig.pwaAppUrl, "http://localhost:8081"] if (origins.indexOf(event.origin) == -1) return diff --git a/grails-app/i18n/messages.properties b/grails-app/i18n/messages.properties index 7d56e34b2..a89ec9935 100644 --- a/grails-app/i18n/messages.properties +++ b/grails-app/i18n/messages.properties @@ -1015,9 +1015,10 @@ admin.species.catalog=Regenerate species admin.species.helptext=Downloads species catalog and transforms it into a downloadable format for PWA mobile clients. pwa.species.refresh=Refresh species database pwa.map.download.href=Scroll to map section -pwa.map.download.help=Download map tiles for offline use. You need at least one downloaded region to enable offline access. \ - Zoom in to the region of interest and give it a name. Then click the download button. Download progress are shown below. \ - Download is restricted to a maximum area of {0} km2 because map tiles can take up a lot of space. However, you can download multiple regions. +pwa.map.download.help=Download map tiles for offline use. You can only download if selection area field is green. \ + Download is restricted to a maximum area of {0} km2 because map tiles can take up a lot of space. \ + However, you can download multiple regions. You need at least one downloaded region to enable offline access. \ + We are investigating ways to improve access to offline map. pwa.upload.all=Upload all pwa.add.records=Add record pwa.activities.empty.msg=Unpublished records not found diff --git a/grails-app/views/bioActivity/pwa.gsp b/grails-app/views/bioActivity/pwa.gsp index 9f1b94acb..881fa0917 100644 --- a/grails-app/views/bioActivity/pwa.gsp +++ b/grails-app/views/bioActivity/pwa.gsp @@ -209,31 +209,6 @@ - -

-

-
-
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
-
-

@@ -242,9 +217,6 @@
-
@@ -266,7 +238,9 @@
- + @@ -309,6 +283,29 @@ +

+

+
+
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+ +
+
@@ -330,7 +327,7 @@