| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  | import { parsePhoneNumberFromString } from "libphonenumber-js" | 
					
						
							|  |  |  | import { Validator } from "../Validator" | 
					
						
							|  |  |  | import { Translation } from "../../i18n/Translation" | 
					
						
							|  |  |  | import Translations from "../../i18n/Translations" | 
					
						
							| 
									
										
										
										
											2023-03-29 17:21:20 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default class PhoneValidator extends Validator { | 
					
						
							|  |  |  |     constructor() { | 
					
						
							|  |  |  |         super("phone", "A phone number", "tel") | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-03 00:57:15 +02:00
										 |  |  |     getFeedback(s: string, requestCountry?: () => string): Translation { | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |         if (this.isValid(s, requestCountry)) { | 
					
						
							| 
									
										
										
										
											2023-05-11 02:17:41 +02:00
										 |  |  |             return undefined | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-05-03 00:57:15 +02:00
										 |  |  |         const tr = Translations.t.validation.phone | 
					
						
							|  |  |  |         const generic = tr.feedback | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |         if (requestCountry) { | 
					
						
							|  |  |  |             const country = requestCountry() | 
					
						
							|  |  |  |             if (country) { | 
					
						
							|  |  |  |                 return tr.feedbackCountry.Subs({ country }) | 
					
						
							| 
									
										
										
										
											2023-05-03 00:57:15 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return generic | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public isValid(str, country: () => string): boolean { | 
					
						
							| 
									
										
										
										
											2023-03-29 17:21:20 +02:00
										 |  |  |         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 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-03 00:57:15 +02:00
										 |  |  |     public reformat(str, country: () => string) { | 
					
						
							| 
									
										
										
										
											2023-03-29 17:21:20 +02:00
										 |  |  |         if (str.startsWith("tel:")) { | 
					
						
							|  |  |  |             str = str.substring("tel:".length) | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-05-03 00:57:15 +02:00
										 |  |  |         let countryCode = undefined | 
					
						
							| 
									
										
										
										
											2023-06-14 20:39:36 +02:00
										 |  |  |         if (country) { | 
					
						
							| 
									
										
										
										
											2023-05-03 00:57:15 +02:00
										 |  |  |             countryCode = country() | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2023-03-29 17:21:20 +02:00
										 |  |  |         return parsePhoneNumberFromString( | 
					
						
							|  |  |  |             str, | 
					
						
							| 
									
										
										
										
											2023-05-03 00:57:15 +02:00
										 |  |  |             countryCode?.toUpperCase() as any | 
					
						
							| 
									
										
										
										
											2023-03-29 17:21:20 +02:00
										 |  |  |         )?.formatInternational() | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |