@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
JavaScript
'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