import {parsePhoneNumberFromString} from "libphonenumber-js" import {Validator} from "../Validator" import {Translation} from "../../i18n/Translation"; import Translations from "../../i18n/Translations"; export default class PhoneValidator extends Validator { constructor() { super("phone", "A phone number", "tel") } getFeedback(s: string, requestCountry?: () => string): Translation { if(this.isValid(s, requestCountry)){ return undefined } const tr = Translations.t.validation.phone const generic = tr.feedback if(requestCountry){ const country = requestCountry() if(country){ return tr.feedbackCountry.Subs({country}) } } return generic } public isValid(str, country: () => string): boolean { if (str === undefined) { return false } if (str.startsWith("tel:")) { str = str.substring("tel:".length) } let countryCode = undefined if (country !== undefined) { countryCode = country()?.toUpperCase() } return parsePhoneNumberFromString(str, countryCode)?.isValid() ?? false } public reformat(str, country: () => string) { if (str.startsWith("tel:")) { str = str.substring("tel:".length) } let countryCode = undefined if(country){ countryCode = country() } return parsePhoneNumberFromString( str, countryCode?.toUpperCase() as any )?.formatInternational() } }