@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
50 lines (49 loc) • 2.47 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Suspense, useRef, useState } from 'react';
import { getConf } from '@jbrowse/core/configuration';
import { observer } from 'mobx-react';
import { makeStyles } from 'tss-react/mui';
import LinearBlocks from './LinearBlocks';
import MenuPage from './MenuPage';
const useStyles = makeStyles()({
display: {
position: 'relative',
whiteSpace: 'nowrap',
textAlign: 'left',
width: '100%',
minHeight: '100%',
},
});
const BaseLinearDisplay = observer(function (props) {
const { classes } = useStyles();
const ref = useRef(null);
const [clientRect, setClientRect] = useState();
const [offsetMouseCoord, setOffsetMouseCoord] = useState([0, 0]);
const [clientMouseCoord, setClientMouseCoord] = useState([0, 0]);
const [contextCoord, setContextCoord] = useState();
const { model, children } = props;
const { TooltipComponent, DisplayMessageComponent, height } = model;
return (_jsxs("div", { ref: ref, "data-testid": `display-${getConf(model, 'displayId')}`, className: classes.display, onContextMenu: event => {
event.preventDefault();
if (contextCoord) {
setContextCoord(undefined);
}
else if (ref.current) {
setContextCoord([event.clientX, event.clientY]);
}
}, onMouseMove: event => {
if (!ref.current) {
return;
}
const rect = ref.current.getBoundingClientRect();
const { left, top } = rect;
setOffsetMouseCoord([event.clientX - left, event.clientY - top]);
setClientMouseCoord([event.clientX, event.clientY]);
setClientRect(rect);
}, children: [DisplayMessageComponent ? (_jsx(DisplayMessageComponent, { model: model })) : (_jsx(LinearBlocks, { ...props })), children, _jsx(Suspense, { fallback: null, children: _jsx(TooltipComponent, { model: model, height: height, offsetMouseCoord: offsetMouseCoord, clientMouseCoord: clientMouseCoord, clientRect: clientRect, mouseCoord: offsetMouseCoord }) }), contextCoord ? (_jsx(MenuPage, { contextCoord: contextCoord, model: model, onClose: () => {
setContextCoord(undefined);
} })) : null] }));
});
export default BaseLinearDisplay;
export { default as Tooltip } from './Tooltip';
export { default as BlockMsg } from './BlockMsg';