| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  | import DynamicTileSource from "./DynamicTileSource" | 
					
						
							| 
									
										
										
										
											2023-06-01 02:52:21 +02:00
										 |  |  | import {Store} from "../../UIEventSource" | 
					
						
							|  |  |  | import {BBox} from "../../BBox" | 
					
						
							| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  | import TileLocalStorage from "../Actors/TileLocalStorage" | 
					
						
							| 
									
										
										
										
											2023-06-01 02:52:21 +02:00
										 |  |  | import {Feature} from "geojson" | 
					
						
							| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  | import StaticFeatureSource from "../Sources/StaticFeatureSource" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default class LocalStorageFeatureSource extends DynamicTileSource { | 
					
						
							|  |  |  |     constructor( | 
					
						
							| 
									
										
										
										
											2023-04-20 01:52:23 +02:00
										 |  |  |         backend: string, | 
					
						
							| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  |         layername: string, | 
					
						
							|  |  |  |         zoomlevel: number, | 
					
						
							|  |  |  |         mapProperties: { | 
					
						
							|  |  |  |             bounds: Store<BBox> | 
					
						
							|  |  |  |             zoom: Store<number> | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         options?: { | 
					
						
							| 
									
										
										
										
											2023-06-01 02:52:21 +02:00
										 |  |  |             isActive?: Store<boolean>, | 
					
						
							|  |  |  |             maxAge?: number // In seconds
 | 
					
						
							| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |     ) { | 
					
						
							| 
									
										
										
										
											2023-06-01 02:52:21 +02:00
										 |  |  |         const storage = TileLocalStorage.construct<Feature[]>(backend, layername, options?.maxAge ?? 24 * 60 * 60) | 
					
						
							| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  |         super( | 
					
						
							|  |  |  |             zoomlevel, | 
					
						
							| 
									
										
										
										
											2023-04-18 23:44:49 +02:00
										 |  |  |             (tileIndex) => | 
					
						
							|  |  |  |                 new StaticFeatureSource( | 
					
						
							|  |  |  |                     storage | 
					
						
							|  |  |  |                         .getTileSource(tileIndex) | 
					
						
							| 
									
										
										
										
											2023-06-01 02:52:21 +02:00
										 |  |  |                         .mapD((features) => { | 
					
						
							|  |  |  |                                 if (features.length === undefined) { | 
					
						
							|  |  |  |                                     console.trace("These are not features:", features) | 
					
						
							|  |  |  |                                     storage.invalidate(zoomlevel, tileIndex) | 
					
						
							|  |  |  |                                     return [] | 
					
						
							|  |  |  |                                 } | 
					
						
							|  |  |  |                                 return features.filter((f) => !f.properties.id.match(/(node|way)\/-[0-9]+/)); | 
					
						
							|  |  |  |                             } | 
					
						
							| 
									
										
										
										
											2023-04-18 23:44:49 +02:00
										 |  |  |                         ) | 
					
						
							|  |  |  |                 ), | 
					
						
							| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  |             mapProperties, | 
					
						
							|  |  |  |             options | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |