forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Store, UIEventSource } from "../UIEventSource"
 | |
| import Locale from "../../UI/i18n/Locale"
 | |
| import Combine from "../../UI/Base/Combine"
 | |
| import { Utils } from "../../Utils"
 | |
| import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
 | |
| import { Feature } from "geojson"
 | |
| import FeaturePropertiesStore from "../FeatureSource/Actors/FeaturePropertiesStore"
 | |
| import SvelteUIElement from "../../UI/Base/SvelteUIElement"
 | |
| import TagRenderingAnswer from "../../UI/Popup/TagRendering/TagRenderingAnswer.svelte"
 | |
| import { SpecialVisualizationState } from "../../UI/SpecialVisualization"
 | |
| 
 | |
| export default class TitleHandler {
 | |
|     constructor(
 | |
|         selectedElement: Store<Feature>,
 | |
|         selectedLayer: Store<LayerConfig>,
 | |
|         allElements: FeaturePropertiesStore,
 | |
|         state: SpecialVisualizationState
 | |
|     ) {
 | |
|         const currentTitle: Store<string> = selectedElement.map(
 | |
|             (selected) => {
 | |
|                 const defaultTitle = state.layout?.title?.txt ?? "MapComplete"
 | |
| 
 | |
|                 if (selected === undefined || selectedLayer.data === undefined) {
 | |
|                     return defaultTitle
 | |
|                 }
 | |
| 
 | |
|                 const tags = selected.properties
 | |
|                 const layer = selectedLayer.data
 | |
|                 if (layer.title === undefined) {
 | |
|                     return defaultTitle
 | |
|                 }
 | |
|                 const tagsSource =
 | |
|                     allElements.getStore(tags.id) ?? new UIEventSource<Record<string, string>>(tags)
 | |
|                 const title = new SvelteUIElement(TagRenderingAnswer, {
 | |
|                     tags: tagsSource,
 | |
|                     state,
 | |
|                     config: layer.title,
 | |
|                     selectedElement: selectedElement.data,
 | |
|                     layer,
 | |
|                 })
 | |
|                 return (
 | |
|                     new Combine([defaultTitle, " | ", title]).ConstructElement()?.textContent ??
 | |
|                     defaultTitle
 | |
|                 )
 | |
|             },
 | |
|             [Locale.language, selectedLayer]
 | |
|         )
 | |
| 
 | |
|         currentTitle.addCallbackAndRunD((title) => {
 | |
|             if (Utils.runningFromConsole) {
 | |
|                 return
 | |
|             }
 | |
|             try {
 | |
|                 document.title = title
 | |
|             } catch (e) {
 | |
|                 console.error(e)
 | |
|             }
 | |
|         })
 | |
|     }
 | |
| }
 |