2 import { untrack } from 'svelte';
3 import { update_html_title } from '../lib/api_utils.js';
4 import { appState } from '../state/AppState.svelte.js';
6 import Header from '../components/Header.svelte';
7 import SearchSection from '../components/SearchSection.svelte';
8 import ResultsList from '../components/ResultsList.svelte';
9 import Map from '../components/Map.svelte';
11 let results = $state();
12 let api_request_params = $state.raw();
13 let bStructuredSearch = $state();
14 let current_result = $state();
16 function loaddata(search_params) {
19 api_request_params = {
20 q: search_params.get('q'),
21 street: search_params.get('street'),
22 city: search_params.get('city'),
23 county: search_params.get('county'),
24 state: search_params.get('state'),
25 country: search_params.get('country'),
26 postalcode: search_params.get('postalcode'),
27 polygon_geojson: Nominatim_Config.Search_AreaPolygons ? 1 : 0,
28 viewbox: search_params.get('viewbox'),
29 bounded: search_params.get('bounded'),
30 dedupe: (!search_params.has('dedupe') || search_params.get('dedupe') === '1') ? 1 : 0,
31 'accept-language': search_params.get('accept-language'),
32 countrycodes: search_params.get('countrycodes'),
33 layer: search_params.get('layer'),
34 limit: search_params.get('limit'),
35 polygon_threshold: search_params.get('polygon_threshold'),
36 exclude_place_ids: search_params.get('exclude_place_ids'),
40 let anyStructuredFieldsSet = (api_request_params.street
41 || api_request_params.city
42 || api_request_params.county
43 || api_request_params.state
44 || api_request_params.country
45 || api_request_params.postalcode);
47 if (api_request_params.q || anyStructuredFieldsSet) {
48 appState.fetchFromApi('search', api_request_params, function (data) {
51 if (anyStructuredFieldsSet) {
52 update_html_title('Result for ' + [
53 api_request_params.street,
54 api_request_params.city,
55 api_request_params.county,
56 api_request_params.state,
57 api_request_params.country,
58 api_request_params.postalcode
59 ].filter((text) => text && text.length > 1).join(', '));
61 document.querySelector(".nav-tabs a[href='#structured']").click();
62 document.querySelector('input[name=street]').focus();
64 update_html_title('Result for ' + api_request_params.q);
66 document.querySelector('input[name=q]').focus();
75 if (appState.page.tab === 'search') {
76 const params = appState.page.params;
77 untrack(() => loaddata(params));
82 {#snippet subheader()}
83 <SearchSection api_request_params={api_request_params} bStructuredSearch={bStructuredSearch} />
85 <Header {subheader} />
89 <ResultsList {results} bind:current_result reverse_search={false} />
91 <div id="map-wrapper">
92 <Map {current_result} display_minimap={true} />
109 height: calc(100vh - 250pt);
117 @media (max-width: 768px) {