| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   /** | 
					
						
							|  |  |  |    * The RasterLayerOverview shows the available 4 categories of maps with a RasterLayerPicker | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   import { Store, UIEventSource } from "../../Logic/UIEventSource" | 
					
						
							|  |  |  |   import type { RasterLayerPolygon } from "../../Models/RasterLayers" | 
					
						
							|  |  |  |   import type { MapProperties } from "../../Models/MapProperties" | 
					
						
							|  |  |  |   import { Map as MlMap } from "maplibre-gl" | 
					
						
							|  |  |  |   import RasterLayerPicker from "./RasterLayerPicker.svelte" | 
					
						
							|  |  |  |   import type { EliCategory } from "../../Models/RasterLayerProperties" | 
					
						
							|  |  |  |   import UserRelatedState from "../../Logic/State/UserRelatedState" | 
					
						
							|  |  |  |   import Translations from "../i18n/Translations" | 
					
						
							|  |  |  |   import Tr from "../Base/Tr.svelte" | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   export let availableLayers: Store<RasterLayerPolygon[]> | 
					
						
							|  |  |  |   export let mapproperties: MapProperties | 
					
						
							|  |  |  |   export let userstate: UserRelatedState | 
					
						
							|  |  |  |   export let map: Store<MlMap> | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * Used to toggle the background layers on/off | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   export let visible: UIEventSource<boolean> = undefined | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   type CategoryType = "photo" | "map" | "other" | "osmbasedmap" | 
					
						
							|  |  |  |   const categories: Record<CategoryType, EliCategory[]> = { | 
					
						
							|  |  |  |     photo: ["photo", "historicphoto"], | 
					
						
							|  |  |  |     map: ["map", "historicmap"], | 
					
						
							|  |  |  |     other: ["other", "elevation"], | 
					
						
							|  |  |  |     osmbasedmap: ["osmbasedmap"], | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   function availableForCategory(type: CategoryType): Store<RasterLayerPolygon[]> { | 
					
						
							|  |  |  |     const keywords = categories[type] | 
					
						
							|  |  |  |     return availableLayers.mapD((available) => | 
					
						
							|  |  |  |       available.filter((layer) => keywords.indexOf(<EliCategory>layer.properties.category) >= 0) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   const mapLayers = availableForCategory("map") | 
					
						
							|  |  |  |   const osmbasedmapLayers = availableForCategory("osmbasedmap") | 
					
						
							|  |  |  |   const photoLayers = availableForCategory("photo") | 
					
						
							|  |  |  |   const otherLayers = availableForCategory("other") | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   function onApply() { | 
					
						
							|  |  |  |     visible.setData(false) | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   function getPref(type: CategoryType): undefined | UIEventSource<string> { | 
					
						
							|  |  |  |     return userstate?.osmConnection?.GetPreference("preferred-layer-" + type) | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:44:01 +02:00
										 |  |  | <div class="flex h-full flex-col"> | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |   <slot name="title"> | 
					
						
							|  |  |  |     <h2> | 
					
						
							|  |  |  |       <Tr t={Translations.t.general.backgroundMap} /> | 
					
						
							|  |  |  |     </h2> | 
					
						
							|  |  |  |   </slot> | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:44:01 +02:00
										 |  |  |   <div class="grid h-full w-full grid-cols-1 gap-2 md:grid-cols-2"> | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |     <RasterLayerPicker | 
					
						
							|  |  |  |       availableLayers={photoLayers} | 
					
						
							|  |  |  |       favourite={getPref("photo")} | 
					
						
							|  |  |  |       {map} | 
					
						
							|  |  |  |       {mapproperties} | 
					
						
							|  |  |  |       on:appliedLayer={onApply} | 
					
						
							|  |  |  |       {visible} | 
					
						
							|  |  |  |     /> | 
					
						
							|  |  |  |     <RasterLayerPicker | 
					
						
							|  |  |  |       availableLayers={mapLayers} | 
					
						
							|  |  |  |       favourite={getPref("map")} | 
					
						
							|  |  |  |       {map} | 
					
						
							|  |  |  |       {mapproperties} | 
					
						
							|  |  |  |       on:appliedLayer={onApply} | 
					
						
							|  |  |  |       {visible} | 
					
						
							|  |  |  |     /> | 
					
						
							|  |  |  |     <RasterLayerPicker | 
					
						
							|  |  |  |       availableLayers={osmbasedmapLayers} | 
					
						
							|  |  |  |       favourite={getPref("osmbasedmap")} | 
					
						
							|  |  |  |       {map} | 
					
						
							|  |  |  |       {mapproperties} | 
					
						
							|  |  |  |       on:appliedLayer={onApply} | 
					
						
							|  |  |  |       {visible} | 
					
						
							|  |  |  |     /> | 
					
						
							|  |  |  |     <RasterLayerPicker | 
					
						
							|  |  |  |       availableLayers={otherLayers} | 
					
						
							|  |  |  |       favourite={getPref("other")} | 
					
						
							|  |  |  |       {map} | 
					
						
							|  |  |  |       {mapproperties} | 
					
						
							|  |  |  |       on:appliedLayer={onApply} | 
					
						
							|  |  |  |       {visible} | 
					
						
							|  |  |  |     /> | 
					
						
							|  |  |  |   </div> | 
					
						
							| 
									
										
										
										
											2023-05-18 15:44:54 +02:00
										 |  |  | </div> |