| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  | import DynamicTileSource from "./DynamicTileSource" | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +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-14 20:39:36 +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-14 20:39:36 +02:00
										 |  |  |             isActive?: Store<boolean> | 
					
						
							| 
									
										
										
										
											2023-06-01 02:52:21 +02:00
										 |  |  |             maxAge?: number // In seconds
 | 
					
						
							| 
									
										
										
										
											2023-03-28 05:13:48 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |     ) { | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +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( | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |                     storage.getTileSource(tileIndex).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 | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |