{"version":3,"file":"Graph.mjs","sources":["../../../../src/graveyard/Graph/Graph.tsx"],"sourcesContent":["// Libraries\nimport $ from 'jquery';\nimport { uniqBy } from 'lodash';\nimport { PureComponent } 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) => (this.element = e)}\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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"}