@grafana/ui
Version:
Grafana Components Library
1 lines • 7.22 kB
Source Map (JSON)
{"version":3,"file":"ZoomPlugin.mjs","sources":["../../../../../src/graveyard/uPlot/plugins/ZoomPlugin.tsx"],"sourcesContent":["import { useLayoutEffect } from 'react';\n\nimport { UPlotConfigBuilder } from '../../../components/uPlot/config/UPlotConfigBuilder';\n\ninterface ZoomPluginProps {\n onZoom: (range: { from: number; to: number }) => void;\n withZoomY?: boolean;\n config: UPlotConfigBuilder;\n}\n\n// min px width that triggers zoom\nconst MIN_ZOOM_DIST = 5;\n\nconst maybeZoomAction = (e?: MouseEvent | null) => e != null && !e.ctrlKey && !e.metaKey;\n\n/**\n * @alpha\n */\nexport const ZoomPlugin = ({ onZoom, config, withZoomY = false }: ZoomPluginProps) => {\n useLayoutEffect(() => {\n let yZoomed = false;\n let yDrag = false;\n\n if (withZoomY) {\n config.addHook('init', (u) => {\n u.over!.addEventListener(\n 'mousedown',\n (e) => {\n if (!maybeZoomAction(e)) {\n return;\n }\n\n if (e.button === 0 && e.shiftKey) {\n yDrag = true;\n\n u.cursor!.drag!.x = false;\n u.cursor!.drag!.y = true;\n\n let onUp = (e: MouseEvent) => {\n u.cursor!.drag!.x = true;\n u.cursor!.drag!.y = false;\n document.removeEventListener('mouseup', onUp, true);\n };\n\n document.addEventListener('mouseup', onUp, true);\n }\n },\n true\n );\n });\n }\n\n config.addHook('setSelect', (u) => {\n const isXAxisHorizontal = u.scales.x.ori === 0;\n if (maybeZoomAction(u.cursor!.event)) {\n if (withZoomY && yDrag) {\n if (u.select.height >= MIN_ZOOM_DIST) {\n for (let key in u.scales!) {\n if (key !== 'x') {\n const maxY = isXAxisHorizontal\n ? u.posToVal(u.select.top, key)\n : u.posToVal(u.select.left + u.select.width, key);\n const minY = isXAxisHorizontal\n ? u.posToVal(u.select.top + u.select.height, key)\n : u.posToVal(u.select.left, key);\n u.setScale(key, { min: minY, max: maxY });\n }\n }\n\n yZoomed = true;\n }\n\n yDrag = false;\n } else {\n if (u.select.width >= MIN_ZOOM_DIST) {\n const minX = isXAxisHorizontal\n ? u.posToVal(u.select.left, 'x')\n : u.posToVal(u.select.top + u.select.height, 'x');\n const maxX = isXAxisHorizontal\n ? u.posToVal(u.select.left + u.select.width, 'x')\n : u.posToVal(u.select.top, 'x');\n\n onZoom({ from: minX, to: maxX });\n\n yZoomed = false;\n }\n }\n }\n\n // manually hide selected region (since cursor.drag.setScale = false)\n u.setSelect({ left: 0, width: 0, top: 0, height: 0 }, false);\n });\n\n config.setCursor({\n bind: {\n dblclick: (u) => () => {\n if (!maybeZoomAction(u.cursor!.event)) {\n return null;\n }\n\n if (withZoomY && yZoomed) {\n for (let key in u.scales!) {\n if (key !== 'x') {\n // @ts-ignore (this is not typed correctly in uPlot, assigning nulls means auto-scale / reset)\n u.setScale(key, { min: null, max: null });\n }\n }\n\n yZoomed = false;\n } else {\n let xScale = u.scales.x;\n\n const frTs = xScale.min!;\n const toTs = xScale.max!;\n const pad = (toTs - frTs) / 2;\n\n onZoom({ from: frTs - pad, to: toTs + pad });\n }\n\n return null;\n },\n },\n });\n }, [config, onZoom, withZoomY]);\n\n return null;\n};\n"],"names":["e"],"mappings":"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"}