Allow to delete freeform keys again, partial fix of #2008

This commit is contained in:
Pieter Vander Vennet 2024-07-09 13:06:56 +02:00
parent 4df2d34f02
commit d8da61ec07
5 changed files with 56 additions and 17 deletions

View file

@ -133,7 +133,16 @@ export interface MappingConfigJson {
* question: What extra tags should be added to the object if this object is chosen?
* type: simple_tag
*
* If chosen as answer, these tags will be applied onto the object, together with the tags from the `if`
* If chosen as answer, these tags will be applied onto the object, together with the tags from the `if`.
* Note that if the contributor picks this mapping, saves and then changes their mind and uses a different mapping,
* the extraTags will reside.
* E.g. when picking `memorial:type=bench`, then `amenity=bench` will also be applied.
* If someone later on changes the type to `memorial:statue`, `amenity=bench` will stay onto the object
* (which is the desired behaviour, see e.g. for https://www.openstreetmap.org/node/5620038478)
* Use 'ifNot' to explicitly remove an tag if this is important
*
* If someone marks the question as 'unknown', the extra tags will not be erased
*
* Not compatible with multiAnswer.
*
* This can be used e.g. to erase other keys which indicate the 'not' value:

View file

@ -911,6 +911,24 @@ export default class TagRenderingConfig {
return Utils.NoNull(tags)
}
/**
* The keys that should be erased if one has to revert to 'unknown'.
* Might give undefined
*/
public settableKeys(): string[] | undefined {
const toDelete = new Set<string>()
if(this.freeform){
toDelete.add(this.freeform.key)
}
for (const mapping of this.mappings) {
for (const usedKey of mapping.if.usedKeys()) {
toDelete.add(usedKey)
}
}
return Array.from(toDelete)
}
}
export class TagRenderingConfigUtils {