react-string-format
Version:
Formats string using string, number, and react components as paramaters
77 lines (76 loc) • 2.43 kB
JavaScript
;
/* eslint-disable react/no-array-index-key */
Object.defineProperty(exports, "__esModule", { value: true });
exports.WhiteSpaceChar = void 0;
exports.format = format;
var React = require("react");
exports.WhiteSpaceChar = " ";
function format(text) {
var params = [];
for (var _i = 1; _i < arguments.length; _i++) {
params[_i - 1] = arguments[_i];
}
var result = [text];
params.forEach(function (param, i) {
result = parseAndReplace(result, param, i);
});
if (result.length === 0) {
return "";
}
else if (result.length === 1 && typeof result[0] === "string") {
return result[0];
}
else {
return (React.createElement(React.Fragment, null, result.map(function (x, i) {
return React.createElement(React.Fragment, { key: i }, x);
})));
}
}
function replaceWhiteSpace(text) {
var result = [];
var start = false;
var end = false;
if (text.match(/^\s+/gi)) {
text = text.replace(/^\s+/gi, "");
start = true;
}
if (text.match(/\s+$/gi)) {
text = text.replace(/\s+$/gi, "");
end = true;
}
if (start) {
result.push(React.createElement(React.Fragment, null, "\u00A0"));
}
result.push(text);
if (end) {
result.push(React.createElement(React.Fragment, null, "\u00A0"));
}
return result;
}
function parseAndReplace(source, replaceWith, index) {
var result = [];
source.forEach(function (possibleText) {
if (typeof possibleText === "string") {
var pattern = new RegExp("\\{".concat(index, "\\}"), "gi");
if (typeof replaceWith === "string" || typeof replaceWith === "number") {
result.push(possibleText.replace(pattern, "".concat(replaceWith)));
}
else {
var splits_1 = possibleText.split(pattern);
splits_1.forEach(function (splitText, i) {
if (splitText) {
replaceWhiteSpace(splitText).forEach(function (text) { return result.push(text); });
}
// if NOT last
if (i + 1 < splits_1.length) {
result.push(replaceWith);
}
});
}
}
else {
result.push(possibleText);
}
});
return result;
}