diff --git a/package.json b/package.json index 44d0fe15..f2b8d8fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@netdata/charts", - "version": "6.10.7", + "version": "6.10.8", "description": "Netdata frontend SDK and chart utilities", "main": "dist/index.js", "module": "dist/es6/index.js", diff --git a/src/components/helpers/shortener.js b/src/components/helpers/shortener.js index db782425..0825134b 100644 --- a/src/components/helpers/shortener.js +++ b/src/components/helpers/shortener.js @@ -1,6 +1,7 @@ import React, { useState, useEffect } from "react" import { mergeRefs } from "@netdata/netdata-ui" import { shortenToWidth } from "@/helpers/shorten" +import makeResizeObserver from "@/helpers/makeResizeObserver" import Tooltip from "@/components/tooltip" const Shortener = ({ text, Component = "div", noTooltip, ref: forwardedRef, ...rest }) => { @@ -11,15 +12,18 @@ const Shortener = ({ text, Component = "div", noTooltip, ref: forwardedRef, ...r useEffect(() => { if (!ref) return - const containerWidth = ref.offsetWidth - const contentWidth = ref.scrollWidth + const shorten = () => { + ref.textContent = text - const next = shortenToWidth(text, contentWidth, containerWidth) + const next = shortenToWidth(text, ref.scrollWidth, ref.offsetWidth) - if (next !== text) { ref.textContent = next - setShortenText(text) + setShortenText(next === text ? "" : text) } + + shorten() + + return makeResizeObserver(ref, shorten) }, [text, ref]) return ( diff --git a/src/makeDefaultSDK.js b/src/makeDefaultSDK.js index 0b1847cb..85602cb0 100644 --- a/src/makeDefaultSDK.js +++ b/src/makeDefaultSDK.js @@ -15,6 +15,7 @@ import select from "./sdk/plugins/select" import selectVertical from "./sdk/plugins/selectVertical" import play from "./sdk/plugins/play" import annotationSync from "./sdk/plugins/annotationSync" +import fullscreen from "./sdk/plugins/fullscreen" const minutes15 = 15 * 60 @@ -31,6 +32,7 @@ export default ({ attributes, ...options } = {}) => selectVertical, play, annotationSync, + fullscreen, }, attributes: { _v: "v3", diff --git a/src/sdk/makeChart/index.js b/src/sdk/makeChart/index.js index 44acdb0e..aa24d5eb 100644 --- a/src/sdk/makeChart/index.js +++ b/src/sdk/makeChart/index.js @@ -277,6 +277,12 @@ export default ({ node.invalidateClosestRowCache() }) + node.onAttributeChange("fullscreen", fullscreen => { + if (!node) return + + sdk.trigger("fullscreen", node, fullscreen) + }) + node.makeChartUI = (uiName, chartLibrary = node.getAttribute("chartLibrary"), force = false) => { if (!(chartLibrary in sdk.ui)) console.error( diff --git a/src/sdk/plugins/fullscreen.js b/src/sdk/plugins/fullscreen.js new file mode 100644 index 00000000..b605fb19 --- /dev/null +++ b/src/sdk/plugins/fullscreen.js @@ -0,0 +1,17 @@ +export default sdk => { + let deactivated = [] + + return sdk.on("fullscreen", (chart, isFullscreen) => { + if (isFullscreen) { + deactivated = sdk.getNodes( + (node, { active }) => + node.type === "chart" && active && node.getId() !== chart.getId() + ) + deactivated.forEach(node => node.deactivate()) + return + } + + deactivated.forEach(node => node.activate()) + deactivated = [] + }) +}