forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			88 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
| 
								 | 
							
								<script lang="ts">
							 | 
						||
| 
								 | 
							
								    import Translations from "../i18n/Translations";
							 | 
						||
| 
								 | 
							
								    import Svg from "../../Svg";
							 | 
						||
| 
								 | 
							
								    import Tr from "../Base/Tr.svelte";
							 | 
						||
| 
								 | 
							
								    import NextButton from "../Base/NextButton.svelte";
							 | 
						||
| 
								 | 
							
								    import Geosearch from "./Geosearch.svelte";
							 | 
						||
| 
								 | 
							
								    import IfNot from "../Base/IfNot.svelte";
							 | 
						||
| 
								 | 
							
								    import ToSvelte from "../Base/ToSvelte.svelte";
							 | 
						||
| 
								 | 
							
								    import ThemeViewState from "../../Models/ThemeViewState";
							 | 
						||
| 
								 | 
							
								    import If from "../Base/If.svelte";
							 | 
						||
| 
								 | 
							
								    import {UIEventSource} from "../../Logic/UIEventSource";
							 | 
						||
| 
								 | 
							
								    import {SearchIcon} from "@rgossiaux/svelte-heroicons/solid";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The theme introduction panel
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    export let state: ThemeViewState
							 | 
						||
| 
								 | 
							
								    let layout = state.layout
							 | 
						||
| 
								 | 
							
								    let selectedElement = state.selectedElement
							 | 
						||
| 
								 | 
							
								    let selectedLayer = state.selectedLayer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    let triggerSearch: UIEventSource<any> = new UIEventSource<any>(undefined)
							 | 
						||
| 
								 | 
							
								    let searchEnabled = false
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function jumpToCurrentLocation() {
							 | 
						||
| 
								 | 
							
								        const glstate = state.geolocation.geolocationState
							 | 
						||
| 
								 | 
							
								        if (glstate.currentGPSLocation.data !== undefined) {
							 | 
						||
| 
								 | 
							
								            const c: GeolocationCoordinates = glstate.currentGPSLocation.data
							 | 
						||
| 
								 | 
							
								            state.guistate.themeIsOpened.setData(false)
							 | 
						||
| 
								 | 
							
								            const coor = {lon: c.longitude, lat: c.latitude}
							 | 
						||
| 
								 | 
							
								            state.mapProperties.location.setData(coor)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (glstate.permission.data !== "granted") {
							 | 
						||
| 
								 | 
							
								            glstate.requestPermission()
							 | 
						||
| 
								 | 
							
								            return
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<Tr t={layout.description}></Tr>
							 | 
						||
| 
								 | 
							
								<Tr t={Translations.t.general.welcomeExplanation.general}/>
							 | 
						||
| 
								 | 
							
								{#if layout.layers.some((l) => l.presets?.length > 0)}
							 | 
						||
| 
								 | 
							
								    <If condition={state.featureSwitches.featureSwitchAddNew}>
							 | 
						||
| 
								 | 
							
								        <Tr t={Translations.t.general.welcomeExplanation.addNew}/>
							 | 
						||
| 
								 | 
							
								    </If>
							 | 
						||
| 
								 | 
							
								{/if}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<!--toTheMap,
							 | 
						||
| 
								 | 
							
								loginStatus.SetClass("block mt-6 pt-2 md:border-t-2 border-dotted border-gray-400"),
							 | 
						||
| 
								 | 
							
								-->
							 | 
						||
| 
								 | 
							
								<Tr t={layout.descriptionTail}></Tr>
							 | 
						||
| 
								 | 
							
								<NextButton clss="primary w-full" on:click={() => state.guistate.themeIsOpened.setData(false)}>
							 | 
						||
| 
								 | 
							
								    <div class="flex justify-center w-full text-2xl">
							 | 
						||
| 
								 | 
							
								        <Tr t={Translations.t.general.openTheMap}/>
							 | 
						||
| 
								 | 
							
								    </div>
							 | 
						||
| 
								 | 
							
								</NextButton>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<div class="flex w-full flex-wrap sm:flex-nowrap">
							 | 
						||
| 
								 | 
							
								    <IfNot condition={state.geolocation.geolocationState.permission.map(p => p === "denied")}>
							 | 
						||
| 
								 | 
							
								        <button class="flex w-full gap-x-2 items-center" on:click={jumpToCurrentLocation}>
							 | 
						||
| 
								 | 
							
								            <ToSvelte construct={Svg.crosshair_svg().SetClass("w-8 h-8")}/>
							 | 
						||
| 
								 | 
							
								            <Tr t={Translations.t.general.openTheMapAtGeolocation}/>
							 | 
						||
| 
								 | 
							
								        </button>
							 | 
						||
| 
								 | 
							
								    </IfNot>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    <div class="flex gap-x-2 items-center w-full border rounded .button p-2 m-1 low-interaction">
							 | 
						||
| 
								 | 
							
								        <div class="w-full">
							 | 
						||
| 
								 | 
							
								            <Geosearch bounds={state.mapProperties.bounds}
							 | 
						||
| 
								 | 
							
								                       on:searchCompleted={() => state.guistate.themeIsOpened.setData(false)}
							 | 
						||
| 
								 | 
							
								                       on:searchIsValid={isValid => {searchEnabled=  isValid}}
							 | 
						||
| 
								 | 
							
								                       perLayer={state.perLayer}
							 | 
						||
| 
								 | 
							
								                       {selectedElement}
							 | 
						||
| 
								 | 
							
								                       {selectedLayer}
							 | 
						||
| 
								 | 
							
								                       {triggerSearch}>
							 | 
						||
| 
								 | 
							
								            </Geosearch>
							 | 
						||
| 
								 | 
							
								        </div>
							 | 
						||
| 
								 | 
							
								        <button class={"flex gap-x-2 justify-between items-center "+(searchEnabled ? "" : "disabled")}
							 | 
						||
| 
								 | 
							
								                on:click={() => triggerSearch.ping()}>
							 | 
						||
| 
								 | 
							
								            <Tr t={Translations.t.general.search.searchShort}/>
							 | 
						||
| 
								 | 
							
								            <SearchIcon class="w-6 h-6"></SearchIcon>
							 | 
						||
| 
								 | 
							
								        </button>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    </div>
							 | 
						||
| 
								 | 
							
								</div>
							 |