forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.9 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 OpenBackgroundSelectorButton from "../../BigComponents/OpenBackgroundSelectorButton.svelte";
 | |
| 
 | |
|   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>
 | |
|     <div class="absolute bottom-0">
 | |
|       <OpenBackgroundSelectorButton {state}/>
 | |
|     </div>
 | |
|   </div>
 | |
| </ImportFlow>
 |