| 
									
										
										
										
											2023-03-11 02:37:07 +01:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  |     import type {RasterLayerPolygon} from "../../Models/RasterLayers"; | 
					
						
							|  |  |  |     import OverlayMap from "./OverlayMap.svelte"; | 
					
						
							|  |  |  |     import type {MapProperties} from "../../Models/MapProperties"; | 
					
						
							|  |  |  |     import {Store, UIEventSource} from "../../Logic/UIEventSource"; | 
					
						
							|  |  |  |     import {Map as MlMap} from "maplibre-gl" | 
					
						
							|  |  |  |     import {createEventDispatcher, onDestroy} from "svelte"; | 
					
						
							| 
									
										
										
										
											2023-03-11 02:37:07 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  |     /*** | 
					
						
							|  |  |  |      * Chooses a background-layer out of available options | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     export let availableLayers: Store<RasterLayerPolygon[]> | 
					
						
							|  |  |  |     export let mapproperties: MapProperties | 
					
						
							|  |  |  |     export let map: Store<MlMap> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     export let visible: Store<boolean> = undefined | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     let dispatch = createEventDispatcher<{appliedLayer}>() | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2023-05-21 23:27:01 +02:00
										 |  |  |     export let favourite : UIEventSource<string> | undefined = undefined | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  |      | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let rasterLayer = new UIEventSource<RasterLayerPolygon>(availableLayers.data?.[0]) | 
					
						
							|  |  |  |     let hasLayers = true | 
					
						
							|  |  |  |     onDestroy(availableLayers.addCallbackAndRun(layers => { | 
					
						
							|  |  |  |         if (layers === undefined || layers.length === 0) { | 
					
						
							|  |  |  |             hasLayers = false | 
					
						
							|  |  |  |             return | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         hasLayers = true | 
					
						
							|  |  |  |         rasterLayer.setData(layers[0]) | 
					
						
							|  |  |  |     })) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if(favourite){ | 
					
						
							|  |  |  |         onDestroy(favourite.addCallbackAndRunD(favourite => { | 
					
						
							|  |  |  |             const fav = availableLayers.data?.find(l => l.properties.id === favourite) | 
					
						
							|  |  |  |             if(!fav){ | 
					
						
							|  |  |  |                 return | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             rasterLayer.setData(fav) | 
					
						
							|  |  |  |         })) | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2023-05-21 23:27:01 +02:00
										 |  |  |         onDestroy(rasterLayer.addCallbackAndRunD(selected => { | 
					
						
							|  |  |  |             favourite?.setData(selected.properties.id) | 
					
						
							|  |  |  |         })) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     let rasterLayerOnMap = UIEventSource.feedFrom(rasterLayer) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if (visible) { | 
					
						
							|  |  |  |         onDestroy(visible?.addCallbackAndRunD(visible => { | 
					
						
							|  |  |  |             if (visible) { | 
					
						
							|  |  |  |                 rasterLayerOnMap.setData(rasterLayer.data ?? availableLayers.data[0]) | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 rasterLayerOnMap.setData(undefined) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         })) | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-03-11 02:37:07 +01:00
										 |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | {#if hasLayers} | 
					
						
							|  |  |  |     <div class="h-full w-full flex flex-col"> | 
					
						
							|  |  |  |         <button on:click={() => {mapproperties.rasterLayer.setData(rasterLayer.data); | 
					
						
							|  |  |  |             dispatch("appliedLayer") | 
					
						
							|  |  |  |         }} class="w-full h-full m-0 p-0"> | 
					
						
							|  |  |  |             <OverlayMap rasterLayer={rasterLayerOnMap} placedOverMap={map} placedOverMapProperties={mapproperties} | 
					
						
							|  |  |  |                         {visible}/> | 
					
						
							|  |  |  |         </button> | 
					
						
							|  |  |  |         <select bind:value={$rasterLayer} class="w-full"> | 
					
						
							|  |  |  |             {#each $availableLayers as availableLayer } | 
					
						
							|  |  |  |                 <option value={availableLayer}> | 
					
						
							|  |  |  |                     {availableLayer.properties.name} | 
					
						
							|  |  |  |                 </option> | 
					
						
							|  |  |  |             {/each} | 
					
						
							|  |  |  |         </select> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  | {/if} |