forked from MapComplete/MapComplete
		
	Huge refactoring: split readonly and writable stores
This commit is contained in:
		
							parent
							
								
									0946d8ac9c
								
							
						
					
					
						commit
						4283b76f36
					
				
					 95 changed files with 819 additions and 625 deletions
				
			
		|  | @ -1,31 +1,55 @@ | |||
| import FeatureSource from "../FeatureSource"; | ||||
| import {UIEventSource} from "../../UIEventSource"; | ||||
| import FeatureSource, {FeatureSourceForLayer, Tiled} from "../FeatureSource"; | ||||
| import {ImmutableStore, Store, UIEventSource} from "../../UIEventSource"; | ||||
| import {stat} from "fs"; | ||||
| import FilteredLayer from "../../../Models/FilteredLayer"; | ||||
| import {BBox} from "../../BBox"; | ||||
| 
 | ||||
| /** | ||||
|  * A simple dummy implementation for whenever it is needed | ||||
|  * A simple, read only feature store. | ||||
|  */ | ||||
| export default class StaticFeatureSource implements FeatureSource { | ||||
|     public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>; | ||||
|     public readonly name: string = "StaticFeatureSource" | ||||
|     public readonly features: Store<{ feature: any; freshness: Date }[]>; | ||||
|     public readonly name: string | ||||
| 
 | ||||
|     constructor(features: any[] | UIEventSource<any[] | UIEventSource<{ feature: any, freshness: Date }>>, useFeaturesDirectly) { | ||||
|         const now = new Date(); | ||||
|         if(features === undefined){ | ||||
|     constructor(features: Store<{ feature: any, freshness: Date }[]>, name = "StaticFeatureSource") { | ||||
|         if (features === undefined) { | ||||
|             throw "Static feature source received undefined as source" | ||||
|         } | ||||
|         if (useFeaturesDirectly) { | ||||
|             // @ts-ignore
 | ||||
|             this.features = features | ||||
|         } else if (features instanceof UIEventSource) { | ||||
|             // @ts-ignore
 | ||||
|             this.features = features.map(features => features?.map(f => ({feature: f, freshness: now}) ?? [])) | ||||
|         } else { | ||||
|             this.features = new UIEventSource(features?.map(f => ({ | ||||
|                 feature: f, | ||||
|                 freshness: now | ||||
|             }))??[]) | ||||
|         } | ||||
|         this.name = name; | ||||
|         this.features = features; | ||||
|     } | ||||
| 
 | ||||
|     public static fromGeojsonAndDate(features: { feature: any, freshness: Date }[], name = "StaticFeatureSourceFromGeojsonAndDate"): StaticFeatureSource { | ||||
|         return new StaticFeatureSource(new ImmutableStore(features), name); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|     public static fromGeojson(geojson: any[], name = "StaticFeatureSourceFromGeojson"): StaticFeatureSource { | ||||
|         const now = new Date(); | ||||
|         return StaticFeatureSource.fromGeojsonAndDate(geojson.map(feature => ({feature, freshness: now})), name); | ||||
|     } | ||||
| 
 | ||||
|     static fromDateless(featureSource: Store<{ feature: any }[]>, name = "StaticFeatureSourceFromDateless") { | ||||
|         const now = new Date(); | ||||
|         return new StaticFeatureSource(featureSource.map(features => features.map(feature => ({ | ||||
|             feature: feature.feature, | ||||
|             freshness: now | ||||
|         }))), name); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| export class TiledStaticFeatureSource extends StaticFeatureSource implements Tiled, FeatureSourceForLayer{ | ||||
| 
 | ||||
|     public readonly bbox: BBox = BBox.global; | ||||
|     public readonly tileIndex: number;    | ||||
|     public readonly layer: FilteredLayer; | ||||
| 
 | ||||
|     constructor(features: Store<{ feature: any, freshness: Date }[]>, layer: FilteredLayer ,tileIndex : number = 0) { | ||||
|         super(features); | ||||
|         this.tileIndex = tileIndex ; | ||||
|         this.layer=  layer; | ||||
|         this.bbox = BBox.fromTileIndex(this.tileIndex) | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue