@jbrowse/plugin-wiggle
Version:
JBrowse 2 wiggle adapters, tracks, etc.
36 lines (35 loc) • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
const ui_1 = require("@jbrowse/core/ui");
const mobx_react_1 = require("mobx-react");
const WiggleRendering = (0, mobx_react_1.observer)(function (props) {
const { regions, features, bpPerPx, width, height, onMouseLeave, onMouseMove, onFeatureClick, } = props;
const region = regions[0];
const ref = (0, react_1.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 ((0, jsx_runtime_1.jsx)("div", { ref: ref, "data-testid": "wiggle-rendering-test", onMouseMove: e => { var _a; return onMouseMove === null || onMouseMove === void 0 ? void 0 : onMouseMove(e, (_a = getFeatureUnderMouse(e.clientX)) === null || _a === void 0 ? void 0 : _a.id()); }, onClick: e => { var _a; return onFeatureClick === null || onFeatureClick === void 0 ? void 0 : onFeatureClick(e, (_a = getFeatureUnderMouse(e.clientX)) === null || _a === void 0 ? void 0 : _a.id()); }, onMouseLeave: e => onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(e), style: {
overflow: 'visible',
position: 'relative',
height,
}, children: (0, jsx_runtime_1.jsx)(ui_1.PrerenderedCanvas, { ...props }) }));
});
exports.default = WiggleRendering;