]> git.openstreetmap.org Git - nominatim-ui.git/blobdiff - src/pages/DetailsPage.svelte
last update -x ago-, spinner for loading indicator (#83)
[nominatim-ui.git] / src / pages / DetailsPage.svelte
index 47c02985d7b277ee51b9db0fa68a8ba5e559e6ec..d48005038769bf9904358645002ac27f98dcb845 100644 (file)
@@ -1,23 +1,26 @@
 <script>
-  import { onMount } from 'svelte';
   import { fetch_from_api, update_html_title } from '../lib/api_utils.js';
-  import { current_result_store } from '../lib/stores.js';
+  import { page } from '../lib/stores.js';
 
-  import { osmLink, detailsURL, wikipediaLink, coverageType, isAdminBoundary, formatAddressRank, formatKeywordToken } from '../lib/helpers.js';
+  import {
+    osmLink, wikipediaLink, coverageType, isAdminBoundary,
+    formatAddressRank, formatKeywordToken
+  } from '../lib/helpers.js';
+  import Header from '../components/Header.svelte';
   import MapIcon from '../components/MapIcon.svelte';
-  import DetailsIndex from '../components/DetailsIndex.svelte';
+  import SearchSectionDetails from '../components/SearchSectionDetails.svelte';
   import DetailsOneRow from '../components/DetailsOneRow.svelte';
+  import DetailsLink from '../components/DetailsLink.svelte';
   import Map from '../components/Map.svelte';
-  import 'URLSearchParams';
 
   let aPlace;
+  let errorResponse;
   let base_url = window.location.search;
+  let current_result;
+  let api_request_params;
 
-  function loaddata() {
-
-    var search_params = new URLSearchParams(window.location.search);
-
-    var api_request_params = {
+  function loaddata(search_params) {
+    api_request_params = {
       place_id: search_params.get('place_id'),
       osmtype: search_params.get('osmtype'),
       osmid: search_params.get('osmid'),
         update_html_title('Details for ' + api_request_params.osmtype + api_request_params.osmid);
       }
 
-      fetch_from_api('details', api_request_params, function(data){
-        aPlace = data;
-        current_result_store.set(data);
+      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;
+        }
       });
     } else {
       aPlace = undefined;
     }
   }
-  onMount(loaddata);
 
+  $: {
+    let pageinfo = $page;
+    if (pageinfo.tab === 'details') {
+      loaddata(pageinfo.params);
+    }
+  }
 </script>
 
+<Header>
+  <SearchSectionDetails api_request_params={api_request_params}/>
+</Header>
+{#if errorResponse}
+  {errorResponse.error.message}
+{/if}
 {#if aPlace}
   <div class="container">
     <div class="row">
       <div class="col-sm-10">
         <h1>
           {aPlace.localname}
-          <small><a href="{detailsURL(aPlace)}">link to this page</a></small>
+          <small><DetailsLink feature={aPlace}>link to this page</DetailsLink></small>
         </h1>
       </div>
       <div class="col-sm-2 text-right">
       </div>
       <div class="col-md-6">
         <div id="map-wrapper">
-          <Map/>
+          <Map {current_result} />
         </div>
       </div>
     </div>
       </div>
     </div>
   </div>
-{:else if (location.search === '')}
-  <DetailsIndex/>
+{:else if (window.location.search === '')}
+  <!-- <DetailsIndex/> -->
 {:else}
   No such place found.
 {/if}
     padding-left: 8px;
   }
 
-  h1 small a {
+  h1 small :global(a) {
     font-size: 0.5em;
     white-space: nowrap;
   }
     height:300px;
     border: 1px solid #666;
   }
-</style>
\ No newline at end of file
+</style>