UNPKG

@eccenca/gui-elements

Version:

GUI elements based on other libraries, usable in React application, written in Typescript.

65 lines 2.78 kB
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