forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			63 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
| 
								 | 
							
								<script lang="ts">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    import ImportFlow from "./ImportFlow.svelte";
							 | 
						||
| 
								 | 
							
								    import {PointImportFlowState} from "./PointImportFlowState";
							 | 
						||
| 
								 | 
							
								    import NewPointLocationInput from "../../BigComponents/NewPointLocationInput.svelte";
							 | 
						||
| 
								 | 
							
								    import LayerConfig from "../../../Models/ThemeConfig/LayerConfig";
							 | 
						||
| 
								 | 
							
								    import {UIEventSource} from "../../../Logic/UIEventSource";
							 | 
						||
| 
								 | 
							
								    import MapControlButton from "../../Base/MapControlButton.svelte";
							 | 
						||
| 
								 | 
							
								    import {Square3Stack3dIcon} from "@babeard/svelte-heroicons/solid";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    export let importFlow: PointImportFlowState
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const state = importFlow.state;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const args = importFlow.args
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // The following variables are used for the map
							 | 
						||
| 
								 | 
							
								    const targetLayer: LayerConfig = state.layout.layers.find(l => l.id === args.targetLayer)
							 | 
						||
| 
								 | 
							
								    const snapToLayers: string[] | undefined = args.snap_onto_layers?.split(",")?.map(l => l.trim()) ?? []
							 | 
						||
| 
								 | 
							
								    const maxSnapDistance: number = Number(args.max_snap_distance ?? 25) ?? 25;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const snappedTo: UIEventSource<string | undefined> = new UIEventSource<string | undefined>(undefined);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const startCoordinate = {
							 | 
						||
| 
								 | 
							
								        lon: importFlow.startCoordinate[0],
							 | 
						||
| 
								 | 
							
								        lat: importFlow.startCoordinate[1]
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    const value: UIEventSource<{ lon: number, lat: number }> = new UIEventSource<{ lon: number; lat: number }>(
							 | 
						||
| 
								 | 
							
								        startCoordinate
							 | 
						||
| 
								 | 
							
								    );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    async function onConfirm(): Promise<void> {
							 | 
						||
| 
								 | 
							
								        const importedId = await importFlow.onConfirm(
							 | 
						||
| 
								 | 
							
								            value.data,
							 | 
						||
| 
								 | 
							
								            snappedTo.data
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        state.selectedLayer.setData(targetLayer)
							 | 
						||
| 
								 | 
							
								        state.selectedElement.setData(state.indexedFeatures.featuresById.data.get(importedId))
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</script>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<ImportFlow {importFlow} on:confirm={onConfirm }>
							 | 
						||
| 
								 | 
							
								    <div class="relative" slot="map">
							 | 
						||
| 
								 | 
							
								        <div class="h-32">
							 | 
						||
| 
								 | 
							
								            <NewPointLocationInput coordinate={startCoordinate}
							 | 
						||
| 
								 | 
							
								                                   {maxSnapDistance}
							 | 
						||
| 
								 | 
							
								                                   {snapToLayers}
							 | 
						||
| 
								 | 
							
								                                   {snappedTo}
							 | 
						||
| 
								 | 
							
								                                   {state}
							 | 
						||
| 
								 | 
							
								                                   {targetLayer}
							 | 
						||
| 
								 | 
							
								                                   {value}
							 | 
						||
| 
								 | 
							
								            />
							 | 
						||
| 
								 | 
							
								        </div>
							 | 
						||
| 
								 | 
							
								        <MapControlButton on:click={() => state.guistate.backgroundLayerSelectionIsOpened.setData(true)} cls="absolute bottom-0">
							 | 
						||
| 
								 | 
							
								            <Square3Stack3dIcon class="w-6 h-6"/>
							 | 
						||
| 
								 | 
							
								        </MapControlButton>
							 | 
						||
| 
								 | 
							
								    </div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</ImportFlow>
							 |