forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
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()
 | 
						|
    }
 | 
						|
}
 |