@grafana/ui
Version:
Grafana Components Library
79 lines (71 loc) • 2.63 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var ReactDOMServer = require('react-dom/server');
var Tooltip = require('../Tooltip/Tooltip.cjs');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
function _interopNamespaceCompat(e) {
if (e && typeof e === 'object' && 'default' in e) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceCompat(React);
var ReactDOMServer__default = /*#__PURE__*/_interopDefaultCompat(ReactDOMServer);
;
const TruncatedText = React__namespace.forwardRef(({ childElement, children }, ref) => {
const [isOverflowing, setIsOverflowing] = React.useState(false);
const internalRef = React.useRef(null);
React.useImperativeHandle(ref, () => internalRef.current);
const resizeObserver = React.useMemo(
() => new ResizeObserver((entries) => {
for (const entry of entries) {
if (entry.target.clientWidth && entry.target.scrollWidth) {
if (entry.target.scrollWidth > entry.target.clientWidth) {
setIsOverflowing(true);
}
if (entry.target.scrollWidth <= entry.target.clientWidth) {
setIsOverflowing(false);
}
}
}
}),
[]
);
React.useEffect(() => {
const { current } = internalRef;
if (current) {
resizeObserver.observe(current);
}
return () => {
resizeObserver.disconnect();
};
}, [setIsOverflowing, resizeObserver]);
const getTooltipText = (children2) => {
if (typeof children2 === "string") {
return children2;
}
const html = ReactDOMServer__default.default.renderToStaticMarkup(/* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: children2 }));
return html.replace(/(<([^>]+)>)/gi, "");
};
if (isOverflowing) {
return /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { ref: internalRef, content: getTooltipText(children), children: childElement(void 0) });
} else {
return childElement(internalRef);
}
});
TruncatedText.displayName = "TruncatedText";
exports.TruncatedText = TruncatedText;
//# sourceMappingURL=TruncatedText.cjs.map