forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			36 lines
		
	
	
	
		
			963 B
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			963 B
		
	
	
	
		
			Svelte
		
	
	
	
	
	
| <script lang="ts">
 | |
|   import Loading from "../Base/Loading.svelte"
 | |
|   import { Stores, UIEventSource } from "../../Logic/UIEventSource"
 | |
|   import { Map as MlMap } from "maplibre-gl"
 | |
|   import { onDestroy } from "svelte"
 | |
| 
 | |
|   let isLoading = false
 | |
|   export let map: UIEventSource<MlMap>
 | |
|   /**
 | |
|    * Optional. Only used for the 'global' change indicator so that it won't spin on pan/zoom but only when a change _actually_ occured
 | |
|    */
 | |
|   export let rasterLayer: UIEventSource<any> = undefined
 | |
| 
 | |
|   let didChange = undefined
 | |
|   onDestroy(
 | |
|     rasterLayer?.addCallback(() => {
 | |
|       didChange = true
 | |
|     }) ?? (() => {})
 | |
|   )
 | |
| 
 | |
|   onDestroy(
 | |
|     Stores.Chronic(250).addCallback(() => {
 | |
|       const mapIsLoading = !map.data?.isStyleLoaded()
 | |
|       isLoading = mapIsLoading && (didChange || rasterLayer === undefined)
 | |
|       if (didChange && !mapIsLoading) {
 | |
|         didChange = false
 | |
|       }
 | |
|     })
 | |
|   )
 | |
| </script>
 | |
| 
 | |
| {#if isLoading}
 | |
|   <Loading cls="h-6 w-6" />
 | |
| {:else}
 | |
|   <slot />
 | |
| {/if}
 |