@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
55 lines • 1.72 kB
JavaScript
import { ABSENT_VALUE_FORMAT, isAbsent } from "./constants.js";
import { formatWith } from "./formatCore.js";
import detectCountryCode from "../../../shared/detectCountryCode.js";
const formatPhoneNumberParts = (number, locale = null) => {
if (isAbsent(number)) {
return {
number: ABSENT_VALUE_FORMAT,
aria: ABSENT_VALUE_FORMAT
};
}
let display = String(number);
let aria = null;
let num;
switch (locale) {
default:
{
let code = '';
num = String(number);
const normalized = num.replace(/[\s-]/g, '');
const detected = detectCountryCode(normalized);
if (detected) {
code = `${detected.countryCode} `;
num = detected.phoneNumber;
}
num = num.replace(/[^+\d]/g, '');
const length = num.length;
if (length === 0) {
display = String(display);
break;
}
if (code.includes('-')) {
code = code.replace(/(\+[\d]{1,2})-([\d]{1,6})/, '$1 ($2)');
}
if (length === 8 && num.substring(0, 1) === '8') {
display = code + num.split(/([\d]{3})([\d]{2})/).filter(s => s).join(' ');
} else {
if (length < 6) {
display = code + num;
} else {
display = code + num.split(length === 6 ? /^(\+[\d]{2})|([\d]{3})/ : /^(\+[\d]{2})|([\d]{2})/).filter(s => s).join(' ');
}
}
aria = code + num.split(/([\d]{2})/).filter(s => s).join(' ');
}
}
if (aria === null) {
aria = display;
}
return {
number: display,
aria
};
};
export const formatPhoneNumber = formatWith('phone', formatPhoneNumberParts);
//# sourceMappingURL=formatPhoneNumber.js.map