@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
72 lines (71 loc) • 4.21 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { assembleLocString, getEnv, getSession, parseLocString, } from '@jbrowse/core/util';
import { Button, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, } from '@mui/material';
import { getRoot, resolveIdentifier } from 'mobx-state-tree';
import { navToOption } from '../../searchUtils';
export default function SearchResultsTable({ searchResults, assemblyName: optAssemblyName, model, handleClose, }) {
const session = getSession(model);
const { pluginManager } = getEnv(session);
const { assemblyManager } = session;
const assemblyName = optAssemblyName || model.displayedRegions[0].assemblyName;
const assembly = assemblyManager.get(assemblyName);
if (!assembly) {
throw new Error(`assembly ${assemblyName} not found`);
}
if (!assembly.regions) {
throw new Error(`assembly ${assemblyName} regions not loaded`);
}
function getTrackName(trackId) {
var _a;
if (trackId) {
const schema = pluginManager.pluggableConfigSchemaType('track');
const configuration = resolveIdentifier(schema, getRoot(model), trackId);
return ((_a = configuration === null || configuration === void 0 ? void 0 : configuration.name) === null || _a === void 0 ? void 0 : _a.value) || '';
}
return '';
}
async function handleClick(result) {
var _a;
if (result.hasLocation()) {
await navToOption({
option: result,
model,
assemblyName,
});
}
else {
const location = result.getLabel();
const newRegion = (_a = assembly === null || assembly === void 0 ? void 0 : assembly.regions) === null || _a === void 0 ? void 0 : _a.find(region => location === region.refName);
if (newRegion) {
model.setDisplayedRegions([newRegion]);
model.showAllRegions();
}
}
}
return (_jsx(TableContainer, { component: Paper, children: _jsxs(Table, { children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: "Name" }), _jsx(TableCell, { align: "right", children: "Location" }), _jsx(TableCell, { align: "right", children: "Track" }), _jsx(TableCell, { align: "right" })] }) }), _jsx(TableBody, { children: searchResults.map(result => {
const locString = result.getLocation();
let loc;
try {
loc = locString
? parseLocString(locString, refName => assembly.isValidRefName(refName))
: undefined;
}
catch (e) { }
return (_jsxs(TableRow, { children: [_jsx(TableCell, { component: "th", scope: "row", children: result.getLabel() }), _jsx(TableCell, { align: "right", children: loc
? assembleLocString({
...loc,
refName: assembly.getCanonicalRefName(loc.refName) ||
loc.refName,
})
: locString }), _jsx(TableCell, { align: "right", children: getTrackName(result.getTrackId()) || 'N/A' }), _jsx(TableCell, { align: "right", children: _jsx(Button, { onClick: async () => {
try {
await handleClick(result);
}
catch (e) {
console.error(e);
session.notifyError(`${e}`, e);
}
handleClose();
}, color: "primary", variant: "contained", children: "Go" }) })] }, result.getId()));
}) })] }) }));
}