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
				
			
		|  | @ -42,6 +42,8 @@ import {Tiles} from "./Models/TileRange"; | |||
| import {TileHierarchyAggregator} from "./UI/ShowDataLayer/PerTileCountAggregator"; | ||||
| import {BBox} from "./Logic/GeoOperations"; | ||||
| import StaticFeatureSource from "./Logic/FeatureSource/Sources/StaticFeatureSource"; | ||||
| import FilterConfig from "./Models/ThemeConfig/FilterConfig"; | ||||
| import FilteredLayer from "./Models/FilteredLayer"; | ||||
| 
 | ||||
| export class InitUiElements { | ||||
|     static InitAll( | ||||
|  | @ -406,8 +408,10 @@ export class InitUiElements { | |||
| 
 | ||||
|     private static InitLayers(): void { | ||||
|         const state = State.state; | ||||
|         const empty = [] | ||||
| 
 | ||||
|         state.filteredLayers = state.layoutToUse.map((layoutToUse) => { | ||||
|             const flayers = []; | ||||
|             const flayers: FilteredLayer[] = []; | ||||
| 
 | ||||
|             for (const layer of layoutToUse.layers) { | ||||
|                 const isDisplayed = QueryParameters.GetQueryParameter( | ||||
|  | @ -422,30 +426,47 @@ export class InitUiElements { | |||
|                 const flayer = { | ||||
|                     isDisplayed: isDisplayed, | ||||
|                     layerDef: layer, | ||||
|                     appliedFilters: new UIEventSource<TagsFilter>(undefined), | ||||
|                     appliedFilters: new UIEventSource<{ filter: FilterConfig, selected: number }[]>([]), | ||||
|                 }; | ||||
| 
 | ||||
|                 if (layer.filters.length > 0) { | ||||
|                     const filtersPerName = new Map<string, FilterConfig>() | ||||
|                     layer.filters.forEach(f => filtersPerName.set(f.id, f)) | ||||
|                     const qp = QueryParameters.GetQueryParameter("filter-" + layer.id, "","Filtering state for a layer") | ||||
|                     flayer.appliedFilters.map(filters => { | ||||
|                         filters = filters ?? [] | ||||
|                         return filters.map(f => f.filter.id + "." + f.selected).join(",") | ||||
|                     }, [], textual => { | ||||
|                         if(textual.length === 0){ | ||||
|                             return empty | ||||
|                         } | ||||
|                         return textual.split(",").map(part => { | ||||
|                             const [filterId, selected] = part.split("."); | ||||
|                             return {filter: filtersPerName.get(filterId), selected: Number(selected)} | ||||
|                         }).filter(f => f.filter !== undefined && !isNaN(f.selected)) | ||||
|                     }).syncWith(qp, true) | ||||
|                 } | ||||
| 
 | ||||
|                 flayers.push(flayer); | ||||
|             } | ||||
|             return flayers; | ||||
|         }); | ||||
| 
 | ||||
| 
 | ||||
|         const layers = State.state.layoutToUse.data.layers | ||||
|         const clusterShow = Math.min(...layers.map(layer => layer.minzoom)) | ||||
|          | ||||
|          | ||||
| 
 | ||||
|         const clusterCounter = TileHierarchyAggregator.createHierarchy() | ||||
|         new ShowDataLayer({ | ||||
|             features: clusterCounter.getCountsForZoom(State.state.locationControl, State.state.layoutToUse.data.clustering.minNeededElements), | ||||
|             leafletMap: State.state.leafletMap, | ||||
|             layerToShow: ShowTileInfo.styling, | ||||
|             doShowLayer: layers.length === 1 ? undefined : State.state.locationControl.map(l => l.zoom < clusterShow) | ||||
|         }) | ||||
| 
 | ||||
|         State.state.featurePipeline = new FeaturePipeline( | ||||
|             source => { | ||||
| 
 | ||||
|                 clusterCounter.addTile(source) | ||||
|                  | ||||
| 
 | ||||
|                 const clustering = State.state.layoutToUse.data.clustering | ||||
|                 const doShowFeatures = source.features.map( | ||||
|                     f => { | ||||
|  | @ -489,7 +510,7 @@ export class InitUiElements { | |||
|                         return true | ||||
|                     }, [State.state.locationControl, State.state.currentBounds] | ||||
|                 ) | ||||
|                  | ||||
| 
 | ||||
|                 new ShowDataLayer( | ||||
|                     { | ||||
|                         features: source, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue