react-native-custom-styled-text
Version:
reactnative custom styled text
80 lines • 3.26 kB
JavaScript
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
import React from "react";
import { Text } from "react-native";
var parseHighlightedText = function (text) {
var isHighlighted = false;
var textArr = text.split("");
return textArr.reduce(function (acc, char, index) {
if (char === "[") {
isHighlighted = true;
}
else if (char === "]") {
isHighlighted = false;
}
var isFirstChar = index === 0;
var isStartOfHighlight = char === "[";
var isAfterEndOfHighlight = textArr[index - 1] === "]";
var isStartOfTextFragment = isFirstChar || isStartOfHighlight || isAfterEndOfHighlight;
var textFragment = isStartOfTextFragment
? {
text: "",
isHighlighted: isHighlighted,
}
: acc[acc.length - 1];
var updatedTextFragment = char !== "[" && char !== "]"
? {
text: "" + textFragment.text + char,
isHighlighted: isHighlighted,
}
: textFragment;
if (isStartOfTextFragment) {
return __spreadArrays(acc, [updatedTextFragment]);
}
return __spreadArrays(acc.slice(0, -1), [updatedTextFragment]);
}, []);
};
var CustomStyledText = function (_a) {
var text = _a.text, style = _a.style, highlightStyle = _a.highlightStyle, otherProps = __rest(_a, ["text", "style", "highlightStyle"]);
if (Array.isArray(highlightStyle)) {
var highlightStyleNum = highlightStyle.length;
var highlightWordNum = parseHighlightedText(text).filter(function (ele) { return ele.isHighlighted; }).length;
if (highlightStyleNum !== highlightWordNum) {
throw new Error("Highlighted style array length and Highlighted word string number is different");
}
}
var isMultipleStyle = Array.isArray(highlightStyle);
var styleIndex = -1;
return (<Text style={style} {...otherProps}>
{parseHighlightedText(text).map(function (_a, index) {
var t = _a.text, isHighlighted = _a.isHighlighted;
if (isHighlighted) {
if (isMultipleStyle) {
styleIndex += 1;
}
return (<Text key={index.toString()} style={isMultipleStyle ? highlightStyle[styleIndex] : highlightStyle}>
{t}
</Text>);
}
return t;
})}
</Text>);
};
export default CustomStyledText;
//# sourceMappingURL=index.js.map