forked from MapComplete/MapComplete
		
	UX: allow ',' in input of floats, kerb height now accepts pfloat instead of pnat
This commit is contained in:
		
							parent
							
								
									e2e3e4b51d
								
							
						
					
					
						commit
						e7d3cb1886
					
				
					 3 changed files with 28 additions and 7 deletions
				
			
		|  | @ -629,7 +629,7 @@ | |||
|           "es": "Altura del bordillo de la puerta", | ||||
|           "it": "Altezza del gradino della porta" | ||||
|         }, | ||||
|         "type": "pnat" | ||||
|         "type": "pfloat" | ||||
|       }, | ||||
|       "mappings": [ | ||||
|         { | ||||
|  |  | |||
|  | @ -6,15 +6,28 @@ import { ValidatorType } from "../Validators" | |||
| export default class FloatValidator extends Validator { | ||||
|     inputmode: "decimal" = "decimal" as const | ||||
| 
 | ||||
|     protected static readonly formattingHasComma = ("" + 1.42).indexOf(",") > 0 | ||||
| 
 | ||||
|     constructor(name?: ValidatorType, explanation?: string) { | ||||
|         super(name ?? "float", explanation ?? "A decimal number", "decimal") | ||||
|     } | ||||
| 
 | ||||
|     isValid(str) { | ||||
|     /** | ||||
|      * | ||||
|      * new FloatValidator().isValid("0,2") // => true
 | ||||
|      */ | ||||
|     isValid(str: string) { | ||||
|         console.log("Is valid?", str, FloatValidator.formattingHasComma) | ||||
|         if (!FloatValidator.formattingHasComma) { | ||||
|             str = str.replace(",", ".") | ||||
|         } | ||||
|         return !isNaN(Number(str)) && !str.endsWith(".") && !str.endsWith(",") | ||||
|     } | ||||
| 
 | ||||
|     reformat(str): string { | ||||
|     reformat(str: string): string { | ||||
|         if (!FloatValidator.formattingHasComma) { | ||||
|             str = str.replace(",", ".") | ||||
|         } | ||||
|         return "" + Number(str) | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,14 +1,22 @@ | |||
| import { Translation } from "../../i18n/Translation" | ||||
| import Translations from "../../i18n/Translations" | ||||
| import { Validator } from "../Validator" | ||||
| import FloatValidator from "./FloatValidator" | ||||
| 
 | ||||
| export default class PFloatValidator extends Validator { | ||||
| export default class PFloatValidator extends FloatValidator { | ||||
|     constructor() { | ||||
|         super("pfloat", "A positive decimal number or zero") | ||||
|     } | ||||
| 
 | ||||
|     isValid = (str) => | ||||
|         !isNaN(Number(str)) && Number(str) >= 0 && !str.endsWith(".") && !str.endsWith(",") | ||||
|     isValid(str: string) { | ||||
|         if (!super.isValid(str)) { | ||||
|             return false | ||||
|         } | ||||
|         if (!FloatValidator.formattingHasComma) { | ||||
|             str = str.replace(",", ".") | ||||
|         } | ||||
|         const n = Number(str) | ||||
|         return n >= 0 | ||||
|     } | ||||
| 
 | ||||
|     getFeedback(s: string): Translation { | ||||
|         const spr = super.getFeedback(s) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue