UNPKG

@jbrowse/plugin-linear-genome-view

Version:

JBrowse 2 linear genome view

72 lines (71 loc) 4.21 kB
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())); }) })] }) })); }