@jbrowse/plugin-wiggle
Version:
JBrowse 2 wiggle adapters, tracks, etc.
47 lines (46 loc) • 1.93 kB
JavaScript
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;