UNPKG

@grafana/ui

Version:
1 lines 7.33 kB
{"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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"}