@jbrowse/plugin-wiggle
Version:
JBrowse 2 wiggle adapters, tracks, etc.
60 lines (59 loc) • 2.28 kB
JavaScript
import { lazy } from 'react';
import { readConfObject } from '@jbrowse/core/configuration';
import { getSession, isSessionWithAddTracks } from '@jbrowse/core/util';
const ConfirmDialog = lazy(() => import('./ConfirmDialog'));
function makeTrack({ model, arg, }) {
const tracks = model.selection;
const trackIds = tracks.map(c => readConfObject(c, 'name'));
const subadapters = tracks
.map(c => readConfObject(c, 'adapter'))
.map((c, idx) => ({ ...c, source: trackIds[idx] }));
const now = +Date.now();
const trackId = `multitrack-${now}-sessionTrack`;
const session = getSession(model);
if (isSessionWithAddTracks(session)) {
session.addTrackConf({
type: 'MultiQuantitativeTrack',
trackId,
name: arg.name,
assemblyNames: [
...new Set(tracks.flatMap(c => readConfObject(c, 'assemblyNames'))),
],
adapter: {
type: 'MultiWiggleAdapter',
subadapters,
},
});
model.view.showTrack(trackId);
}
}
export default function CreateMultiWiggleExtensionF(pm) {
pm.addToExtensionPoint('TrackSelector-multiTrackMenuItems', (items, props) => {
const { session } = props;
return [
...items,
...(isSessionWithAddTracks(session)
? [
{
label: 'Create multi-wiggle track',
onClick: (model) => {
const tracks = model.selection;
getSession(model).queueDialog(handleClose => [
ConfirmDialog,
{
tracks,
onClose: (arg, arg1) => {
if (arg && arg1) {
makeTrack({ model, arg: arg1 });
}
handleClose();
},
},
]);
},
},
]
: []),
];
});
}