@jbrowse/plugin-linear-genome-view
Version:
JBrowse 2 linear genome view
41 lines (40 loc) • 3.35 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { getSession, toLocale } from '@jbrowse/core/util';
import { Box, Button, Table, TableBody, TableCell, TableHead, TableRow, } from '@mui/material';
import { collapseIntrons, getExonsAndCDS } from "./util.js";
export default function TranscriptTable({ transcripts, view, assembly, padding, validPadding, handleClose, }) {
const sorted = [...transcripts].sort((a, b) => {
const lenA = a.get('end') - a.get('start');
const lenB = b.get('end') - b.get('start');
return lenB - lenA;
});
return (_jsx(Box, { sx: { maxHeight: 600, overflow: 'auto' }, children: _jsxs(Table, { size: "small", stickyHeader: true, children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: "Name/ID" }), _jsx(TableCell, { children: "Type" }), _jsx(TableCell, { align: "right", children: "Length" }), _jsx(TableCell, { align: "right", children: "Exons" }), _jsx(TableCell, { align: "right", children: "CDS" }), _jsx(TableCell, {})] }) }), _jsx(TableBody, { children: sorted.map((transcript, idx) => {
const start = transcript.get('start');
const end = transcript.get('end');
const name = transcript.get('name') ||
transcript.get('id') ||
`Transcript ${idx + 1}`;
const type = transcript.get('type') || 'transcript';
const exonsAndCDS = getExonsAndCDS([transcript]);
const exonCount = exonsAndCDS.filter(f => f.get('type') === 'exon').length;
const cdsCount = exonsAndCDS.length - exonCount;
return (_jsxs(TableRow, { children: [_jsx(TableCell, { children: name }), _jsx(TableCell, { children: type }), _jsxs(TableCell, { align: "right", children: [toLocale(end - start), " bp"] }), _jsx(TableCell, { align: "right", children: exonCount }), _jsx(TableCell, { align: "right", children: cdsCount }), _jsx(TableCell, { align: "right", children: _jsx(Button, { size: "small", variant: "contained", color: "primary", disabled: !validPadding, onClick: () => {
;
(async () => {
try {
await collapseIntrons({
view,
transcripts: [transcript],
assembly,
padding,
});
handleClose();
}
catch (e) {
getSession(view).notifyError(`${e}`, e);
console.error(e);
}
})();
}, children: "Select" }) })] }, transcript.id()));
}) })] }) }));
}