@eccenca/gui-elements
Version:
GUI elements based on other libraries, usable in React application, written in Typescript.
65 lines • 2.78 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import React from "react";
import { renderToString } from "react-dom/server.js";
import * as ReactIs from "react-is";
import { CLASSPREFIX as eccgui } from "../../configuration/constants.js";
import { OverflowText } from "./../Typography/index.js";
/**
* Component to reduce HTML markup content to simple text.
* Display can be wrapped easily in `OverflowText`.
*/
export var TextReducer = function (_a) {
var children = _a.children, maxNodes = _a.maxNodes, maxLength = _a.maxLength, useOverflowTextWrapper = _a.useOverflowTextWrapper, overflowTextProps = _a.overflowTextProps;
var nodesCount = 0;
var onlyText = function (children, maxNodes) {
if (typeof maxNodes !== "undefined" && nodesCount >= maxNodes) {
return "";
}
if (children instanceof Array) {
return children
.slice(0, maxNodes)
.map(function (child) {
return onlyText(child, maxNodes);
})
.join(" ");
}
return React.Children.toArray(children)
.slice(0, maxNodes)
.map(function (child) {
var _a;
if (ReactIs.isFragment(child)) {
return onlyText((_a = child.props) === null || _a === void 0 ? void 0 : _a.children, maxNodes);
}
if (typeof child === "string") {
return child;
}
if (typeof child === "number") {
return child.toString();
}
if (ReactIs.isElement(child)) {
// for some reasons `renderToString` returns empty string if not wrappe in a `span`
return renderToString(React.createElement("span", null, child));
}
return "";
})
.join(" ")
.replaceAll("\n", " ");
};
var shrinkedContent = onlyText(children, maxNodes)
.replaceAll(/<[^\s][^>]*>/g, "")
.slice(0, maxLength);
return useOverflowTextWrapper ? (React.createElement(OverflowText, __assign({}, overflowTextProps, { className: "".concat(eccgui, "-textreducer") +
(overflowTextProps && overflowTextProps.className ? " ".concat(overflowTextProps.className) : "") }), shrinkedContent)) : (React.createElement(React.Fragment, null, shrinkedContent));
};
export default TextReducer;
//# sourceMappingURL=TextReducer.js.map