From: mtmail Date: Thu, 25 Feb 2021 19:47:34 +0000 (+0100) Subject: Error section (#90) X-Git-Url: https://git.openstreetmap.org/nominatim-ui.git/commitdiff_plain/0af7af382b5cf0cb446fa1c0084d38609c543daf Error section (#90) * display API error messages --- diff --git a/src/components/Error.svelte b/src/components/Error.svelte new file mode 100644 index 0000000..db542e3 --- /dev/null +++ b/src/components/Error.svelte @@ -0,0 +1,21 @@ + + +{#if error_message} +
+ {error_message} + + +
+{/if} diff --git a/src/components/Header.svelte b/src/components/Header.svelte index 06f3bd4..777d8b8 100644 --- a/src/components/Header.svelte +++ b/src/components/Header.svelte @@ -2,6 +2,7 @@ import PageLink from './PageLink.svelte'; import ReverseLink from './ReverseLink.svelte'; import LastUpdated from './LastUpdated.svelte'; + import Error from './Error.svelte'; import { page } from '../lib/stores.js'; import { get_config_value } from '../lib/config_reader.js'; @@ -90,4 +91,5 @@
+ diff --git a/src/lib/api_utils.js b/src/lib/api_utils.js index 8422dc4..93363e4 100644 --- a/src/lib/api_utils.js +++ b/src/lib/api_utils.js @@ -1,6 +1,6 @@ import { get_config_value } from './config_reader.js'; -import { last_api_request_url_store } from './stores.js'; +import { last_api_request_url_store, error_store } from './stores.js'; function api_request_progress(status) { @@ -14,13 +14,22 @@ export async function fetch_from_api(endpoint_name, params, callback) { var api_url = generate_nominatim_api_url(endpoint_name, params); api_request_progress('start'); + if (endpoint_name !== 'status') last_api_request_url_store.set(null); - await fetch(api_url) - .then(response => response.json()) - .then(data => { - callback(data); - api_request_progress('finish'); - }); + try { + await fetch(api_url) + .then(response => response.json()) + .then(data => { + if (data.error) { + error_store.set(data.error.message); + } + callback(data); + api_request_progress('finish'); + }); + } catch (error) { + error_store.set(`Error fetching data from ${api_url} (${error})`); + api_request_progress('finish'); + } if (endpoint_name !== 'status') last_api_request_url_store.set(api_url); } diff --git a/src/lib/stores.js b/src/lib/stores.js index 6220ecc..7ada776 100644 --- a/src/lib/stores.js +++ b/src/lib/stores.js @@ -3,6 +3,7 @@ import { writable } from 'svelte/store'; export const map_store = writable(); export const results_store = writable(); export const last_api_request_url_store = writable(); +export const error_store = writable(); export const page = writable(); /** @@ -37,4 +38,6 @@ export function refresh_page(pagename, params) { } page.set({ tab: pagename, params: params }); + last_api_request_url_store.set(null); + error_store.set(null); } diff --git a/src/pages/DetailsPage.svelte b/src/pages/DetailsPage.svelte index d480050..b7c436d 100644 --- a/src/pages/DetailsPage.svelte +++ b/src/pages/DetailsPage.svelte @@ -14,10 +14,9 @@ import Map from '../components/Map.svelte'; let aPlace; - let errorResponse; let base_url = window.location.search; - let current_result; let api_request_params; + let api_request_finished = false; function loaddata(search_params) { api_request_params = { @@ -32,6 +31,7 @@ polygon_geojson: 1, format: 'json' }; + api_request_finished = false; if (api_request_params.place_id || (api_request_params.osmtype && api_request_params.osmid)) { @@ -43,14 +43,8 @@ fetch_from_api('details', api_request_params, function (data) { window.scrollTo(0, 0); - if (data.error) { - errorResponse = data; - current_result = undefined; - } else { - aPlace = data; - errorResponse = undefined; - current_result = data; - } + api_request_finished = true; + aPlace = (data && !data.error) ? data : undefined; }); } else { aPlace = undefined; @@ -68,11 +62,9 @@
-{#if errorResponse} - {errorResponse.error.message} -{/if} -{#if aPlace} -
+ +
+ {#if aPlace}

@@ -185,7 +177,7 @@

- +
@@ -273,12 +265,10 @@
- -{:else if (window.location.search === '')} - -{:else} - No such place found. -{/if} + {:else if (window.location.search !== '' && api_request_finished)} + No such place found. + {/if} +