2023-05-07 13:04:55 +02:00
|
|
|
import type { CountryCode, NumberType } from 'libphonenumber-js/types';
|
2023-05-01 16:43:45 +02:00
|
|
|
import lookup from 'country-code-lookup';
|
|
|
|
|
|
|
|
export { formatTypeToHumanReadable, getFullCountryName, getDefaultCountryCode };
|
|
|
|
|
|
|
|
const typeToLabel: Record<NonNullable<NumberType>, string> = {
|
|
|
|
MOBILE: 'Mobile',
|
|
|
|
FIXED_LINE: 'Fixed line',
|
|
|
|
FIXED_LINE_OR_MOBILE: 'Fixed line or mobile',
|
|
|
|
PERSONAL_NUMBER: 'Personal number',
|
|
|
|
PREMIUM_RATE: 'Premium rate',
|
|
|
|
SHARED_COST: 'Shared cost',
|
|
|
|
TOLL_FREE: 'Toll free',
|
|
|
|
UAN: 'Universal access number',
|
|
|
|
VOICEMAIL: 'Voicemail',
|
|
|
|
VOIP: 'VoIP',
|
|
|
|
PAGER: 'Pager',
|
|
|
|
};
|
|
|
|
|
|
|
|
function formatTypeToHumanReadable(type: NumberType): string | undefined {
|
2023-05-28 23:13:24 +02:00
|
|
|
if (!type) {
|
|
|
|
return undefined;
|
|
|
|
}
|
2023-05-01 16:43:45 +02:00
|
|
|
|
|
|
|
return typeToLabel[type];
|
|
|
|
}
|
|
|
|
|
|
|
|
function getFullCountryName(countryCode: string | undefined) {
|
2023-05-28 23:13:24 +02:00
|
|
|
if (!countryCode) {
|
|
|
|
return undefined;
|
|
|
|
}
|
2023-05-01 16:43:45 +02:00
|
|
|
|
|
|
|
return lookup.byIso(countryCode)?.country;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getDefaultCountryCode({
|
|
|
|
locale = window.navigator.language,
|
|
|
|
defaultCode = 'FR',
|
2023-05-07 13:04:55 +02:00
|
|
|
}: { locale?: string; defaultCode?: CountryCode } = {}): CountryCode {
|
2023-05-01 16:43:45 +02:00
|
|
|
const countryCode = locale.split('-')[1]?.toUpperCase();
|
|
|
|
|
2023-05-28 23:13:24 +02:00
|
|
|
if (!countryCode) {
|
|
|
|
return defaultCode;
|
|
|
|
}
|
2023-05-01 16:43:45 +02:00
|
|
|
|
2023-05-07 13:04:55 +02:00
|
|
|
return (lookup.byIso(countryCode)?.iso2 ?? defaultCode) as CountryCode;
|
2023-05-01 16:43:45 +02:00
|
|
|
}
|