UNPKG

kod-temp

Version:

Workano Communications SDK

68 lines (67 loc) 2.46 kB
import { AsYouType, parsePhoneNumber as libParsePhoneNumber } from 'libphonenumber-js'; // eslint-disable-next-line const EXTRA_CHAR_REGEXP = /[^+*\d]/g; const DEFAULT_GUESSING_COUNTRIES = ['US', 'FR', 'GB', 'AU']; const shouldBeFormatted = (number) => { if (!number || number.length <= 5) { return false; } return !number.includes('#') && !number.includes('*') && !number.match(/[aA-zZ]/); }; const isSameCountry = (country1, country2) => { if ((country1 === 'US' && country2 === 'CA') || (country2 === 'US' && country1 === 'CA')) { return true; } return country1 === country2; }; const guessParsePhoneNumber = (number, defaultCountry, guessingCountries = DEFAULT_GUESSING_COUNTRIES) => { const mergedCountries = [...new Set([defaultCountry, ...guessingCountries])].filter(Boolean); let parsedNumber; for (let i = 0; i < mergedCountries.length; i++) { const country = mergedCountries[i]; parsedNumber = libParsePhoneNumber(number, country); if (parsedNumber.isValid()) { break; } } return parsedNumber; }; const getDisplayableNumber = (rawNumber, country, asYouType = false, guessingCountries = DEFAULT_GUESSING_COUNTRIES) => { if (!rawNumber) { return rawNumber; } const number = String(rawNumber); if (!shouldBeFormatted(number)) { return number; } let displayValue = ''; if (asYouType) { displayValue = new AsYouType(country).input(number); } else { try { const parsedNumber = guessParsePhoneNumber(number, country, guessingCountries); if (parsedNumber?.isValid()) { displayValue = isSameCountry(String(parsedNumber.country), country) ? parsedNumber.formatNational() : parsedNumber.formatInternational(); } else { displayValue = rawNumber; } } catch (error) { displayValue = rawNumber; } } return displayValue; }; const parsePhoneNumber = (phoneNumber) => phoneNumber.replace(EXTRA_CHAR_REGEXP, ''); const getCallableNumber = (number, country) => { try { const callableNumber = country ? getDisplayableNumber(number, country) : number; return parsePhoneNumber(callableNumber); } catch (_) { return number; } }; export { parsePhoneNumber, getDisplayableNumber, guessParsePhoneNumber, getCallableNumber };