Import - Improve phone validation (#12901)

Context : 
- Phones import is a bit complex if not all subfields are provided.
- Phones subfield validation are absent or different from BE validation.

Solution : 
- Normalize callingCode and countryCode validation (BE/FE)
- Ease phone import if only phoneNumber is provided
This commit is contained in:
Etienne
2025-07-04 23:07:24 +02:00
committed by GitHub
parent 1386f344dd
commit e8905be71a
10 changed files with 208 additions and 145 deletions

View File

@ -22,6 +22,7 @@
},
"dependencies": {
"@sniptt/guards": "^0.2.0",
"libphonenumber-js": "^1.10.26",
"zod": "3.23.8"
},
"preconstruct": {

View File

@ -33,3 +33,5 @@ export { isValidLocale } from './validation/isValidLocale';
export { isValidUuid } from './validation/isValidUuid';
export { isValidVariable } from './validation/isValidVariable';
export { normalizeLocale } from './validation/normalizeLocale';
export { getCountryCodesForCallingCode } from './validation/phones-value/getCountryCodesForCallingCode';
export { isValidCountryCode } from './validation/phones-value/isValidCountryCode';

View File

@ -0,0 +1,15 @@
import { getCountries, getCountryCallingCode } from 'libphonenumber-js';
const ALL_COUNTRIES_CODE = getCountries();
export const getCountryCodesForCallingCode = (callingCode: string) => {
const cleanCallingCode = callingCode.startsWith('+')
? callingCode.slice(1)
: callingCode;
return ALL_COUNTRIES_CODE.filter((country) => {
const countryCallingCode = getCountryCallingCode(country);
return countryCallingCode === cleanCallingCode;
});
};

View File

@ -0,0 +1 @@
export * from './isValidCountryCode';

View File

@ -0,0 +1,7 @@
import { CountryCode, getCountries } from 'libphonenumber-js';
const ALL_COUNTRIES_CODE = getCountries();
export const isValidCountryCode = (input: string): input is CountryCode => {
return ALL_COUNTRIES_CODE.includes(input as unknown as CountryCode);
};