Refactoring: simplify title handler

This commit is contained in:
Pieter Vander Vennet 2024-09-27 03:19:31 +02:00
parent 0be7c64ea1
commit 37c523ebf4
2 changed files with 15 additions and 23 deletions

View file

@ -1,27 +1,22 @@
import { Store, UIEventSource } from "../UIEventSource"
import { Store } 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>,
allElements: FeaturePropertiesStore,
state: SpecialVisualizationState
) {
const currentTitle: Store<string> = selectedElement.map(
(selected) => {
const defaultTitle = state.layout?.title?.txt ?? "MapComplete"
const lng = Locale.language.data
const defaultTitle = state.layout?.title?.textFor(lng) ?? "MapComplete"
if (selected === undefined) {
return defaultTitle
}
const layer = state.getMatchingLayer(selected.properties)
const layer = state.layout.getMatchingLayer(selected.properties)
if (layer === undefined) {
return defaultTitle
}
@ -30,19 +25,16 @@ export default class TitleHandler {
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
)
const toRender = Utils.NoNull(layer?.title?.GetRenderValues(tags))
const titleUnsubbed = toRender[0]?.then?.textFor(lng)
if (titleUnsubbed === undefined) {
return defaultTitle
}
const title = Utils.SubstituteKeys(titleUnsubbed, tags)
const el = document.createElement("span")
el.innerHTML = title
return el.innerText + " | " + defaultTitle
},
[Locale.language]
)

View file

@ -954,7 +954,7 @@ export default class ThemeViewState implements SpecialVisualizationState {
})
new ThemeViewStateHashActor(this)
new MetaTagging(this)
new TitleHandler(this.selectedElement, this.featureProperties, this)
new TitleHandler(this.selectedElement, this)
new ChangeToElementsActor(this.changes, this.featureProperties)
new PendingChangesUploader(this.changes, this.selectedElement, this.imageUploadManager)
new SelectedElementTagsUpdater(this)