2022-11-02 14:44:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  {  Store ,  UIEventSource  }  from  "../../Logic/UIEventSource"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  Loc  from  "../../Models/Loc"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  Minimap  from  "../Base/Minimap"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  ShowDataMultiLayer  from  "../ShowDataLayer/ShowDataMultiLayer"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  StaticFeatureSource  from  "../../Logic/FeatureSource/Sources/StaticFeatureSource"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  {  SpecialVisualization  }  from  "../SpecialVisualization"  
						 
					
						
							
								
									
										
										
										
											2022-10-28 04:33:05 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  class  MinimapViz  implements  SpecialVisualization  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    funcName  =  "minimap" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    docs  =  "A small map showing the selected feature." 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    args  =  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            doc :  "The (maximum) zoomlevel: the target zoomlevel after fitting the entire feature. The minimap will fit the entire feature, then zoom out to this zoom level. The higher, the more zoomed in with 1 being the entire world and 19 being really close" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            name :  "zoomlevel" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            defaultValue :  "18" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            doc :  "(Matches all resting arguments) This argument should be the key of a property of the feature. The corresponding value is interpreted as either the id or the a list of ID's. The features with these ID's will be shown on this minimap. (Note: if the key is 'id', list interpration is disabled)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            name :  "idKey" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            defaultValue :  "id" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ] 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-02 14:44:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    example :  "`{minimap()}`, `{minimap(17, id, _list_of_embedded_feature_ids_calculated_by_calculated_tag):height:10rem; border: 2px solid black}`" 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-28 04:33:05 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    constr ( state ,  tagSource ,  args ,  _ )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( state  ===  undefined )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            return  undefined 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  keys  =  [ . . . args ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        keys . splice ( 0 ,  1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  featureStore  =  state . allElements . ContainingFeatures 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-02 14:44:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        const  featuresToShow : Store < {  freshness : Date ;  feature : any  } [ ] >  =  tagSource . map ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ( properties )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-28 04:33:05 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                const  features :  {  freshness : Date ;  feature : any  } [ ]  =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                for  ( const  key  of  keys )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    const  value  =  properties [ key ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( value  ===  undefined  ||  value  ===  null )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    let  idList  =  [ value ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    if  ( key  !==  "id"  &&  value . startsWith ( "[" ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        // This is a list of values
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        idList  =  JSON . parse ( value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    for  ( const  id  of  idList )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        const  feature  =  featureStore . get ( id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        if  ( feature  ===  undefined )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            console . warn ( "No feature found for id " ,  id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            continue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        features . push ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            freshness : new  Date ( ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            feature , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                        } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                return  features 
							 
						 
					
						
							
								
									
										
										
										
											2022-11-02 14:44:06 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-28 04:33:05 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        const  properties  =  tagSource . data 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  zoom  =  18 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( args [ 0 ] )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            const  parsed  =  Number ( args [ 0 ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( ! isNaN ( parsed )  &&  parsed  >  0  &&  parsed  <  25 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                zoom  =  parsed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  locationSource  =  new  UIEventSource < Loc > ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            lat : Number ( properties . _lat ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            lon : Number ( properties . _lon ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            zoom : zoom , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  minimap  =  Minimap . createMiniMap ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            background : state.backgroundLayer , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            location : locationSource , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            allowMoving : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        locationSource . addCallback ( ( loc )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            if  ( loc . zoom  >  zoom )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                // We zoom back
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                locationSource . data . zoom  =  zoom 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                locationSource . ping ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        new  ShowDataMultiLayer ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            leafletMap : minimap [ "leafletMap" ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            zoomToFeatures : true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            layers : state.filteredLayers , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            features : new  StaticFeatureSource ( featuresToShow ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        minimap . SetStyle ( "overflow: hidden; pointer-events: none;" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  minimap 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}