@lion/localize
Version:
The localization system helps to manage localization data split into locales and automate its loading
72 lines (70 loc) • 2.09 kB
JavaScript
/**
* Add separators when they are not present
*
* @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart
* @param {FormatNumberPart[]} formattedParts
* @param {string} groupSeparator
* @returns {FormatNumberPart[]}
*/
export function forceAddGroupSeparators(formattedParts, groupSeparator) {
/** @type {FormatNumberPart[]} */
let concatArray = [];
let firstPart;
let integerPart;
for (let i = 0; i < formattedParts.length; i += 1) {
if (formattedParts[i].type === 'integer') {
firstPart = formattedParts.splice(0, i);
integerPart = formattedParts.splice(0, 1);
}
}
if (integerPart !== undefined) {
const numberOfDigits = integerPart[0].value.length;
const mod3 = numberOfDigits % 3;
const groups = Math.floor(numberOfDigits / 3);
const numberArray = [];
let numberOfGroups = 0;
let numberPart = '';
let firstGroup = false;
// Loop through the integer
for (let i = 0; i < numberOfDigits; i += 1) {
numberPart += integerPart[0].value[i];
// Create first grouping which is < 3
if (numberPart.length === mod3 && firstGroup === false) {
numberArray.push({
type: 'integer',
value: numberPart,
});
if (numberOfDigits > 3) {
numberArray.push({
type: 'group',
value: groupSeparator,
});
}
numberPart = '';
firstGroup = true;
// Create groupings of 3
} else if (numberPart.length === 3 && i < numberOfDigits - 1) {
numberOfGroups += 1;
numberArray.push({
type: 'integer',
value: numberPart,
});
if (numberOfGroups !== groups) {
numberArray.push({
type: 'group',
value: groupSeparator,
});
}
numberPart = '';
}
}
numberArray.push({
type: 'integer',
value: numberPart,
});
if (firstPart) {
concatArray = firstPart.concat(numberArray, formattedParts);
}
}
return concatArray;
}