forked from MapComplete/MapComplete
		
	Fix: a freeform key will mimick a mapping if appropriate (and avoid the 'addExtraTags')
This commit is contained in:
		
							parent
							
								
									4aefd43be7
								
							
						
					
					
						commit
						68ea4e3d9f
					
				
					 1 changed files with 20 additions and 1 deletions
				
			
		|  | @ -628,6 +628,14 @@ export default class TagRenderingConfig { | |||
|      * config.constructChangeSpecification("", undefined, undefined, {}) // => undefined
 | ||||
|      * config.constructChangeSpecification("5", undefined, undefined, {}).optimize() // => new Tag("capacity", "5")
 | ||||
|      * | ||||
|      * // Should pick a mapping, even if freeform is used
 | ||||
|      * const config = new TagRenderingConfig({"id": "shop-types", render: "Shop type is {shop}", freeform: {key: "shop", addExtraTags:["fixme=freeform shop type used"]}, mappings:[{if: "shop=second_hand", then: "Second hand shop"}]}) | ||||
|      * config.constructChangeSpecification("freeform", 1, undefined, {}).asHumanString(false,  false, {}) // => "shop=freeform & fixme=freeform shop type used"
 | ||||
|      * config.constructChangeSpecification("freeform", undefined, undefined, {}).asHumanString(false,  false, {}) // => "shop=freeform & fixme=freeform shop type used"
 | ||||
|      * config.constructChangeSpecification("second_hand", 1, undefined, {}).asHumanString(false,  false, {}) // => "shop=second_hand"
 | ||||
|      * | ||||
|      * | ||||
|      * | ||||
|      * @param freeformValue The freeform value which will be applied as 'freeform.key'. Ignored if 'freeform.key' is not set | ||||
|      * | ||||
|      * @param singleSelectedMapping (Only used if multiAnswer == false): the single mapping to apply. Use (mappings.length) for the freeform | ||||
|  | @ -667,11 +675,22 @@ export default class TagRenderingConfig { | |||
|                 this.mappings.length == 0 || | ||||
|                 (singleSelectedMapping === this.mappings.length && !this.multiAnswer)) | ||||
|         ) { | ||||
|             const freeformOnly = { [this.freeform.key]: freeformValue } | ||||
|             const matchingMapping = this.mappings?.find((m) => m.if.matchesProperties(freeformOnly)) | ||||
|             if (matchingMapping) { | ||||
|                 return new And([matchingMapping.if, ...(matchingMapping.addExtraTags ?? [])]) | ||||
|             } | ||||
|             // Either no mappings, or this is a radio-button selected freeform value
 | ||||
|             return new And([ | ||||
|             const tag = new And([ | ||||
|                 new Tag(this.freeform.key, freeformValue), | ||||
|                 ...(this.freeform.addExtraTags ?? []), | ||||
|             ]) | ||||
|             const newProperties = tag.applyOn(currentProperties) | ||||
|             if (this.invalidValues?.matchesProperties(newProperties)) { | ||||
|                 return undefined | ||||
|             } | ||||
| 
 | ||||
|             return tag | ||||
|         } | ||||
| 
 | ||||
|         if (this.multiAnswer) { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue