{"version":3,"file":"Graph.mjs","sources":["../../../../src/graveyard/Graph/Graph.tsx"],"sourcesContent":["// Libraries\nimport $ from 'jquery';\nimport { uniqBy } from 'lodash';\nimport { PureComponent, type JSX } from 'react';\nimport * as React from 'react';\n\n// Types\nimport { TimeRange, GraphSeriesXY, TimeZone, createDimension } from '@grafana/data';\nimport { TooltipDisplayMode } from '@grafana/schema';\n\nimport { VizTooltipProps, VizTooltipContentProps, ActiveDimensions, VizTooltip } from '../../components/VizTooltip';\nimport { FlotPosition } from '../../components/VizTooltip/VizTooltip';\n\nimport { GraphContextMenu, GraphContextMenuProps, ContextDimensions } from './GraphContextMenu';\nimport { GraphTooltip } from './GraphTooltip/GraphTooltip';\nimport { GraphDimensions } from './GraphTooltip/types';\nimport { FlotItem } from './types';\nimport { graphTimeFormat, graphTickFormatter } from './utils';\n\n/** @deprecated */\nexport interface GraphProps {\n  ariaLabel?: string;\n  children?: JSX.Element | JSX.Element[];\n  series: GraphSeriesXY[];\n  timeRange: TimeRange; // NOTE: we should aim to make `time` a property of the axis, not force it for all graphs\n  timeZone?: TimeZone; // NOTE: we should aim to make `time` a property of the axis, not force it for all graphs\n  showLines?: boolean;\n  showPoints?: boolean;\n  showBars?: boolean;\n  width: number;\n  height: number;\n  isStacked?: boolean;\n  lineWidth?: number;\n  onHorizontalRegionSelected?: (from: number, to: number) => void;\n}\n\n/** @deprecated */\ninterface GraphState {\n  pos?: FlotPosition;\n  contextPos?: FlotPosition;\n  isTooltipVisible: boolean;\n  isContextVisible: boolean;\n  activeItem?: FlotItem<GraphSeriesXY>;\n  contextItem?: FlotItem<GraphSeriesXY>;\n}\n\n/**\n * This is a react wrapper for the angular, flot based graph visualization.\n * Rather than using this component, you should use the `<PanelRender .../> with\n * timeseries panel configs.\n *\n * @deprecated\n */\nexport class Graph extends PureComponent<GraphProps, GraphState> {\n  static defaultProps = {\n    showLines: true,\n    showPoints: false,\n    showBars: false,\n    isStacked: false,\n    lineWidth: 1,\n  };\n\n  state: GraphState = {\n    isTooltipVisible: false,\n    isContextVisible: false,\n  };\n\n  element: HTMLElement | null = null;\n  $element: JQuery<HTMLElement> | null = null;\n\n  componentDidUpdate(prevProps: GraphProps, prevState: GraphState) {\n    if (prevProps !== this.props) {\n      this.draw();\n    }\n  }\n\n  componentDidMount() {\n    this.draw();\n    if (this.element) {\n      this.$element = $(this.element);\n      this.$element.bind('plotselected', this.onPlotSelected);\n      this.$element.bind('plothover', this.onPlotHover);\n      this.$element.bind('plotclick', this.onPlotClick);\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.$element) {\n      this.$element.unbind('plotselected', this.onPlotSelected);\n    }\n  }\n\n  onPlotSelected = (event: JQuery.Event, ranges: { xaxis: { from: number; to: number } }) => {\n    const { onHorizontalRegionSelected } = this.props;\n    if (onHorizontalRegionSelected) {\n      onHorizontalRegionSelected(ranges.xaxis.from, ranges.xaxis.to);\n    }\n  };\n\n  onPlotHover = (event: JQuery.Event, pos: FlotPosition, item?: FlotItem<GraphSeriesXY>) => {\n    this.setState({\n      isTooltipVisible: true,\n      activeItem: item,\n      pos,\n    });\n  };\n\n  onPlotClick = (event: JQuery.Event, contextPos: FlotPosition, item?: FlotItem<GraphSeriesXY>) => {\n    this.setState({\n      isContextVisible: true,\n      isTooltipVisible: false,\n      contextItem: item,\n      contextPos,\n    });\n  };\n\n  getYAxes(series: GraphSeriesXY[]) {\n    if (series.length === 0) {\n      return [{ show: true, min: -1, max: 1 }];\n    }\n    return uniqBy(\n      series.map((s) => {\n        const index = s.yAxis ? s.yAxis.index : 1;\n        const min = s.yAxis && s.yAxis.min && !isNaN(s.yAxis.min) ? s.yAxis.min : null;\n        const tickDecimals =\n          s.yAxis && s.yAxis.tickDecimals && !isNaN(s.yAxis.tickDecimals) ? s.yAxis.tickDecimals : null;\n        return {\n          show: true,\n          index,\n          position: index === 1 ? 'left' : 'right',\n          min,\n          tickDecimals,\n        };\n      }),\n      (yAxisConfig) => yAxisConfig.index\n    );\n  }\n\n  renderTooltip = () => {\n    const { children, series, timeZone } = this.props;\n    const { pos, activeItem, isTooltipVisible } = this.state;\n    let tooltipElement: React.ReactElement<VizTooltipProps> | undefined;\n\n    if (!isTooltipVisible || !pos || series.length === 0) {\n      return null;\n    }\n\n    // Find children that indicate tooltip to be rendered\n    React.Children.forEach(children, (c) => {\n      // We have already found tooltip\n      if (tooltipElement) {\n        return;\n      }\n      const childType = c && c.type && (c.type.displayName || c.type.name);\n\n      if (childType === VizTooltip.displayName) {\n        tooltipElement = c;\n      }\n    });\n    // If no tooltip provided, skip rendering\n    if (!tooltipElement) {\n      return null;\n    }\n    const tooltipElementProps = tooltipElement.props;\n\n    const tooltipMode = tooltipElementProps.mode || 'single';\n\n    // If mode is single series and user is not hovering over item, skip rendering\n    if (!activeItem && tooltipMode === 'single') {\n      return null;\n    }\n\n    // Check if tooltip needs to be rendered with custom tooltip component, otherwise default to GraphTooltip\n    const tooltipContentRenderer = tooltipElementProps.tooltipComponent || GraphTooltip;\n    // Indicates column(field) index in y-axis dimension\n    const seriesIndex = activeItem ? activeItem.series.seriesIndex : 0;\n    // Indicates row index in active field values\n    const rowIndex = activeItem ? activeItem.dataIndex : undefined;\n\n    const activeDimensions: ActiveDimensions<GraphDimensions> = {\n      // Described x-axis active item\n      // When hovering over an item - let's take it's dataIndex, otherwise undefined\n      // Tooltip itself needs to figure out correct datapoint display information based on pos passed to it\n      xAxis: [seriesIndex, rowIndex],\n      // Describes y-axis active item\n      yAxis: activeItem ? [activeItem.series.seriesIndex, activeItem.dataIndex] : null,\n    };\n\n    const tooltipContentProps: VizTooltipContentProps<GraphDimensions> = {\n      dimensions: {\n        // time/value dimension columns are index-aligned - see getGraphSeriesModel\n        xAxis: createDimension(\n          'xAxis',\n          series.map((s) => s.timeField)\n        ),\n        yAxis: createDimension(\n          'yAxis',\n          series.map((s) => s.valueField)\n        ),\n      },\n      activeDimensions,\n      pos,\n      mode: tooltipElementProps.mode || TooltipDisplayMode.Single,\n      timeZone,\n    };\n\n    const tooltipContent = React.createElement(tooltipContentRenderer, { ...tooltipContentProps });\n\n    return React.cloneElement(tooltipElement, {\n      content: tooltipContent,\n      position: { x: pos.pageX, y: pos.pageY },\n      offset: { x: 10, y: 10 },\n    });\n  };\n\n  renderContextMenu = () => {\n    const { series } = this.props;\n    const { contextPos, contextItem, isContextVisible } = this.state;\n\n    if (!isContextVisible || !contextPos || !contextItem || series.length === 0) {\n      return null;\n    }\n\n    // Indicates column(field) index in y-axis dimension\n    const seriesIndex = contextItem ? contextItem.series.seriesIndex : 0;\n    // Indicates row index in context field values\n    const rowIndex = contextItem ? contextItem.dataIndex : undefined;\n\n    const contextDimensions: ContextDimensions<GraphDimensions> = {\n      // Described x-axis context item\n      xAxis: [seriesIndex, rowIndex],\n      // Describes y-axis context item\n      yAxis: contextItem ? [contextItem.series.seriesIndex, contextItem.dataIndex] : null,\n    };\n\n    const dimensions: GraphDimensions = {\n      // time/value dimension columns are index-aligned - see getGraphSeriesModel\n      xAxis: createDimension(\n        'xAxis',\n        series.map((s) => s.timeField)\n      ),\n      yAxis: createDimension(\n        'yAxis',\n        series.map((s) => s.valueField)\n      ),\n    };\n\n    const closeContext = () => this.setState({ isContextVisible: false });\n\n    const getContextMenuSource = () => {\n      return {\n        datapoint: contextItem.datapoint,\n        dataIndex: contextItem.dataIndex,\n        series: contextItem.series,\n        seriesIndex: contextItem.series.seriesIndex,\n        pageX: contextPos.pageX,\n        pageY: contextPos.pageY,\n      };\n    };\n\n    const contextContentProps: GraphContextMenuProps = {\n      x: contextPos.pageX,\n      y: contextPos.pageY,\n      onClose: closeContext,\n      getContextMenuSource: getContextMenuSource,\n      timeZone: this.props.timeZone,\n      dimensions,\n      contextDimensions,\n    };\n\n    return <GraphContextMenu {...contextContentProps} />;\n  };\n\n  getBarWidth = () => {\n    const { series } = this.props;\n    return Math.min(...series.map((s) => s.timeStep));\n  };\n\n  draw() {\n    if (this.element === null) {\n      return;\n    }\n\n    const {\n      width,\n      series,\n      timeRange,\n      showLines,\n      showBars,\n      showPoints,\n      isStacked,\n      lineWidth,\n      timeZone,\n      onHorizontalRegionSelected,\n    } = this.props;\n\n    if (!width) {\n      return;\n    }\n\n    const ticks = width / 100;\n    const min = timeRange.from.valueOf();\n    const max = timeRange.to.valueOf();\n    const yaxes = this.getYAxes(series);\n\n    const flotOptions = {\n      legend: {\n        show: false,\n      },\n      series: {\n        stack: isStacked,\n        lines: {\n          show: showLines,\n          lineWidth: lineWidth,\n          zero: false,\n        },\n        points: {\n          show: showPoints,\n          fill: 1,\n          fillColor: false,\n          radius: 2,\n        },\n        bars: {\n          show: showBars,\n          fill: 1,\n          // Dividig the width by 1.5 to make the bars not touch each other\n          barWidth: showBars ? this.getBarWidth() / 1.5 : 1,\n          zero: false,\n          lineWidth: lineWidth,\n        },\n        shadowSize: 0,\n      },\n      xaxis: {\n        timezone: timeZone,\n        show: true,\n        mode: 'time',\n        min: min,\n        max: max,\n        label: 'Datetime',\n        ticks: ticks,\n        timeformat: graphTimeFormat(ticks, min, max),\n        tickFormatter: graphTickFormatter,\n      },\n      yaxes,\n      grid: {\n        minBorderMargin: 0,\n        markings: [],\n        backgroundColor: null,\n        borderWidth: 0,\n        hoverable: true,\n        clickable: true,\n        color: '#a1a1a1',\n        margin: { left: 0, right: 0 },\n        labelMarginX: 0,\n        mouseActiveRadius: 30,\n      },\n      selection: {\n        mode: onHorizontalRegionSelected ? 'x' : null,\n        color: '#666',\n      },\n      crosshair: {\n        mode: 'x',\n      },\n    };\n\n    try {\n      $.plot(\n        this.element,\n        series.filter((s) => s.isVisible),\n        flotOptions\n      );\n    } catch (err) {\n      console.error('Graph rendering error', err, flotOptions, series);\n      throw new Error('Error rendering panel');\n    }\n  }\n\n  render() {\n    const { ariaLabel, height, width, series } = this.props;\n    const noDataToBeDisplayed = series.length === 0;\n    const tooltip = this.renderTooltip();\n    const context = this.renderContextMenu();\n    return (\n      <div className=\"graph-panel\" aria-label={ariaLabel}>\n        <div\n          className=\"graph-panel__chart\"\n          ref={(e) => {\n            this.element = e;\n          }}\n          style={{ height, width }}\n          onMouseLeave={() => {\n            this.setState({ isTooltipVisible: false });\n          }}\n        />\n        {noDataToBeDisplayed && <div className=\"datapoints-warning\">No data</div>}\n        {tooltip}\n        {context}\n      </div>\n    );\n  }\n}\n\nexport default Graph;\n"],"names":[],"mappings":"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"}