| 
									
										
										
										
											2021-03-25 15:19:44 +01:00
										 |  |  | import FeatureSource from "./FeatureSource"; | 
					
						
							|  |  |  | import {UIEventSource} from "../UIEventSource"; | 
					
						
							|  |  |  | import State from "../../State"; | 
					
						
							|  |  |  | import Hash from "../Web/Hash"; | 
					
						
							|  |  |  | import MetaTagging from "../MetaTagging"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default class MetaTaggingFeatureSource implements FeatureSource { | 
					
						
							| 
									
										
										
										
											2021-05-16 15:34:44 +02:00
										 |  |  |     public readonly features: UIEventSource<{ feature: any; freshness: Date }[]> = new UIEventSource<{ feature: any; freshness: Date }[]>(undefined); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-23 12:55:38 +02:00
										 |  |  |     public readonly name; | 
					
						
							| 
									
										
										
										
											2021-05-16 15:34:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-21 03:11:00 +02:00
										 |  |  |     /*** | 
					
						
							|  |  |  |      * Constructs a new metatagger which'll calculate various tags | 
					
						
							|  |  |  |      * @param allFeaturesSource: A source where all the currently known features can be found - used to calculate overlaps etc | 
					
						
							|  |  |  |      * @param source: the source of features that should get their metatag and which should be exported again | 
					
						
							|  |  |  |      * @param updateTrigger | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-06-21 03:25:54 +02:00
										 |  |  |     constructor(allFeaturesSource: UIEventSource<{ feature: any; freshness: Date }[]>, source: FeatureSource, updateTrigger?: UIEventSource<any>) { | 
					
						
							| 
									
										
										
										
											2021-03-25 15:19:44 +01:00
										 |  |  |         const self = this; | 
					
						
							| 
									
										
										
										
											2021-05-16 15:34:44 +02:00
										 |  |  |         this.name = "MetaTagging of " + source.name | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |         if (allFeaturesSource === undefined) { | 
					
						
							| 
									
										
										
										
											2021-06-21 03:25:54 +02:00
										 |  |  |             throw ("UIEVentSource is undefined") | 
					
						
							| 
									
										
										
										
											2021-06-20 03:09:26 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-16 15:34:44 +02:00
										 |  |  |         function update() { | 
					
						
							|  |  |  |             const featuresFreshness = source.features.data | 
					
						
							|  |  |  |             if (featuresFreshness === undefined) { | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             featuresFreshness.forEach(featureFresh => { | 
					
						
							|  |  |  |                 const feature = featureFresh.feature; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 if (Hash.hash.data === feature.properties.id) { | 
					
						
							|  |  |  |                     State.state.selectedElement.setData(feature); | 
					
						
							| 
									
										
										
										
											2021-03-25 15:19:44 +01:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2021-05-16 15:34:44 +02:00
										 |  |  |             }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             MetaTagging.addMetatags(featuresFreshness, | 
					
						
							|  |  |  |                 allFeaturesSource, | 
					
						
							|  |  |  |                 State.state.knownRelations.data, State.state.layoutToUse.data.layers); | 
					
						
							|  |  |  |             self.features.setData(featuresFreshness); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         source.features.addCallbackAndRun(_ => update()); | 
					
						
							|  |  |  |         updateTrigger?.addCallback(_ => { | 
					
						
							|  |  |  |             console.debug("Updating because of external call") | 
					
						
							|  |  |  |             update(); | 
					
						
							|  |  |  |         }) | 
					
						
							| 
									
										
										
										
											2021-03-25 15:19:44 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-05-16 15:34:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-25 15:19:44 +01:00
										 |  |  | } |