| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  | import { UIElement } from "../UIElement" | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  | import BaseUIElement from "../BaseUIElement" | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  | import { Store } from "../../Logic/UIEventSource" | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  | import ExtraLinkConfig from "../../Models/ThemeConfig/ExtraLinkConfig" | 
					
						
							|  |  |  | import Img from "../Base/Img" | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  | import { SubtleButton } from "../Base/SubtleButton" | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  | import Toggle from "../Input/Toggle" | 
					
						
							|  |  |  | import Locale from "../i18n/Locale" | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  | import { Utils } from "../../Utils" | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  | import Svg from "../../Svg" | 
					
						
							|  |  |  | import Translations from "../i18n/Translations" | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  | import { Translation } from "../i18n/Translation" | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-05 02:03:41 +02:00
										 |  |  | interface ExtraLinkButtonState { | 
					
						
							|  |  |  |     layout: { id: string; title: Translation } | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |     featureSwitches: { featureSwitchWelcomeMessage: Store<boolean> } | 
					
						
							| 
									
										
										
										
											2023-05-05 02:03:41 +02:00
										 |  |  |     mapProperties: { | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |         location: Store<{ lon: number; lat: number }> | 
					
						
							| 
									
										
										
										
											2023-05-05 02:03:41 +02:00
										 |  |  |         zoom: Store<number> | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  | export default class ExtraLinkButton extends UIElement { | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |     private readonly _config: ExtraLinkConfig | 
					
						
							| 
									
										
										
										
											2023-05-05 02:03:41 +02:00
										 |  |  |     private readonly state: ExtraLinkButtonState | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |     constructor(state: ExtraLinkButtonState, config: ExtraLinkConfig) { | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |         super() | 
					
						
							|  |  |  |         this.state = state | 
					
						
							|  |  |  |         this._config = config | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  |     protected InnerRender(): BaseUIElement { | 
					
						
							|  |  |  |         if (this._config === undefined) { | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |             return undefined | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |         const c = this._config | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const isIframe = window !== window.top | 
					
						
							| 
									
										
										
										
											2022-12-13 03:46:53 +01:00
										 |  |  |         if (c.requirements?.has("iframe") && !isIframe) { | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |             return undefined | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-13 03:46:53 +01:00
										 |  |  |         if (c.requirements?.has("no-iframe") && isIframe) { | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |             return undefined | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  |         let link: BaseUIElement | 
					
						
							| 
									
										
										
										
											2023-05-05 02:03:41 +02:00
										 |  |  |         const theme = this.state.layout?.id ?? "" | 
					
						
							| 
									
										
										
										
											2022-07-01 00:16:05 +02:00
										 |  |  |         const basepath = window.location.host | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |         const href = this.state.mapProperties.location.map( | 
					
						
							|  |  |  |             (loc) => { | 
					
						
							|  |  |  |                 const subs = { | 
					
						
							|  |  |  |                     ...loc, | 
					
						
							|  |  |  |                     theme: theme, | 
					
						
							|  |  |  |                     basepath, | 
					
						
							|  |  |  |                     language: Locale.language.data, | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 return Utils.SubstituteKeys(c.href, subs) | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             [this.state.mapProperties.zoom] | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 01:55:21 +02:00
										 |  |  |         let img: BaseUIElement = Svg.pop_out_svg() | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  |         if (c.icon !== undefined) { | 
					
						
							|  |  |  |             img = new Img(c.icon).SetClass("h-6") | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         let text: Translation | 
					
						
							|  |  |  |         if (c.text === undefined) { | 
					
						
							| 
									
										
										
										
											2022-04-04 05:12:14 +02:00
										 |  |  |             text = Translations.t.general.screenToSmall.Subs({ | 
					
						
							| 
									
										
										
										
											2023-05-05 02:03:41 +02:00
										 |  |  |                 theme: this.state.layout.title, | 
					
						
							| 
									
										
										
										
											2022-04-04 05:12:14 +02:00
										 |  |  |             }) | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             text = c.text.Clone() | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         link = new SubtleButton(img, text, { | 
					
						
							| 
									
										
										
										
											2022-07-01 00:16:05 +02:00
										 |  |  |             url: href, | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  |             newTab: c.newTab, | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-13 03:46:53 +01:00
										 |  |  |         if (c.requirements?.has("no-welcome-message")) { | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |             link = new Toggle( | 
					
						
							|  |  |  |                 undefined, | 
					
						
							|  |  |  |                 link, | 
					
						
							|  |  |  |                 this.state.featureSwitches.featureSwitchWelcomeMessage | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-13 03:46:53 +01:00
										 |  |  |         if (c.requirements?.has("welcome-message")) { | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |             link = new Toggle( | 
					
						
							|  |  |  |                 link, | 
					
						
							|  |  |  |                 undefined, | 
					
						
							|  |  |  |                 this.state.featureSwitches.featureSwitchWelcomeMessage | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-03-10 23:18:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-14 04:48:33 +01:00
										 |  |  |         return link | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |