UNPKG

@antv/t8

Version:

T8 is a text visualization solution for unstructured data within the AntV technology stack, and it is a declarative JSON Schema syntax that can be used to describe the content of data interpretation reports.

95 lines (91 loc) 5.76 kB
'use strict'; var tslib = require('tslib'); var jsxRuntime = require('preact/jsx-runtime'); require('../../schema/paragraph.js'); require('../../schema/phrase.js'); var isSpecType = require('../../schema/utils/isSpecType.js'); require('../styled/bullet.js'); require('../styled/container.js'); var entity = require('../styled/entity.js'); require('../styled/heading.js'); var marks = require('../styled/marks.js'); require('../styled/paragraph.js'); var isType = require('../../utils/isType.js'); var functionalize = require('../../utils/functionalize.js'); var getPrefixCls = require('../../utils/getPrefixCls.js'); var classnames = require('../../utils/classnames.js'); var kebabCase = require('../../utils/kebabCase.js'); require('clarinet'); var theme = require('../context/hooks/theme.js'); var plugin = require('../context/hooks/plugin.js'); var event = require('../context/hooks/event.js'); require('../../plugin/index.js'); require('../../theme/seed/index.js'); var hooks = require('preact/hooks'); var Tooltip = require('./ui/Tooltip.js'); function renderPhraseByDescriptor(spec, // eslint-disable-next-line @typescript-eslint/no-explicit-any descriptor, theme, onEvent) { var _a = spec.value, value = _a === void 0 ? '' : _a, _b = spec.metadata, metadata = _b === void 0 ? {} : _b, _c = spec.styles, specStyles = _c === void 0 ? {} : _c; var _d = descriptor || {}, classNames = _d.classNames, descriptorStyle = _d.style, onHover = _d.onHover, // tooltip, onClick = _d.onClick, _e = _d.render, render = _e === void 0 ? function () { return value; } : _e, tooltip = _d.tooltip; var handleClick = function () { onClick === null || onClick === void 0 ? void 0 : onClick(spec === null || spec === void 0 ? void 0 : spec.value, metadata); onEvent === null || onEvent === void 0 ? void 0 : onEvent('phrase:click', spec); }; var handleMouseEnter = function () { onHover === null || onHover === void 0 ? void 0 : onHover(spec === null || spec === void 0 ? void 0 : spec.value, metadata); onEvent === null || onEvent === void 0 ? void 0 : onEvent('phrase:mouseenter', spec); }; var handleMouseLeave = function () { onEvent === null || onEvent === void 0 ? void 0 : onEvent('phrase:mouseleave', spec); }; var contentResult = hooks.useMemo(function () { return functionalize.functionalize(render, null)(value, metadata); }, [value, metadata]); var entityProps = { theme: theme, style: tslib.__assign(tslib.__assign({}, functionalize.functionalize(descriptorStyle, {})(spec === null || spec === void 0 ? void 0 : spec.value, metadata, theme)), specStyles), className: classnames.classnames.apply(void 0, tslib.__spreadArray([getPrefixCls.getPrefixCls('value'), isSpecType.isEntityPhrase(spec) ? getPrefixCls.getPrefixCls(kebabCase.kebabCase(spec.metadata.entityType)) : ''], functionalize.functionalize(classNames, [])(spec === null || spec === void 0 ? void 0 : spec.value, metadata), false)), }; var defaultNode = typeof contentResult === 'string' || typeof contentResult === 'number' ? (jsxRuntime.jsx(entity.Entity, tslib.__assign({}, entityProps, { children: contentResult }))) : (jsxRuntime.jsx(entity.Entity, tslib.__assign({}, entityProps, { dangerouslySetInnerHTML: { __html: contentResult.outerHTML } }))); var nodeWithEvents = isType.isFunction(onEvent) || isType.isFunction(onClick) || isType.isFunction(onHover) ? (jsxRuntime.jsx("span", { onClick: handleClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, children: defaultNode })) : (defaultNode); // return nodeWithEvents; var showTooltip = tooltip && functionalize.functionalize(tooltip.title, null)(value, metadata); return !isType.isNil(showTooltip) ? (jsxRuntime.jsx(Tooltip.Tooltip, tslib.__assign({}, tooltip, { title: showTooltip, children: nodeWithEvents }))) : (nodeWithEvents); } /** <Phrase /> can use independence */ var Phrase = function (_a) { var phrase = _a.spec; var onEvent = event.useEvent().onEvent; var themeSeedToken = theme.useTheme(); var pluginManager = plugin.usePluginManager(); var onClick = function () { onEvent === null || onEvent === void 0 ? void 0 : onEvent('phrase:click', phrase); }; var onMouseEnter = function () { onEvent === null || onEvent === void 0 ? void 0 : onEvent('phrase:mouseenter', phrase); }; var onMouseLeave = function () { onEvent === null || onEvent === void 0 ? void 0 : onEvent('phrase:mouseleave', phrase); }; var defaultText = !isType.isEmpty(onEvent) ? (jsxRuntime.jsx("span", { onClick: onClick, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: phrase.value })) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: phrase.value })); if (isSpecType.isTextPhrase(phrase)) { if (phrase.bold) defaultText = jsxRuntime.jsx(marks.Bold, { children: defaultText }); if (phrase.italic) defaultText = jsxRuntime.jsx(marks.Italic, { children: defaultText }); if (phrase.underline) defaultText = jsxRuntime.jsx(marks.Underline, { children: defaultText }); if (phrase.url) defaultText = (jsxRuntime.jsx("a", { target: "_blank", rel: "noreferrer", href: phrase.url, children: defaultText })); return defaultText; } var descriptor = pluginManager === null || pluginManager === void 0 ? void 0 : pluginManager.getPhraseDescriptorBySpec(phrase); if (descriptor) { return jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderPhraseByDescriptor(phrase, descriptor, themeSeedToken, onEvent) }); } return defaultText; }; exports.Phrase = Phrase; //# sourceMappingURL=Phrase.js.map