{"version":3,"file":"utils.mjs","sources":["../../../../src/graveyard/Graph/utils.ts"],"sourcesContent":["import {\n  GraphSeriesValue,\n  Field,\n  formattedValueToString,\n  getFieldDisplayName,\n  TimeZone,\n  dateTimeFormat,\n  systemDateFormats,\n} from '@grafana/data';\n\n/**\n * Returns index of the closest datapoint BEFORE hover position\n *\n * @param posX\n * @param series\n * @deprecated\n */\nexport const findHoverIndexFromData = (xAxisDimension: Field, xPos: number) => {\n  let lower = 0;\n  let upper = xAxisDimension.values.length - 1;\n  let middle;\n\n  while (true) {\n    if (lower > upper) {\n      return Math.max(upper, 0);\n    }\n    middle = Math.floor((lower + upper) / 2);\n    const xPosition = xAxisDimension.values[middle];\n\n    if (xPosition === xPos) {\n      return middle;\n    } else if (xPosition && xPosition < xPos) {\n      lower = middle + 1;\n    } else {\n      upper = middle - 1;\n    }\n  }\n};\n\ninterface MultiSeriesHoverInfo {\n  value: string;\n  time: string;\n  datapointIndex: number;\n  seriesIndex: number;\n  label?: string;\n  color?: string;\n}\n\n/**\n * Returns information about closest datapoints when hovering over a Graph\n *\n * @param seriesList list of series visible on the Graph\n * @param pos mouse cursor position, based on jQuery.flot position\n * @deprecated\n */\nexport const getMultiSeriesGraphHoverInfo = (\n  // x and y axis dimensions order is aligned\n  yAxisDimensions: Field[],\n  xAxisDimensions: Field[],\n  /** Well, time basically */\n  xAxisPosition: number,\n  timeZone?: TimeZone\n): {\n  results: MultiSeriesHoverInfo[];\n  time?: GraphSeriesValue;\n} => {\n  let i, field, hoverIndex, hoverDistance, pointTime;\n\n  const results: MultiSeriesHoverInfo[] = [];\n\n  let minDistance, minTime;\n\n  for (i = 0; i < yAxisDimensions.length; i++) {\n    field = yAxisDimensions[i];\n    const time = xAxisDimensions[i];\n    hoverIndex = findHoverIndexFromData(time, xAxisPosition);\n    hoverDistance = xAxisPosition - time.values[hoverIndex];\n    pointTime = time.values[hoverIndex];\n    // Take the closest point before the cursor, or if it does not exist, the closest after\n    if (\n      minDistance === undefined ||\n      (hoverDistance >= 0 && (hoverDistance < minDistance || minDistance < 0)) ||\n      (hoverDistance < 0 && hoverDistance > minDistance)\n    ) {\n      minDistance = hoverDistance;\n      minTime = time.display ? formattedValueToString(time.display(pointTime)) : pointTime;\n    }\n\n    const disp = field.display!(field.values[hoverIndex]);\n\n    results.push({\n      value: formattedValueToString(disp),\n      datapointIndex: hoverIndex,\n      seriesIndex: i,\n      color: disp.color,\n      label: getFieldDisplayName(field),\n      time: time.display ? formattedValueToString(time.display(pointTime)) : pointTime,\n    });\n  }\n\n  return {\n    results,\n    time: minTime,\n  };\n};\n\n/** @deprecated */\nexport const graphTickFormatter = (epoch: number, axis: any) => {\n  return dateTimeFormat(epoch, {\n    format: axis?.options?.timeformat,\n    timeZone: axis?.options?.timezone,\n  });\n};\n\n/** @deprecated */\nexport const graphTimeFormat = (ticks: number | null, min: number | null, max: number | null): string => {\n  if (min && max && ticks) {\n    const range = max - min;\n    const secPerTick = range / ticks / 1000;\n    // Need have 10 millisecond margin on the day range\n    // As sometimes last 24 hour dashboard evaluates to more than 86400000\n    const oneDay = 86400010;\n    const oneYear = 31536000000;\n\n    if (secPerTick <= 10) {\n      return systemDateFormats.interval.millisecond;\n    }\n    if (secPerTick <= 45) {\n      return systemDateFormats.interval.second;\n    }\n    if (range <= oneDay) {\n      return systemDateFormats.interval.minute;\n    }\n    if (secPerTick <= 80000) {\n      return systemDateFormats.interval.hour;\n    }\n    if (range <= oneYear) {\n      return systemDateFormats.interval.day;\n    }\n    if (secPerTick <= 31536000) {\n      return systemDateFormats.interval.month;\n    }\n    return systemDateFormats.interval.year;\n  }\n\n  return systemDateFormats.interval.minute;\n};\n"],"names":[],"mappings":"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"}