forked from MapComplete/MapComplete
		
	Fix bbox bug, add ids to filters, add filter state to the URL
This commit is contained in:
		
							parent
							
								
									38037014b0
								
							
						
					
					
						commit
						0a9e7c0b36
					
				
					 23 changed files with 248 additions and 59 deletions
				
			
		|  | @ -5,13 +5,14 @@ import {FeatureSourceForLayer, Tiled} from "../FeatureSource"; | |||
| import Hash from "../../Web/Hash"; | ||||
| import {BBox} from "../../GeoOperations"; | ||||
| 
 | ||||
| export default class FilteringFeatureSource implements FeatureSourceForLayer , Tiled { | ||||
| export default class FilteringFeatureSource implements FeatureSourceForLayer, Tiled { | ||||
|     public features: UIEventSource<{ feature: any; freshness: Date }[]> = | ||||
|         new UIEventSource<{ feature: any; freshness: Date }[]>([]); | ||||
|     public readonly name; | ||||
|     public readonly layer: FilteredLayer; | ||||
| public readonly tileIndex : number | ||||
|     public readonly bbox : BBox | ||||
|     public readonly tileIndex: number | ||||
|     public readonly bbox: BBox | ||||
| 
 | ||||
|     constructor( | ||||
|         state: { | ||||
|             locationControl: UIEventSource<{ zoom: number }>, | ||||
|  | @ -21,7 +22,7 @@ public readonly tileIndex : number | |||
|         upstream: FeatureSourceForLayer | ||||
|     ) { | ||||
|         const self = this; | ||||
|         this.name = "FilteringFeatureSource("+upstream.name+")" | ||||
|         this.name = "FilteringFeatureSource(" + upstream.name + ")" | ||||
|         this.tileIndex = tileIndex | ||||
|         this.bbox = BBox.fromTileIndex(tileIndex) | ||||
| 
 | ||||
|  | @ -50,12 +51,15 @@ public readonly tileIndex : number | |||
|                 } | ||||
| 
 | ||||
|                 const tagsFilter = layer.appliedFilters.data; | ||||
|                 if (tagsFilter) { | ||||
|                     if (!tagsFilter.matchesProperties(f.feature.properties)) { | ||||
|                 for (const filter of tagsFilter ?? []) { | ||||
|                     const neededTags = filter.filter.options[filter.selected].osmTags | ||||
|                     if (!neededTags.matchesProperties(f.feature.properties)) { | ||||
|                         // Hidden by the filter on the layer itself - we want to hide it no matter wat
 | ||||
|                         return false; | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
| 
 | ||||
|                 if (!layer.isDisplayed) { | ||||
|                     // The layer itself is either disabled or hidden due to zoom constraints
 | ||||
|                     // We should return true, but it might still match some other layer
 | ||||
|  | @ -80,7 +84,7 @@ public readonly tileIndex : number | |||
|         }); | ||||
| 
 | ||||
|         layer.appliedFilters.addCallback(_ => { | ||||
|             if(!layer.isDisplayed.data){ | ||||
|             if (!layer.isDisplayed.data) { | ||||
|                 // Currently not shown.
 | ||||
|                 // Note that a change in 'isSHown' will trigger an update as well, so we don't have to watch it another time
 | ||||
|                 return; | ||||
|  |  | |||
|  | @ -150,6 +150,7 @@ export default class MetaTagging { | |||
|                 for (const f of functions) { | ||||
|                     f(params, feature); | ||||
|                 } | ||||
|                  State.state.allElements.getEventSourceById(feature.properties.id).ping(); | ||||
|             } catch (e) { | ||||
|                 console.error("While calculating a tag value: ", e) | ||||
|             } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue