@jbrowse/plugin-data-management 1.4.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AddTrackWidget/components/TrackSourceSelect.d.ts +2 -1
- package/dist/AddTrackWidget/model.d.ts +1 -363
- package/dist/PluginStoreWidget/components/CustomPluginForm.d.ts +1 -1
- package/dist/PluginStoreWidget/components/PluginCard.d.ts +2 -2
- package/dist/SetDefaultSession/SetDefaultSession.d.ts +4 -6
- package/dist/index.d.ts +8 -12
- package/dist/plugin-data-management.cjs.development.js +627 -501
- package/dist/plugin-data-management.cjs.development.js.map +1 -1
- package/dist/plugin-data-management.cjs.production.min.js +1 -1
- package/dist/plugin-data-management.cjs.production.min.js.map +1 -1
- package/dist/plugin-data-management.esm.js +614 -507
- package/dist/plugin-data-management.esm.js.map +1 -1
- package/package.json +3 -2
- package/src/AddConnectionWidget/components/AddConnectionWidget.test.js +3 -8
- package/src/AddTrackWidget/components/AddTrackWidget.test.js +2 -3
- package/src/AddTrackWidget/components/AddTrackWidget.tsx +4 -2
- package/src/AddTrackWidget/components/ConfirmTrack.tsx +160 -88
- package/src/AddTrackWidget/components/TrackSourceSelect.tsx +30 -23
- package/src/AddTrackWidget/components/__snapshots__/AddTrackWidget.test.js.snap +157 -124
- package/src/AddTrackWidget/index.test.jsx +78 -26
- package/src/AddTrackWidget/model.ts +5 -14
- package/src/AssemblyManager/AssemblyAddForm.tsx +7 -6
- package/src/AssemblyManager/AssemblyManager.test.tsx +1 -0
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +27 -17
- package/src/HierarchicalTrackSelectorWidget/model.js +3 -2
- package/src/PluginStoreWidget/components/CustomPluginForm.tsx +164 -56
- package/src/PluginStoreWidget/components/InstalledPlugin.tsx +10 -2
- package/src/PluginStoreWidget/components/PluginCard.tsx +7 -9
- package/src/PluginStoreWidget/components/PluginStoreWidget.test.js +9 -10
- package/src/PluginStoreWidget/components/PluginStoreWidget.tsx +36 -26
- package/src/PluginStoreWidget/components/__snapshots__/PluginStoreWidget.test.js.snap +89 -51
- package/src/SetDefaultSession/SetDefaultSession.test.tsx +7 -81
- package/src/SetDefaultSession/SetDefaultSession.tsx +51 -162
- package/src/index.ts +1 -51
- package/src/ucsc-trackhub/configSchema.js +4 -1
- package/src/ucsc-trackhub/model.js +31 -31
- package/src/ucsc-trackhub/ucscTrackHub.js +40 -12
|
@@ -2,19 +2,15 @@ import React, { useState, useEffect, lazy, Suspense, useRef, useMemo, useCallbac
|
|
|
2
2
|
import ConnectionType from '@jbrowse/core/pluggableElementTypes/ConnectionType';
|
|
3
3
|
import WidgetType from '@jbrowse/core/pluggableElementTypes/WidgetType';
|
|
4
4
|
import Plugin from '@jbrowse/core/Plugin';
|
|
5
|
-
import { objectHash, getSession, isElectron, isAbstractMenuManager } from '@jbrowse/core/util';
|
|
6
|
-
import NoteAddIcon from '@material-ui/icons/NoteAdd';
|
|
7
|
-
import InputIcon from '@material-ui/icons/Input';
|
|
8
|
-
import ExtensionIcon from '@material-ui/icons/Extension';
|
|
9
5
|
import { baseConnectionConfig, BaseConnectionModelFactory } from '@jbrowse/core/pluggableElementTypes/models';
|
|
10
|
-
import { ConfigurationSchema, ConfigurationReference,
|
|
6
|
+
import { ConfigurationSchema, ConfigurationReference, getConf, readConfObject } from '@jbrowse/core/configuration';
|
|
7
|
+
import { objectHash, getSession, isElectron } from '@jbrowse/core/util';
|
|
11
8
|
import { types, getParent, getEnv, getRoot } from 'mobx-state-tree';
|
|
12
|
-
import { GenomesFile, TrackDbFile, HubFile } from '@gmod/ucsc-hub';
|
|
13
9
|
import { openLocation } from '@jbrowse/core/util/io';
|
|
14
|
-
import { generateUnknownTrackConf, generateUnsupportedTrackConf, guessAdapter, UNSUPPORTED, guessTrackType, UNKNOWN } from '@jbrowse/core/util/tracks';
|
|
10
|
+
import { generateUnknownTrackConf, generateUnsupportedTrackConf, guessAdapter, getFileName, UNSUPPORTED, guessTrackType, UNKNOWN } from '@jbrowse/core/util/tracks';
|
|
15
11
|
import { ElementId } from '@jbrowse/core/util/types/mst';
|
|
16
12
|
import { observer, PropTypes } from 'mobx-react';
|
|
17
|
-
import { ListItem, IconButton, Typography, Tooltip, Dialog, DialogTitle, DialogContent, DialogActions, Button, List, Card, CardContent, Link, CardActions,
|
|
13
|
+
import { ListItem, IconButton, Typography, Tooltip, Dialog, DialogTitle, DialogContent, DialogActions, Button, List, Card, CardContent, Link, CardActions, makeStyles as makeStyles$1, DialogContentText, TextField, Collapse, InputAdornment, Accordion, AccordionSummary, TableRow, TableCell, TableContainer, Paper, Table, TableHead, TableBody, Grid, MenuItem, Fab, Menu, FormControlLabel, Checkbox, ListSubheader, Stepper, Step, StepLabel, StepContent } from '@material-ui/core';
|
|
18
14
|
import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
|
|
19
15
|
import ClearIcon from '@material-ui/icons/Clear';
|
|
20
16
|
import InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';
|
|
@@ -25,22 +21,8 @@ import { isSessionWithSessionPlugins } from '@jbrowse/core/util/types';
|
|
|
25
21
|
import PersonIcon from '@material-ui/icons/Person';
|
|
26
22
|
import AddIcon from '@material-ui/icons/Add';
|
|
27
23
|
import CheckIcon from '@material-ui/icons/Check';
|
|
28
|
-
import
|
|
29
|
-
import DialogTitle$1 from '@material-ui/core/DialogTitle';
|
|
30
|
-
import TextField from '@material-ui/core/TextField';
|
|
31
|
-
import Button$1 from '@material-ui/core/Button';
|
|
24
|
+
import clsx from 'clsx';
|
|
32
25
|
import IconButton$1 from '@material-ui/core/IconButton';
|
|
33
|
-
import DialogContent$1 from '@material-ui/core/DialogContent';
|
|
34
|
-
import DialogActions$1 from '@material-ui/core/DialogActions';
|
|
35
|
-
import List$1 from '@material-ui/core/List';
|
|
36
|
-
import ListItem$1 from '@material-ui/core/ListItem';
|
|
37
|
-
import ListItemIcon from '@material-ui/core/ListItemIcon';
|
|
38
|
-
import ListItemText from '@material-ui/core/ListItemText';
|
|
39
|
-
import ListSubheader from '@material-ui/core/ListSubheader';
|
|
40
|
-
import Paper from '@material-ui/core/Paper';
|
|
41
|
-
import Typography$1 from '@material-ui/core/Typography';
|
|
42
|
-
import Radio from '@material-ui/core/Radio';
|
|
43
|
-
import pluralize from 'pluralize';
|
|
44
26
|
import ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos';
|
|
45
27
|
import CreateIcon from '@material-ui/icons/Create';
|
|
46
28
|
import DeleteIcon from '@material-ui/icons/Delete';
|
|
@@ -54,14 +36,16 @@ import PowerOutlinedIcon from '@material-ui/icons/PowerOutlined';
|
|
|
54
36
|
import AutoSizer from 'react-virtualized-auto-sizer';
|
|
55
37
|
import JBrowseMenu from '@jbrowse/core/ui/Menu';
|
|
56
38
|
import { VariableSizeTree } from 'react-vtree';
|
|
57
|
-
import Link$1 from '@material-ui/core/Link';
|
|
58
|
-
import MenuItem$1 from '@material-ui/core/MenuItem';
|
|
59
|
-
import { FileSelector as FileSelector$1 } from '@jbrowse/core/ui';
|
|
60
39
|
import { Alert } from '@material-ui/lab';
|
|
40
|
+
import { FileSelector as FileSelector$1 } from '@jbrowse/core/ui';
|
|
41
|
+
import Button$1 from '@material-ui/core/Button';
|
|
61
42
|
import Step$1 from '@material-ui/core/Step';
|
|
62
43
|
import StepContent$1 from '@material-ui/core/StepContent';
|
|
63
44
|
import StepLabel$1 from '@material-ui/core/StepLabel';
|
|
64
45
|
import Stepper$1 from '@material-ui/core/Stepper';
|
|
46
|
+
import Typography$1 from '@material-ui/core/Typography';
|
|
47
|
+
import MenuItem$1 from '@material-ui/core/MenuItem';
|
|
48
|
+
import TextField$1 from '@material-ui/core/TextField';
|
|
65
49
|
import OpenInNewIcon from '@material-ui/icons/OpenInNew';
|
|
66
50
|
|
|
67
51
|
function ownKeys(object, enumerableOnly) {
|
|
@@ -246,6 +230,8 @@ function _assertThisInitialized(self) {
|
|
|
246
230
|
function _possibleConstructorReturn(self, call) {
|
|
247
231
|
if (call && (typeof call === "object" || typeof call === "function")) {
|
|
248
232
|
return call;
|
|
233
|
+
} else if (call !== void 0) {
|
|
234
|
+
throw new TypeError("Derived constructors may only return object or undefined");
|
|
249
235
|
}
|
|
250
236
|
|
|
251
237
|
return _assertThisInitialized(self);
|
|
@@ -406,7 +392,8 @@ var ucscConfigSchema = /*#__PURE__*/ConfigurationSchema('UCSCTrackHubConnection'
|
|
|
406
392
|
hubTxtLocation: {
|
|
407
393
|
type: 'fileLocation',
|
|
408
394
|
defaultValue: {
|
|
409
|
-
uri: 'http://mysite.com/path/to/hub.txt'
|
|
395
|
+
uri: 'http://mysite.com/path/to/hub.txt',
|
|
396
|
+
locationType: 'UriLocation'
|
|
410
397
|
},
|
|
411
398
|
description: 'location of the hub file (usually called hub.txt)'
|
|
412
399
|
},
|
|
@@ -516,11 +503,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
516
503
|
|
|
517
504
|
|
|
518
505
|
var IteratorPrototype = {};
|
|
519
|
-
|
|
520
|
-
IteratorPrototype[iteratorSymbol] = function () {
|
|
506
|
+
define(IteratorPrototype, iteratorSymbol, function () {
|
|
521
507
|
return this;
|
|
522
|
-
};
|
|
523
|
-
|
|
508
|
+
});
|
|
524
509
|
var getProto = Object.getPrototypeOf;
|
|
525
510
|
var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
|
|
526
511
|
|
|
@@ -531,8 +516,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
531
516
|
}
|
|
532
517
|
|
|
533
518
|
var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
|
|
534
|
-
GeneratorFunction.prototype =
|
|
535
|
-
|
|
519
|
+
GeneratorFunction.prototype = GeneratorFunctionPrototype;
|
|
520
|
+
define(Gp, "constructor", GeneratorFunctionPrototype);
|
|
521
|
+
define(GeneratorFunctionPrototype, "constructor", GeneratorFunction);
|
|
536
522
|
GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the
|
|
537
523
|
// Iterator interface in terms of a single ._invoke method.
|
|
538
524
|
|
|
@@ -637,11 +623,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
637
623
|
}
|
|
638
624
|
|
|
639
625
|
defineIteratorMethods(AsyncIterator.prototype);
|
|
640
|
-
|
|
641
|
-
AsyncIterator.prototype[asyncIteratorSymbol] = function () {
|
|
626
|
+
define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
|
|
642
627
|
return this;
|
|
643
|
-
};
|
|
644
|
-
|
|
628
|
+
});
|
|
645
629
|
exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of
|
|
646
630
|
// AsyncIterator objects; they just return a Promise for the value of
|
|
647
631
|
// the final result produced by the iterator.
|
|
@@ -818,13 +802,12 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
818
802
|
// object to not be returned from this call. This ensures that doesn't happen.
|
|
819
803
|
// See https://github.com/facebook/regenerator/issues/274 for more details.
|
|
820
804
|
|
|
821
|
-
Gp
|
|
805
|
+
define(Gp, iteratorSymbol, function () {
|
|
822
806
|
return this;
|
|
823
|
-
};
|
|
824
|
-
|
|
825
|
-
Gp.toString = function () {
|
|
807
|
+
});
|
|
808
|
+
define(Gp, "toString", function () {
|
|
826
809
|
return "[object Generator]";
|
|
827
|
-
};
|
|
810
|
+
});
|
|
828
811
|
|
|
829
812
|
function pushTryEntry(locs) {
|
|
830
813
|
var entry = {
|
|
@@ -1136,14 +1119,19 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
1136
1119
|
} catch (accidentalStrictMode) {
|
|
1137
1120
|
// This module should not be running in strict mode, so the above
|
|
1138
1121
|
// assignment should always work unless something is misconfigured. Just
|
|
1139
|
-
// in case runtime.js accidentally runs in strict mode,
|
|
1122
|
+
// in case runtime.js accidentally runs in strict mode, in modern engines
|
|
1123
|
+
// we can explicitly access globalThis. In older engines we can escape
|
|
1140
1124
|
// strict mode using a global Function call. This could conceivably fail
|
|
1141
1125
|
// if a Content Security Policy forbids using Function, but in that case
|
|
1142
1126
|
// the proper solution is to fix the accidental strict mode problem. If
|
|
1143
1127
|
// you've misconfigured your bundler to force strict mode and applied a
|
|
1144
1128
|
// CSP to forbid Function, and you're not willing to fix either of those
|
|
1145
1129
|
// problems, please detail your unique predicament in a GitHub issue.
|
|
1146
|
-
|
|
1130
|
+
if (typeof globalThis === "object") {
|
|
1131
|
+
globalThis.regeneratorRuntime = runtime;
|
|
1132
|
+
} else {
|
|
1133
|
+
Function("r", "regeneratorRuntime = r")(runtime);
|
|
1134
|
+
}
|
|
1147
1135
|
}
|
|
1148
1136
|
});
|
|
1149
1137
|
|
|
@@ -1153,7 +1141,8 @@ function fetchHubFile(_x) {
|
|
|
1153
1141
|
|
|
1154
1142
|
function _fetchHubFile() {
|
|
1155
1143
|
_fetchHubFile = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee(hubFileLocation) {
|
|
1156
|
-
var hubFileText;
|
|
1144
|
+
var hubFileText, _yield$import, HubFile;
|
|
1145
|
+
|
|
1157
1146
|
return runtime_1.wrap(function _callee$(_context) {
|
|
1158
1147
|
while (1) {
|
|
1159
1148
|
switch (_context.prev = _context.next) {
|
|
@@ -1164,19 +1153,25 @@ function _fetchHubFile() {
|
|
|
1164
1153
|
|
|
1165
1154
|
case 3:
|
|
1166
1155
|
hubFileText = _context.sent;
|
|
1156
|
+
_context.next = 6;
|
|
1157
|
+
return import('@gmod/ucsc-hub');
|
|
1158
|
+
|
|
1159
|
+
case 6:
|
|
1160
|
+
_yield$import = _context.sent;
|
|
1161
|
+
HubFile = _yield$import.HubFile;
|
|
1167
1162
|
return _context.abrupt("return", new HubFile(hubFileText));
|
|
1168
1163
|
|
|
1169
|
-
case
|
|
1170
|
-
_context.prev =
|
|
1164
|
+
case 11:
|
|
1165
|
+
_context.prev = 11;
|
|
1171
1166
|
_context.t0 = _context["catch"](0);
|
|
1172
1167
|
throw new Error("Not a valid hub.txt file, got error: '".concat(_context.t0, "'"));
|
|
1173
1168
|
|
|
1174
|
-
case
|
|
1169
|
+
case 14:
|
|
1175
1170
|
case "end":
|
|
1176
1171
|
return _context.stop();
|
|
1177
1172
|
}
|
|
1178
1173
|
}
|
|
1179
|
-
}, _callee, null, [[0,
|
|
1174
|
+
}, _callee, null, [[0, 11]]);
|
|
1180
1175
|
}));
|
|
1181
1176
|
return _fetchHubFile.apply(this, arguments);
|
|
1182
1177
|
}
|
|
@@ -1187,7 +1182,8 @@ function fetchGenomesFile(_x2) {
|
|
|
1187
1182
|
|
|
1188
1183
|
function _fetchGenomesFile() {
|
|
1189
1184
|
_fetchGenomesFile = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee2(genomesFileLocation) {
|
|
1190
|
-
var genomesFileText;
|
|
1185
|
+
var genomesFileText, _yield$import2, GenomesFile;
|
|
1186
|
+
|
|
1191
1187
|
return runtime_1.wrap(function _callee2$(_context2) {
|
|
1192
1188
|
while (1) {
|
|
1193
1189
|
switch (_context2.prev = _context2.next) {
|
|
@@ -1197,9 +1193,15 @@ function _fetchGenomesFile() {
|
|
|
1197
1193
|
|
|
1198
1194
|
case 2:
|
|
1199
1195
|
genomesFileText = _context2.sent;
|
|
1196
|
+
_context2.next = 5;
|
|
1197
|
+
return import('@gmod/ucsc-hub');
|
|
1198
|
+
|
|
1199
|
+
case 5:
|
|
1200
|
+
_yield$import2 = _context2.sent;
|
|
1201
|
+
GenomesFile = _yield$import2.GenomesFile;
|
|
1200
1202
|
return _context2.abrupt("return", new GenomesFile(genomesFileText));
|
|
1201
1203
|
|
|
1202
|
-
case
|
|
1204
|
+
case 8:
|
|
1203
1205
|
case "end":
|
|
1204
1206
|
return _context2.stop();
|
|
1205
1207
|
}
|
|
@@ -1215,7 +1217,8 @@ function fetchTrackDbFile(_x3) {
|
|
|
1215
1217
|
|
|
1216
1218
|
function _fetchTrackDbFile() {
|
|
1217
1219
|
_fetchTrackDbFile = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee3(trackDbFileLocation) {
|
|
1218
|
-
var
|
|
1220
|
+
var text, _yield$import3, TrackDbFile;
|
|
1221
|
+
|
|
1219
1222
|
return runtime_1.wrap(function _callee3$(_context3) {
|
|
1220
1223
|
while (1) {
|
|
1221
1224
|
switch (_context3.prev = _context3.next) {
|
|
@@ -1224,10 +1227,16 @@ function _fetchTrackDbFile() {
|
|
|
1224
1227
|
return openLocation(trackDbFileLocation).readFile('utf8');
|
|
1225
1228
|
|
|
1226
1229
|
case 2:
|
|
1227
|
-
|
|
1228
|
-
|
|
1230
|
+
text = _context3.sent;
|
|
1231
|
+
_context3.next = 5;
|
|
1232
|
+
return import('@gmod/ucsc-hub');
|
|
1229
1233
|
|
|
1230
|
-
case
|
|
1234
|
+
case 5:
|
|
1235
|
+
_yield$import3 = _context3.sent;
|
|
1236
|
+
TrackDbFile = _yield$import3.TrackDbFile;
|
|
1237
|
+
return _context3.abrupt("return", new TrackDbFile(text));
|
|
1238
|
+
|
|
1239
|
+
case 8:
|
|
1231
1240
|
case "end":
|
|
1232
1241
|
return _context3.stop();
|
|
1233
1242
|
}
|
|
@@ -1295,11 +1304,13 @@ function makeTrackConfig(track, categories, trackDbFileLocation, trackDb, sequen
|
|
|
1295
1304
|
|
|
1296
1305
|
if (trackDbFileLocation.uri) {
|
|
1297
1306
|
bigDataLocation = {
|
|
1298
|
-
uri: new URL(track.get('bigDataUrl'), trackDbFileLocation.uri).href
|
|
1307
|
+
uri: new URL(track.get('bigDataUrl'), trackDbFileLocation.uri).href,
|
|
1308
|
+
locationType: 'UriLocation'
|
|
1299
1309
|
};
|
|
1300
1310
|
} else {
|
|
1301
1311
|
bigDataLocation = {
|
|
1302
|
-
localPath: track.get('bigDataUrl')
|
|
1312
|
+
localPath: track.get('bigDataUrl'),
|
|
1313
|
+
locationType: 'LocalPathLocation'
|
|
1303
1314
|
};
|
|
1304
1315
|
}
|
|
1305
1316
|
|
|
@@ -1309,15 +1320,19 @@ function makeTrackConfig(track, categories, trackDbFileLocation, trackDb, sequen
|
|
|
1309
1320
|
case 'bam':
|
|
1310
1321
|
if (trackDbFileLocation.uri) {
|
|
1311
1322
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1312
|
-
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href
|
|
1323
|
+
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href,
|
|
1324
|
+
locationType: 'UriLocation'
|
|
1313
1325
|
} : {
|
|
1314
|
-
uri: new URL("".concat(track.get('bigDataUrl'), ".bai"), trackDbFileLocation.uri).href
|
|
1326
|
+
uri: new URL("".concat(track.get('bigDataUrl'), ".bai"), trackDbFileLocation.uri).href,
|
|
1327
|
+
locationType: 'UriLocation'
|
|
1315
1328
|
};
|
|
1316
1329
|
} else {
|
|
1317
1330
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1318
|
-
localPath: track.get('bigDataIndex')
|
|
1331
|
+
localPath: track.get('bigDataIndex'),
|
|
1332
|
+
locationType: 'LocalPathLocation'
|
|
1319
1333
|
} : {
|
|
1320
|
-
localPath: "".concat(track.get('bigDataUrl'), ".bai")
|
|
1334
|
+
localPath: "".concat(track.get('bigDataUrl'), ".bai"),
|
|
1335
|
+
locationType: 'LocalPathLocation'
|
|
1321
1336
|
};
|
|
1322
1337
|
}
|
|
1323
1338
|
|
|
@@ -1467,15 +1482,19 @@ function makeTrackConfig(track, categories, trackDbFileLocation, trackDb, sequen
|
|
|
1467
1482
|
case 'cram':
|
|
1468
1483
|
if (trackDbFileLocation.uri) {
|
|
1469
1484
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1470
|
-
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href
|
|
1485
|
+
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href,
|
|
1486
|
+
locationType: 'UriLocation'
|
|
1471
1487
|
} : {
|
|
1472
|
-
uri: new URL("".concat(track.get('bigDataUrl'), ".crai"), trackDbFileLocation.uri).href
|
|
1488
|
+
uri: new URL("".concat(track.get('bigDataUrl'), ".crai"), trackDbFileLocation.uri).href,
|
|
1489
|
+
locationType: 'UriLocation'
|
|
1473
1490
|
};
|
|
1474
1491
|
} else {
|
|
1475
1492
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1476
|
-
localPath: track.get('bigDataIndex')
|
|
1493
|
+
localPath: track.get('bigDataIndex'),
|
|
1494
|
+
locationType: 'LocalPathLocation'
|
|
1477
1495
|
} : {
|
|
1478
|
-
localPath: "".concat(track.get('bigDataUrl'), ".crai")
|
|
1496
|
+
localPath: "".concat(track.get('bigDataUrl'), ".crai"),
|
|
1497
|
+
locationType: 'LocalPathLocation'
|
|
1479
1498
|
};
|
|
1480
1499
|
}
|
|
1481
1500
|
|
|
@@ -1519,15 +1538,19 @@ function makeTrackConfig(track, categories, trackDbFileLocation, trackDb, sequen
|
|
|
1519
1538
|
case 'vcfTabix':
|
|
1520
1539
|
if (trackDbFileLocation.uri) {
|
|
1521
1540
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1522
|
-
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href
|
|
1541
|
+
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href,
|
|
1542
|
+
locationType: 'UriLocation'
|
|
1523
1543
|
} : {
|
|
1524
|
-
uri: new URL("".concat(track.get('bigDataUrl'), ".tbi"), trackDbFileLocation.uri).href
|
|
1544
|
+
uri: new URL("".concat(track.get('bigDataUrl'), ".tbi"), trackDbFileLocation.uri).href,
|
|
1545
|
+
locationType: 'UriLocation'
|
|
1525
1546
|
};
|
|
1526
1547
|
} else {
|
|
1527
1548
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1528
|
-
localPath: track.get('bigDataIndex')
|
|
1549
|
+
localPath: track.get('bigDataIndex'),
|
|
1550
|
+
locationType: 'LocalPathLocation'
|
|
1529
1551
|
} : {
|
|
1530
|
-
localPath: "".concat(track.get('bigDataUrl'), ".tbi")
|
|
1552
|
+
localPath: "".concat(track.get('bigDataUrl'), ".tbi"),
|
|
1553
|
+
locationType: 'LocalPathLocation'
|
|
1531
1554
|
};
|
|
1532
1555
|
}
|
|
1533
1556
|
|
|
@@ -1578,22 +1601,17 @@ function UCSCTrackHubConnection(pluginManager) {
|
|
|
1578
1601
|
}).actions(function (self) {
|
|
1579
1602
|
return {
|
|
1580
1603
|
connect: function connect() {
|
|
1581
|
-
var connectionName =
|
|
1582
|
-
var hubFileLocation =
|
|
1604
|
+
var connectionName = getConf(self, 'name');
|
|
1605
|
+
var hubFileLocation = getConf(self, 'hubTxtLocation');
|
|
1583
1606
|
var session = getSession(self);
|
|
1584
1607
|
fetchHubFile(hubFileLocation).then(function (hubFile) {
|
|
1585
|
-
var genomesFileLocation
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
}
|
|
1592
|
-
genomesFileLocation = {
|
|
1593
|
-
localPath: hubFile.get('genomesFile')
|
|
1594
|
-
};
|
|
1595
|
-
}
|
|
1596
|
-
|
|
1608
|
+
var genomesFileLocation = hubFileLocation.uri ? {
|
|
1609
|
+
uri: new URL(hubFile.get('genomesFile'), hubFileLocation.uri).href,
|
|
1610
|
+
locationType: 'UriLocation'
|
|
1611
|
+
} : {
|
|
1612
|
+
localPath: hubFile.get('genomesFile'),
|
|
1613
|
+
locationType: 'LocalPathLocation'
|
|
1614
|
+
};
|
|
1597
1615
|
return Promise.all([hubFile, fetchGenomesFile(genomesFileLocation)]);
|
|
1598
1616
|
}).then(function (_ref) {
|
|
1599
1617
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
@@ -1611,7 +1629,7 @@ function UCSCTrackHubConnection(pluginManager) {
|
|
|
1611
1629
|
genomeName = _step$value[0],
|
|
1612
1630
|
genome = _step$value[1];
|
|
1613
1631
|
|
|
1614
|
-
var assemblyNames =
|
|
1632
|
+
var assemblyNames = getConf(self, 'assemblyNames');
|
|
1615
1633
|
|
|
1616
1634
|
if (assemblyNames.length > 0 && !assemblyNames.includes(genomeName)) {
|
|
1617
1635
|
return "break";
|
|
@@ -1625,18 +1643,13 @@ function UCSCTrackHubConnection(pluginManager) {
|
|
|
1625
1643
|
throw new Error("Cannot find assembly for \"".concat(genomeName, "\" from the genomes file for connection \"").concat(connectionName, "\""));
|
|
1626
1644
|
}
|
|
1627
1645
|
|
|
1628
|
-
var trackDbFileLocation =
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
}
|
|
1635
|
-
trackDbFileLocation = {
|
|
1636
|
-
localPath: genome.get('trackDb')
|
|
1637
|
-
};
|
|
1638
|
-
}
|
|
1639
|
-
|
|
1646
|
+
var trackDbFileLocation = hubFileLocation.uri ? {
|
|
1647
|
+
uri: new URL(genome.get('trackDb'), new URL(hubFile.get('genomesFile'), hubFileLocation.uri)).href,
|
|
1648
|
+
locationType: 'UriLocation'
|
|
1649
|
+
} : {
|
|
1650
|
+
localPath: genome.get('trackDb'),
|
|
1651
|
+
locationType: 'LocalPathLocation'
|
|
1652
|
+
};
|
|
1640
1653
|
trackDbData.push(Promise.all([trackDbFileLocation, fetchTrackDbFile(trackDbFileLocation), genomeName, assemblyConf]));
|
|
1641
1654
|
};
|
|
1642
1655
|
|
|
@@ -1694,13 +1707,6 @@ function isAbsoluteUrl() {
|
|
|
1694
1707
|
}
|
|
1695
1708
|
}
|
|
1696
1709
|
|
|
1697
|
-
function getFileName(track) {
|
|
1698
|
-
var uri = 'uri' in track ? track.uri : undefined;
|
|
1699
|
-
var localPath = 'localPath' in track ? track.localPath : undefined;
|
|
1700
|
-
var blob = 'blobId' in track ? track : undefined;
|
|
1701
|
-
return (blob === null || blob === void 0 ? void 0 : blob.name) || (uri === null || uri === void 0 ? void 0 : uri.slice(uri.lastIndexOf('/') + 1)) || (localPath === null || localPath === void 0 ? void 0 : localPath.slice(localPath.lastIndexOf('/') + 1)) || '';
|
|
1702
|
-
}
|
|
1703
|
-
|
|
1704
1710
|
function f(pluginManager) {
|
|
1705
1711
|
return types.model('AddTrackModel', {
|
|
1706
1712
|
id: ElementId,
|
|
@@ -1756,7 +1762,7 @@ function f(pluginManager) {
|
|
|
1756
1762
|
var trackData = self.trackData,
|
|
1757
1763
|
indexTrackData = self.indexTrackData,
|
|
1758
1764
|
adapterHint = self.adapterHint;
|
|
1759
|
-
return trackData ? guessAdapter(trackData, indexTrackData,
|
|
1765
|
+
return trackData ? guessAdapter(trackData, indexTrackData, adapterHint, self) : undefined;
|
|
1760
1766
|
},
|
|
1761
1767
|
|
|
1762
1768
|
get trackName() {
|
|
@@ -1823,7 +1829,7 @@ function f(pluginManager) {
|
|
|
1823
1829
|
},
|
|
1824
1830
|
|
|
1825
1831
|
get trackType() {
|
|
1826
|
-
return self.altTrackType || (this.trackAdapter ? guessTrackType(this.trackAdapter.type) : '');
|
|
1832
|
+
return self.altTrackType || (this.trackAdapter ? guessTrackType(this.trackAdapter.type, self) : '');
|
|
1827
1833
|
}
|
|
1828
1834
|
|
|
1829
1835
|
};
|
|
@@ -1865,9 +1871,9 @@ var hasAnyOverlap = function hasAnyOverlap() {
|
|
|
1865
1871
|
function passesFilter(filter, config) {
|
|
1866
1872
|
var name = getTrackName(config);
|
|
1867
1873
|
var categories = readConfObject(config, 'category') || [];
|
|
1868
|
-
var
|
|
1869
|
-
return !!name.
|
|
1870
|
-
return !!cat.
|
|
1874
|
+
var filterLower = filter.toLowerCase();
|
|
1875
|
+
return !!name.toLowerCase().includes(filterLower) || categories.filter(function (cat) {
|
|
1876
|
+
return !!cat.toLowerCase().includes(filterLower);
|
|
1871
1877
|
}).length;
|
|
1872
1878
|
}
|
|
1873
1879
|
|
|
@@ -2142,15 +2148,17 @@ var useStyles = /*#__PURE__*/makeStyles(function () {
|
|
|
2142
2148
|
},
|
|
2143
2149
|
dialogContainer: {
|
|
2144
2150
|
margin: 15
|
|
2151
|
+
},
|
|
2152
|
+
lockedPluginTooltip: {
|
|
2153
|
+
marginRight: '0.5rem'
|
|
2145
2154
|
}
|
|
2146
2155
|
};
|
|
2147
2156
|
});
|
|
2148
2157
|
|
|
2149
2158
|
function LockedPlugin() {
|
|
2159
|
+
var classes = useStyles();
|
|
2150
2160
|
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
2151
|
-
|
|
2152
|
-
marginRight: '0.5rem'
|
|
2153
|
-
},
|
|
2161
|
+
className: classes.lockedPluginTooltip,
|
|
2154
2162
|
title: "This plugin was installed by an administrator, you cannot remove it."
|
|
2155
2163
|
}, /*#__PURE__*/React.createElement(LockIcon, null));
|
|
2156
2164
|
}
|
|
@@ -2212,7 +2220,7 @@ function InstalledPlugin(_ref2) {
|
|
|
2212
2220
|
onClose: function onClose(name) {
|
|
2213
2221
|
if (name) {
|
|
2214
2222
|
var pluginMetadata = pluginManager.pluginMetadata[plugin.name];
|
|
2215
|
-
var pluginUrl = pluginMetadata.url;
|
|
2223
|
+
var pluginUrl = pluginMetadata.url || pluginMetadata.esmUrl || pluginMetadata.umdUrl || pluginMetadata.cjsUrl;
|
|
2216
2224
|
|
|
2217
2225
|
if (adminMode) {
|
|
2218
2226
|
jbrowse.removePlugin(pluginUrl);
|
|
@@ -2264,7 +2272,7 @@ function InstalledPluginsList(_ref) {
|
|
|
2264
2272
|
|
|
2265
2273
|
var InstalledPluginsList$1 = /*#__PURE__*/observer(InstalledPluginsList);
|
|
2266
2274
|
|
|
2267
|
-
var useStyles$1 = /*#__PURE__*/makeStyles(function () {
|
|
2275
|
+
var useStyles$1 = /*#__PURE__*/makeStyles$1(function () {
|
|
2268
2276
|
return {
|
|
2269
2277
|
card: {
|
|
2270
2278
|
margin: '1em'
|
|
@@ -2348,101 +2356,194 @@ function PluginCard(_ref) {
|
|
|
2348
2356
|
|
|
2349
2357
|
var PluginCard$1 = /*#__PURE__*/observer(PluginCard);
|
|
2350
2358
|
|
|
2351
|
-
var useStyles$2 = /*#__PURE__*/makeStyles(function () {
|
|
2359
|
+
var useStyles$2 = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
2352
2360
|
return {
|
|
2353
|
-
|
|
2361
|
+
closeButton: {
|
|
2354
2362
|
position: 'absolute',
|
|
2355
|
-
right:
|
|
2356
|
-
top:
|
|
2363
|
+
right: theme.spacing(1),
|
|
2364
|
+
top: theme.spacing(1)
|
|
2357
2365
|
},
|
|
2358
|
-
|
|
2359
|
-
margin: 15,
|
|
2366
|
+
dialogContent: {
|
|
2360
2367
|
display: 'flex',
|
|
2361
2368
|
flexDirection: 'column'
|
|
2369
|
+
},
|
|
2370
|
+
expand: {
|
|
2371
|
+
transform: 'rotate(0deg)',
|
|
2372
|
+
marginLeft: 'auto',
|
|
2373
|
+
transition: theme.transitions.create('transform', {
|
|
2374
|
+
duration: theme.transitions.duration.shortest
|
|
2375
|
+
})
|
|
2376
|
+
},
|
|
2377
|
+
expandOpen: {
|
|
2378
|
+
transform: 'rotate(180deg)'
|
|
2362
2379
|
}
|
|
2363
2380
|
};
|
|
2364
2381
|
});
|
|
2365
2382
|
|
|
2366
2383
|
function CustomPluginForm(_ref) {
|
|
2367
2384
|
var open = _ref.open,
|
|
2368
|
-
|
|
2385
|
+
onClose = _ref.onClose,
|
|
2369
2386
|
model = _ref.model;
|
|
2370
2387
|
var classes = useStyles$2();
|
|
2371
2388
|
|
|
2372
|
-
var _useState = useState(
|
|
2373
|
-
name: '',
|
|
2374
|
-
url: ''
|
|
2375
|
-
}),
|
|
2389
|
+
var _useState = useState(''),
|
|
2376
2390
|
_useState2 = _slicedToArray(_useState, 2),
|
|
2377
|
-
|
|
2378
|
-
|
|
2391
|
+
umdPluginName = _useState2[0],
|
|
2392
|
+
setUMDPluginName = _useState2[1];
|
|
2379
2393
|
|
|
2380
|
-
var
|
|
2381
|
-
|
|
2382
|
-
|
|
2394
|
+
var _useState3 = useState(''),
|
|
2395
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
2396
|
+
umdPluginUrl = _useState4[0],
|
|
2397
|
+
setUMDPluginUrl = _useState4[1];
|
|
2398
|
+
|
|
2399
|
+
var _useState5 = useState(''),
|
|
2400
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
2401
|
+
esmPluginUrl = _useState6[0],
|
|
2402
|
+
setESMPluginUrl = _useState6[1];
|
|
2403
|
+
|
|
2404
|
+
var _useState7 = useState(''),
|
|
2405
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
2406
|
+
cjsPluginUrl = _useState8[0],
|
|
2407
|
+
setCJSPluginUrl = _useState8[1];
|
|
2408
|
+
|
|
2409
|
+
var _useState9 = useState(false),
|
|
2410
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
2411
|
+
advancedOptionsOpen = _useState10[0],
|
|
2412
|
+
setAdvancedOptionsOpen = _useState10[1];
|
|
2413
|
+
|
|
2414
|
+
function handleChange(event) {
|
|
2415
|
+
var _event$target = event.target,
|
|
2416
|
+
name = _event$target.name,
|
|
2417
|
+
value = _event$target.value;
|
|
2418
|
+
|
|
2419
|
+
if (name === 'umdName') {
|
|
2420
|
+
setUMDPluginName(value);
|
|
2421
|
+
}
|
|
2422
|
+
|
|
2423
|
+
if (name === 'umdUrl') {
|
|
2424
|
+
setUMDPluginUrl(value);
|
|
2425
|
+
}
|
|
2426
|
+
|
|
2427
|
+
if (name === 'esmUrl') {
|
|
2428
|
+
setESMPluginUrl(value);
|
|
2429
|
+
}
|
|
2430
|
+
|
|
2431
|
+
if (name === 'cjsUrl') {
|
|
2432
|
+
setCJSPluginUrl(value);
|
|
2433
|
+
}
|
|
2434
|
+
}
|
|
2435
|
+
|
|
2436
|
+
function handleOpenAdvancedOptions() {
|
|
2437
|
+
setAdvancedOptionsOpen(!advancedOptionsOpen);
|
|
2438
|
+
}
|
|
2383
2439
|
|
|
2384
2440
|
var rootModel = getRoot(model);
|
|
2385
2441
|
var jbrowse = rootModel.jbrowse;
|
|
2442
|
+
var ready = Boolean(umdPluginName && umdPluginUrl || esmPluginUrl || cjsPluginUrl);
|
|
2386
2443
|
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
});
|
|
2392
|
-
};
|
|
2444
|
+
function handleSubmit() {
|
|
2445
|
+
if (!ready) {
|
|
2446
|
+
return;
|
|
2447
|
+
}
|
|
2393
2448
|
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
2449
|
+
var pluginDefinition = {};
|
|
2450
|
+
|
|
2451
|
+
if (umdPluginName && umdPluginUrl) {
|
|
2452
|
+
pluginDefinition.name = umdPluginName;
|
|
2453
|
+
pluginDefinition.umdUrl = umdPluginUrl;
|
|
2398
2454
|
}
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2455
|
+
|
|
2456
|
+
if (esmPluginUrl) {
|
|
2457
|
+
pluginDefinition.esmUrl = esmPluginUrl;
|
|
2458
|
+
}
|
|
2459
|
+
|
|
2460
|
+
if (cjsPluginUrl) {
|
|
2461
|
+
pluginDefinition.cjsUrl = cjsPluginUrl;
|
|
2462
|
+
}
|
|
2463
|
+
|
|
2464
|
+
jbrowse.addPlugin(pluginDefinition);
|
|
2465
|
+
}
|
|
2466
|
+
|
|
2467
|
+
function handleClose() {
|
|
2468
|
+
setUMDPluginName('');
|
|
2469
|
+
setUMDPluginUrl('');
|
|
2470
|
+
setESMPluginUrl('');
|
|
2471
|
+
setCJSPluginUrl('');
|
|
2472
|
+
onClose();
|
|
2473
|
+
}
|
|
2474
|
+
|
|
2475
|
+
return /*#__PURE__*/React.createElement(Dialog, {
|
|
2476
|
+
open: open,
|
|
2477
|
+
onClose: handleClose
|
|
2478
|
+
}, /*#__PURE__*/React.createElement(DialogTitle, null, "Add custom plugin", /*#__PURE__*/React.createElement(IconButton$1, {
|
|
2479
|
+
size: "medium",
|
|
2480
|
+
className: classes.closeButton,
|
|
2402
2481
|
onClick: function onClick() {
|
|
2403
|
-
return
|
|
2482
|
+
return onClose();
|
|
2404
2483
|
}
|
|
2405
|
-
}, /*#__PURE__*/React.createElement(CloseIcon, null))), /*#__PURE__*/React.createElement("
|
|
2406
|
-
|
|
2407
|
-
}, /*#__PURE__*/React.createElement(
|
|
2408
|
-
|
|
2409
|
-
|
|
2484
|
+
}, /*#__PURE__*/React.createElement(CloseIcon, null))), /*#__PURE__*/React.createElement("form", {
|
|
2485
|
+
onSubmit: handleSubmit
|
|
2486
|
+
}, /*#__PURE__*/React.createElement(DialogContent, {
|
|
2487
|
+
className: classes.dialogContent
|
|
2488
|
+
}, /*#__PURE__*/React.createElement(DialogContentText, null, "Enter the name of the plugin and its URL. The name should match what is defined in the plugin's build."), /*#__PURE__*/React.createElement(TextField, {
|
|
2489
|
+
id: "umd-name-input",
|
|
2490
|
+
name: "umdName",
|
|
2410
2491
|
label: "Plugin name",
|
|
2411
2492
|
variant: "outlined",
|
|
2412
|
-
value:
|
|
2413
|
-
onChange: handleChange
|
|
2414
|
-
multiline: true
|
|
2493
|
+
value: umdPluginName,
|
|
2494
|
+
onChange: handleChange
|
|
2415
2495
|
}), /*#__PURE__*/React.createElement(TextField, {
|
|
2416
|
-
id: "url-input",
|
|
2417
|
-
name: "
|
|
2496
|
+
id: "umd-url-input",
|
|
2497
|
+
name: "umdUrl",
|
|
2418
2498
|
label: "Plugin URL",
|
|
2419
2499
|
variant: "outlined",
|
|
2420
|
-
value:
|
|
2421
|
-
onChange: handleChange
|
|
2422
|
-
|
|
2423
|
-
|
|
2500
|
+
value: umdPluginUrl,
|
|
2501
|
+
onChange: handleChange
|
|
2502
|
+
}), /*#__PURE__*/React.createElement(DialogContentText, {
|
|
2503
|
+
onClick: handleOpenAdvancedOptions
|
|
2504
|
+
}, /*#__PURE__*/React.createElement(IconButton$1, {
|
|
2505
|
+
className: clsx(classes.expand, _defineProperty({}, classes.expandOpen, advancedOptionsOpen)),
|
|
2506
|
+
"aria-expanded": advancedOptionsOpen,
|
|
2507
|
+
"aria-label": "show more"
|
|
2508
|
+
}, /*#__PURE__*/React.createElement(ExpandMoreIcon, null)), "Advanced options"), /*#__PURE__*/React.createElement(Collapse, {
|
|
2509
|
+
"in": advancedOptionsOpen
|
|
2510
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
2511
|
+
className: classes.dialogContent
|
|
2512
|
+
}, /*#__PURE__*/React.createElement(DialogContentText, null, "The above fields assume that the plugin is built in UMD format. If your plugin is in another format, or you have additional builds you want to add (such as a CJS build for using NodeJS APIs in desktop), you can enter the URLs for those builds below."), /*#__PURE__*/React.createElement(TextField, {
|
|
2513
|
+
id: "esm-url-input",
|
|
2514
|
+
name: "esmUrl",
|
|
2515
|
+
label: "ESM build URL",
|
|
2516
|
+
variant: "outlined",
|
|
2517
|
+
value: esmPluginUrl,
|
|
2518
|
+
onChange: handleChange
|
|
2519
|
+
}), /*#__PURE__*/React.createElement(TextField, {
|
|
2520
|
+
id: "cjs-url-input",
|
|
2521
|
+
name: "cjsUrl",
|
|
2522
|
+
label: "CJS build URL",
|
|
2523
|
+
variant: "outlined",
|
|
2524
|
+
value: cjsPluginUrl,
|
|
2525
|
+
onChange: handleChange
|
|
2526
|
+
})))), /*#__PURE__*/React.createElement(DialogActions, null, /*#__PURE__*/React.createElement(Button, {
|
|
2527
|
+
variant: "contained",
|
|
2528
|
+
onClick: handleClose
|
|
2529
|
+
}, "Cancel"), /*#__PURE__*/React.createElement(Button, {
|
|
2424
2530
|
variant: "contained",
|
|
2425
2531
|
color: "primary",
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
onClick: handleSubmit
|
|
2430
|
-
}, "Add plugin")));
|
|
2532
|
+
onClick: handleSubmit,
|
|
2533
|
+
disabled: !ready
|
|
2534
|
+
}, "Submit"))));
|
|
2431
2535
|
}
|
|
2432
2536
|
|
|
2433
2537
|
var CustomPluginForm$1 = /*#__PURE__*/observer(CustomPluginForm);
|
|
2434
2538
|
|
|
2435
2539
|
var useStyles$3 = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
2436
2540
|
return {
|
|
2437
|
-
|
|
2438
|
-
|
|
2541
|
+
root: {
|
|
2542
|
+
margin: theme.spacing(1)
|
|
2439
2543
|
},
|
|
2440
2544
|
expandIcon: {
|
|
2441
2545
|
color: '#fff'
|
|
2442
2546
|
},
|
|
2443
|
-
searchBox: {
|
|
2444
|
-
marginBottom: theme.spacing(2)
|
|
2445
|
-
},
|
|
2446
2547
|
adminBadge: {
|
|
2447
2548
|
margin: '0.5em',
|
|
2448
2549
|
borderRadius: 3,
|
|
@@ -2464,7 +2565,7 @@ function PluginStoreWidget(_ref) {
|
|
|
2464
2565
|
var model = _ref.model;
|
|
2465
2566
|
var classes = useStyles$3();
|
|
2466
2567
|
|
|
2467
|
-
var _useState = useState(
|
|
2568
|
+
var _useState = useState(),
|
|
2468
2569
|
_useState2 = _slicedToArray(_useState, 2),
|
|
2469
2570
|
pluginArray = _useState2[0],
|
|
2470
2571
|
setPluginArray = _useState2[1];
|
|
@@ -2486,60 +2587,71 @@ function PluginStoreWidget(_ref) {
|
|
|
2486
2587
|
pluginManager = _getEnv.pluginManager;
|
|
2487
2588
|
|
|
2488
2589
|
useEffect(function () {
|
|
2489
|
-
var
|
|
2590
|
+
var controller = new AbortController();
|
|
2591
|
+
var signal = controller.signal;
|
|
2490
2592
|
|
|
2491
2593
|
_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
|
|
2492
|
-
var
|
|
2594
|
+
var response, err, array;
|
|
2493
2595
|
return runtime_1.wrap(function _callee$(_context) {
|
|
2494
2596
|
while (1) {
|
|
2495
2597
|
switch (_context.prev = _context.next) {
|
|
2496
2598
|
case 0:
|
|
2497
2599
|
_context.prev = 0;
|
|
2498
2600
|
_context.next = 3;
|
|
2499
|
-
return fetch('https://jbrowse.org/plugin-store/plugins.json'
|
|
2601
|
+
return fetch('https://jbrowse.org/plugin-store/plugins.json', {
|
|
2602
|
+
signal: signal
|
|
2603
|
+
});
|
|
2500
2604
|
|
|
2501
2605
|
case 3:
|
|
2502
|
-
|
|
2606
|
+
response = _context.sent;
|
|
2503
2607
|
|
|
2504
|
-
if (
|
|
2505
|
-
_context.next =
|
|
2608
|
+
if (response.ok) {
|
|
2609
|
+
_context.next = 9;
|
|
2506
2610
|
break;
|
|
2507
2611
|
}
|
|
2508
2612
|
|
|
2509
|
-
|
|
2613
|
+
_context.next = 7;
|
|
2614
|
+
return response.text();
|
|
2615
|
+
|
|
2616
|
+
case 7:
|
|
2617
|
+
err = _context.sent;
|
|
2618
|
+
throw new Error("Failed to fetch plugin data: ".concat(response.status, " ").concat(response.statusText, " ").concat(err));
|
|
2510
2619
|
|
|
2511
|
-
case
|
|
2512
|
-
_context.next =
|
|
2513
|
-
return
|
|
2620
|
+
case 9:
|
|
2621
|
+
_context.next = 11;
|
|
2622
|
+
return response.json();
|
|
2514
2623
|
|
|
2515
|
-
case
|
|
2624
|
+
case 11:
|
|
2516
2625
|
array = _context.sent;
|
|
2517
2626
|
|
|
2518
|
-
if (!
|
|
2627
|
+
if (!signal.aborted) {
|
|
2519
2628
|
setPluginArray(array.plugins);
|
|
2520
2629
|
}
|
|
2521
2630
|
|
|
2522
|
-
_context.next =
|
|
2631
|
+
_context.next = 19;
|
|
2523
2632
|
break;
|
|
2524
2633
|
|
|
2525
|
-
case
|
|
2526
|
-
_context.prev =
|
|
2634
|
+
case 15:
|
|
2635
|
+
_context.prev = 15;
|
|
2527
2636
|
_context.t0 = _context["catch"](0);
|
|
2637
|
+
console.error(_context.t0);
|
|
2528
2638
|
setError(_context.t0);
|
|
2529
2639
|
|
|
2530
|
-
case
|
|
2640
|
+
case 19:
|
|
2531
2641
|
case "end":
|
|
2532
2642
|
return _context.stop();
|
|
2533
2643
|
}
|
|
2534
2644
|
}
|
|
2535
|
-
}, _callee, null, [[0,
|
|
2645
|
+
}, _callee, null, [[0, 15]]);
|
|
2536
2646
|
}))();
|
|
2537
2647
|
|
|
2538
2648
|
return function () {
|
|
2539
|
-
|
|
2649
|
+
controller.abort();
|
|
2540
2650
|
};
|
|
2541
2651
|
}, []);
|
|
2542
|
-
return /*#__PURE__*/React.createElement("div",
|
|
2652
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
2653
|
+
className: classes.root
|
|
2654
|
+
}, adminMode && /*#__PURE__*/React.createElement(React.Fragment, null, !isElectron && /*#__PURE__*/React.createElement("div", {
|
|
2543
2655
|
className: classes.adminBadge
|
|
2544
2656
|
}, /*#__PURE__*/React.createElement(InfoOutlinedIcon, {
|
|
2545
2657
|
style: {
|
|
@@ -2555,10 +2667,11 @@ function PluginStoreWidget(_ref) {
|
|
|
2555
2667
|
}
|
|
2556
2668
|
}, "Add custom plugin")), /*#__PURE__*/React.createElement(CustomPluginForm$1, {
|
|
2557
2669
|
open: customPluginFormOpen,
|
|
2558
|
-
onClose:
|
|
2670
|
+
onClose: function onClose() {
|
|
2671
|
+
return setCustomPluginFormOpen(false);
|
|
2672
|
+
},
|
|
2559
2673
|
model: model
|
|
2560
|
-
})), /*#__PURE__*/React.createElement(TextField
|
|
2561
|
-
className: classes.searchBox,
|
|
2674
|
+
})), /*#__PURE__*/React.createElement(TextField, {
|
|
2562
2675
|
label: "Filter plugins",
|
|
2563
2676
|
value: model.filterText,
|
|
2564
2677
|
onChange: function onChange(event) {
|
|
@@ -2600,7 +2713,12 @@ function PluginStoreWidget(_ref) {
|
|
|
2600
2713
|
variant: "h5"
|
|
2601
2714
|
}, "Available plugins")), error ? /*#__PURE__*/React.createElement(Typography, {
|
|
2602
2715
|
color: "error"
|
|
2603
|
-
}, "".concat(error)) : pluginArray
|
|
2716
|
+
}, "".concat(error)) : pluginArray ? pluginArray.filter(function (plugin) {
|
|
2717
|
+
// If pugin only has cjsUrl, don't display outside desktop
|
|
2718
|
+
if (!isElectron && !(plugin.esmUrl || plugin.url || plugin.umdUrl)) {
|
|
2719
|
+
return false;
|
|
2720
|
+
}
|
|
2721
|
+
|
|
2604
2722
|
return plugin.name.toLowerCase().includes(model.filterText.toLowerCase());
|
|
2605
2723
|
}).map(function (plugin) {
|
|
2606
2724
|
return /*#__PURE__*/React.createElement(PluginCard$1, {
|
|
@@ -2725,171 +2843,56 @@ var _default = /*#__PURE__*/function (_Plugin) {
|
|
|
2725
2843
|
}
|
|
2726
2844
|
}, {
|
|
2727
2845
|
key: "configure",
|
|
2728
|
-
value: function configure(pluginManager) {
|
|
2729
|
-
if (isAbstractMenuManager(pluginManager.rootModel)) {
|
|
2730
|
-
pluginManager.rootModel.appendToMenu('File', {
|
|
2731
|
-
label: 'Open track',
|
|
2732
|
-
icon: NoteAddIcon,
|
|
2733
|
-
onClick: function onClick(session) {
|
|
2734
|
-
if (session.views.length === 0) {
|
|
2735
|
-
session.notify('Please open a view to add a track first');
|
|
2736
|
-
} else if (session.views.length >= 1) {
|
|
2737
|
-
var widget = session.addWidget('AddTrackWidget', 'addTrackWidget', {
|
|
2738
|
-
view: session.views[0].id
|
|
2739
|
-
});
|
|
2740
|
-
session.showWidget(widget);
|
|
2741
|
-
|
|
2742
|
-
if (session.views.length > 1) {
|
|
2743
|
-
session.notify("This will add a track to the first view. Note: if you want to open a track in a specific view open the track selector for that view and use the add track (plus icon) in the bottom right");
|
|
2744
|
-
}
|
|
2745
|
-
}
|
|
2746
|
-
}
|
|
2747
|
-
});
|
|
2748
|
-
pluginManager.rootModel.appendToMenu('File', {
|
|
2749
|
-
label: 'Open connection',
|
|
2750
|
-
icon: InputIcon,
|
|
2751
|
-
onClick: function onClick(session) {
|
|
2752
|
-
var widget = session.addWidget('AddConnectionWidget', 'addConnectionWidget');
|
|
2753
|
-
session.showWidget(widget);
|
|
2754
|
-
}
|
|
2755
|
-
});
|
|
2756
|
-
pluginManager.rootModel.appendToMenu('File', {
|
|
2757
|
-
label: 'Plugin store',
|
|
2758
|
-
icon: ExtensionIcon,
|
|
2759
|
-
onClick: function onClick(session) {
|
|
2760
|
-
var widget = session.addWidget('PluginStoreWidget', 'pluginStoreWidget');
|
|
2761
|
-
session.showWidget(widget);
|
|
2762
|
-
}
|
|
2763
|
-
});
|
|
2764
|
-
}
|
|
2765
|
-
}
|
|
2846
|
+
value: function configure(pluginManager) {}
|
|
2766
2847
|
}]);
|
|
2767
2848
|
|
|
2768
2849
|
return _default;
|
|
2769
2850
|
}(Plugin);
|
|
2770
2851
|
|
|
2771
|
-
|
|
2772
|
-
return
|
|
2773
|
-
|
|
2774
|
-
margin: theme.spacing(1)
|
|
2775
|
-
},
|
|
2776
|
-
message: {
|
|
2777
|
-
padding: theme.spacing(3)
|
|
2778
|
-
},
|
|
2779
|
-
titleBox: {
|
|
2780
|
-
color: '#fff',
|
|
2781
|
-
backgroundColor: theme.palette.primary.main,
|
|
2782
|
-
textAlign: 'center'
|
|
2783
|
-
},
|
|
2784
|
-
dialogContent: {
|
|
2785
|
-
width: 600
|
|
2786
|
-
},
|
|
2787
|
-
resetButton: {
|
|
2788
|
-
justifyContent: 'center',
|
|
2789
|
-
marginBottom: '6px'
|
|
2790
|
-
}
|
|
2791
|
-
};
|
|
2792
|
-
});
|
|
2793
|
-
var CurrentSession = /*#__PURE__*/observer(function (_ref) {
|
|
2794
|
-
var session = _ref.session,
|
|
2795
|
-
selectedDefault = _ref.selectedDefault,
|
|
2796
|
-
handleRadio = _ref.handleRadio;
|
|
2797
|
-
var classes = useStyles$4();
|
|
2798
|
-
return /*#__PURE__*/React.createElement(Paper, {
|
|
2799
|
-
className: classes.root
|
|
2800
|
-
}, /*#__PURE__*/React.createElement(List$1, {
|
|
2801
|
-
subheader: /*#__PURE__*/React.createElement(ListSubheader, null, "Currently open session")
|
|
2802
|
-
}, /*#__PURE__*/React.createElement(ListItem$1, null, /*#__PURE__*/React.createElement(ListItemIcon, null, /*#__PURE__*/React.createElement(Radio, {
|
|
2803
|
-
checked: session.name === selectedDefault,
|
|
2804
|
-
onChange: function onChange() {
|
|
2805
|
-
return handleRadio(session);
|
|
2806
|
-
}
|
|
2807
|
-
})), /*#__PURE__*/React.createElement(ListItemText, {
|
|
2808
|
-
primary: session.name
|
|
2809
|
-
}))));
|
|
2810
|
-
});
|
|
2811
|
-
var SetDefaultSession$1 = /*#__PURE__*/observer(function (_ref2) {
|
|
2812
|
-
var rootModel = _ref2.rootModel,
|
|
2813
|
-
open = _ref2.open,
|
|
2814
|
-
onClose = _ref2.onClose,
|
|
2815
|
-
currentDefault = _ref2.currentDefault;
|
|
2816
|
-
var classes = useStyles$4();
|
|
2817
|
-
var session = rootModel.session;
|
|
2852
|
+
function canSetDefaultSession(obj) {
|
|
2853
|
+
return _typeof(obj) === 'object' && !!obj && 'jbrowse' in obj;
|
|
2854
|
+
}
|
|
2818
2855
|
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
setSelectedDefault = _useState2[1]; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2856
|
+
var SetDefaultSession$1 = /*#__PURE__*/observer(function (_ref) {
|
|
2857
|
+
var rootModel = _ref.rootModel,
|
|
2858
|
+
onClose = _ref.onClose;
|
|
2823
2859
|
|
|
2860
|
+
if (!rootModel) {
|
|
2861
|
+
return null;
|
|
2862
|
+
}
|
|
2824
2863
|
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
session.notify("Set default session to ".concat(sessionSnapshot.name), 'success');
|
|
2864
|
+
if (!canSetDefaultSession(rootModel)) {
|
|
2865
|
+
console.error('Incorrect rootmodel');
|
|
2866
|
+
return null;
|
|
2829
2867
|
}
|
|
2830
2868
|
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
container: true
|
|
2838
|
-
}, /*#__PURE__*/React.createElement(Grid, {
|
|
2839
|
-
item: true
|
|
2840
|
-
}, /*#__PURE__*/React.createElement(Button$1, {
|
|
2841
|
-
color: "secondary",
|
|
2869
|
+
var jbrowse = rootModel.jbrowse,
|
|
2870
|
+
session = rootModel.session;
|
|
2871
|
+
return /*#__PURE__*/React.createElement(Dialog, {
|
|
2872
|
+
open: true,
|
|
2873
|
+
onClose: onClose
|
|
2874
|
+
}, /*#__PURE__*/React.createElement(DialogTitle, null, "Set default session"), /*#__PURE__*/React.createElement(DialogContent, null, /*#__PURE__*/React.createElement(Typography, null, "Select \"Set current session as default\" to make your current session saved to the config file. You can also hit \"Clear default session\", which would remove the default session from the config.")), /*#__PURE__*/React.createElement(DialogActions, null, /*#__PURE__*/React.createElement(Button, {
|
|
2842
2875
|
variant: "contained",
|
|
2843
2876
|
onClick: function onClick() {
|
|
2844
|
-
|
|
2845
|
-
rootModel.jbrowse.setDefaultSessionConf({
|
|
2877
|
+
jbrowse.setDefaultSessionConf({
|
|
2846
2878
|
name: "New session"
|
|
2847
2879
|
});
|
|
2848
|
-
|
|
2849
|
-
}
|
|
2850
|
-
}, "Clear default session"))), /*#__PURE__*/React.createElement(CurrentSession, {
|
|
2851
|
-
session: session,
|
|
2852
|
-
selectedDefault: selectedDefault,
|
|
2853
|
-
handleRadio: handleRadio
|
|
2854
|
-
}), /*#__PURE__*/React.createElement(Paper, {
|
|
2855
|
-
className: classes.root
|
|
2856
|
-
}, /*#__PURE__*/React.createElement(List$1, {
|
|
2857
|
-
subheader: /*#__PURE__*/React.createElement(ListSubheader, null, "Saved sessions")
|
|
2858
|
-
}, session.savedSessions.length ? session.savedSessions.map( // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2859
|
-
function (sessionSnapshot) {
|
|
2860
|
-
var _sessionSnapshot$view = sessionSnapshot.views,
|
|
2861
|
-
views = _sessionSnapshot$view === void 0 ? [] : _sessionSnapshot$view;
|
|
2862
|
-
var totalTracks = views // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2863
|
-
.map(function (view) {
|
|
2864
|
-
return view.tracks.length;
|
|
2865
|
-
}).reduce(function (a, b) {
|
|
2866
|
-
return a + b;
|
|
2867
|
-
}, 0);
|
|
2868
|
-
|
|
2869
|
-
if (sessionSnapshot.name !== session.name) {
|
|
2870
|
-
return /*#__PURE__*/React.createElement(ListItem$1, {
|
|
2871
|
-
key: sessionSnapshot.name
|
|
2872
|
-
}, /*#__PURE__*/React.createElement(ListItemIcon, null, /*#__PURE__*/React.createElement(Radio, {
|
|
2873
|
-
checked: sessionSnapshot.name === selectedDefault,
|
|
2874
|
-
onChange: function onChange() {
|
|
2875
|
-
return handleRadio(sessionSnapshot);
|
|
2876
|
-
}
|
|
2877
|
-
})), /*#__PURE__*/React.createElement(ListItemText, {
|
|
2878
|
-
primary: sessionSnapshot.name,
|
|
2879
|
-
secondary: "".concat(views.length, " ").concat(pluralize('view', views.length), "; ").concat(totalTracks, "\n open ").concat(pluralize('track', totalTracks))
|
|
2880
|
-
}));
|
|
2880
|
+
onClose();
|
|
2881
2881
|
}
|
|
2882
|
-
|
|
2883
|
-
return null;
|
|
2884
|
-
}) : /*#__PURE__*/React.createElement(Typography$1, {
|
|
2885
|
-
className: classes.message
|
|
2886
|
-
}, "No saved sessions found")))), /*#__PURE__*/React.createElement(DialogActions$1, null, /*#__PURE__*/React.createElement(Button$1, {
|
|
2882
|
+
}, "Clear default session"), /*#__PURE__*/React.createElement(Button, {
|
|
2887
2883
|
color: "secondary",
|
|
2888
2884
|
variant: "contained",
|
|
2889
2885
|
onClick: function onClick() {
|
|
2890
|
-
onClose(
|
|
2886
|
+
return onClose();
|
|
2891
2887
|
}
|
|
2892
|
-
}, "
|
|
2888
|
+
}, "Cancel"), /*#__PURE__*/React.createElement(Button, {
|
|
2889
|
+
color: "primary",
|
|
2890
|
+
variant: "contained",
|
|
2891
|
+
onClick: function onClick() {
|
|
2892
|
+
jbrowse.setDefaultSessionConf(session);
|
|
2893
|
+
onClose();
|
|
2894
|
+
}
|
|
2895
|
+
}, "Set current session as default")));
|
|
2893
2896
|
});
|
|
2894
2897
|
|
|
2895
2898
|
|
|
@@ -2899,7 +2902,7 @@ var index = {
|
|
|
2899
2902
|
'default': SetDefaultSession$1
|
|
2900
2903
|
};
|
|
2901
2904
|
|
|
2902
|
-
var useStyles$
|
|
2905
|
+
var useStyles$4 = /*#__PURE__*/makeStyles$1(function () {
|
|
2903
2906
|
return {
|
|
2904
2907
|
table: {
|
|
2905
2908
|
minWidth: 500,
|
|
@@ -2920,7 +2923,7 @@ var AssemblyTable = /*#__PURE__*/observer(function (_ref) {
|
|
|
2920
2923
|
var rootModel = _ref.rootModel,
|
|
2921
2924
|
setIsAssemblyBeingEdited = _ref.setIsAssemblyBeingEdited,
|
|
2922
2925
|
setAssemblyBeingEdited = _ref.setAssemblyBeingEdited;
|
|
2923
|
-
var classes = useStyles$
|
|
2926
|
+
var classes = useStyles$4();
|
|
2924
2927
|
|
|
2925
2928
|
function removeAssembly(name) {
|
|
2926
2929
|
rootModel.jbrowse.removeAssemblyConf(name);
|
|
@@ -2954,7 +2957,7 @@ var AssemblyTable = /*#__PURE__*/observer(function (_ref) {
|
|
|
2954
2957
|
}))));
|
|
2955
2958
|
});
|
|
2956
2959
|
return /*#__PURE__*/React.createElement(TableContainer, {
|
|
2957
|
-
component: Paper
|
|
2960
|
+
component: Paper
|
|
2958
2961
|
}, /*#__PURE__*/React.createElement(Table, {
|
|
2959
2962
|
className: classes.table
|
|
2960
2963
|
}, /*#__PURE__*/React.createElement(TableHead, null, /*#__PURE__*/React.createElement(TableRow, null, /*#__PURE__*/React.createElement(TableCell, null, /*#__PURE__*/React.createElement(Typography, {
|
|
@@ -2968,7 +2971,7 @@ var AssemblyTable = /*#__PURE__*/observer(function (_ref) {
|
|
|
2968
2971
|
}, "Actions")))), /*#__PURE__*/React.createElement(TableBody, null, rows)));
|
|
2969
2972
|
});
|
|
2970
2973
|
|
|
2971
|
-
var useStyles$
|
|
2974
|
+
var useStyles$5 = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
2972
2975
|
return {
|
|
2973
2976
|
root: {
|
|
2974
2977
|
flexGrow: 1,
|
|
@@ -2995,7 +2998,7 @@ var AdapterSelector = /*#__PURE__*/observer(function (_ref) {
|
|
|
2995
2998
|
var adapterSelection = _ref.adapterSelection,
|
|
2996
2999
|
setAdapterSelection = _ref.setAdapterSelection,
|
|
2997
3000
|
adapterTypes = _ref.adapterTypes;
|
|
2998
|
-
return /*#__PURE__*/React.createElement(TextField
|
|
3001
|
+
return /*#__PURE__*/React.createElement(TextField, {
|
|
2999
3002
|
value: adapterSelection,
|
|
3000
3003
|
label: "Type",
|
|
3001
3004
|
select: true,
|
|
@@ -3080,10 +3083,13 @@ var AdapterInput = /*#__PURE__*/observer(function (_ref2) {
|
|
|
3080
3083
|
|
|
3081
3084
|
return null;
|
|
3082
3085
|
});
|
|
3086
|
+
var blank = {
|
|
3087
|
+
uri: ''
|
|
3088
|
+
};
|
|
3083
3089
|
var AssemblyAddForm = /*#__PURE__*/observer(function (_ref3) {
|
|
3084
3090
|
var rootModel = _ref3.rootModel,
|
|
3085
3091
|
setFormOpen = _ref3.setFormOpen;
|
|
3086
|
-
var classes = useStyles$
|
|
3092
|
+
var classes = useStyles$5();
|
|
3087
3093
|
var adapterTypes = ['IndexedFastaAdapter', 'BgzipFastaAdapter', 'TwoBitAdapter'];
|
|
3088
3094
|
|
|
3089
3095
|
var _useState = useState(''),
|
|
@@ -3101,37 +3107,27 @@ var AssemblyAddForm = /*#__PURE__*/observer(function (_ref3) {
|
|
|
3101
3107
|
adapterSelection = _useState6[0],
|
|
3102
3108
|
setAdapterSelection = _useState6[1];
|
|
3103
3109
|
|
|
3104
|
-
var _useState7 = useState(
|
|
3105
|
-
uri: ''
|
|
3106
|
-
}),
|
|
3110
|
+
var _useState7 = useState(blank),
|
|
3107
3111
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
3108
3112
|
fastaLocation = _useState8[0],
|
|
3109
3113
|
setFastaLocation = _useState8[1];
|
|
3110
3114
|
|
|
3111
|
-
var _useState9 = useState(
|
|
3112
|
-
uri: ''
|
|
3113
|
-
}),
|
|
3115
|
+
var _useState9 = useState(blank),
|
|
3114
3116
|
_useState10 = _slicedToArray(_useState9, 2),
|
|
3115
3117
|
faiLocation = _useState10[0],
|
|
3116
3118
|
setFaiLocation = _useState10[1];
|
|
3117
3119
|
|
|
3118
|
-
var _useState11 = useState(
|
|
3119
|
-
uri: ''
|
|
3120
|
-
}),
|
|
3120
|
+
var _useState11 = useState(blank),
|
|
3121
3121
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
3122
3122
|
gziLocation = _useState12[0],
|
|
3123
3123
|
setGziLocation = _useState12[1];
|
|
3124
3124
|
|
|
3125
|
-
var _useState13 = useState(
|
|
3126
|
-
uri: ''
|
|
3127
|
-
}),
|
|
3125
|
+
var _useState13 = useState(blank),
|
|
3128
3126
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
3129
3127
|
twoBitLocation = _useState14[0],
|
|
3130
3128
|
setTwoBitLocation = _useState14[1];
|
|
3131
3129
|
|
|
3132
|
-
var _useState15 = useState(
|
|
3133
|
-
uri: ''
|
|
3134
|
-
}),
|
|
3130
|
+
var _useState15 = useState(blank),
|
|
3135
3131
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
3136
3132
|
chromSizesLocation = _useState16[0],
|
|
3137
3133
|
setChromSizesLocation = _useState16[1];
|
|
@@ -3140,8 +3136,7 @@ var AssemblyAddForm = /*#__PURE__*/observer(function (_ref3) {
|
|
|
3140
3136
|
if (assemblyName === '') {
|
|
3141
3137
|
rootModel.session.notify("Can't create an assembly without a name");
|
|
3142
3138
|
} else {
|
|
3143
|
-
setFormOpen(false);
|
|
3144
|
-
|
|
3139
|
+
setFormOpen(false);
|
|
3145
3140
|
var newAssembly;
|
|
3146
3141
|
|
|
3147
3142
|
if (adapterSelection === 'IndexedFastaAdapter') {
|
|
@@ -3190,9 +3185,9 @@ var AssemblyAddForm = /*#__PURE__*/observer(function (_ref3) {
|
|
|
3190
3185
|
|
|
3191
3186
|
return /*#__PURE__*/React.createElement("div", {
|
|
3192
3187
|
className: classes.root
|
|
3193
|
-
}, /*#__PURE__*/React.createElement(Paper
|
|
3188
|
+
}, /*#__PURE__*/React.createElement(Paper, {
|
|
3194
3189
|
className: classes.paper
|
|
3195
|
-
}, /*#__PURE__*/React.createElement(TextField
|
|
3190
|
+
}, /*#__PURE__*/React.createElement(TextField, {
|
|
3196
3191
|
id: "assembly-name",
|
|
3197
3192
|
inputProps: {
|
|
3198
3193
|
'data-testid': 'assembly-name'
|
|
@@ -3204,7 +3199,7 @@ var AssemblyAddForm = /*#__PURE__*/observer(function (_ref3) {
|
|
|
3204
3199
|
onChange: function onChange(event) {
|
|
3205
3200
|
return setAssemblyName(event.target.value);
|
|
3206
3201
|
}
|
|
3207
|
-
}), /*#__PURE__*/React.createElement(TextField
|
|
3202
|
+
}), /*#__PURE__*/React.createElement(TextField, {
|
|
3208
3203
|
id: "assembly-name",
|
|
3209
3204
|
inputProps: {
|
|
3210
3205
|
'data-testid': 'assembly-display-name'
|
|
@@ -3256,7 +3251,7 @@ var AssemblyEditor = /*#__PURE__*/observer(function (_ref) {
|
|
|
3256
3251
|
});
|
|
3257
3252
|
});
|
|
3258
3253
|
|
|
3259
|
-
var useStyles$
|
|
3254
|
+
var useStyles$6 = /*#__PURE__*/makeStyles(function (theme) {
|
|
3260
3255
|
return {
|
|
3261
3256
|
titleBox: {
|
|
3262
3257
|
color: '#fff',
|
|
@@ -3283,7 +3278,7 @@ var useStyles$7 = /*#__PURE__*/makeStyles(function (theme) {
|
|
|
3283
3278
|
var AssemblyManager$1 = /*#__PURE__*/observer(function (_ref) {
|
|
3284
3279
|
var rootModel = _ref.rootModel,
|
|
3285
3280
|
_onClose = _ref.onClose;
|
|
3286
|
-
var classes = useStyles$
|
|
3281
|
+
var classes = useStyles$6();
|
|
3287
3282
|
|
|
3288
3283
|
var _useState = useState(false),
|
|
3289
3284
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -3380,7 +3375,7 @@ var ManageConnectionsDialog = /*#__PURE__*/lazy(function () {
|
|
|
3380
3375
|
var ToggleConnectionsDialog = /*#__PURE__*/lazy(function () {
|
|
3381
3376
|
return Promise.resolve().then(function () { return ToggleConnectionsDialog$2; });
|
|
3382
3377
|
});
|
|
3383
|
-
var useStyles$
|
|
3378
|
+
var useStyles$7 = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
3384
3379
|
var _theme$palette$tertia, _theme$palette$tertia2;
|
|
3385
3380
|
|
|
3386
3381
|
return {
|
|
@@ -3450,11 +3445,13 @@ var Node = function Node(props) {
|
|
|
3450
3445
|
_onChange = data.onChange,
|
|
3451
3446
|
toggleCollapse = data.toggleCollapse,
|
|
3452
3447
|
conf = data.conf,
|
|
3453
|
-
onMoreInfo = data.onMoreInfo
|
|
3454
|
-
|
|
3448
|
+
onMoreInfo = data.onMoreInfo,
|
|
3449
|
+
drawerPosition = data.drawerPosition;
|
|
3450
|
+
var classes = useStyles$7();
|
|
3455
3451
|
var width = 10;
|
|
3456
3452
|
var marginLeft = nestingLevel * width + (isLeaf ? width : 0);
|
|
3457
3453
|
var unsupported = name && (name.endsWith('(Unsupported)') || name.endsWith('(Unknown)'));
|
|
3454
|
+
var description = conf && readConfObject(conf, ['description']) || '';
|
|
3458
3455
|
return /*#__PURE__*/React.createElement("div", {
|
|
3459
3456
|
style: style,
|
|
3460
3457
|
className: !isLeaf ? classes.accordionBase : undefined
|
|
@@ -3482,7 +3479,10 @@ var Node = function Node(props) {
|
|
|
3482
3479
|
className: !isLeaf ? classes.accordionColor : undefined
|
|
3483
3480
|
}, !isLeaf ? /*#__PURE__*/React.createElement("div", {
|
|
3484
3481
|
className: classes.accordionText
|
|
3485
|
-
}, /*#__PURE__*/React.createElement(Typography, null, isOpen ? /*#__PURE__*/React.createElement(ArrowDropDownIcon, null) : /*#__PURE__*/React.createElement(ArrowRightIcon, null), name)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(
|
|
3482
|
+
}, /*#__PURE__*/React.createElement(Typography, null, isOpen ? /*#__PURE__*/React.createElement(ArrowDropDownIcon, null) : /*#__PURE__*/React.createElement(ArrowRightIcon, null), name)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tooltip, {
|
|
3483
|
+
title: description,
|
|
3484
|
+
placement: drawerPosition === 'left' ? 'right' : 'left'
|
|
3485
|
+
}, /*#__PURE__*/React.createElement(FormControlLabel, {
|
|
3486
3486
|
className: classes.checkboxLabel,
|
|
3487
3487
|
control: /*#__PURE__*/React.createElement(Checkbox, {
|
|
3488
3488
|
className: classes.compactCheckbox,
|
|
@@ -3497,7 +3497,7 @@ var Node = function Node(props) {
|
|
|
3497
3497
|
}
|
|
3498
3498
|
}),
|
|
3499
3499
|
label: name
|
|
3500
|
-
}), /*#__PURE__*/React.createElement(IconButton, {
|
|
3500
|
+
})), /*#__PURE__*/React.createElement(IconButton, {
|
|
3501
3501
|
onClick: function onClick(e) {
|
|
3502
3502
|
return onMoreInfo({
|
|
3503
3503
|
target: e.currentTarget,
|
|
@@ -3543,6 +3543,7 @@ var HierarchicalTree = /*#__PURE__*/observer(function (_ref) {
|
|
|
3543
3543
|
setMoreInfo = _useState2[1];
|
|
3544
3544
|
|
|
3545
3545
|
var session = getSession(model);
|
|
3546
|
+
var drawerPosition = session.drawerPosition;
|
|
3546
3547
|
var extra = useMemo(function () {
|
|
3547
3548
|
return {
|
|
3548
3549
|
onChange: function onChange(trackId) {
|
|
@@ -3551,9 +3552,10 @@ var HierarchicalTree = /*#__PURE__*/observer(function (_ref) {
|
|
|
3551
3552
|
toggleCollapse: function toggleCollapse(pathName) {
|
|
3552
3553
|
return model.toggleCategory(pathName);
|
|
3553
3554
|
},
|
|
3554
|
-
onMoreInfo: setMoreInfo
|
|
3555
|
+
onMoreInfo: setMoreInfo,
|
|
3556
|
+
drawerPosition: drawerPosition
|
|
3555
3557
|
};
|
|
3556
|
-
}, [view, model]);
|
|
3558
|
+
}, [view, model, drawerPosition]);
|
|
3557
3559
|
var treeWalker = useCallback( /*#__PURE__*/runtime_1.mark(function treeWalker() {
|
|
3558
3560
|
var i, parentMeta, _i, curr;
|
|
3559
3561
|
|
|
@@ -3671,7 +3673,7 @@ var HierarchicalTrackSelectorContainer = /*#__PURE__*/observer(function (_ref5)
|
|
|
3671
3673
|
var model = _ref5.model,
|
|
3672
3674
|
toolbarHeight = _ref5.toolbarHeight,
|
|
3673
3675
|
overrideDimensions = _ref5.overrideDimensions;
|
|
3674
|
-
var classes = useStyles$
|
|
3676
|
+
var classes = useStyles$7();
|
|
3675
3677
|
var session = getSession(model);
|
|
3676
3678
|
|
|
3677
3679
|
var _useState3 = useState(null),
|
|
@@ -3722,7 +3724,7 @@ var HierarchicalTrackSelectorHeader = /*#__PURE__*/observer(function (_ref6) {
|
|
|
3722
3724
|
setHeaderHeight = _ref6.setHeaderHeight,
|
|
3723
3725
|
setAssemblyIdx = _ref6.setAssemblyIdx,
|
|
3724
3726
|
assemblyIdx = _ref6.assemblyIdx;
|
|
3725
|
-
var classes = useStyles$
|
|
3727
|
+
var classes = useStyles$7();
|
|
3726
3728
|
var session = getSession(model);
|
|
3727
3729
|
|
|
3728
3730
|
var _useState5 = useState(),
|
|
@@ -3836,7 +3838,7 @@ var HierarchicalTrackSelectorHeader = /*#__PURE__*/observer(function (_ref6) {
|
|
|
3836
3838
|
onClick: function onClick(event) {
|
|
3837
3839
|
setConnectionAnchorEl(event.currentTarget);
|
|
3838
3840
|
}
|
|
3839
|
-
}, /*#__PURE__*/React.createElement(PowerOutlinedIcon, null)), /*#__PURE__*/React.createElement(TextField
|
|
3841
|
+
}, /*#__PURE__*/React.createElement(PowerOutlinedIcon, null)), /*#__PURE__*/React.createElement(TextField, {
|
|
3840
3842
|
className: classes.searchBox,
|
|
3841
3843
|
label: "Filter tracks",
|
|
3842
3844
|
value: model.filterText,
|
|
@@ -3940,7 +3942,7 @@ var HierarchicalTrackSelector$1 = {
|
|
|
3940
3942
|
'default': HierarchicalTrackSelectorContainer
|
|
3941
3943
|
};
|
|
3942
3944
|
|
|
3943
|
-
var useStyles$
|
|
3945
|
+
var useStyles$8 = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
3944
3946
|
return {
|
|
3945
3947
|
spacing: {
|
|
3946
3948
|
marginBottom: theme.spacing(3)
|
|
@@ -3953,28 +3955,76 @@ function StatusMessage(_ref) {
|
|
|
3953
3955
|
|
|
3954
3956
|
var trackAdapter = _ref.trackAdapter,
|
|
3955
3957
|
trackType = _ref.trackType;
|
|
3956
|
-
var classes = useStyles$
|
|
3957
|
-
return trackAdapter.type === 'SNPCoverageAdapter' ? /*#__PURE__*/React.createElement(Typography
|
|
3958
|
+
var classes = useStyles$8();
|
|
3959
|
+
return trackAdapter.type === 'SNPCoverageAdapter' ? /*#__PURE__*/React.createElement(Typography, {
|
|
3958
3960
|
className: classes.spacing
|
|
3959
|
-
}, "Selected ", /*#__PURE__*/React.createElement("code", null, trackType), ". Using adapter", ' ', /*#__PURE__*/React.createElement("code", null, trackAdapter.type), " with subadapter", ' ', /*#__PURE__*/React.createElement("code", null, (_trackAdapter$subadap = trackAdapter.subadapter) === null || _trackAdapter$subadap === void 0 ? void 0 : _trackAdapter$subadap.type), ". Please enter a track name and, if necessary, update the track type.") : /*#__PURE__*/React.createElement(Typography
|
|
3961
|
+
}, "Selected ", /*#__PURE__*/React.createElement("code", null, trackType), ". Using adapter", ' ', /*#__PURE__*/React.createElement("code", null, trackAdapter.type), " with subadapter", ' ', /*#__PURE__*/React.createElement("code", null, (_trackAdapter$subadap = trackAdapter.subadapter) === null || _trackAdapter$subadap === void 0 ? void 0 : _trackAdapter$subadap.type), ". Please enter a track name and, if necessary, update the track type.") : /*#__PURE__*/React.createElement(Typography, {
|
|
3960
3962
|
className: classes.spacing
|
|
3961
3963
|
}, "Using adapter ", /*#__PURE__*/React.createElement("code", null, trackAdapter.type), " and guessing track type", ' ', /*#__PURE__*/React.createElement("code", null, trackType), ". Please enter a track name and, if necessary, update the track type.");
|
|
3962
3964
|
}
|
|
3965
|
+
/**
|
|
3966
|
+
* categorizeAdapters takes a list of adapters and sorts their menu item elements under an appropriate ListSubheader
|
|
3967
|
+
* element. In this way, adapters that are from external plugins can have headers that differentiate them from the
|
|
3968
|
+
* out-of-the-box plugins.
|
|
3969
|
+
* @param adaptersList - a list of adapters found in the PluginManager
|
|
3970
|
+
* @returns a series of JSX elements that are ListSubheaders followed by the adapters
|
|
3971
|
+
* found under that subheader
|
|
3972
|
+
*/
|
|
3973
|
+
|
|
3974
|
+
|
|
3975
|
+
function categorizeAdapters(adaptersList) {
|
|
3976
|
+
var currentCategory = ''; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3977
|
+
|
|
3978
|
+
var items = [];
|
|
3979
|
+
adaptersList.forEach(function (adapter) {
|
|
3980
|
+
var _adapter$adapterMetad;
|
|
3981
|
+
|
|
3982
|
+
if ((_adapter$adapterMetad = adapter.adapterMetadata) !== null && _adapter$adapterMetad !== void 0 && _adapter$adapterMetad.category) {
|
|
3983
|
+
var _adapter$adapterMetad2, _adapter$adapterMetad7, _adapter$adapterMetad8;
|
|
3984
|
+
|
|
3985
|
+
if (currentCategory !== ((_adapter$adapterMetad2 = adapter.adapterMetadata) === null || _adapter$adapterMetad2 === void 0 ? void 0 : _adapter$adapterMetad2.category)) {
|
|
3986
|
+
var _adapter$adapterMetad3, _adapter$adapterMetad4, _adapter$adapterMetad5, _adapter$adapterMetad6;
|
|
3987
|
+
|
|
3988
|
+
currentCategory = (_adapter$adapterMetad3 = adapter.adapterMetadata) === null || _adapter$adapterMetad3 === void 0 ? void 0 : _adapter$adapterMetad3.category;
|
|
3989
|
+
items.push( /*#__PURE__*/React.createElement(ListSubheader, {
|
|
3990
|
+
key: (_adapter$adapterMetad4 = adapter.adapterMetadata) === null || _adapter$adapterMetad4 === void 0 ? void 0 : _adapter$adapterMetad4.category,
|
|
3991
|
+
value: (_adapter$adapterMetad5 = adapter.adapterMetadata) === null || _adapter$adapterMetad5 === void 0 ? void 0 : _adapter$adapterMetad5.category
|
|
3992
|
+
}, (_adapter$adapterMetad6 = adapter.adapterMetadata) === null || _adapter$adapterMetad6 === void 0 ? void 0 : _adapter$adapterMetad6.category));
|
|
3993
|
+
}
|
|
3963
3994
|
|
|
3964
|
-
|
|
3965
|
-
|
|
3966
|
-
|
|
3967
|
-
|
|
3995
|
+
items.push( /*#__PURE__*/React.createElement(MenuItem, {
|
|
3996
|
+
key: adapter.name,
|
|
3997
|
+
value: adapter.name
|
|
3998
|
+
}, (_adapter$adapterMetad7 = adapter.adapterMetadata) !== null && _adapter$adapterMetad7 !== void 0 && _adapter$adapterMetad7.displayName ? (_adapter$adapterMetad8 = adapter.adapterMetadata) === null || _adapter$adapterMetad8 === void 0 ? void 0 : _adapter$adapterMetad8.displayName : adapter.name));
|
|
3999
|
+
}
|
|
4000
|
+
});
|
|
4001
|
+
return items;
|
|
4002
|
+
}
|
|
4003
|
+
|
|
4004
|
+
function getAdapterTypes(pluginManager) {
|
|
4005
|
+
return pluginManager.getElementTypesInGroup('adapter');
|
|
4006
|
+
}
|
|
4007
|
+
|
|
4008
|
+
function getTrackTypes(pluginManager) {
|
|
4009
|
+
return pluginManager.getElementTypesInGroup('track');
|
|
4010
|
+
}
|
|
4011
|
+
|
|
4012
|
+
var TrackAdapterSelector = /*#__PURE__*/observer(function (_ref2) {
|
|
4013
|
+
var model = _ref2.model;
|
|
4014
|
+
var classes = useStyles$8();
|
|
3968
4015
|
var session = getSession(model);
|
|
4016
|
+
var trackAdapter = model.trackAdapter; // prettier-ignore
|
|
4017
|
+
|
|
4018
|
+
var adapters = getAdapterTypes(getEnv(session).pluginManager);
|
|
3969
4019
|
return /*#__PURE__*/React.createElement(TextField, {
|
|
3970
4020
|
className: classes.spacing,
|
|
3971
|
-
value:
|
|
4021
|
+
value: (trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type) !== 'UNKNOWN' ? trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type : '',
|
|
3972
4022
|
label: "adapterType",
|
|
3973
|
-
helperText: "
|
|
4023
|
+
helperText: "Select an adapter type",
|
|
3974
4024
|
select: true,
|
|
3975
4025
|
fullWidth: true,
|
|
3976
4026
|
onChange: function onChange(event) {
|
|
3977
|
-
model.setAdapterHint(event.target.value);
|
|
4027
|
+
return model.setAdapterHint(event.target.value);
|
|
3978
4028
|
},
|
|
3979
4029
|
SelectProps: {
|
|
3980
4030
|
// @ts-ignore
|
|
@@ -3982,56 +4032,119 @@ function TrackAdapterSelector(_ref2) {
|
|
|
3982
4032
|
'data-testid': 'adapterTypeSelect'
|
|
3983
4033
|
}
|
|
3984
4034
|
}
|
|
3985
|
-
},
|
|
4035
|
+
}, adapters // Excludes any adapter with the 'adapterMetadata.hiddenFromGUI' property, and anything with the 'adapterMetadata.category' property
|
|
3986
4036
|
.filter(function (elt) {
|
|
3987
|
-
|
|
4037
|
+
var _elt$adapterMetadata, _elt$adapterMetadata2;
|
|
4038
|
+
|
|
4039
|
+
return !((_elt$adapterMetadata = elt.adapterMetadata) !== null && _elt$adapterMetadata !== void 0 && _elt$adapterMetadata.hiddenFromGUI) && !((_elt$adapterMetadata2 = elt.adapterMetadata) !== null && _elt$adapterMetadata2 !== void 0 && _elt$adapterMetadata2.category);
|
|
3988
4040
|
}).map(function (elt) {
|
|
3989
|
-
|
|
4041
|
+
var _elt$adapterMetadata3, _elt$adapterMetadata4;
|
|
4042
|
+
|
|
4043
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
3990
4044
|
key: elt.name,
|
|
3991
4045
|
value: elt.name
|
|
3992
|
-
}, elt.name);
|
|
3993
|
-
}))
|
|
3994
|
-
|
|
4046
|
+
}, (_elt$adapterMetadata3 = elt.adapterMetadata) !== null && _elt$adapterMetadata3 !== void 0 && _elt$adapterMetadata3.displayName ? (_elt$adapterMetadata4 = elt.adapterMetadata) === null || _elt$adapterMetadata4 === void 0 ? void 0 : _elt$adapterMetadata4.displayName : elt.name);
|
|
4047
|
+
}), categorizeAdapters(adapters.filter(function (elt) {
|
|
4048
|
+
var _elt$adapterMetadata5;
|
|
4049
|
+
|
|
4050
|
+
return !((_elt$adapterMetadata5 = elt.adapterMetadata) !== null && _elt$adapterMetadata5 !== void 0 && _elt$adapterMetadata5.hiddenFromGUI);
|
|
4051
|
+
})));
|
|
4052
|
+
});
|
|
3995
4053
|
|
|
3996
4054
|
function UnknownAdapterPrompt(_ref3) {
|
|
3997
4055
|
var model = _ref3.model;
|
|
3998
|
-
var classes = useStyles$
|
|
3999
|
-
|
|
4000
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Typography$1, {
|
|
4056
|
+
var classes = useStyles$8();
|
|
4057
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Typography, {
|
|
4001
4058
|
className: classes.spacing
|
|
4002
|
-
}, "
|
|
4059
|
+
}, "JBrowse was not able to guess the adapter type for this data, but it may be in the list below. If not, you can", ' ', /*#__PURE__*/React.createElement(Link, {
|
|
4003
4060
|
href: "https://github.com/GMOD/jbrowse-components/releases",
|
|
4004
4061
|
target: "_blank",
|
|
4005
4062
|
rel: "noopener noreferrer"
|
|
4006
|
-
}, "check for new releases"), ' ', "of JBrowse to see if they support this data type or", ' ', /*#__PURE__*/React.createElement(Link
|
|
4063
|
+
}, "check for new releases"), ' ', "of JBrowse to see if they support this data type or", ' ', /*#__PURE__*/React.createElement(Link, {
|
|
4007
4064
|
href: "https://github.com/GMOD/jbrowse-components/issues/new",
|
|
4008
4065
|
target: "_blank",
|
|
4009
4066
|
rel: "noopener noreferrer"
|
|
4010
4067
|
}, "file an issue"), ' ', "and add a feature request for this data type."), /*#__PURE__*/React.createElement(TrackAdapterSelector, {
|
|
4011
|
-
adapterHint: adapterHint,
|
|
4012
4068
|
model: model
|
|
4013
4069
|
}));
|
|
4014
4070
|
}
|
|
4015
4071
|
|
|
4016
|
-
function
|
|
4072
|
+
var TrackTypeSelector = /*#__PURE__*/observer(function (_ref4) {
|
|
4017
4073
|
var model = _ref4.model;
|
|
4018
|
-
var classes = useStyles$
|
|
4074
|
+
var classes = useStyles$8();
|
|
4019
4075
|
var session = getSession(model);
|
|
4076
|
+
var trackType = model.trackType;
|
|
4077
|
+
var trackTypes = getTrackTypes(getEnv(session).pluginManager);
|
|
4078
|
+
return /*#__PURE__*/React.createElement(TextField, {
|
|
4079
|
+
className: classes.spacing,
|
|
4080
|
+
value: trackType,
|
|
4081
|
+
label: "trackType",
|
|
4082
|
+
helperText: "Select a track type",
|
|
4083
|
+
select: true,
|
|
4084
|
+
fullWidth: true,
|
|
4085
|
+
onChange: function onChange(event) {
|
|
4086
|
+
model.setTrackType(event.target.value);
|
|
4087
|
+
},
|
|
4088
|
+
SelectProps: {
|
|
4089
|
+
// @ts-ignore
|
|
4090
|
+
SelectDisplayProps: {
|
|
4091
|
+
'data-testid': 'trackTypeSelect'
|
|
4092
|
+
}
|
|
4093
|
+
}
|
|
4094
|
+
}, trackTypes.map(function (_ref5) {
|
|
4095
|
+
var name = _ref5.name;
|
|
4096
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
4097
|
+
key: name,
|
|
4098
|
+
value: name
|
|
4099
|
+
}, name);
|
|
4100
|
+
}));
|
|
4101
|
+
});
|
|
4102
|
+
var TrackAssemblySelector = /*#__PURE__*/observer(function (_ref6) {
|
|
4103
|
+
var model = _ref6.model;
|
|
4104
|
+
var session = getSession(model);
|
|
4105
|
+
var assembly = model.assembly;
|
|
4106
|
+
return /*#__PURE__*/React.createElement(TextField, {
|
|
4107
|
+
value: assembly,
|
|
4108
|
+
label: "assemblyName",
|
|
4109
|
+
helperText: "Assembly to which the track will be added",
|
|
4110
|
+
select: true,
|
|
4111
|
+
fullWidth: true,
|
|
4112
|
+
onChange: function onChange(event) {
|
|
4113
|
+
return model.setAssembly(event.target.value);
|
|
4114
|
+
},
|
|
4115
|
+
SelectProps: {
|
|
4116
|
+
// @ts-ignore
|
|
4117
|
+
SelectDisplayProps: {
|
|
4118
|
+
'data-testid': 'assemblyNameSelect'
|
|
4119
|
+
}
|
|
4120
|
+
}
|
|
4121
|
+
}, session.assemblies.map(function (conf) {
|
|
4122
|
+
return readConfObject(conf, 'name');
|
|
4123
|
+
}).map(function (name) {
|
|
4124
|
+
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
4125
|
+
key: name,
|
|
4126
|
+
value: name
|
|
4127
|
+
}, name);
|
|
4128
|
+
}));
|
|
4129
|
+
});
|
|
4130
|
+
|
|
4131
|
+
function ConfirmTrack(_ref7) {
|
|
4132
|
+
var model = _ref7.model;
|
|
4133
|
+
var classes = useStyles$8();
|
|
4020
4134
|
var trackName = model.trackName,
|
|
4021
4135
|
trackAdapter = model.trackAdapter,
|
|
4022
4136
|
trackType = model.trackType,
|
|
4023
|
-
assembly = model.assembly,
|
|
4024
4137
|
warningMessage = model.warningMessage,
|
|
4025
4138
|
adapterHint = model.adapterHint;
|
|
4026
4139
|
|
|
4027
4140
|
if (model.unsupported) {
|
|
4028
|
-
return /*#__PURE__*/React.createElement(Typography
|
|
4141
|
+
return /*#__PURE__*/React.createElement(Typography, {
|
|
4029
4142
|
className: classes.spacing
|
|
4030
|
-
}, "This version of JBrowse cannot display data of this type. It is possible, however, that there is a newer version that can display them. You can", ' ', /*#__PURE__*/React.createElement(Link
|
|
4143
|
+
}, "This version of JBrowse cannot display data of this type. It is possible, however, that there is a newer version that can display them. You can", ' ', /*#__PURE__*/React.createElement(Link, {
|
|
4031
4144
|
href: "https://github.com/GMOD/jbrowse-components/releases",
|
|
4032
4145
|
target: "_blank",
|
|
4033
4146
|
rel: "noopener noreferrer"
|
|
4034
|
-
}, "check for new releases"), ' ', "of JBrowse or", ' ', /*#__PURE__*/React.createElement(Link
|
|
4147
|
+
}, "check for new releases"), ' ', "of JBrowse or", ' ', /*#__PURE__*/React.createElement(Link, {
|
|
4035
4148
|
href: "https://github.com/GMOD/jbrowse-components/issues/new",
|
|
4036
4149
|
target: "_blank",
|
|
4037
4150
|
rel: "noopener noreferrer"
|
|
@@ -4044,21 +4157,22 @@ function ConfirmTrack(_ref4) {
|
|
|
4044
4157
|
});
|
|
4045
4158
|
}
|
|
4046
4159
|
|
|
4160
|
+
if (adapterHint === '' && trackAdapter) {
|
|
4161
|
+
model.setAdapterHint(trackAdapter.type);
|
|
4162
|
+
}
|
|
4163
|
+
|
|
4047
4164
|
if (!(trackAdapter !== null && trackAdapter !== void 0 && trackAdapter.type)) {
|
|
4048
|
-
return /*#__PURE__*/React.createElement(Typography
|
|
4165
|
+
return /*#__PURE__*/React.createElement(Typography, null, "Could not recognize this data type.");
|
|
4049
4166
|
}
|
|
4050
4167
|
|
|
4051
|
-
return /*#__PURE__*/React.createElement(
|
|
4168
|
+
return /*#__PURE__*/React.createElement("div", null, trackAdapter ? /*#__PURE__*/React.createElement(StatusMessage, {
|
|
4052
4169
|
trackAdapter: trackAdapter,
|
|
4053
4170
|
trackType: trackType
|
|
4054
|
-
}) : null, warningMessage ? /*#__PURE__*/React.createElement(Typography
|
|
4171
|
+
}) : null, warningMessage ? /*#__PURE__*/React.createElement(Typography, {
|
|
4055
4172
|
style: {
|
|
4056
4173
|
color: 'orange'
|
|
4057
4174
|
}
|
|
4058
|
-
}, warningMessage) : null, /*#__PURE__*/React.createElement(
|
|
4059
|
-
adapterHint: adapterHint,
|
|
4060
|
-
model: model
|
|
4061
|
-
}), /*#__PURE__*/React.createElement(TextField, {
|
|
4175
|
+
}, warningMessage) : null, /*#__PURE__*/React.createElement(TextField, {
|
|
4062
4176
|
className: classes.spacing,
|
|
4063
4177
|
label: "trackName",
|
|
4064
4178
|
helperText: "A name for this track",
|
|
@@ -4070,88 +4184,58 @@ function ConfirmTrack(_ref4) {
|
|
|
4070
4184
|
inputProps: {
|
|
4071
4185
|
'data-testid': 'trackNameInput'
|
|
4072
4186
|
}
|
|
4073
|
-
}), /*#__PURE__*/React.createElement(
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
onChange: function onChange(event) {
|
|
4081
|
-
model.setTrackType(event.target.value);
|
|
4082
|
-
},
|
|
4083
|
-
SelectProps: {
|
|
4084
|
-
// @ts-ignore
|
|
4085
|
-
SelectDisplayProps: {
|
|
4086
|
-
'data-testid': 'trackTypeSelect'
|
|
4087
|
-
}
|
|
4088
|
-
}
|
|
4089
|
-
}, getEnv(session).pluginManager.getElementTypesInGroup('track') // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4090
|
-
.map(function (_ref5) {
|
|
4091
|
-
var name = _ref5.name;
|
|
4092
|
-
return /*#__PURE__*/React.createElement(MenuItem$1, {
|
|
4093
|
-
key: name,
|
|
4094
|
-
value: name
|
|
4095
|
-
}, name);
|
|
4096
|
-
})), /*#__PURE__*/React.createElement(TextField, {
|
|
4097
|
-
value: assembly,
|
|
4098
|
-
label: "assemblyName",
|
|
4099
|
-
helperText: "Assembly to which the track will be added",
|
|
4100
|
-
select: true,
|
|
4101
|
-
fullWidth: true,
|
|
4102
|
-
onChange: function onChange(event) {
|
|
4103
|
-
model.setAssembly(event.target.value);
|
|
4104
|
-
},
|
|
4105
|
-
SelectProps: {
|
|
4106
|
-
// @ts-ignore
|
|
4107
|
-
SelectDisplayProps: {
|
|
4108
|
-
'data-testid': 'assemblyNameSelect'
|
|
4109
|
-
}
|
|
4110
|
-
}
|
|
4111
|
-
}, session.assemblies.map(function (assemblyConf) {
|
|
4112
|
-
var assemblyName = readConfObject(assemblyConf, 'name');
|
|
4113
|
-
return /*#__PURE__*/React.createElement(MenuItem$1, {
|
|
4114
|
-
key: assemblyName,
|
|
4115
|
-
value: assemblyName
|
|
4116
|
-
}, assemblyName);
|
|
4117
|
-
})));
|
|
4187
|
+
}), /*#__PURE__*/React.createElement(TrackAdapterSelector, {
|
|
4188
|
+
model: model
|
|
4189
|
+
}), /*#__PURE__*/React.createElement(TrackTypeSelector, {
|
|
4190
|
+
model: model
|
|
4191
|
+
}), /*#__PURE__*/React.createElement(TrackAssemblySelector, {
|
|
4192
|
+
model: model
|
|
4193
|
+
}));
|
|
4118
4194
|
}
|
|
4119
4195
|
|
|
4120
4196
|
var ConfirmTrack$1 = /*#__PURE__*/observer(ConfirmTrack);
|
|
4121
4197
|
|
|
4122
|
-
var useStyles$
|
|
4198
|
+
var useStyles$9 = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
4123
4199
|
return {
|
|
4124
|
-
root: {
|
|
4125
|
-
display: 'flex',
|
|
4126
|
-
flexDirection: 'column'
|
|
4127
|
-
},
|
|
4128
4200
|
paper: {
|
|
4201
|
+
display: 'flex',
|
|
4202
|
+
flexDirection: 'column',
|
|
4129
4203
|
padding: theme.spacing(1)
|
|
4204
|
+
},
|
|
4205
|
+
spacer: {
|
|
4206
|
+
height: theme.spacing(8)
|
|
4130
4207
|
}
|
|
4131
4208
|
};
|
|
4132
4209
|
});
|
|
4133
4210
|
|
|
4134
4211
|
function TrackSourceSelect(_ref) {
|
|
4135
4212
|
var model = _ref.model;
|
|
4136
|
-
var classes = useStyles$
|
|
4137
|
-
|
|
4138
|
-
|
|
4139
|
-
}, /*#__PURE__*/React.createElement(Paper, {
|
|
4213
|
+
var classes = useStyles$9();
|
|
4214
|
+
var rootModel = getRoot(model);
|
|
4215
|
+
return /*#__PURE__*/React.createElement(Paper, {
|
|
4140
4216
|
className: classes.paper
|
|
4141
4217
|
}, /*#__PURE__*/React.createElement(FileSelector$1, {
|
|
4142
4218
|
name: "Main file",
|
|
4143
4219
|
description: "",
|
|
4144
4220
|
location: model.trackData,
|
|
4145
|
-
setLocation: model.setTrackData
|
|
4221
|
+
setLocation: model.setTrackData,
|
|
4222
|
+
setName: model.setTrackName,
|
|
4223
|
+
rootModel: rootModel
|
|
4224
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
4225
|
+
className: classes.spacer
|
|
4146
4226
|
}), /*#__PURE__*/React.createElement(FileSelector$1, {
|
|
4147
4227
|
name: "Index file",
|
|
4148
|
-
description: "
|
|
4228
|
+
description: "(Optional) The URL of the index file is automatically inferred from the URL of the main file if it is not supplied.",
|
|
4149
4229
|
location: model.indexTrackData,
|
|
4150
|
-
setLocation: model.setIndexTrackData
|
|
4151
|
-
|
|
4230
|
+
setLocation: model.setIndexTrackData,
|
|
4231
|
+
setName: model.setTrackName,
|
|
4232
|
+
rootModel: rootModel
|
|
4233
|
+
}));
|
|
4152
4234
|
}
|
|
4153
4235
|
|
|
4154
|
-
var
|
|
4236
|
+
var TrackSourceSelect$1 = /*#__PURE__*/observer(TrackSourceSelect);
|
|
4237
|
+
|
|
4238
|
+
var useStyles$a = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
4155
4239
|
return {
|
|
4156
4240
|
root: {
|
|
4157
4241
|
marginTop: theme.spacing(1)
|
|
@@ -4184,7 +4268,7 @@ function AddTrackWidget(_ref) {
|
|
|
4184
4268
|
activeStep = _useState2[0],
|
|
4185
4269
|
setActiveStep = _useState2[1];
|
|
4186
4270
|
|
|
4187
|
-
var classes = useStyles$
|
|
4271
|
+
var classes = useStyles$a();
|
|
4188
4272
|
var session = getSession(model);
|
|
4189
4273
|
var assembly = model.assembly,
|
|
4190
4274
|
trackAdapter = model.trackAdapter,
|
|
@@ -4200,7 +4284,7 @@ function AddTrackWidget(_ref) {
|
|
|
4200
4284
|
function getStepContent(step) {
|
|
4201
4285
|
switch (step) {
|
|
4202
4286
|
case 0:
|
|
4203
|
-
return /*#__PURE__*/React.createElement(TrackSourceSelect, {
|
|
4287
|
+
return /*#__PURE__*/React.createElement(TrackSourceSelect$1, {
|
|
4204
4288
|
model: model
|
|
4205
4289
|
});
|
|
4206
4290
|
|
|
@@ -4215,38 +4299,61 @@ function AddTrackWidget(_ref) {
|
|
|
4215
4299
|
}
|
|
4216
4300
|
|
|
4217
4301
|
function handleNext() {
|
|
4218
|
-
|
|
4219
|
-
|
|
4220
|
-
return;
|
|
4221
|
-
}
|
|
4222
|
-
|
|
4223
|
-
var trackId = "".concat(trackName.toLowerCase().replace(/ /g, '_'), "-").concat(Date.now()).concat(session.adminMode ? '' : '-sessionTrack');
|
|
4224
|
-
var assemblyInstance = session.assemblyManager.get(assembly);
|
|
4302
|
+
return _handleNext.apply(this, arguments);
|
|
4303
|
+
}
|
|
4225
4304
|
|
|
4226
|
-
|
|
4227
|
-
|
|
4228
|
-
|
|
4229
|
-
|
|
4230
|
-
|
|
4231
|
-
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
|
|
4305
|
+
function _handleNext() {
|
|
4306
|
+
_handleNext = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
|
|
4307
|
+
var trackId, assemblyInstance;
|
|
4308
|
+
return runtime_1.wrap(function _callee$(_context) {
|
|
4309
|
+
while (1) {
|
|
4310
|
+
switch (_context.prev = _context.next) {
|
|
4311
|
+
case 0:
|
|
4312
|
+
if (!(activeStep !== steps.length - 1)) {
|
|
4313
|
+
_context.next = 3;
|
|
4314
|
+
break;
|
|
4315
|
+
}
|
|
4237
4316
|
|
|
4238
|
-
|
|
4239
|
-
|
|
4240
|
-
} else {
|
|
4241
|
-
session.notify('Open a new view, or use the track selector in an existing view, to view this track', 'info');
|
|
4242
|
-
}
|
|
4317
|
+
setActiveStep(activeStep + 1);
|
|
4318
|
+
return _context.abrupt("return");
|
|
4243
4319
|
|
|
4244
|
-
|
|
4320
|
+
case 3:
|
|
4321
|
+
trackId = "".concat(trackName.toLowerCase().replace(/ /g, '_'), "-").concat(Date.now()).concat(session.adminMode ? '' : '-sessionTrack');
|
|
4322
|
+
assemblyInstance = session.assemblyManager.get(assembly);
|
|
4323
|
+
|
|
4324
|
+
if (trackAdapter && trackAdapter.type !== 'UNKNOWN') {
|
|
4325
|
+
// @ts-ignore
|
|
4326
|
+
session.addTrackConf({
|
|
4327
|
+
trackId: trackId,
|
|
4328
|
+
type: trackType,
|
|
4329
|
+
name: trackName,
|
|
4330
|
+
assemblyNames: [assembly],
|
|
4331
|
+
adapter: _objectSpread2(_objectSpread2({}, trackAdapter), {}, {
|
|
4332
|
+
sequenceAdapter: getConf(assemblyInstance, ['sequence', 'adapter'])
|
|
4333
|
+
})
|
|
4334
|
+
});
|
|
4335
|
+
|
|
4336
|
+
if (model.view) {
|
|
4337
|
+
model.view.showTrack(trackId);
|
|
4338
|
+
} else {
|
|
4339
|
+
session.notify('Open a new view, or use the track selector in an existing view, to view this track', 'info');
|
|
4340
|
+
}
|
|
4341
|
+
|
|
4342
|
+
model.clearData(); // @ts-ignore
|
|
4343
|
+
|
|
4344
|
+
session.hideWidget(model);
|
|
4345
|
+
} else {
|
|
4346
|
+
setTrackErrorMessage('Failed to add track.\nThe configuration of this file is not currently supported.');
|
|
4347
|
+
}
|
|
4245
4348
|
|
|
4246
|
-
|
|
4247
|
-
|
|
4248
|
-
|
|
4249
|
-
|
|
4349
|
+
case 6:
|
|
4350
|
+
case "end":
|
|
4351
|
+
return _context.stop();
|
|
4352
|
+
}
|
|
4353
|
+
}
|
|
4354
|
+
}, _callee);
|
|
4355
|
+
}));
|
|
4356
|
+
return _handleNext.apply(this, arguments);
|
|
4250
4357
|
}
|
|
4251
4358
|
|
|
4252
4359
|
function handleBack() {
|
|
@@ -4341,7 +4448,7 @@ function ConnectionTypeSelect(props) {
|
|
|
4341
4448
|
|
|
4342
4449
|
return /*#__PURE__*/React.createElement("form", {
|
|
4343
4450
|
autoComplete: "off"
|
|
4344
|
-
}, /*#__PURE__*/React.createElement(TextField, {
|
|
4451
|
+
}, /*#__PURE__*/React.createElement(TextField$1, {
|
|
4345
4452
|
value: connectionType.name,
|
|
4346
4453
|
label: "connectionType",
|
|
4347
4454
|
helperText: connectionType.description ? /*#__PURE__*/React.createElement(React.Fragment, null, connectionType.description, connectionType.url ? /*#__PURE__*/React.createElement(IconButton$1, {
|
|
@@ -4362,7 +4469,7 @@ function ConnectionTypeSelect(props) {
|
|
|
4362
4469
|
})));
|
|
4363
4470
|
}
|
|
4364
4471
|
|
|
4365
|
-
var useStyles$
|
|
4472
|
+
var useStyles$b = /*#__PURE__*/makeStyles(function (theme) {
|
|
4366
4473
|
return {
|
|
4367
4474
|
root: {
|
|
4368
4475
|
marginTop: theme.spacing(1)
|
|
@@ -4404,7 +4511,7 @@ function AddConnectionWidget(_ref) {
|
|
|
4404
4511
|
activeStep = _useState8[0],
|
|
4405
4512
|
setActiveStep = _useState8[1];
|
|
4406
4513
|
|
|
4407
|
-
var classes = useStyles$
|
|
4514
|
+
var classes = useStyles$b();
|
|
4408
4515
|
var session = getSession(model);
|
|
4409
4516
|
|
|
4410
4517
|
var _getEnv = getEnv(session),
|
|
@@ -4577,7 +4684,7 @@ var DeleteConnectionDialog$3 = {
|
|
|
4577
4684
|
'default': DeleteConnectionDialog$2
|
|
4578
4685
|
};
|
|
4579
4686
|
|
|
4580
|
-
var useStyles$
|
|
4687
|
+
var useStyles$c = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
4581
4688
|
return {
|
|
4582
4689
|
closeButton: {
|
|
4583
4690
|
position: 'absolute',
|
|
@@ -4596,7 +4703,7 @@ function ManageConnectionsDlg(_ref) {
|
|
|
4596
4703
|
var session = _ref.session,
|
|
4597
4704
|
handleClose = _ref.handleClose,
|
|
4598
4705
|
breakConnection = _ref.breakConnection;
|
|
4599
|
-
var classes = useStyles$
|
|
4706
|
+
var classes = useStyles$c();
|
|
4600
4707
|
var adminMode = session.adminMode,
|
|
4601
4708
|
connections = session.connections,
|
|
4602
4709
|
sessionConnections = session.sessionConnections;
|
|
@@ -4642,7 +4749,7 @@ var ManageConnectionsDialog$2 = {
|
|
|
4642
4749
|
'default': ManageConnectionsDialog$1
|
|
4643
4750
|
};
|
|
4644
4751
|
|
|
4645
|
-
var useStyles$
|
|
4752
|
+
var useStyles$d = /*#__PURE__*/makeStyles$1(function (theme) {
|
|
4646
4753
|
return {
|
|
4647
4754
|
closeButton: {
|
|
4648
4755
|
position: 'absolute',
|
|
@@ -4662,7 +4769,7 @@ function ToggleConnectionDialog(_ref) {
|
|
|
4662
4769
|
handleClose = _ref.handleClose,
|
|
4663
4770
|
assemblyName = _ref.assemblyName,
|
|
4664
4771
|
breakConnection = _ref.breakConnection;
|
|
4665
|
-
var classes = useStyles$
|
|
4772
|
+
var classes = useStyles$d();
|
|
4666
4773
|
var connections = session.connections,
|
|
4667
4774
|
connectionInstances = session.connectionInstances;
|
|
4668
4775
|
var assemblySpecificConnections = connections.filter(function (c) {
|