MapComplete/src/UI/InputElement/Validators/NatValidator.ts

37 lines
1 KiB
TypeScript

import IntValidator from "./IntValidator"
import { Translation } from "../../i18n/Translation"
import Translations from "../../i18n/Translations"
export default class NatValidator extends IntValidator {
constructor(name?: string, explanation?: string) {
super(name ?? "nat", explanation ?? "A whole, positive number or zero")
}
isValid(str): boolean {
if (str === undefined) {
return false
}
str = "" + str
return str.indexOf(".") < 0 && !isNaN(Number(str)) && Number(str) >= 0
}
/**
*
* const validator = new NatValidator()
* validator.getFeedback(-4).textFor("en") // => "This number should be positive"
*/
getFeedback(s: string): Translation {
console.log("Getting feedback for", s)
const n = Number(s)
if (!isNaN(n) && n < 0) {
return Translations.t.validation.nat.mustBePositive
}
const spr = super.getFeedback(s)
if (spr !== undefined) {
return spr
}
return undefined
}
}