forked from MapComplete/MapComplete
		
	Huge refactoring of state and initial UI setup
This commit is contained in:
		
							parent
							
								
									4e43673de5
								
							
						
					
					
						commit
						eff6b5bfad
					
				
					 37 changed files with 5232 additions and 4907 deletions
				
			
		
							
								
								
									
										107
									
								
								Logic/State/UserRelatedState.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								Logic/State/UserRelatedState.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,107 @@ | |||
| import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; | ||||
| import {OsmConnection} from "../Osm/OsmConnection"; | ||||
| import {MangroveIdentity} from "../Web/MangroveReviews"; | ||||
| import {UIEventSource} from "../UIEventSource"; | ||||
| import {QueryParameters} from "../Web/QueryParameters"; | ||||
| import InstalledThemes from "../Actors/InstalledThemes"; | ||||
| import {LocalStorageSource} from "../Web/LocalStorageSource"; | ||||
| import {Utils} from "../../Utils"; | ||||
| import Locale from "../../UI/i18n/Locale"; | ||||
| import ElementsState from "./ElementsState"; | ||||
| import SelectedElementTagsUpdater from "../Actors/SelectedElementTagsUpdater"; | ||||
| 
 | ||||
| /** | ||||
|  * The part of the state which keeps track of user-related stuff, e.g. the OSM-connection, | ||||
|  * which layers they enabled, ... | ||||
|  */ | ||||
| export default class UserRelatedState extends ElementsState { | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      The user credentials | ||||
|      */ | ||||
|     public osmConnection: OsmConnection; | ||||
|     /** | ||||
|      * The key for mangrove | ||||
|      */ | ||||
|     public mangroveIdentity: MangroveIdentity; | ||||
|     /** | ||||
|      * Which layers are enabled in the personal theme | ||||
|      */ | ||||
|     public favouriteLayers: UIEventSource<string[]>; | ||||
| 
 | ||||
|     /** | ||||
|      * WHich other themes the user previously visited | ||||
|      */ | ||||
|     public installedThemes: UIEventSource<{ layout: LayoutConfig; definition: string }[]>; | ||||
| 
 | ||||
|     constructor(layoutToUse: LayoutConfig) { | ||||
|         super(layoutToUse); | ||||
| 
 | ||||
|         this.osmConnection = new OsmConnection({ | ||||
|             changes: this.changes, | ||||
|             dryRun: this.featureSwitchIsTesting.data, | ||||
|             fakeUser: this.featureSwitchFakeUser.data, | ||||
|             allElements: this.allElements, | ||||
|             oauth_token: QueryParameters.GetQueryParameter( | ||||
|                 "oauth_token", | ||||
|                 undefined, | ||||
|                 "Used to complete the login" | ||||
|             ), | ||||
|             layoutName: layoutToUse?.id, | ||||
|             osmConfiguration: <'osm' | 'osm-test'>this.featureSwitchApiURL.data | ||||
|         }) | ||||
| 
 | ||||
|         this.mangroveIdentity = new MangroveIdentity( | ||||
|             this.osmConnection.GetLongPreference("identity", "mangrove") | ||||
|         ); | ||||
| 
 | ||||
|         if (layoutToUse?.hideFromOverview) { | ||||
|             this.osmConnection | ||||
|                 .GetPreference("hidden-theme-" + layoutToUse?.id + "-enabled") | ||||
|                 .setData("true"); | ||||
|         } | ||||
| 
 | ||||
|         this.installedThemes = new InstalledThemes( | ||||
|             this.osmConnection | ||||
|         ).installedThemes; | ||||
| 
 | ||||
|         // Important: the favourite layers are initialized _after_ the installed themes, as these might contain an installedTheme
 | ||||
|         this.favouriteLayers = LocalStorageSource.Get("favouriteLayers") | ||||
|             .syncWith(this.osmConnection.GetLongPreference("favouriteLayers")) | ||||
|             .map( | ||||
|                 (str) => Utils.Dedup(str?.split(";")) ?? [], | ||||
|                 [], | ||||
|                 (layers) => Utils.Dedup(layers)?.join(";") | ||||
|             ); | ||||
| 
 | ||||
| 
 | ||||
|         this.InitializeLanguage(); | ||||
|         new SelectedElementTagsUpdater(this) | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     private InitializeLanguage() { | ||||
|         const layoutToUse = this.layoutToUse; | ||||
|         Locale.language.syncWith(this.osmConnection.GetPreference("language")); | ||||
|         Locale.language | ||||
|             .addCallback((currentLanguage) => { | ||||
|                 if (layoutToUse === undefined) { | ||||
|                     return; | ||||
|                 } | ||||
|                 if (this.layoutToUse.language.indexOf(currentLanguage) < 0) { | ||||
|                     console.log( | ||||
|                         "Resetting language to", | ||||
|                         layoutToUse.language[0], | ||||
|                         "as", | ||||
|                         currentLanguage, | ||||
|                         " is unsupported" | ||||
|                     ); | ||||
|                     // The current language is not supported -> switch to a supported one
 | ||||
|                     Locale.language.setData(layoutToUse.language[0]); | ||||
|                 } | ||||
|             }) | ||||
|             .ping(); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue