@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
195 lines (194 loc) • 5.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "ABSENT_VALUE_FORMAT", {
enumerable: true,
get: function () {
return _constants.ABSENT_VALUE_FORMAT;
}
});
exports.applyDecimalsForPlain = applyDecimalsForPlain;
exports.buildReturn = buildReturn;
Object.defineProperty(exports, "cleanNumber", {
enumerable: true,
get: function () {
return _cleanNumber.cleanNumber;
}
});
Object.defineProperty(exports, "enhanceSR", {
enumerable: true,
get: function () {
return _formatNumberCore.enhanceSR;
}
});
Object.defineProperty(exports, "formatDecimals", {
enumerable: true,
get: function () {
return _decimals.formatDecimals;
}
});
Object.defineProperty(exports, "formatNumberCore", {
enumerable: true,
get: function () {
return _formatNumberCore.formatNumberCore;
}
});
exports.formatWith = formatWith;
Object.defineProperty(exports, "handleCompactBeforeAria", {
enumerable: true,
get: function () {
return _compact.handleCompactBeforeAria;
}
});
Object.defineProperty(exports, "handleCompactBeforeDisplay", {
enumerable: true,
get: function () {
return _compact.handleCompactBeforeDisplay;
}
});
Object.defineProperty(exports, "isAbsent", {
enumerable: true,
get: function () {
return _constants.isAbsent;
}
});
exports.prepareFormatOptions = prepareFormatOptions;
Object.defineProperty(exports, "prepareMinus", {
enumerable: true,
get: function () {
return _formatNumberCore.prepareMinus;
}
});
exports.resolveLocale = resolveLocale;
var _parse = _interopRequireDefault(require("core-js-pure/stable/json/parse.js"));
var _defaults = require("../../../shared/defaults.js");
var _componentHelper = require("../../../shared/component-helper.js");
var _constants = require("./constants.js");
var _cleanNumber = require("./cleanNumber.js");
var _decimals = require("./decimals.js");
var _formatNumberCore = require("./formatNumberCore.js");
var _separators = require("./separators.js");
var _compact = require("./compact.js");
var _index = _interopRequireDefault(require("../../../shared/locales/index.js"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function resolveLocale(locale) {
if (!locale) {
return _defaults.LOCALE;
}
if (locale === 'auto') {
try {
return window.navigator.language;
} catch (e) {
(0, _componentHelper.warn)(e);
}
}
return locale;
}
function prepareFormatOptions({
options,
signDisplay
}) {
const opts = (typeof options === 'string' && options[0] === '{' ? (0, _parse.default)(options) : options) || {};
if (signDisplay) {
opts.signDisplay = signDisplay;
}
return opts;
}
function buildReturn({
value,
locale,
display,
aria,
type,
opts,
cleanCopyValue,
invalidAriaText
}) {
let cleanedValue;
if (cleanCopyValue) {
cleanedValue = (0, _formatNumberCore.formatNumberCore)(opts.style === 'percent' ? Number(value) / 100 : value, locale, opts, item => {
switch (item.type) {
case 'group':
case 'literal':
case 'currency':
case 'percentSign':
item.value = '';
return item;
default:
return item;
}
});
} else {
const thousandsSeparator = (0, _separators.getThousandsSeparator)(locale);
cleanedValue = String(display).replace(new RegExp(`${thousandsSeparator}(?=\\d{3})`, 'g'), '');
}
if (value === 'invalid') {
var _locales$locale;
aria = invalidAriaText || ((_locales$locale = _index.default[locale]) === null || _locales$locale === void 0 ? void 0 : _locales$locale.NumberFormat.notAvailable) || 'N/A';
}
return {
value,
cleanedValue,
number: display,
aria,
locale,
type
};
}
function applyDecimalsForPlain({
value,
decimals,
rounding,
opts
}) {
if (parseFloat(String(decimals)) >= 0) {
return (0, _decimals.formatDecimals)(value, decimals, rounding, opts);
} else if (typeof opts.maximumFractionDigits === 'undefined') {
opts.maximumFractionDigits = 20;
}
return value;
}
function formatWith(type, formatterFn) {
function formatter(value, {
locale: inputLocale = null,
clean = null,
options = null,
signDisplay = null,
returnAria = false,
invalidAriaText = null,
cleanCopyValue = null
} = {}) {
value = (0, _constants.isAbsent)(value) ? _constants.ABSENT_VALUE_FORMAT : value;
const locale = resolveLocale(inputLocale);
const opts = prepareFormatOptions({
options,
signDisplay
});
if (clean) {
value = (0, _cleanNumber.cleanNumber)(value);
}
const {
number: display,
aria: initialAria
} = formatterFn(value, locale);
if (type === 'phone' && clean === null) {
value = (0, _cleanNumber.cleanNumber)(value);
}
if (!returnAria) {
return display;
}
return buildReturn({
value,
locale,
display,
aria: initialAria,
type,
opts,
cleanCopyValue,
invalidAriaText
});
}
return formatter;
}
//# sourceMappingURL=formatCore.js.map