forked from MapComplete/MapComplete
		
	More work on splitting roads, WIP; refactoring tests
This commit is contained in:
		
							parent
							
								
									e374bb355c
								
							
						
					
					
						commit
						1f93923820
					
				
					 62 changed files with 1163 additions and 823 deletions
				
			
		|  | @ -65,7 +65,8 @@ export default class FullWelcomePaneWithTabs extends ScrollableFullScreen { | |||
|         const tabsWithAboutMc = [...FullWelcomePaneWithTabs.ConstructBaseTabs(layoutToUse, isShown)] | ||||
| 
 | ||||
|         const now = new Date() | ||||
|         const date = now.getFullYear()+"-"+Utils.TwoDigits(now.getMonth()+1)+"-"+Utils.TwoDigits(now.getDate()) | ||||
|         const lastWeek = new Date(now.getDate() - 7 * 24 * 60 * 60 * 1000) | ||||
|         const date = lastWeek.getFullYear()+"-"+Utils.TwoDigits(lastWeek.getMonth()+1)+"-"+Utils.TwoDigits(lastWeek.getDate()) | ||||
|         const osmcha_link = `https://osmcha.org/?filters=%7B%22date__gte%22%3A%5B%7B%22label%22%3A%22${date}%22%2C%22value%22%3A%222021-01-01%22%7D%5D%2C%22editor%22%3A%5B%7B%22label%22%3A%22mapcomplete%22%2C%22value%22%3A%22mapcomplete%22%7D%5D%7D` | ||||
|          | ||||
|         tabsWithAboutMc.push({ | ||||
|  |  | |||
|  | @ -20,6 +20,7 @@ import {OsmObject, OsmWay} from "../../Logic/Osm/OsmObject"; | |||
| import PresetConfig from "../../Models/ThemeConfig/PresetConfig"; | ||||
| import FilteredLayer from "../../Models/FilteredLayer"; | ||||
| import {And} from "../../Logic/Tags/And"; | ||||
| import {BBox} from "../../Logic/GeoOperations"; | ||||
| 
 | ||||
| /* | ||||
| * The SimpleAddUI is a single panel, which can have multiple states: | ||||
|  | @ -39,8 +40,6 @@ interface PresetInfo extends PresetConfig { | |||
| export default class SimpleAddUI extends Toggle { | ||||
| 
 | ||||
|     constructor(isShown: UIEventSource<boolean>) { | ||||
| 
 | ||||
| 
 | ||||
|         const loginButton = new SubtleButton(Svg.osm_logo_ui(), Translations.t.general.add.pleaseLogin.Clone()) | ||||
|             .onClick(() => State.state.osmConnection.AttemptLogin()); | ||||
|         const readYourMessages = new Combine([ | ||||
|  | @ -52,7 +51,8 @@ export default class SimpleAddUI extends Toggle { | |||
| 
 | ||||
|         const selectedPreset = new UIEventSource<PresetInfo>(undefined); | ||||
|         isShown.addCallback(_ => selectedPreset.setData(undefined)) // Clear preset selection when the UI is closed/opened
 | ||||
| 
 | ||||
|         State.state.LastClickLocation.addCallback( _ => selectedPreset.setData(undefined)) | ||||
|          | ||||
|         const presetsOverview = SimpleAddUI.CreateAllPresetsPanel(selectedPreset) | ||||
| 
 | ||||
| 
 | ||||
|  | @ -82,11 +82,7 @@ export default class SimpleAddUI extends Toggle { | |||
|                                     return true; | ||||
|                                 }) | ||||
|                             } | ||||
| 
 | ||||
| 
 | ||||
|                         }, | ||||
| 
 | ||||
| 
 | ||||
|                         () => { | ||||
|                             selectedPreset.setData(undefined) | ||||
|                         }) | ||||
|  | @ -98,9 +94,9 @@ export default class SimpleAddUI extends Toggle { | |||
|             new Toggle( | ||||
|                 new Toggle( | ||||
|                     new Toggle( | ||||
|                         Translations.t.general.add.stillLoading.Clone().SetClass("alert"), | ||||
|                         addUi, | ||||
|                         State.state.featurePipeline.runningQuery | ||||
|                         Translations.t.general.add.stillLoading.Clone().SetClass("alert"), | ||||
|                         State.state.featurePipeline.somethingLoaded | ||||
|                     ), | ||||
|                     Translations.t.general.add.zoomInFurther.Clone().SetClass("alert"), | ||||
|                     State.state.locationControl.map(loc => loc.zoom >= Constants.userJourney.minZoomLevelToAddNewPoints) | ||||
|  | @ -126,6 +122,7 @@ export default class SimpleAddUI extends Toggle { | |||
|         let location = State.state.LastClickLocation; | ||||
|         let preciseInput: LocationInput = undefined | ||||
|         if (preset.preciseInput !== undefined) { | ||||
|             // We uncouple the event source
 | ||||
|             const locationSrc = new UIEventSource({ | ||||
|                 lat: location.data.lat, | ||||
|                 lon: location.data.lon, | ||||
|  | @ -137,24 +134,48 @@ export default class SimpleAddUI extends Toggle { | |||
|                 backgroundLayer = AvailableBaseLayers.SelectBestLayerAccordingTo(locationSrc, new UIEventSource<string | string[]>(preset.preciseInput.preferredBackground)) | ||||
|             } | ||||
| 
 | ||||
|             let features: UIEventSource<{ feature: any }[]> = undefined | ||||
|             let snapToFeatures: UIEventSource<{ feature: any }[]> = undefined | ||||
|             let mapBounds: UIEventSource<BBox> = undefined | ||||
|             if (preset.preciseInput.snapToLayers) { | ||||
|                 // We have to snap to certain layers.
 | ||||
|                 // Lets fetch tehm
 | ||||
|                 const asSet = new Set(preset.preciseInput.snapToLayers) | ||||
|                 features = State.state.featurePipeline.features.map(f => f.filter(feat => asSet.has(feat.feature._matching_layer_id))) | ||||
|                 snapToFeatures = new UIEventSource<{ feature: any }[]>([]) | ||||
|                 mapBounds = new UIEventSource<BBox>(undefined) | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|             const tags = TagUtils.KVtoProperties(preset.tags ?? []); | ||||
|             preciseInput = new LocationInput({ | ||||
|                 mapBackground: backgroundLayer, | ||||
|                 centerLocation: locationSrc, | ||||
|                 snapTo: features, | ||||
|                 snapTo: snapToFeatures, | ||||
|                 snappedPointTags: tags, | ||||
|                 maxSnapDistance: preset.preciseInput.maxSnapDistance | ||||
| 
 | ||||
|                 maxSnapDistance: preset.preciseInput.maxSnapDistance, | ||||
|                 bounds: mapBounds | ||||
|             }) | ||||
|             preciseInput.SetClass("h-32 rounded-xl overflow-hidden border border-gray").SetStyle("height: 12rem;") | ||||
| 
 | ||||
| 
 | ||||
|             if (preset.preciseInput.snapToLayers) { | ||||
|                 // We have to snap to certain layers.
 | ||||
|                 // Lets fetch them
 | ||||
|                  | ||||
|                 let loadedBbox : BBox= undefined | ||||
|                 mapBounds?.addCallbackAndRunD(bbox => { | ||||
|                     if(loadedBbox !== undefined && bbox.isContainedIn(loadedBbox)){ | ||||
|                         // All is already there
 | ||||
|                         // return;
 | ||||
|                     } | ||||
| 
 | ||||
|                     bbox = bbox.pad(2); | ||||
|                     loadedBbox = bbox; | ||||
|                     const allFeatures: {feature: any}[] = [] | ||||
|                     preset.preciseInput.snapToLayers.forEach(layerId => { | ||||
|                        State.state.featurePipeline.GetFeaturesWithin(layerId, bbox).forEach(feats => allFeatures.push(...feats.map(f => ({feature :f})))) | ||||
|                     }) | ||||
|                     snapToFeatures.setData(allFeatures) | ||||
|                 }) | ||||
|             } | ||||
|              | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue