@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
75 lines (74 loc) • 4.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SearchResultsTable;
const jsx_runtime_1 = require("react/jsx-runtime");
const util_1 = require("@jbrowse/core/util");
const material_1 = require("@mui/material");
const mobx_state_tree_1 = require("mobx-state-tree");
const searchUtils_1 = require("../../searchUtils");
function SearchResultsTable({ searchResults, assemblyName: optAssemblyName, model, handleClose, }) {
const session = (0, util_1.getSession)(model);
const { pluginManager } = (0, util_1.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 = (0, mobx_state_tree_1.resolveIdentifier)(schema, (0, mobx_state_tree_1.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 (0, searchUtils_1.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 ((0, jsx_runtime_1.jsx)(material_1.TableContainer, { component: material_1.Paper, children: (0, jsx_runtime_1.jsxs)(material_1.Table, { children: [(0, jsx_runtime_1.jsx)(material_1.TableHead, { children: (0, jsx_runtime_1.jsxs)(material_1.TableRow, { children: [(0, jsx_runtime_1.jsx)(material_1.TableCell, { children: "Name" }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right", children: "Location" }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right", children: "Track" }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right" })] }) }), (0, jsx_runtime_1.jsx)(material_1.TableBody, { children: searchResults.map(result => {
const locString = result.getLocation();
let loc;
try {
loc = locString
? (0, util_1.parseLocString)(locString, refName => assembly.isValidRefName(refName))
: undefined;
}
catch (e) { }
return ((0, jsx_runtime_1.jsxs)(material_1.TableRow, { children: [(0, jsx_runtime_1.jsx)(material_1.TableCell, { component: "th", scope: "row", children: result.getLabel() }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right", children: loc
? (0, util_1.assembleLocString)({
...loc,
refName: assembly.getCanonicalRefName(loc.refName) ||
loc.refName,
})
: locString }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right", children: getTrackName(result.getTrackId()) || 'N/A' }), (0, jsx_runtime_1.jsx)(material_1.TableCell, { align: "right", children: (0, jsx_runtime_1.jsx)(material_1.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()));
}) })] }) }));
}