@grafana/ui
Version:
Grafana Components Library
1 lines • 7.74 kB
Source Map (JSON)
{"version":3,"file":"EventBusPlugin.mjs","sources":["../../../../../src/components/uPlot/plugins/EventBusPlugin.tsx"],"sourcesContent":["import { throttle } from 'lodash';\nimport { useLayoutEffect, useRef } from 'react';\nimport { Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\n\nimport {\n DataFrame,\n DataHoverClearEvent,\n DataHoverEvent,\n DataHoverPayload,\n EventBus,\n LegacyGraphHoverEvent,\n} from '@grafana/data';\n\nimport { UPlotConfigBuilder } from '../config/UPlotConfigBuilder';\n\ninterface EventBusPluginProps {\n config: UPlotConfigBuilder;\n eventBus: EventBus;\n frame?: DataFrame;\n}\n\n/**\n * @alpha\n */\nexport const EventBusPlugin = ({ config, eventBus, frame }: EventBusPluginProps) => {\n const frameRef = useRef<DataFrame | undefined>(frame);\n frameRef.current = frame;\n\n useLayoutEffect(() => {\n let u: uPlot | null = null;\n\n const payload: DataHoverPayload = {\n point: {\n time: null,\n },\n data: frameRef.current,\n };\n\n config.addHook('init', (_u) => {\n u = _u;\n });\n\n let closestSeriesIdx: number | null = null;\n\n config.addHook('setSeries', (u, seriesIdx) => {\n closestSeriesIdx = seriesIdx;\n });\n\n config.addHook('setLegend', () => {\n let viaSync = u!.cursor.event == null;\n\n if (!viaSync) {\n let dataIdx = u!.cursor.idxs!.find((v) => v != null);\n\n if (dataIdx == null) {\n throttledClear();\n } else {\n let rowIdx = dataIdx;\n let colIdx = closestSeriesIdx;\n\n let xData = u!.data[0] ?? u!.data[1][0];\n\n payload.point.time = xData[rowIdx];\n payload.rowIndex = rowIdx ?? undefined;\n payload.columnIndex = colIdx ?? undefined;\n payload.data = frameRef.current;\n\n // used by old graph panel to position tooltip\n let top = u!.cursor.top!;\n payload.point.panelRelY = top === 0 ? 0.001 : top > 0 ? top / u!.rect.height : 1;\n\n throttledHover();\n }\n }\n });\n\n function handleCursorUpdate(evt: DataHoverEvent | LegacyGraphHoverEvent) {\n const time = evt.payload?.point?.time;\n\n if (time) {\n // Try finding left position on time axis\n const left = u!.valToPos(time, 'x');\n\n // let top;\n\n // if (left) {\n // top = findMidPointYPosition(u!, u!.posToIdx(left));\n // }\n\n // if (!top || !left) {\n // return;\n // }\n\n u!.setCursor({\n left,\n top: u!.rect.height / 2,\n });\n }\n }\n\n const subscription = new Subscription();\n\n const hoverEvent = new DataHoverEvent(payload).setTags(['uplot']);\n const clearEvent = new DataHoverClearEvent().setTags(['uplot']);\n\n let throttledHover = throttle(() => {\n eventBus.publish(hoverEvent);\n }, 100);\n\n let throttledClear = throttle(() => {\n eventBus.publish(clearEvent);\n }, 100);\n\n subscription.add(\n eventBus.getStream(DataHoverEvent).subscribe({\n next: (evt) => {\n // ignore uplot-emitted events, since we already use uPlot's sync\n if (eventBus === evt.origin || evt.tags?.has('uplot')) {\n return;\n }\n\n handleCursorUpdate(evt);\n },\n })\n );\n\n // Legacy events (from flot graph)\n subscription.add(\n eventBus.getStream(LegacyGraphHoverEvent).subscribe({\n next: (evt) => handleCursorUpdate(evt),\n })\n );\n\n subscription.add(\n eventBus\n .getStream(DataHoverClearEvent)\n .pipe(throttleTime(50)) // dont throttle here, throttle on emission\n .subscribe({\n next: (evt) => {\n // ignore uplot-emitted events, since we already use uPlot's sync\n if (eventBus === evt.origin || evt.tags?.has('uplot')) {\n return;\n }\n\n // @ts-ignore\n if (!u!.cursor._lock) {\n u!.setCursor({\n left: -10,\n top: -10,\n });\n }\n },\n })\n );\n\n return () => {\n subscription.unsubscribe();\n };\n }, [config]);\n\n return null;\n};\n"],"names":["u"],"mappings":"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"}