From 10c0e406cb0aaf2df3e8f538f3d3b3b132c0f80f Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Mon, 2 May 2022 18:46:31 -0600 Subject: [PATCH] Get service area GeoJSON from server, show preloader spinner --- www/assets/js/serviceareamap.js | 219 +++++++++----------------------- www/settings.js | 4 +- 2 files changed, 64 insertions(+), 159 deletions(-) diff --git a/www/assets/js/serviceareamap.js b/www/assets/js/serviceareamap.js index 152a5d4..306bce4 100644 --- a/www/assets/js/serviceareamap.js +++ b/www/assets/js/serviceareamap.js @@ -8,176 +8,79 @@ function loadServiceAreaMap() { if (MapControl.supported()) { if (serviceAreaMap == null) { + app.preloader.show(); var mapboxel = document.getElementById("mapbox-servicearea"); serviceAreaMap = new MapControl(mapboxel, true); serviceAreaMap.reloadMap(); + var serviceAreaMapLoaded = false; + serviceAreaMap.mapObj.on('load', function () { - serviceAreaMap.mapObj.jumpTo({center: [-112.005, 46.589], zoom: 9}); - serviceAreaMap.mapObj.addSource('servicearea', { - 'type': 'geojson', - 'data': { - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": { - "label": "Notary" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -111.94158554077148, - 46.75621029973824 - ], - [ - -112.09058761596678, - 46.73880181507399 - ], - [ - -112.11393356323242, - 46.594849313729064 - ], - [ - -112.13109970092773, - 46.53135096527468 - ], - [ - -112.05350875854492, - 46.51410624997797 - ], - [ - -111.92647933959961, - 46.50819926727706 - ], - [ - -111.83721542358398, - 46.537491596723235 - ], - [ - -111.79738998413086, - 46.63800459887636 - ], - [ - -111.86948776245116, - 46.738095947110935 - ], - [ - -111.94158554077148, - 46.75621029973824 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "label": "Courier" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -111.40274047851562, - 46.2957133089894 - ], - [ - -111.42059326171874, - 46.49082901981415 - ], - [ - -111.62109375, - 46.64755071082884 - ], - [ - -111.80923461914062, - 46.800999519926314 - ], - [ - -111.92184448242188, - 46.991494313050424 - ], - [ - -111.90261840820312, - 47.09537035351024 - ], - [ - -112.02346801757812, - 47.15236927446393 - ], - [ - -112.24456787109375, - 47.09163058564968 - ], - [ - -112.38704681396484, - 46.93901161506044 - ], - [ - -112.39013671875, - 46.72856582519053 - ], - [ - -112.36953735351562, - 46.53052428878426 - ], - [ - -112.16285705566406, - 46.430285240839964 - ], - [ - -112.02896118164061, - 46.35522171093644 - ], - [ - -111.6815185546875, - 46.31089291474789 - ], - [ - -111.47415161132812, - 46.29761098988109 - ], - [ - -111.40274047851562, - 46.2957133089894 - ] - ] - ] - } - } - ] + serviceAreaMapLoaded = true; + }); + + apirequest(SETTINGS.apis.servicearea, {}, function (resp) { + var loadWhenMapReady = function () { + if (serviceAreaMapLoaded) { + setupServiceAreaMap(resp); + } else { + setTimeout(function () { + loadWhenMapReady(); + }, 100); } - }); - serviceAreaMap.mapObj.addLayer({ - 'id': 'courierservicearea', - 'type': 'fill', - 'source': 'servicearea', - 'paint': { - 'fill-color': '#005387', - 'fill-opacity': 0.4 - }, - 'filter': ['==', 'label', 'Courier'] - }); - serviceAreaMap.mapObj.addLayer({ - 'id': 'notaryservicearea', - 'type': 'fill', - 'source': 'servicearea', - 'paint': { - 'fill-color': '#008733', - 'fill-opacity': 0.4 - }, - 'filter': ['==', 'label', 'Notary'] - }); + } + loadWhenMapReady(); + }, function (xhr) { + app.preloader.hide(); + try { + var error = $.parseJSON(xhr.responseText); + if (error && typeof error.msg != 'undefined') { + app.dialog.alert(error.msg, "Error"); + sendErrorReport("Service Area", "Couldn't get service area GeoJSON", error.msg); + } else { + app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); + sendErrorReport("Service Area", "Couldn't get service area GeoJSON", "Server/network problem: " + xhr.status + ": " + xhr.statusText); + } + } catch (ex) { + app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); + sendErrorReport("Service Area", "Couldn't get service area GeoJSON", "Server/network problem: " + xhr.status + ": " + xhr.statusText); + } }); } } else { showWebGLErrorMessage(); + app.preloader.hide(); } } +function setupServiceAreaMap(geojson) { + app.preloader.hide(); + serviceAreaMap.mapObj.jumpTo({center: [-112.005, 46.589], zoom: 9}); + serviceAreaMap.mapObj.addSource('servicearea', { + 'type': 'geojson', + 'data': geojson + }); + serviceAreaMap.mapObj.addLayer({ + 'id': 'courierservicearea', + 'type': 'fill', + 'source': 'servicearea', + 'paint': { + 'fill-color': '#005387', + 'fill-opacity': 0.4 + }, + 'filter': ['==', 'label', 'Courier'] + }); + serviceAreaMap.mapObj.addLayer({ + 'id': 'notaryservicearea', + 'type': 'fill', + 'source': 'servicearea', + 'paint': { + 'fill-color': '#008733', + 'fill-opacity': 0.4 + }, + 'filter': ['==', 'label', 'Notary'] + }); +} + function openServiceAreaExtraChargeInfo() { app.dialog.alert("If you need a notary outside the green zone, the travel fee will be calculated \n\ using the current IRS mileage rate. If you need courier service outside the blue zone, we can accomodate \n\ diff --git a/www/settings.js b/www/settings.js index f062edc..cdddb9c 100644 --- a/www/settings.js +++ b/www/settings.js @@ -42,7 +42,9 @@ var SETTINGS = { walletbalance: "http://localhost/helena.express/apis/crypto/walletbalance", getutxo: "http://localhost/helena.express/apis/crypto/getutxo", broadcasttransaction: "http://localhost/helena.express/apis/crypto/broadcasttransaction", - cryptofees: "http://localhost/helena.express/apis/crypto/fees" + cryptofees: "http://localhost/helena.express/apis/crypto/fees", + // Service area map + servicearea: "http://localhost/helena.express/apis/servicearea" }, stripe_pubkey: "pk_test_51J6qFXCa1Fboir5UzPO3LCiMsVNiFP2lq4wR0dEcjJJVzAaJ3uRggDekZPB3qeYpMD3ayIYHKyD5sSn0IFLlEXMW001LqrvGSH", branding: {