@eccenca/gui-elements
Version:
GUI elements based on other libraries, usable in React application, written in Typescript.
52 lines • 3.08 kB
JavaScript
import React from "react";
import { ContentBlobToggler, InlineText, Markdown, utils } from "./../../index.js";
/** Version of the content toggler for text centric content. */
export function StringPreviewContentBlobToggler(_a) {
var _b = _a.className, className = _b === void 0 ? "" : _b, previewMaxLength = _a.previewMaxLength, toggleExtendText = _a.toggleExtendText, toggleReduceText = _a.toggleReduceText, content = _a.content, fullviewContent = _a.fullviewContent, startExtended = _a.startExtended, useOnly = _a.useOnly, _c = _a.renderPreviewAsMarkdown, renderPreviewAsMarkdown = _c === void 0 ? false : _c, allowedHtmlElementsInPreview = _a.allowedHtmlElementsInPreview, noTogglerContentSuffix = _a.noTogglerContentSuffix, firstNonEmptyLineOnly = _a.firstNonEmptyLineOnly;
// need to test `firstNonEmptyLineOnly` until property is removed
var useOnlyTest = firstNonEmptyLineOnly
? "firstNonEmptyLine"
: useOnly;
var previewString = content;
switch (useOnlyTest) {
case "firstNonEmptyLine":
previewString = useOnlyPart(content, regexFirstNonEmptyLine);
break;
case "firstMarkdownSection":
previewString = useOnlyPart(content, regexFirstMarkdownSection);
}
var enableToggler = previewString !== content;
var previewContent = renderPreviewAsMarkdown ? (React.createElement(Markdown, { key: "markdown-content", allowedElements: allowedHtmlElementsInPreview }, previewString)) : (previewString);
if (previewMaxLength &&
utils.reduceToText(previewContent, { decodeHtmlEntities: true }).length > previewMaxLength) {
previewContent = utils.reduceToText(previewContent, { decodeHtmlEntities: true }).slice(0, previewMaxLength);
enableToggler = true;
}
if (!enableToggler && noTogglerContentSuffix) {
previewContent = (React.createElement(React.Fragment, null,
previewContent,
noTogglerContentSuffix));
}
return (React.createElement(ContentBlobToggler, { className: className, previewContent: React.createElement(InlineText, null, previewContent), toggleExtendText: toggleExtendText, toggleReduceText: toggleReduceText, fullviewContent: fullviewContent, startExtended: startExtended, enableToggler: enableToggler }));
}
var regexFirstNonEmptyLine = new RegExp("\r|\n"); // eslint-disable-line
var regexFirstMarkdownSection = new RegExp("\r\n\r\n|\n\n"); // eslint-disable-line
/**
* Takes the first non-empty line from a preview string.
*/
function firstNonEmptyLine(preview) {
return useOnlyPart(preview, regexFirstNonEmptyLine);
}
/**
* Returns only the first part from a preview string.
* Or the full string as fallback.
*/
function useOnlyPart(preview, regexTest) {
var previewString = preview.trim();
var result = regexTest.exec(previewString);
return result !== null ? result.input.slice(0, result.index) : previewString;
}
export var stringPreviewContentBlobTogglerUtils = {
firstNonEmptyLine: firstNonEmptyLine,
};
//# sourceMappingURL=StringPreviewContentBlobToggler.js.map