| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | import { VariableUiElement } from "../Base/VariableUIElement" | 
					
						
							|  |  |  | import Svg from "../../Svg" | 
					
						
							|  |  |  | import Combine from "../Base/Combine" | 
					
						
							|  |  |  | import { FixedUiElement } from "../Base/FixedUiElement" | 
					
						
							|  |  |  | import LanguagePicker from "../LanguagePicker" | 
					
						
							|  |  |  | import Translations from "../i18n/Translations" | 
					
						
							|  |  |  | import Link from "../Base/Link" | 
					
						
							|  |  |  | import Toggle from "../Input/Toggle" | 
					
						
							|  |  |  | import Img from "../Base/Img" | 
					
						
							|  |  |  | import MapState from "../../Logic/State/MapState" | 
					
						
							|  |  |  | import { LoginToggle } from "../Popup/LoginButton" | 
					
						
							| 
									
										
										
										
											2021-01-04 04:06:21 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-15 15:42:09 +01:00
										 |  |  | export default class UserBadge extends LoginToggle { | 
					
						
							| 
									
										
										
										
											2021-10-15 05:20:02 +02:00
										 |  |  |     constructor(state: MapState) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         const userDetails = state.osmConnection.userDetails | 
					
						
							|  |  |  |         const logout = Svg.logout_svg().onClick(() => { | 
					
						
							|  |  |  |             state.osmConnection.LogOut() | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const userBadge = new VariableUiElement( | 
					
						
							|  |  |  |             userDetails.map((user) => { | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     const homeButton = new VariableUiElement( | 
					
						
							|  |  |  |                         userDetails.map((userinfo) => { | 
					
						
							|  |  |  |                             if (userinfo.home) { | 
					
						
							|  |  |  |                                 return Svg.home_svg() | 
					
						
							|  |  |  |                             } | 
					
						
							|  |  |  |                             return " " | 
					
						
							|  |  |  |                         }) | 
					
						
							|  |  |  |                     ).onClick(() => { | 
					
						
							|  |  |  |                         const home = state.osmConnection.userDetails.data?.home | 
					
						
							|  |  |  |                         if (home === undefined) { | 
					
						
							|  |  |  |                             return | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |                         } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                         state.leafletMap.data?.setView([home.lat, home.lon], 16) | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |                     }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     const linkStyle = "flex items-baseline" | 
					
						
							|  |  |  |                     const languagePicker = ( | 
					
						
							|  |  |  |                         new LanguagePicker(state.layoutToUse.language, "") ?? new FixedUiElement("") | 
					
						
							|  |  |  |                     ).SetStyle("width:min-content;") | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     let messageSpan = new Link( | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |                         new Combine([Svg.envelope, "" + user.totalMessages]).SetClass(linkStyle), | 
					
						
							| 
									
										
										
										
											2021-06-30 18:48:23 +02:00
										 |  |  |                         `${user.backend}/messages/inbox`, | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |                         true | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     const csCount = new Link( | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |                         new Combine([Svg.star, "" + user.csCount]).SetClass(linkStyle), | 
					
						
							| 
									
										
										
										
											2021-06-30 18:48:23 +02:00
										 |  |  |                         `${user.backend}/user/${user.name}/history`, | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |                         true | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     ) | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     if (user.unreadMessages > 0) { | 
					
						
							|  |  |  |                         messageSpan = new Link( | 
					
						
							|  |  |  |                             new Combine([Svg.envelope, "" + user.unreadMessages]), | 
					
						
							|  |  |  |                             `${user.backend}/messages/inbox`, | 
					
						
							|  |  |  |                             true | 
					
						
							|  |  |  |                         ).SetClass("alert") | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     let dryrun = new Toggle( | 
					
						
							|  |  |  |                         new FixedUiElement("TESTING").SetClass("alert font-xs p-0 max-h-4"), | 
					
						
							|  |  |  |                         undefined, | 
					
						
							|  |  |  |                         state.featureSwitchIsTesting | 
					
						
							|  |  |  |                     ) | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     const settings = new Link( | 
					
						
							|  |  |  |                         Svg.gear, | 
					
						
							|  |  |  |                         `${user.backend}/user/${encodeURIComponent(user.name)}/account`, | 
					
						
							|  |  |  |                         true | 
					
						
							|  |  |  |                     ) | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     const userName = new Link( | 
					
						
							|  |  |  |                         new FixedUiElement(user.name), | 
					
						
							|  |  |  |                         `${user.backend}/user/${user.name}`, | 
					
						
							|  |  |  |                         true | 
					
						
							|  |  |  |                     ) | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     const userStats = new Combine([ | 
					
						
							|  |  |  |                         homeButton, | 
					
						
							|  |  |  |                         settings, | 
					
						
							|  |  |  |                         messageSpan, | 
					
						
							|  |  |  |                         csCount, | 
					
						
							|  |  |  |                         languagePicker, | 
					
						
							|  |  |  |                         logout, | 
					
						
							|  |  |  |                     ]).SetClass("userstats") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                     const usertext = new Combine([ | 
					
						
							|  |  |  |                         new Combine([userName, dryrun]).SetClass("flex justify-end w-full"), | 
					
						
							|  |  |  |                         userStats, | 
					
						
							|  |  |  |                     ]).SetClass("flex flex-col sm:w-auto sm:pl-2 overflow-hidden w-0") | 
					
						
							|  |  |  |                     const userIcon = ( | 
					
						
							|  |  |  |                         user.img === undefined ? Svg.osm_logo_ui() : new Img(user.img) | 
					
						
							|  |  |  |                     ) | 
					
						
							|  |  |  |                         .SetClass( | 
					
						
							|  |  |  |                             "rounded-full opacity-0 m-0 p-0 duration-500 w-16 min-width-16 h16 float-left" | 
					
						
							|  |  |  |                         ) | 
					
						
							| 
									
										
										
										
											2021-07-03 20:18:52 +02:00
										 |  |  |                         .onClick(() => { | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |                             if (usertext.HasClass("w-0")) { | 
					
						
							| 
									
										
										
										
											2021-07-03 20:18:52 +02:00
										 |  |  |                                 usertext.RemoveClass("w-0") | 
					
						
							|  |  |  |                                 usertext.SetClass("w-min pl-2") | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |                             } else { | 
					
						
							| 
									
										
										
										
											2021-07-03 20:18:52 +02:00
										 |  |  |                                 usertext.RemoveClass("w-min") | 
					
						
							|  |  |  |                                 usertext.RemoveClass("pl-2") | 
					
						
							|  |  |  |                                 usertext.SetClass("w-0") | 
					
						
							|  |  |  |                             } | 
					
						
							|  |  |  |                         }) | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     return new Combine([usertext, userIcon]).SetClass("h-16 flex bg-white") | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2020-07-20 09:57:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         super( | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             new Combine([ | 
					
						
							|  |  |  |                 userBadge.SetClass("inline-block m-0 w-full").SetStyle("pointer-events: all"), | 
					
						
							|  |  |  |             ]).SetClass("shadow rounded-full h-min overflow-hidden block w-full md:w-max"), | 
					
						
							| 
									
										
										
										
											2022-02-15 15:42:09 +01:00
										 |  |  |             Translations.t.general.loginWithOpenStreetMap, | 
					
						
							|  |  |  |             state | 
					
						
							| 
									
										
										
										
											2021-06-12 02:58:32 +02:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2020-06-24 00:35:19 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-09-22 19:56:36 +02:00
										 |  |  | } |