feature: expose _referencing_ways/snap_to_layer in preset icon

This commit is contained in:
Pieter Vander Vennet 2023-03-15 14:25:24 +01:00
parent 6f4288476e
commit 08565dd20e
3 changed files with 15 additions and 8 deletions

View file

@ -69,7 +69,7 @@ export class ReferencingWaysMetaTagger extends SimpleMetaTagger {
{
keys: ["_referencing_ways"],
isLazy: true,
doc: "_referencing_ways contains - for a node - which ways use this this node as point in their geometry. ",
doc: "_referencing_ways contains - for a node - which ways use this this node as point in their geometry. If the preset has 'snapToLayer' defined, the icon will be calculated based on the preset tags with `_referencing_ways=[way/-1]` added.",
},
(feature, _, __, state) => {
if (!ReferencingWaysMetaTagger.enabled) {

View file

@ -5,7 +5,7 @@ import { TagUtils } from "../../Logic/Tags/TagUtils"
import { Utils } from "../../Utils"
import Svg from "../../Svg"
import WithContextLoader from "./WithContextLoader"
import { UIEventSource } from "../../Logic/UIEventSource"
import { Store, UIEventSource } from "../../Logic/UIEventSource"
import BaseUIElement from "../../UI/BaseUIElement"
import { FixedUiElement } from "../../UI/Base/FixedUiElement"
import Img from "../../UI/Base/Img"
@ -164,7 +164,7 @@ export default class PointRenderingConfig extends WithContextLoader {
return PointRenderingConfig.FromHtmlMulti(htmlDefs, rotation, false, defaultPin)
}
public GetSimpleIcon(tags: UIEventSource<any>): BaseUIElement {
public GetSimpleIcon(tags: Store<any>): BaseUIElement {
const self = this
if (this.icon === undefined) {
return undefined
@ -175,7 +175,7 @@ export default class PointRenderingConfig extends WithContextLoader {
}
public GenerateLeafletStyle(
tags: UIEventSource<any>,
tags: Store<any>,
clickable: boolean,
options?: {
noSize?: false | boolean
@ -272,7 +272,7 @@ export default class PointRenderingConfig extends WithContextLoader {
}
}
private GetBadges(tags: UIEventSource<any>): BaseUIElement {
private GetBadges(tags: Store<any>): BaseUIElement {
if (this.iconBadges.length === 0) {
return undefined
}
@ -304,7 +304,7 @@ export default class PointRenderingConfig extends WithContextLoader {
).SetClass("absolute bottom-0 right-1/3 h-1/2 w-0")
}
private GetLabel(tags: UIEventSource<any>): BaseUIElement {
private GetLabel(tags: Store<any>): BaseUIElement {
if (this.label === undefined) {
return undefined
}

View file

@ -1,7 +1,7 @@
/**
* Asks to add a feature at the last clicked location, at least if zoom is sufficient
*/
import { Store, UIEventSource } from "../../Logic/UIEventSource"
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
import Svg from "../../Svg"
import { SubtleButton } from "../Base/SubtleButton"
import Combine from "../Base/Combine"
@ -286,9 +286,16 @@ export default class SimpleAddUI extends LoginToggle {
const presets = layer.layerDef.presets
for (const preset of presets) {
const tags = TagUtils.KVtoProperties(preset.tags ?? [])
const isSnapping = preset.preciseInput.snapToLayers?.length > 0
let icon: () => BaseUIElement = () =>
layer.layerDef.mapRendering[0]
.GenerateLeafletStyle(new UIEventSource<any>(tags), false)
.GenerateLeafletStyle(
new ImmutableStore<any>(
isSnapping ? tags : { _referencing_ways: ["way/-1"], ...tags }
),
false,
{ noSize: true }
)
.html.SetClass("w-12 h-12 block relative")
const presetInfo: PresetInfo = {
layerToAddTo: layer,