UNPKG

@jbrowse/plugin-wiggle

Version:

JBrowse 2 wiggle adapters, tracks, etc.

47 lines (46 loc) 1.93 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { useRef } from 'react'; import { PrerenderedCanvas } from '@jbrowse/core/ui'; import { getSession } from '@jbrowse/core/util'; import { observer } from 'mobx-react'; const WiggleRendering = observer(function WiggleRendering(props) { const { regions, features, bpPerPx, width, height, displayModel } = props; const region = regions[0]; const ref = useRef(null); function getFeatureUnderMouse(eventClientX) { let offset = 0; if (ref.current) { offset = ref.current.getBoundingClientRect().left; } const offsetX = eventClientX - offset; const px = region.reversed ? width - offsetX : offsetX; const clientBp = region.start + bpPerPx * px; let featureUnderMouse; for (const feature of features.values()) { if (clientBp <= feature.get('end') + bpPerPx && clientBp >= feature.get('start')) { featureUnderMouse = feature; break; } } return featureUnderMouse; } return (_jsx("div", { ref: ref, "data-testid": "wiggle-rendering-test", onMouseMove: e => { displayModel.setFeatureIdUnderMouse(getFeatureUnderMouse(e.clientX)?.id()); }, onClick: e => { const featureId = getFeatureUnderMouse(e.clientX)?.id(); if (featureId) { displayModel.selectFeatureById(featureId).catch((err) => { console.error(err); getSession(displayModel).notifyError(`${err}`, err); }); } }, onMouseLeave: () => { displayModel.setFeatureIdUnderMouse(undefined); }, style: { overflow: 'visible', position: 'relative', height, }, children: _jsx(PrerenderedCanvas, { ...props }) })); }); export default WiggleRendering;