@jbrowse/plugin-data-management 1.4.4 → 1.5.3
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
|
@@ -4,19 +4,34 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
6
6
|
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) { return e; } else {
|
|
9
|
+
var n = {};
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return e[k];
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n['default'] = e;
|
|
22
|
+
return n;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
7
26
|
var React = require('react');
|
|
8
27
|
var React__default = _interopDefault(React);
|
|
9
28
|
var ConnectionType = _interopDefault(require('@jbrowse/core/pluggableElementTypes/ConnectionType'));
|
|
10
29
|
var WidgetType = _interopDefault(require('@jbrowse/core/pluggableElementTypes/WidgetType'));
|
|
11
30
|
var Plugin = _interopDefault(require('@jbrowse/core/Plugin'));
|
|
12
|
-
var util = require('@jbrowse/core/util');
|
|
13
|
-
var NoteAddIcon = _interopDefault(require('@material-ui/icons/NoteAdd'));
|
|
14
|
-
var InputIcon = _interopDefault(require('@material-ui/icons/Input'));
|
|
15
|
-
var ExtensionIcon = _interopDefault(require('@material-ui/icons/Extension'));
|
|
16
31
|
var models = require('@jbrowse/core/pluggableElementTypes/models');
|
|
17
32
|
var configuration = require('@jbrowse/core/configuration');
|
|
33
|
+
var util = require('@jbrowse/core/util');
|
|
18
34
|
var mobxStateTree = require('mobx-state-tree');
|
|
19
|
-
var ucscHub = require('@gmod/ucsc-hub');
|
|
20
35
|
var io = require('@jbrowse/core/util/io');
|
|
21
36
|
var tracks = require('@jbrowse/core/util/tracks');
|
|
22
37
|
var mst = require('@jbrowse/core/util/types/mst');
|
|
@@ -32,22 +47,8 @@ var types = require('@jbrowse/core/util/types');
|
|
|
32
47
|
var PersonIcon = _interopDefault(require('@material-ui/icons/Person'));
|
|
33
48
|
var AddIcon = _interopDefault(require('@material-ui/icons/Add'));
|
|
34
49
|
var CheckIcon = _interopDefault(require('@material-ui/icons/Check'));
|
|
35
|
-
var
|
|
36
|
-
var DialogTitle = _interopDefault(require('@material-ui/core/DialogTitle'));
|
|
37
|
-
var TextField = _interopDefault(require('@material-ui/core/TextField'));
|
|
38
|
-
var Button = _interopDefault(require('@material-ui/core/Button'));
|
|
50
|
+
var clsx = _interopDefault(require('clsx'));
|
|
39
51
|
var IconButton = _interopDefault(require('@material-ui/core/IconButton'));
|
|
40
|
-
var DialogContent = _interopDefault(require('@material-ui/core/DialogContent'));
|
|
41
|
-
var DialogActions = _interopDefault(require('@material-ui/core/DialogActions'));
|
|
42
|
-
var List = _interopDefault(require('@material-ui/core/List'));
|
|
43
|
-
var ListItem = _interopDefault(require('@material-ui/core/ListItem'));
|
|
44
|
-
var ListItemIcon = _interopDefault(require('@material-ui/core/ListItemIcon'));
|
|
45
|
-
var ListItemText = _interopDefault(require('@material-ui/core/ListItemText'));
|
|
46
|
-
var ListSubheader = _interopDefault(require('@material-ui/core/ListSubheader'));
|
|
47
|
-
var Paper = _interopDefault(require('@material-ui/core/Paper'));
|
|
48
|
-
var Typography = _interopDefault(require('@material-ui/core/Typography'));
|
|
49
|
-
var Radio = _interopDefault(require('@material-ui/core/Radio'));
|
|
50
|
-
var pluralize = _interopDefault(require('pluralize'));
|
|
51
52
|
var ArrowBackIosIcon = _interopDefault(require('@material-ui/icons/ArrowBackIos'));
|
|
52
53
|
var CreateIcon = _interopDefault(require('@material-ui/icons/Create'));
|
|
53
54
|
var DeleteIcon = _interopDefault(require('@material-ui/icons/Delete'));
|
|
@@ -61,14 +62,16 @@ var PowerOutlinedIcon = _interopDefault(require('@material-ui/icons/PowerOutline
|
|
|
61
62
|
var AutoSizer = _interopDefault(require('react-virtualized-auto-sizer'));
|
|
62
63
|
var JBrowseMenu = _interopDefault(require('@jbrowse/core/ui/Menu'));
|
|
63
64
|
var reactVtree = require('react-vtree');
|
|
64
|
-
var Link = _interopDefault(require('@material-ui/core/Link'));
|
|
65
|
-
var MenuItem = _interopDefault(require('@material-ui/core/MenuItem'));
|
|
66
|
-
var ui = require('@jbrowse/core/ui');
|
|
67
65
|
var lab = require('@material-ui/lab');
|
|
66
|
+
var ui = require('@jbrowse/core/ui');
|
|
67
|
+
var Button = _interopDefault(require('@material-ui/core/Button'));
|
|
68
68
|
var Step = _interopDefault(require('@material-ui/core/Step'));
|
|
69
69
|
var StepContent = _interopDefault(require('@material-ui/core/StepContent'));
|
|
70
70
|
var StepLabel = _interopDefault(require('@material-ui/core/StepLabel'));
|
|
71
71
|
var Stepper = _interopDefault(require('@material-ui/core/Stepper'));
|
|
72
|
+
var Typography = _interopDefault(require('@material-ui/core/Typography'));
|
|
73
|
+
var MenuItem = _interopDefault(require('@material-ui/core/MenuItem'));
|
|
74
|
+
var TextField = _interopDefault(require('@material-ui/core/TextField'));
|
|
72
75
|
var OpenInNewIcon = _interopDefault(require('@material-ui/icons/OpenInNew'));
|
|
73
76
|
|
|
74
77
|
function ownKeys(object, enumerableOnly) {
|
|
@@ -253,6 +256,8 @@ function _assertThisInitialized(self) {
|
|
|
253
256
|
function _possibleConstructorReturn(self, call) {
|
|
254
257
|
if (call && (typeof call === "object" || typeof call === "function")) {
|
|
255
258
|
return call;
|
|
259
|
+
} else if (call !== void 0) {
|
|
260
|
+
throw new TypeError("Derived constructors may only return object or undefined");
|
|
256
261
|
}
|
|
257
262
|
|
|
258
263
|
return _assertThisInitialized(self);
|
|
@@ -413,7 +418,8 @@ var ucscConfigSchema = /*#__PURE__*/configuration.ConfigurationSchema('UCSCTrack
|
|
|
413
418
|
hubTxtLocation: {
|
|
414
419
|
type: 'fileLocation',
|
|
415
420
|
defaultValue: {
|
|
416
|
-
uri: 'http://mysite.com/path/to/hub.txt'
|
|
421
|
+
uri: 'http://mysite.com/path/to/hub.txt',
|
|
422
|
+
locationType: 'UriLocation'
|
|
417
423
|
},
|
|
418
424
|
description: 'location of the hub file (usually called hub.txt)'
|
|
419
425
|
},
|
|
@@ -523,11 +529,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
523
529
|
|
|
524
530
|
|
|
525
531
|
var IteratorPrototype = {};
|
|
526
|
-
|
|
527
|
-
IteratorPrototype[iteratorSymbol] = function () {
|
|
532
|
+
define(IteratorPrototype, iteratorSymbol, function () {
|
|
528
533
|
return this;
|
|
529
|
-
};
|
|
530
|
-
|
|
534
|
+
});
|
|
531
535
|
var getProto = Object.getPrototypeOf;
|
|
532
536
|
var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
|
|
533
537
|
|
|
@@ -538,8 +542,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
538
542
|
}
|
|
539
543
|
|
|
540
544
|
var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
|
|
541
|
-
GeneratorFunction.prototype =
|
|
542
|
-
|
|
545
|
+
GeneratorFunction.prototype = GeneratorFunctionPrototype;
|
|
546
|
+
define(Gp, "constructor", GeneratorFunctionPrototype);
|
|
547
|
+
define(GeneratorFunctionPrototype, "constructor", GeneratorFunction);
|
|
543
548
|
GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the
|
|
544
549
|
// Iterator interface in terms of a single ._invoke method.
|
|
545
550
|
|
|
@@ -644,11 +649,9 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
644
649
|
}
|
|
645
650
|
|
|
646
651
|
defineIteratorMethods(AsyncIterator.prototype);
|
|
647
|
-
|
|
648
|
-
AsyncIterator.prototype[asyncIteratorSymbol] = function () {
|
|
652
|
+
define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
|
|
649
653
|
return this;
|
|
650
|
-
};
|
|
651
|
-
|
|
654
|
+
});
|
|
652
655
|
exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of
|
|
653
656
|
// AsyncIterator objects; they just return a Promise for the value of
|
|
654
657
|
// the final result produced by the iterator.
|
|
@@ -825,13 +828,12 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
825
828
|
// object to not be returned from this call. This ensures that doesn't happen.
|
|
826
829
|
// See https://github.com/facebook/regenerator/issues/274 for more details.
|
|
827
830
|
|
|
828
|
-
Gp
|
|
831
|
+
define(Gp, iteratorSymbol, function () {
|
|
829
832
|
return this;
|
|
830
|
-
};
|
|
831
|
-
|
|
832
|
-
Gp.toString = function () {
|
|
833
|
+
});
|
|
834
|
+
define(Gp, "toString", function () {
|
|
833
835
|
return "[object Generator]";
|
|
834
|
-
};
|
|
836
|
+
});
|
|
835
837
|
|
|
836
838
|
function pushTryEntry(locs) {
|
|
837
839
|
var entry = {
|
|
@@ -1143,14 +1145,19 @@ var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) {
|
|
|
1143
1145
|
} catch (accidentalStrictMode) {
|
|
1144
1146
|
// This module should not be running in strict mode, so the above
|
|
1145
1147
|
// assignment should always work unless something is misconfigured. Just
|
|
1146
|
-
// in case runtime.js accidentally runs in strict mode,
|
|
1148
|
+
// in case runtime.js accidentally runs in strict mode, in modern engines
|
|
1149
|
+
// we can explicitly access globalThis. In older engines we can escape
|
|
1147
1150
|
// strict mode using a global Function call. This could conceivably fail
|
|
1148
1151
|
// if a Content Security Policy forbids using Function, but in that case
|
|
1149
1152
|
// the proper solution is to fix the accidental strict mode problem. If
|
|
1150
1153
|
// you've misconfigured your bundler to force strict mode and applied a
|
|
1151
1154
|
// CSP to forbid Function, and you're not willing to fix either of those
|
|
1152
1155
|
// problems, please detail your unique predicament in a GitHub issue.
|
|
1153
|
-
|
|
1156
|
+
if (typeof globalThis === "object") {
|
|
1157
|
+
globalThis.regeneratorRuntime = runtime;
|
|
1158
|
+
} else {
|
|
1159
|
+
Function("r", "regeneratorRuntime = r")(runtime);
|
|
1160
|
+
}
|
|
1154
1161
|
}
|
|
1155
1162
|
});
|
|
1156
1163
|
|
|
@@ -1160,7 +1167,8 @@ function fetchHubFile(_x) {
|
|
|
1160
1167
|
|
|
1161
1168
|
function _fetchHubFile() {
|
|
1162
1169
|
_fetchHubFile = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee(hubFileLocation) {
|
|
1163
|
-
var hubFileText;
|
|
1170
|
+
var hubFileText, _yield$import, HubFile;
|
|
1171
|
+
|
|
1164
1172
|
return runtime_1.wrap(function _callee$(_context) {
|
|
1165
1173
|
while (1) {
|
|
1166
1174
|
switch (_context.prev = _context.next) {
|
|
@@ -1171,19 +1179,25 @@ function _fetchHubFile() {
|
|
|
1171
1179
|
|
|
1172
1180
|
case 3:
|
|
1173
1181
|
hubFileText = _context.sent;
|
|
1174
|
-
|
|
1182
|
+
_context.next = 6;
|
|
1183
|
+
return new Promise(function (resolve) { resolve(_interopNamespace(require('@gmod/ucsc-hub'))); });
|
|
1175
1184
|
|
|
1176
|
-
case
|
|
1177
|
-
|
|
1185
|
+
case 6:
|
|
1186
|
+
_yield$import = _context.sent;
|
|
1187
|
+
HubFile = _yield$import.HubFile;
|
|
1188
|
+
return _context.abrupt("return", new HubFile(hubFileText));
|
|
1189
|
+
|
|
1190
|
+
case 11:
|
|
1191
|
+
_context.prev = 11;
|
|
1178
1192
|
_context.t0 = _context["catch"](0);
|
|
1179
1193
|
throw new Error("Not a valid hub.txt file, got error: '".concat(_context.t0, "'"));
|
|
1180
1194
|
|
|
1181
|
-
case
|
|
1195
|
+
case 14:
|
|
1182
1196
|
case "end":
|
|
1183
1197
|
return _context.stop();
|
|
1184
1198
|
}
|
|
1185
1199
|
}
|
|
1186
|
-
}, _callee, null, [[0,
|
|
1200
|
+
}, _callee, null, [[0, 11]]);
|
|
1187
1201
|
}));
|
|
1188
1202
|
return _fetchHubFile.apply(this, arguments);
|
|
1189
1203
|
}
|
|
@@ -1194,7 +1208,8 @@ function fetchGenomesFile(_x2) {
|
|
|
1194
1208
|
|
|
1195
1209
|
function _fetchGenomesFile() {
|
|
1196
1210
|
_fetchGenomesFile = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee2(genomesFileLocation) {
|
|
1197
|
-
var genomesFileText;
|
|
1211
|
+
var genomesFileText, _yield$import2, GenomesFile;
|
|
1212
|
+
|
|
1198
1213
|
return runtime_1.wrap(function _callee2$(_context2) {
|
|
1199
1214
|
while (1) {
|
|
1200
1215
|
switch (_context2.prev = _context2.next) {
|
|
@@ -1204,9 +1219,15 @@ function _fetchGenomesFile() {
|
|
|
1204
1219
|
|
|
1205
1220
|
case 2:
|
|
1206
1221
|
genomesFileText = _context2.sent;
|
|
1207
|
-
|
|
1222
|
+
_context2.next = 5;
|
|
1223
|
+
return new Promise(function (resolve) { resolve(_interopNamespace(require('@gmod/ucsc-hub'))); });
|
|
1208
1224
|
|
|
1209
|
-
case
|
|
1225
|
+
case 5:
|
|
1226
|
+
_yield$import2 = _context2.sent;
|
|
1227
|
+
GenomesFile = _yield$import2.GenomesFile;
|
|
1228
|
+
return _context2.abrupt("return", new GenomesFile(genomesFileText));
|
|
1229
|
+
|
|
1230
|
+
case 8:
|
|
1210
1231
|
case "end":
|
|
1211
1232
|
return _context2.stop();
|
|
1212
1233
|
}
|
|
@@ -1222,7 +1243,8 @@ function fetchTrackDbFile(_x3) {
|
|
|
1222
1243
|
|
|
1223
1244
|
function _fetchTrackDbFile() {
|
|
1224
1245
|
_fetchTrackDbFile = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee3(trackDbFileLocation) {
|
|
1225
|
-
var
|
|
1246
|
+
var text, _yield$import3, TrackDbFile;
|
|
1247
|
+
|
|
1226
1248
|
return runtime_1.wrap(function _callee3$(_context3) {
|
|
1227
1249
|
while (1) {
|
|
1228
1250
|
switch (_context3.prev = _context3.next) {
|
|
@@ -1231,10 +1253,16 @@ function _fetchTrackDbFile() {
|
|
|
1231
1253
|
return io.openLocation(trackDbFileLocation).readFile('utf8');
|
|
1232
1254
|
|
|
1233
1255
|
case 2:
|
|
1234
|
-
|
|
1235
|
-
|
|
1256
|
+
text = _context3.sent;
|
|
1257
|
+
_context3.next = 5;
|
|
1258
|
+
return new Promise(function (resolve) { resolve(_interopNamespace(require('@gmod/ucsc-hub'))); });
|
|
1236
1259
|
|
|
1237
|
-
case
|
|
1260
|
+
case 5:
|
|
1261
|
+
_yield$import3 = _context3.sent;
|
|
1262
|
+
TrackDbFile = _yield$import3.TrackDbFile;
|
|
1263
|
+
return _context3.abrupt("return", new TrackDbFile(text));
|
|
1264
|
+
|
|
1265
|
+
case 8:
|
|
1238
1266
|
case "end":
|
|
1239
1267
|
return _context3.stop();
|
|
1240
1268
|
}
|
|
@@ -1302,11 +1330,13 @@ function makeTrackConfig(track, categories, trackDbFileLocation, trackDb, sequen
|
|
|
1302
1330
|
|
|
1303
1331
|
if (trackDbFileLocation.uri) {
|
|
1304
1332
|
bigDataLocation = {
|
|
1305
|
-
uri: new URL(track.get('bigDataUrl'), trackDbFileLocation.uri).href
|
|
1333
|
+
uri: new URL(track.get('bigDataUrl'), trackDbFileLocation.uri).href,
|
|
1334
|
+
locationType: 'UriLocation'
|
|
1306
1335
|
};
|
|
1307
1336
|
} else {
|
|
1308
1337
|
bigDataLocation = {
|
|
1309
|
-
localPath: track.get('bigDataUrl')
|
|
1338
|
+
localPath: track.get('bigDataUrl'),
|
|
1339
|
+
locationType: 'LocalPathLocation'
|
|
1310
1340
|
};
|
|
1311
1341
|
}
|
|
1312
1342
|
|
|
@@ -1316,15 +1346,19 @@ function makeTrackConfig(track, categories, trackDbFileLocation, trackDb, sequen
|
|
|
1316
1346
|
case 'bam':
|
|
1317
1347
|
if (trackDbFileLocation.uri) {
|
|
1318
1348
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1319
|
-
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href
|
|
1349
|
+
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href,
|
|
1350
|
+
locationType: 'UriLocation'
|
|
1320
1351
|
} : {
|
|
1321
|
-
uri: new URL("".concat(track.get('bigDataUrl'), ".bai"), trackDbFileLocation.uri).href
|
|
1352
|
+
uri: new URL("".concat(track.get('bigDataUrl'), ".bai"), trackDbFileLocation.uri).href,
|
|
1353
|
+
locationType: 'UriLocation'
|
|
1322
1354
|
};
|
|
1323
1355
|
} else {
|
|
1324
1356
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1325
|
-
localPath: track.get('bigDataIndex')
|
|
1357
|
+
localPath: track.get('bigDataIndex'),
|
|
1358
|
+
locationType: 'LocalPathLocation'
|
|
1326
1359
|
} : {
|
|
1327
|
-
localPath: "".concat(track.get('bigDataUrl'), ".bai")
|
|
1360
|
+
localPath: "".concat(track.get('bigDataUrl'), ".bai"),
|
|
1361
|
+
locationType: 'LocalPathLocation'
|
|
1328
1362
|
};
|
|
1329
1363
|
}
|
|
1330
1364
|
|
|
@@ -1474,15 +1508,19 @@ function makeTrackConfig(track, categories, trackDbFileLocation, trackDb, sequen
|
|
|
1474
1508
|
case 'cram':
|
|
1475
1509
|
if (trackDbFileLocation.uri) {
|
|
1476
1510
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1477
|
-
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href
|
|
1511
|
+
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href,
|
|
1512
|
+
locationType: 'UriLocation'
|
|
1478
1513
|
} : {
|
|
1479
|
-
uri: new URL("".concat(track.get('bigDataUrl'), ".crai"), trackDbFileLocation.uri).href
|
|
1514
|
+
uri: new URL("".concat(track.get('bigDataUrl'), ".crai"), trackDbFileLocation.uri).href,
|
|
1515
|
+
locationType: 'UriLocation'
|
|
1480
1516
|
};
|
|
1481
1517
|
} else {
|
|
1482
1518
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1483
|
-
localPath: track.get('bigDataIndex')
|
|
1519
|
+
localPath: track.get('bigDataIndex'),
|
|
1520
|
+
locationType: 'LocalPathLocation'
|
|
1484
1521
|
} : {
|
|
1485
|
-
localPath: "".concat(track.get('bigDataUrl'), ".crai")
|
|
1522
|
+
localPath: "".concat(track.get('bigDataUrl'), ".crai"),
|
|
1523
|
+
locationType: 'LocalPathLocation'
|
|
1486
1524
|
};
|
|
1487
1525
|
}
|
|
1488
1526
|
|
|
@@ -1526,15 +1564,19 @@ function makeTrackConfig(track, categories, trackDbFileLocation, trackDb, sequen
|
|
|
1526
1564
|
case 'vcfTabix':
|
|
1527
1565
|
if (trackDbFileLocation.uri) {
|
|
1528
1566
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1529
|
-
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href
|
|
1567
|
+
uri: new URL(track.get('bigDataIndex'), trackDbFileLocation.uri).href,
|
|
1568
|
+
locationType: 'UriLocation'
|
|
1530
1569
|
} : {
|
|
1531
|
-
uri: new URL("".concat(track.get('bigDataUrl'), ".tbi"), trackDbFileLocation.uri).href
|
|
1570
|
+
uri: new URL("".concat(track.get('bigDataUrl'), ".tbi"), trackDbFileLocation.uri).href,
|
|
1571
|
+
locationType: 'UriLocation'
|
|
1532
1572
|
};
|
|
1533
1573
|
} else {
|
|
1534
1574
|
bigDataIndexLocation = track.get('bigDataIndex') ? {
|
|
1535
|
-
localPath: track.get('bigDataIndex')
|
|
1575
|
+
localPath: track.get('bigDataIndex'),
|
|
1576
|
+
locationType: 'LocalPathLocation'
|
|
1536
1577
|
} : {
|
|
1537
|
-
localPath: "".concat(track.get('bigDataUrl'), ".tbi")
|
|
1578
|
+
localPath: "".concat(track.get('bigDataUrl'), ".tbi"),
|
|
1579
|
+
locationType: 'LocalPathLocation'
|
|
1538
1580
|
};
|
|
1539
1581
|
}
|
|
1540
1582
|
|
|
@@ -1585,22 +1627,17 @@ function UCSCTrackHubConnection(pluginManager) {
|
|
|
1585
1627
|
}).actions(function (self) {
|
|
1586
1628
|
return {
|
|
1587
1629
|
connect: function connect() {
|
|
1588
|
-
var connectionName = configuration.
|
|
1589
|
-
var hubFileLocation = configuration.
|
|
1630
|
+
var connectionName = configuration.getConf(self, 'name');
|
|
1631
|
+
var hubFileLocation = configuration.getConf(self, 'hubTxtLocation');
|
|
1590
1632
|
var session = util.getSession(self);
|
|
1591
1633
|
fetchHubFile(hubFileLocation).then(function (hubFile) {
|
|
1592
|
-
var genomesFileLocation
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
}
|
|
1599
|
-
genomesFileLocation = {
|
|
1600
|
-
localPath: hubFile.get('genomesFile')
|
|
1601
|
-
};
|
|
1602
|
-
}
|
|
1603
|
-
|
|
1634
|
+
var genomesFileLocation = hubFileLocation.uri ? {
|
|
1635
|
+
uri: new URL(hubFile.get('genomesFile'), hubFileLocation.uri).href,
|
|
1636
|
+
locationType: 'UriLocation'
|
|
1637
|
+
} : {
|
|
1638
|
+
localPath: hubFile.get('genomesFile'),
|
|
1639
|
+
locationType: 'LocalPathLocation'
|
|
1640
|
+
};
|
|
1604
1641
|
return Promise.all([hubFile, fetchGenomesFile(genomesFileLocation)]);
|
|
1605
1642
|
}).then(function (_ref) {
|
|
1606
1643
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
@@ -1618,7 +1655,7 @@ function UCSCTrackHubConnection(pluginManager) {
|
|
|
1618
1655
|
genomeName = _step$value[0],
|
|
1619
1656
|
genome = _step$value[1];
|
|
1620
1657
|
|
|
1621
|
-
var assemblyNames = configuration.
|
|
1658
|
+
var assemblyNames = configuration.getConf(self, 'assemblyNames');
|
|
1622
1659
|
|
|
1623
1660
|
if (assemblyNames.length > 0 && !assemblyNames.includes(genomeName)) {
|
|
1624
1661
|
return "break";
|
|
@@ -1632,18 +1669,13 @@ function UCSCTrackHubConnection(pluginManager) {
|
|
|
1632
1669
|
throw new Error("Cannot find assembly for \"".concat(genomeName, "\" from the genomes file for connection \"").concat(connectionName, "\""));
|
|
1633
1670
|
}
|
|
1634
1671
|
|
|
1635
|
-
var trackDbFileLocation =
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
}
|
|
1642
|
-
trackDbFileLocation = {
|
|
1643
|
-
localPath: genome.get('trackDb')
|
|
1644
|
-
};
|
|
1645
|
-
}
|
|
1646
|
-
|
|
1672
|
+
var trackDbFileLocation = hubFileLocation.uri ? {
|
|
1673
|
+
uri: new URL(genome.get('trackDb'), new URL(hubFile.get('genomesFile'), hubFileLocation.uri)).href,
|
|
1674
|
+
locationType: 'UriLocation'
|
|
1675
|
+
} : {
|
|
1676
|
+
localPath: genome.get('trackDb'),
|
|
1677
|
+
locationType: 'LocalPathLocation'
|
|
1678
|
+
};
|
|
1647
1679
|
trackDbData.push(Promise.all([trackDbFileLocation, fetchTrackDbFile(trackDbFileLocation), genomeName, assemblyConf]));
|
|
1648
1680
|
};
|
|
1649
1681
|
|
|
@@ -1701,13 +1733,6 @@ function isAbsoluteUrl() {
|
|
|
1701
1733
|
}
|
|
1702
1734
|
}
|
|
1703
1735
|
|
|
1704
|
-
function getFileName(track) {
|
|
1705
|
-
var uri = 'uri' in track ? track.uri : undefined;
|
|
1706
|
-
var localPath = 'localPath' in track ? track.localPath : undefined;
|
|
1707
|
-
var blob = 'blobId' in track ? track : undefined;
|
|
1708
|
-
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)) || '';
|
|
1709
|
-
}
|
|
1710
|
-
|
|
1711
1736
|
function f(pluginManager) {
|
|
1712
1737
|
return mobxStateTree.types.model('AddTrackModel', {
|
|
1713
1738
|
id: mst.ElementId,
|
|
@@ -1763,11 +1788,11 @@ function f(pluginManager) {
|
|
|
1763
1788
|
var trackData = self.trackData,
|
|
1764
1789
|
indexTrackData = self.indexTrackData,
|
|
1765
1790
|
adapterHint = self.adapterHint;
|
|
1766
|
-
return trackData ? tracks.guessAdapter(trackData, indexTrackData,
|
|
1791
|
+
return trackData ? tracks.guessAdapter(trackData, indexTrackData, adapterHint, self) : undefined;
|
|
1767
1792
|
},
|
|
1768
1793
|
|
|
1769
1794
|
get trackName() {
|
|
1770
|
-
return self.altTrackName || (self.trackData ? getFileName(self.trackData) : '');
|
|
1795
|
+
return self.altTrackName || (self.trackData ? tracks.getFileName(self.trackData) : '');
|
|
1771
1796
|
},
|
|
1772
1797
|
|
|
1773
1798
|
get isFtp() {
|
|
@@ -1830,7 +1855,7 @@ function f(pluginManager) {
|
|
|
1830
1855
|
},
|
|
1831
1856
|
|
|
1832
1857
|
get trackType() {
|
|
1833
|
-
return self.altTrackType || (this.trackAdapter ? tracks.guessTrackType(this.trackAdapter.type) : '');
|
|
1858
|
+
return self.altTrackType || (this.trackAdapter ? tracks.guessTrackType(this.trackAdapter.type, self) : '');
|
|
1834
1859
|
}
|
|
1835
1860
|
|
|
1836
1861
|
};
|
|
@@ -1872,9 +1897,9 @@ var hasAnyOverlap = function hasAnyOverlap() {
|
|
|
1872
1897
|
function passesFilter(filter, config) {
|
|
1873
1898
|
var name = getTrackName(config);
|
|
1874
1899
|
var categories = configuration.readConfObject(config, 'category') || [];
|
|
1875
|
-
var
|
|
1876
|
-
return !!name.
|
|
1877
|
-
return !!cat.
|
|
1900
|
+
var filterLower = filter.toLowerCase();
|
|
1901
|
+
return !!name.toLowerCase().includes(filterLower) || categories.filter(function (cat) {
|
|
1902
|
+
return !!cat.toLowerCase().includes(filterLower);
|
|
1878
1903
|
}).length;
|
|
1879
1904
|
}
|
|
1880
1905
|
|
|
@@ -2149,15 +2174,17 @@ var useStyles = /*#__PURE__*/styles.makeStyles(function () {
|
|
|
2149
2174
|
},
|
|
2150
2175
|
dialogContainer: {
|
|
2151
2176
|
margin: 15
|
|
2177
|
+
},
|
|
2178
|
+
lockedPluginTooltip: {
|
|
2179
|
+
marginRight: '0.5rem'
|
|
2152
2180
|
}
|
|
2153
2181
|
};
|
|
2154
2182
|
});
|
|
2155
2183
|
|
|
2156
2184
|
function LockedPlugin() {
|
|
2185
|
+
var classes = useStyles();
|
|
2157
2186
|
return /*#__PURE__*/React__default.createElement(core.Tooltip, {
|
|
2158
|
-
|
|
2159
|
-
marginRight: '0.5rem'
|
|
2160
|
-
},
|
|
2187
|
+
className: classes.lockedPluginTooltip,
|
|
2161
2188
|
title: "This plugin was installed by an administrator, you cannot remove it."
|
|
2162
2189
|
}, /*#__PURE__*/React__default.createElement(LockIcon, null));
|
|
2163
2190
|
}
|
|
@@ -2219,7 +2246,7 @@ function InstalledPlugin(_ref2) {
|
|
|
2219
2246
|
onClose: function onClose(name) {
|
|
2220
2247
|
if (name) {
|
|
2221
2248
|
var pluginMetadata = pluginManager.pluginMetadata[plugin.name];
|
|
2222
|
-
var pluginUrl = pluginMetadata.url;
|
|
2249
|
+
var pluginUrl = pluginMetadata.url || pluginMetadata.esmUrl || pluginMetadata.umdUrl || pluginMetadata.cjsUrl;
|
|
2223
2250
|
|
|
2224
2251
|
if (adminMode) {
|
|
2225
2252
|
jbrowse.removePlugin(pluginUrl);
|
|
@@ -2271,7 +2298,7 @@ function InstalledPluginsList(_ref) {
|
|
|
2271
2298
|
|
|
2272
2299
|
var InstalledPluginsList$1 = /*#__PURE__*/mobxReact.observer(InstalledPluginsList);
|
|
2273
2300
|
|
|
2274
|
-
var useStyles$1 = /*#__PURE__*/
|
|
2301
|
+
var useStyles$1 = /*#__PURE__*/core.makeStyles(function () {
|
|
2275
2302
|
return {
|
|
2276
2303
|
card: {
|
|
2277
2304
|
margin: '1em'
|
|
@@ -2355,101 +2382,194 @@ function PluginCard(_ref) {
|
|
|
2355
2382
|
|
|
2356
2383
|
var PluginCard$1 = /*#__PURE__*/mobxReact.observer(PluginCard);
|
|
2357
2384
|
|
|
2358
|
-
var useStyles$2 = /*#__PURE__*/
|
|
2385
|
+
var useStyles$2 = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
2359
2386
|
return {
|
|
2360
|
-
|
|
2387
|
+
closeButton: {
|
|
2361
2388
|
position: 'absolute',
|
|
2362
|
-
right:
|
|
2363
|
-
top:
|
|
2389
|
+
right: theme.spacing(1),
|
|
2390
|
+
top: theme.spacing(1)
|
|
2364
2391
|
},
|
|
2365
|
-
|
|
2366
|
-
margin: 15,
|
|
2392
|
+
dialogContent: {
|
|
2367
2393
|
display: 'flex',
|
|
2368
2394
|
flexDirection: 'column'
|
|
2395
|
+
},
|
|
2396
|
+
expand: {
|
|
2397
|
+
transform: 'rotate(0deg)',
|
|
2398
|
+
marginLeft: 'auto',
|
|
2399
|
+
transition: theme.transitions.create('transform', {
|
|
2400
|
+
duration: theme.transitions.duration.shortest
|
|
2401
|
+
})
|
|
2402
|
+
},
|
|
2403
|
+
expandOpen: {
|
|
2404
|
+
transform: 'rotate(180deg)'
|
|
2369
2405
|
}
|
|
2370
2406
|
};
|
|
2371
2407
|
});
|
|
2372
2408
|
|
|
2373
2409
|
function CustomPluginForm(_ref) {
|
|
2374
2410
|
var open = _ref.open,
|
|
2375
|
-
|
|
2411
|
+
onClose = _ref.onClose,
|
|
2376
2412
|
model = _ref.model;
|
|
2377
2413
|
var classes = useStyles$2();
|
|
2378
2414
|
|
|
2379
|
-
var _useState = React.useState(
|
|
2380
|
-
name: '',
|
|
2381
|
-
url: ''
|
|
2382
|
-
}),
|
|
2415
|
+
var _useState = React.useState(''),
|
|
2383
2416
|
_useState2 = _slicedToArray(_useState, 2),
|
|
2384
|
-
|
|
2385
|
-
|
|
2417
|
+
umdPluginName = _useState2[0],
|
|
2418
|
+
setUMDPluginName = _useState2[1];
|
|
2386
2419
|
|
|
2387
|
-
var
|
|
2388
|
-
|
|
2389
|
-
|
|
2420
|
+
var _useState3 = React.useState(''),
|
|
2421
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
2422
|
+
umdPluginUrl = _useState4[0],
|
|
2423
|
+
setUMDPluginUrl = _useState4[1];
|
|
2424
|
+
|
|
2425
|
+
var _useState5 = React.useState(''),
|
|
2426
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
2427
|
+
esmPluginUrl = _useState6[0],
|
|
2428
|
+
setESMPluginUrl = _useState6[1];
|
|
2429
|
+
|
|
2430
|
+
var _useState7 = React.useState(''),
|
|
2431
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
2432
|
+
cjsPluginUrl = _useState8[0],
|
|
2433
|
+
setCJSPluginUrl = _useState8[1];
|
|
2434
|
+
|
|
2435
|
+
var _useState9 = React.useState(false),
|
|
2436
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
2437
|
+
advancedOptionsOpen = _useState10[0],
|
|
2438
|
+
setAdvancedOptionsOpen = _useState10[1];
|
|
2439
|
+
|
|
2440
|
+
function handleChange(event) {
|
|
2441
|
+
var _event$target = event.target,
|
|
2442
|
+
name = _event$target.name,
|
|
2443
|
+
value = _event$target.value;
|
|
2444
|
+
|
|
2445
|
+
if (name === 'umdName') {
|
|
2446
|
+
setUMDPluginName(value);
|
|
2447
|
+
}
|
|
2448
|
+
|
|
2449
|
+
if (name === 'umdUrl') {
|
|
2450
|
+
setUMDPluginUrl(value);
|
|
2451
|
+
}
|
|
2452
|
+
|
|
2453
|
+
if (name === 'esmUrl') {
|
|
2454
|
+
setESMPluginUrl(value);
|
|
2455
|
+
}
|
|
2456
|
+
|
|
2457
|
+
if (name === 'cjsUrl') {
|
|
2458
|
+
setCJSPluginUrl(value);
|
|
2459
|
+
}
|
|
2460
|
+
}
|
|
2461
|
+
|
|
2462
|
+
function handleOpenAdvancedOptions() {
|
|
2463
|
+
setAdvancedOptionsOpen(!advancedOptionsOpen);
|
|
2464
|
+
}
|
|
2390
2465
|
|
|
2391
2466
|
var rootModel = mobxStateTree.getRoot(model);
|
|
2392
2467
|
var jbrowse = rootModel.jbrowse;
|
|
2468
|
+
var ready = Boolean(umdPluginName && umdPluginUrl || esmPluginUrl || cjsPluginUrl);
|
|
2393
2469
|
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
});
|
|
2399
|
-
};
|
|
2470
|
+
function handleSubmit() {
|
|
2471
|
+
if (!ready) {
|
|
2472
|
+
return;
|
|
2473
|
+
}
|
|
2400
2474
|
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2475
|
+
var pluginDefinition = {};
|
|
2476
|
+
|
|
2477
|
+
if (umdPluginName && umdPluginUrl) {
|
|
2478
|
+
pluginDefinition.name = umdPluginName;
|
|
2479
|
+
pluginDefinition.umdUrl = umdPluginUrl;
|
|
2405
2480
|
}
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
2481
|
+
|
|
2482
|
+
if (esmPluginUrl) {
|
|
2483
|
+
pluginDefinition.esmUrl = esmPluginUrl;
|
|
2484
|
+
}
|
|
2485
|
+
|
|
2486
|
+
if (cjsPluginUrl) {
|
|
2487
|
+
pluginDefinition.cjsUrl = cjsPluginUrl;
|
|
2488
|
+
}
|
|
2489
|
+
|
|
2490
|
+
jbrowse.addPlugin(pluginDefinition);
|
|
2491
|
+
}
|
|
2492
|
+
|
|
2493
|
+
function handleClose() {
|
|
2494
|
+
setUMDPluginName('');
|
|
2495
|
+
setUMDPluginUrl('');
|
|
2496
|
+
setESMPluginUrl('');
|
|
2497
|
+
setCJSPluginUrl('');
|
|
2498
|
+
onClose();
|
|
2499
|
+
}
|
|
2500
|
+
|
|
2501
|
+
return /*#__PURE__*/React__default.createElement(core.Dialog, {
|
|
2502
|
+
open: open,
|
|
2503
|
+
onClose: handleClose
|
|
2504
|
+
}, /*#__PURE__*/React__default.createElement(core.DialogTitle, null, "Add custom plugin", /*#__PURE__*/React__default.createElement(IconButton, {
|
|
2505
|
+
size: "medium",
|
|
2506
|
+
className: classes.closeButton,
|
|
2409
2507
|
onClick: function onClick() {
|
|
2410
|
-
return
|
|
2508
|
+
return onClose();
|
|
2411
2509
|
}
|
|
2412
|
-
}, /*#__PURE__*/React__default.createElement(CloseIcon, null))), /*#__PURE__*/React__default.createElement("
|
|
2413
|
-
|
|
2414
|
-
}, /*#__PURE__*/React__default.createElement(
|
|
2415
|
-
|
|
2416
|
-
|
|
2510
|
+
}, /*#__PURE__*/React__default.createElement(CloseIcon, null))), /*#__PURE__*/React__default.createElement("form", {
|
|
2511
|
+
onSubmit: handleSubmit
|
|
2512
|
+
}, /*#__PURE__*/React__default.createElement(core.DialogContent, {
|
|
2513
|
+
className: classes.dialogContent
|
|
2514
|
+
}, /*#__PURE__*/React__default.createElement(core.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__default.createElement(core.TextField, {
|
|
2515
|
+
id: "umd-name-input",
|
|
2516
|
+
name: "umdName",
|
|
2417
2517
|
label: "Plugin name",
|
|
2418
2518
|
variant: "outlined",
|
|
2419
|
-
value:
|
|
2420
|
-
onChange: handleChange
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
name: "url",
|
|
2519
|
+
value: umdPluginName,
|
|
2520
|
+
onChange: handleChange
|
|
2521
|
+
}), /*#__PURE__*/React__default.createElement(core.TextField, {
|
|
2522
|
+
id: "umd-url-input",
|
|
2523
|
+
name: "umdUrl",
|
|
2425
2524
|
label: "Plugin URL",
|
|
2426
2525
|
variant: "outlined",
|
|
2427
|
-
value:
|
|
2428
|
-
onChange: handleChange
|
|
2429
|
-
|
|
2430
|
-
|
|
2526
|
+
value: umdPluginUrl,
|
|
2527
|
+
onChange: handleChange
|
|
2528
|
+
}), /*#__PURE__*/React__default.createElement(core.DialogContentText, {
|
|
2529
|
+
onClick: handleOpenAdvancedOptions
|
|
2530
|
+
}, /*#__PURE__*/React__default.createElement(IconButton, {
|
|
2531
|
+
className: clsx(classes.expand, _defineProperty({}, classes.expandOpen, advancedOptionsOpen)),
|
|
2532
|
+
"aria-expanded": advancedOptionsOpen,
|
|
2533
|
+
"aria-label": "show more"
|
|
2534
|
+
}, /*#__PURE__*/React__default.createElement(ExpandMoreIcon, null)), "Advanced options"), /*#__PURE__*/React__default.createElement(core.Collapse, {
|
|
2535
|
+
"in": advancedOptionsOpen
|
|
2536
|
+
}, /*#__PURE__*/React__default.createElement("div", {
|
|
2537
|
+
className: classes.dialogContent
|
|
2538
|
+
}, /*#__PURE__*/React__default.createElement(core.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__default.createElement(core.TextField, {
|
|
2539
|
+
id: "esm-url-input",
|
|
2540
|
+
name: "esmUrl",
|
|
2541
|
+
label: "ESM build URL",
|
|
2542
|
+
variant: "outlined",
|
|
2543
|
+
value: esmPluginUrl,
|
|
2544
|
+
onChange: handleChange
|
|
2545
|
+
}), /*#__PURE__*/React__default.createElement(core.TextField, {
|
|
2546
|
+
id: "cjs-url-input",
|
|
2547
|
+
name: "cjsUrl",
|
|
2548
|
+
label: "CJS build URL",
|
|
2549
|
+
variant: "outlined",
|
|
2550
|
+
value: cjsPluginUrl,
|
|
2551
|
+
onChange: handleChange
|
|
2552
|
+
})))), /*#__PURE__*/React__default.createElement(core.DialogActions, null, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
2553
|
+
variant: "contained",
|
|
2554
|
+
onClick: handleClose
|
|
2555
|
+
}, "Cancel"), /*#__PURE__*/React__default.createElement(core.Button, {
|
|
2431
2556
|
variant: "contained",
|
|
2432
2557
|
color: "primary",
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
onClick: handleSubmit
|
|
2437
|
-
}, "Add plugin")));
|
|
2558
|
+
onClick: handleSubmit,
|
|
2559
|
+
disabled: !ready
|
|
2560
|
+
}, "Submit"))));
|
|
2438
2561
|
}
|
|
2439
2562
|
|
|
2440
2563
|
var CustomPluginForm$1 = /*#__PURE__*/mobxReact.observer(CustomPluginForm);
|
|
2441
2564
|
|
|
2442
2565
|
var useStyles$3 = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
2443
2566
|
return {
|
|
2444
|
-
|
|
2445
|
-
|
|
2567
|
+
root: {
|
|
2568
|
+
margin: theme.spacing(1)
|
|
2446
2569
|
},
|
|
2447
2570
|
expandIcon: {
|
|
2448
2571
|
color: '#fff'
|
|
2449
2572
|
},
|
|
2450
|
-
searchBox: {
|
|
2451
|
-
marginBottom: theme.spacing(2)
|
|
2452
|
-
},
|
|
2453
2573
|
adminBadge: {
|
|
2454
2574
|
margin: '0.5em',
|
|
2455
2575
|
borderRadius: 3,
|
|
@@ -2471,7 +2591,7 @@ function PluginStoreWidget(_ref) {
|
|
|
2471
2591
|
var model = _ref.model;
|
|
2472
2592
|
var classes = useStyles$3();
|
|
2473
2593
|
|
|
2474
|
-
var _useState = React.useState(
|
|
2594
|
+
var _useState = React.useState(),
|
|
2475
2595
|
_useState2 = _slicedToArray(_useState, 2),
|
|
2476
2596
|
pluginArray = _useState2[0],
|
|
2477
2597
|
setPluginArray = _useState2[1];
|
|
@@ -2493,60 +2613,71 @@ function PluginStoreWidget(_ref) {
|
|
|
2493
2613
|
pluginManager = _getEnv.pluginManager;
|
|
2494
2614
|
|
|
2495
2615
|
React.useEffect(function () {
|
|
2496
|
-
var
|
|
2616
|
+
var controller = new AbortController();
|
|
2617
|
+
var signal = controller.signal;
|
|
2497
2618
|
|
|
2498
2619
|
_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
|
|
2499
|
-
var
|
|
2620
|
+
var response, err, array;
|
|
2500
2621
|
return runtime_1.wrap(function _callee$(_context) {
|
|
2501
2622
|
while (1) {
|
|
2502
2623
|
switch (_context.prev = _context.next) {
|
|
2503
2624
|
case 0:
|
|
2504
2625
|
_context.prev = 0;
|
|
2505
2626
|
_context.next = 3;
|
|
2506
|
-
return fetch('https://jbrowse.org/plugin-store/plugins.json'
|
|
2627
|
+
return fetch('https://jbrowse.org/plugin-store/plugins.json', {
|
|
2628
|
+
signal: signal
|
|
2629
|
+
});
|
|
2507
2630
|
|
|
2508
2631
|
case 3:
|
|
2509
|
-
|
|
2632
|
+
response = _context.sent;
|
|
2510
2633
|
|
|
2511
|
-
if (
|
|
2512
|
-
_context.next =
|
|
2634
|
+
if (response.ok) {
|
|
2635
|
+
_context.next = 9;
|
|
2513
2636
|
break;
|
|
2514
2637
|
}
|
|
2515
2638
|
|
|
2516
|
-
|
|
2639
|
+
_context.next = 7;
|
|
2640
|
+
return response.text();
|
|
2641
|
+
|
|
2642
|
+
case 7:
|
|
2643
|
+
err = _context.sent;
|
|
2644
|
+
throw new Error("Failed to fetch plugin data: ".concat(response.status, " ").concat(response.statusText, " ").concat(err));
|
|
2517
2645
|
|
|
2518
|
-
case
|
|
2519
|
-
_context.next =
|
|
2520
|
-
return
|
|
2646
|
+
case 9:
|
|
2647
|
+
_context.next = 11;
|
|
2648
|
+
return response.json();
|
|
2521
2649
|
|
|
2522
|
-
case
|
|
2650
|
+
case 11:
|
|
2523
2651
|
array = _context.sent;
|
|
2524
2652
|
|
|
2525
|
-
if (!
|
|
2653
|
+
if (!signal.aborted) {
|
|
2526
2654
|
setPluginArray(array.plugins);
|
|
2527
2655
|
}
|
|
2528
2656
|
|
|
2529
|
-
_context.next =
|
|
2657
|
+
_context.next = 19;
|
|
2530
2658
|
break;
|
|
2531
2659
|
|
|
2532
|
-
case
|
|
2533
|
-
_context.prev =
|
|
2660
|
+
case 15:
|
|
2661
|
+
_context.prev = 15;
|
|
2534
2662
|
_context.t0 = _context["catch"](0);
|
|
2663
|
+
console.error(_context.t0);
|
|
2535
2664
|
setError(_context.t0);
|
|
2536
2665
|
|
|
2537
|
-
case
|
|
2666
|
+
case 19:
|
|
2538
2667
|
case "end":
|
|
2539
2668
|
return _context.stop();
|
|
2540
2669
|
}
|
|
2541
2670
|
}
|
|
2542
|
-
}, _callee, null, [[0,
|
|
2671
|
+
}, _callee, null, [[0, 15]]);
|
|
2543
2672
|
}))();
|
|
2544
2673
|
|
|
2545
2674
|
return function () {
|
|
2546
|
-
|
|
2675
|
+
controller.abort();
|
|
2547
2676
|
};
|
|
2548
2677
|
}, []);
|
|
2549
|
-
return /*#__PURE__*/React__default.createElement("div",
|
|
2678
|
+
return /*#__PURE__*/React__default.createElement("div", {
|
|
2679
|
+
className: classes.root
|
|
2680
|
+
}, adminMode && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, !util.isElectron && /*#__PURE__*/React__default.createElement("div", {
|
|
2550
2681
|
className: classes.adminBadge
|
|
2551
2682
|
}, /*#__PURE__*/React__default.createElement(InfoOutlinedIcon, {
|
|
2552
2683
|
style: {
|
|
@@ -2562,10 +2693,11 @@ function PluginStoreWidget(_ref) {
|
|
|
2562
2693
|
}
|
|
2563
2694
|
}, "Add custom plugin")), /*#__PURE__*/React__default.createElement(CustomPluginForm$1, {
|
|
2564
2695
|
open: customPluginFormOpen,
|
|
2565
|
-
onClose:
|
|
2696
|
+
onClose: function onClose() {
|
|
2697
|
+
return setCustomPluginFormOpen(false);
|
|
2698
|
+
},
|
|
2566
2699
|
model: model
|
|
2567
2700
|
})), /*#__PURE__*/React__default.createElement(core.TextField, {
|
|
2568
|
-
className: classes.searchBox,
|
|
2569
2701
|
label: "Filter plugins",
|
|
2570
2702
|
value: model.filterText,
|
|
2571
2703
|
onChange: function onChange(event) {
|
|
@@ -2607,7 +2739,12 @@ function PluginStoreWidget(_ref) {
|
|
|
2607
2739
|
variant: "h5"
|
|
2608
2740
|
}, "Available plugins")), error ? /*#__PURE__*/React__default.createElement(core.Typography, {
|
|
2609
2741
|
color: "error"
|
|
2610
|
-
}, "".concat(error)) : pluginArray
|
|
2742
|
+
}, "".concat(error)) : pluginArray ? pluginArray.filter(function (plugin) {
|
|
2743
|
+
// If pugin only has cjsUrl, don't display outside desktop
|
|
2744
|
+
if (!util.isElectron && !(plugin.esmUrl || plugin.url || plugin.umdUrl)) {
|
|
2745
|
+
return false;
|
|
2746
|
+
}
|
|
2747
|
+
|
|
2611
2748
|
return plugin.name.toLowerCase().includes(model.filterText.toLowerCase());
|
|
2612
2749
|
}).map(function (plugin) {
|
|
2613
2750
|
return /*#__PURE__*/React__default.createElement(PluginCard$1, {
|
|
@@ -2732,171 +2869,56 @@ var _default = /*#__PURE__*/function (_Plugin) {
|
|
|
2732
2869
|
}
|
|
2733
2870
|
}, {
|
|
2734
2871
|
key: "configure",
|
|
2735
|
-
value: function configure(pluginManager) {
|
|
2736
|
-
if (util.isAbstractMenuManager(pluginManager.rootModel)) {
|
|
2737
|
-
pluginManager.rootModel.appendToMenu('File', {
|
|
2738
|
-
label: 'Open track',
|
|
2739
|
-
icon: NoteAddIcon,
|
|
2740
|
-
onClick: function onClick(session) {
|
|
2741
|
-
if (session.views.length === 0) {
|
|
2742
|
-
session.notify('Please open a view to add a track first');
|
|
2743
|
-
} else if (session.views.length >= 1) {
|
|
2744
|
-
var widget = session.addWidget('AddTrackWidget', 'addTrackWidget', {
|
|
2745
|
-
view: session.views[0].id
|
|
2746
|
-
});
|
|
2747
|
-
session.showWidget(widget);
|
|
2748
|
-
|
|
2749
|
-
if (session.views.length > 1) {
|
|
2750
|
-
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");
|
|
2751
|
-
}
|
|
2752
|
-
}
|
|
2753
|
-
}
|
|
2754
|
-
});
|
|
2755
|
-
pluginManager.rootModel.appendToMenu('File', {
|
|
2756
|
-
label: 'Open connection',
|
|
2757
|
-
icon: InputIcon,
|
|
2758
|
-
onClick: function onClick(session) {
|
|
2759
|
-
var widget = session.addWidget('AddConnectionWidget', 'addConnectionWidget');
|
|
2760
|
-
session.showWidget(widget);
|
|
2761
|
-
}
|
|
2762
|
-
});
|
|
2763
|
-
pluginManager.rootModel.appendToMenu('File', {
|
|
2764
|
-
label: 'Plugin store',
|
|
2765
|
-
icon: ExtensionIcon,
|
|
2766
|
-
onClick: function onClick(session) {
|
|
2767
|
-
var widget = session.addWidget('PluginStoreWidget', 'pluginStoreWidget');
|
|
2768
|
-
session.showWidget(widget);
|
|
2769
|
-
}
|
|
2770
|
-
});
|
|
2771
|
-
}
|
|
2772
|
-
}
|
|
2872
|
+
value: function configure(pluginManager) {}
|
|
2773
2873
|
}]);
|
|
2774
2874
|
|
|
2775
2875
|
return _default;
|
|
2776
2876
|
}(Plugin);
|
|
2777
2877
|
|
|
2778
|
-
|
|
2779
|
-
return
|
|
2780
|
-
|
|
2781
|
-
margin: theme.spacing(1)
|
|
2782
|
-
},
|
|
2783
|
-
message: {
|
|
2784
|
-
padding: theme.spacing(3)
|
|
2785
|
-
},
|
|
2786
|
-
titleBox: {
|
|
2787
|
-
color: '#fff',
|
|
2788
|
-
backgroundColor: theme.palette.primary.main,
|
|
2789
|
-
textAlign: 'center'
|
|
2790
|
-
},
|
|
2791
|
-
dialogContent: {
|
|
2792
|
-
width: 600
|
|
2793
|
-
},
|
|
2794
|
-
resetButton: {
|
|
2795
|
-
justifyContent: 'center',
|
|
2796
|
-
marginBottom: '6px'
|
|
2797
|
-
}
|
|
2798
|
-
};
|
|
2799
|
-
});
|
|
2800
|
-
var CurrentSession = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
2801
|
-
var session = _ref.session,
|
|
2802
|
-
selectedDefault = _ref.selectedDefault,
|
|
2803
|
-
handleRadio = _ref.handleRadio;
|
|
2804
|
-
var classes = useStyles$4();
|
|
2805
|
-
return /*#__PURE__*/React__default.createElement(Paper, {
|
|
2806
|
-
className: classes.root
|
|
2807
|
-
}, /*#__PURE__*/React__default.createElement(List, {
|
|
2808
|
-
subheader: /*#__PURE__*/React__default.createElement(ListSubheader, null, "Currently open session")
|
|
2809
|
-
}, /*#__PURE__*/React__default.createElement(ListItem, null, /*#__PURE__*/React__default.createElement(ListItemIcon, null, /*#__PURE__*/React__default.createElement(Radio, {
|
|
2810
|
-
checked: session.name === selectedDefault,
|
|
2811
|
-
onChange: function onChange() {
|
|
2812
|
-
return handleRadio(session);
|
|
2813
|
-
}
|
|
2814
|
-
})), /*#__PURE__*/React__default.createElement(ListItemText, {
|
|
2815
|
-
primary: session.name
|
|
2816
|
-
}))));
|
|
2817
|
-
});
|
|
2818
|
-
var SetDefaultSession$1 = /*#__PURE__*/mobxReact.observer(function (_ref2) {
|
|
2819
|
-
var rootModel = _ref2.rootModel,
|
|
2820
|
-
open = _ref2.open,
|
|
2821
|
-
onClose = _ref2.onClose,
|
|
2822
|
-
currentDefault = _ref2.currentDefault;
|
|
2823
|
-
var classes = useStyles$4();
|
|
2824
|
-
var session = rootModel.session;
|
|
2878
|
+
function canSetDefaultSession(obj) {
|
|
2879
|
+
return _typeof(obj) === 'object' && !!obj && 'jbrowse' in obj;
|
|
2880
|
+
}
|
|
2825
2881
|
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
setSelectedDefault = _useState2[1]; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2882
|
+
var SetDefaultSession$1 = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
2883
|
+
var rootModel = _ref.rootModel,
|
|
2884
|
+
onClose = _ref.onClose;
|
|
2830
2885
|
|
|
2886
|
+
if (!rootModel) {
|
|
2887
|
+
return null;
|
|
2888
|
+
}
|
|
2831
2889
|
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
session.notify("Set default session to ".concat(sessionSnapshot.name), 'success');
|
|
2890
|
+
if (!canSetDefaultSession(rootModel)) {
|
|
2891
|
+
console.error('Incorrect rootmodel');
|
|
2892
|
+
return null;
|
|
2836
2893
|
}
|
|
2837
2894
|
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
container: true
|
|
2845
|
-
}, /*#__PURE__*/React__default.createElement(core.Grid, {
|
|
2846
|
-
item: true
|
|
2847
|
-
}, /*#__PURE__*/React__default.createElement(Button, {
|
|
2848
|
-
color: "secondary",
|
|
2895
|
+
var jbrowse = rootModel.jbrowse,
|
|
2896
|
+
session = rootModel.session;
|
|
2897
|
+
return /*#__PURE__*/React__default.createElement(core.Dialog, {
|
|
2898
|
+
open: true,
|
|
2899
|
+
onClose: onClose
|
|
2900
|
+
}, /*#__PURE__*/React__default.createElement(core.DialogTitle, null, "Set default session"), /*#__PURE__*/React__default.createElement(core.DialogContent, null, /*#__PURE__*/React__default.createElement(core.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__default.createElement(core.DialogActions, null, /*#__PURE__*/React__default.createElement(core.Button, {
|
|
2849
2901
|
variant: "contained",
|
|
2850
2902
|
onClick: function onClick() {
|
|
2851
|
-
|
|
2852
|
-
rootModel.jbrowse.setDefaultSessionConf({
|
|
2903
|
+
jbrowse.setDefaultSessionConf({
|
|
2853
2904
|
name: "New session"
|
|
2854
2905
|
});
|
|
2855
|
-
|
|
2906
|
+
onClose();
|
|
2856
2907
|
}
|
|
2857
|
-
}, "Clear default session")
|
|
2858
|
-
session: session,
|
|
2859
|
-
selectedDefault: selectedDefault,
|
|
2860
|
-
handleRadio: handleRadio
|
|
2861
|
-
}), /*#__PURE__*/React__default.createElement(Paper, {
|
|
2862
|
-
className: classes.root
|
|
2863
|
-
}, /*#__PURE__*/React__default.createElement(List, {
|
|
2864
|
-
subheader: /*#__PURE__*/React__default.createElement(ListSubheader, null, "Saved sessions")
|
|
2865
|
-
}, session.savedSessions.length ? session.savedSessions.map( // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2866
|
-
function (sessionSnapshot) {
|
|
2867
|
-
var _sessionSnapshot$view = sessionSnapshot.views,
|
|
2868
|
-
views = _sessionSnapshot$view === void 0 ? [] : _sessionSnapshot$view;
|
|
2869
|
-
var totalTracks = views // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2870
|
-
.map(function (view) {
|
|
2871
|
-
return view.tracks.length;
|
|
2872
|
-
}).reduce(function (a, b) {
|
|
2873
|
-
return a + b;
|
|
2874
|
-
}, 0);
|
|
2875
|
-
|
|
2876
|
-
if (sessionSnapshot.name !== session.name) {
|
|
2877
|
-
return /*#__PURE__*/React__default.createElement(ListItem, {
|
|
2878
|
-
key: sessionSnapshot.name
|
|
2879
|
-
}, /*#__PURE__*/React__default.createElement(ListItemIcon, null, /*#__PURE__*/React__default.createElement(Radio, {
|
|
2880
|
-
checked: sessionSnapshot.name === selectedDefault,
|
|
2881
|
-
onChange: function onChange() {
|
|
2882
|
-
return handleRadio(sessionSnapshot);
|
|
2883
|
-
}
|
|
2884
|
-
})), /*#__PURE__*/React__default.createElement(ListItemText, {
|
|
2885
|
-
primary: sessionSnapshot.name,
|
|
2886
|
-
secondary: "".concat(views.length, " ").concat(pluralize('view', views.length), "; ").concat(totalTracks, "\n open ").concat(pluralize('track', totalTracks))
|
|
2887
|
-
}));
|
|
2888
|
-
}
|
|
2889
|
-
|
|
2890
|
-
return null;
|
|
2891
|
-
}) : /*#__PURE__*/React__default.createElement(Typography, {
|
|
2892
|
-
className: classes.message
|
|
2893
|
-
}, "No saved sessions found")))), /*#__PURE__*/React__default.createElement(DialogActions, null, /*#__PURE__*/React__default.createElement(Button, {
|
|
2908
|
+
}, "Clear default session"), /*#__PURE__*/React__default.createElement(core.Button, {
|
|
2894
2909
|
color: "secondary",
|
|
2895
2910
|
variant: "contained",
|
|
2896
2911
|
onClick: function onClick() {
|
|
2897
|
-
onClose(
|
|
2912
|
+
return onClose();
|
|
2898
2913
|
}
|
|
2899
|
-
}, "
|
|
2914
|
+
}, "Cancel"), /*#__PURE__*/React__default.createElement(core.Button, {
|
|
2915
|
+
color: "primary",
|
|
2916
|
+
variant: "contained",
|
|
2917
|
+
onClick: function onClick() {
|
|
2918
|
+
jbrowse.setDefaultSessionConf(session);
|
|
2919
|
+
onClose();
|
|
2920
|
+
}
|
|
2921
|
+
}, "Set current session as default")));
|
|
2900
2922
|
});
|
|
2901
2923
|
|
|
2902
2924
|
|
|
@@ -2906,7 +2928,7 @@ var index = {
|
|
|
2906
2928
|
'default': SetDefaultSession$1
|
|
2907
2929
|
};
|
|
2908
2930
|
|
|
2909
|
-
var useStyles$
|
|
2931
|
+
var useStyles$4 = /*#__PURE__*/core.makeStyles(function () {
|
|
2910
2932
|
return {
|
|
2911
2933
|
table: {
|
|
2912
2934
|
minWidth: 500,
|
|
@@ -2927,7 +2949,7 @@ var AssemblyTable = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
|
2927
2949
|
var rootModel = _ref.rootModel,
|
|
2928
2950
|
setIsAssemblyBeingEdited = _ref.setIsAssemblyBeingEdited,
|
|
2929
2951
|
setAssemblyBeingEdited = _ref.setAssemblyBeingEdited;
|
|
2930
|
-
var classes = useStyles$
|
|
2952
|
+
var classes = useStyles$4();
|
|
2931
2953
|
|
|
2932
2954
|
function removeAssembly(name) {
|
|
2933
2955
|
rootModel.jbrowse.removeAssemblyConf(name);
|
|
@@ -2975,7 +2997,7 @@ var AssemblyTable = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
|
2975
2997
|
}, "Actions")))), /*#__PURE__*/React__default.createElement(core.TableBody, null, rows)));
|
|
2976
2998
|
});
|
|
2977
2999
|
|
|
2978
|
-
var useStyles$
|
|
3000
|
+
var useStyles$5 = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
2979
3001
|
return {
|
|
2980
3002
|
root: {
|
|
2981
3003
|
flexGrow: 1,
|
|
@@ -3087,10 +3109,13 @@ var AdapterInput = /*#__PURE__*/mobxReact.observer(function (_ref2) {
|
|
|
3087
3109
|
|
|
3088
3110
|
return null;
|
|
3089
3111
|
});
|
|
3112
|
+
var blank = {
|
|
3113
|
+
uri: ''
|
|
3114
|
+
};
|
|
3090
3115
|
var AssemblyAddForm = /*#__PURE__*/mobxReact.observer(function (_ref3) {
|
|
3091
3116
|
var rootModel = _ref3.rootModel,
|
|
3092
3117
|
setFormOpen = _ref3.setFormOpen;
|
|
3093
|
-
var classes = useStyles$
|
|
3118
|
+
var classes = useStyles$5();
|
|
3094
3119
|
var adapterTypes = ['IndexedFastaAdapter', 'BgzipFastaAdapter', 'TwoBitAdapter'];
|
|
3095
3120
|
|
|
3096
3121
|
var _useState = React.useState(''),
|
|
@@ -3108,37 +3133,27 @@ var AssemblyAddForm = /*#__PURE__*/mobxReact.observer(function (_ref3) {
|
|
|
3108
3133
|
adapterSelection = _useState6[0],
|
|
3109
3134
|
setAdapterSelection = _useState6[1];
|
|
3110
3135
|
|
|
3111
|
-
var _useState7 = React.useState(
|
|
3112
|
-
uri: ''
|
|
3113
|
-
}),
|
|
3136
|
+
var _useState7 = React.useState(blank),
|
|
3114
3137
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
3115
3138
|
fastaLocation = _useState8[0],
|
|
3116
3139
|
setFastaLocation = _useState8[1];
|
|
3117
3140
|
|
|
3118
|
-
var _useState9 = React.useState(
|
|
3119
|
-
uri: ''
|
|
3120
|
-
}),
|
|
3141
|
+
var _useState9 = React.useState(blank),
|
|
3121
3142
|
_useState10 = _slicedToArray(_useState9, 2),
|
|
3122
3143
|
faiLocation = _useState10[0],
|
|
3123
3144
|
setFaiLocation = _useState10[1];
|
|
3124
3145
|
|
|
3125
|
-
var _useState11 = React.useState(
|
|
3126
|
-
uri: ''
|
|
3127
|
-
}),
|
|
3146
|
+
var _useState11 = React.useState(blank),
|
|
3128
3147
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
3129
3148
|
gziLocation = _useState12[0],
|
|
3130
3149
|
setGziLocation = _useState12[1];
|
|
3131
3150
|
|
|
3132
|
-
var _useState13 = React.useState(
|
|
3133
|
-
uri: ''
|
|
3134
|
-
}),
|
|
3151
|
+
var _useState13 = React.useState(blank),
|
|
3135
3152
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
3136
3153
|
twoBitLocation = _useState14[0],
|
|
3137
3154
|
setTwoBitLocation = _useState14[1];
|
|
3138
3155
|
|
|
3139
|
-
var _useState15 = React.useState(
|
|
3140
|
-
uri: ''
|
|
3141
|
-
}),
|
|
3156
|
+
var _useState15 = React.useState(blank),
|
|
3142
3157
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
3143
3158
|
chromSizesLocation = _useState16[0],
|
|
3144
3159
|
setChromSizesLocation = _useState16[1];
|
|
@@ -3147,8 +3162,7 @@ var AssemblyAddForm = /*#__PURE__*/mobxReact.observer(function (_ref3) {
|
|
|
3147
3162
|
if (assemblyName === '') {
|
|
3148
3163
|
rootModel.session.notify("Can't create an assembly without a name");
|
|
3149
3164
|
} else {
|
|
3150
|
-
setFormOpen(false);
|
|
3151
|
-
|
|
3165
|
+
setFormOpen(false);
|
|
3152
3166
|
var newAssembly;
|
|
3153
3167
|
|
|
3154
3168
|
if (adapterSelection === 'IndexedFastaAdapter') {
|
|
@@ -3263,7 +3277,7 @@ var AssemblyEditor = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
|
3263
3277
|
});
|
|
3264
3278
|
});
|
|
3265
3279
|
|
|
3266
|
-
var useStyles$
|
|
3280
|
+
var useStyles$6 = /*#__PURE__*/styles.makeStyles(function (theme) {
|
|
3267
3281
|
return {
|
|
3268
3282
|
titleBox: {
|
|
3269
3283
|
color: '#fff',
|
|
@@ -3290,7 +3304,7 @@ var useStyles$7 = /*#__PURE__*/styles.makeStyles(function (theme) {
|
|
|
3290
3304
|
var AssemblyManager$1 = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
3291
3305
|
var rootModel = _ref.rootModel,
|
|
3292
3306
|
_onClose = _ref.onClose;
|
|
3293
|
-
var classes = useStyles$
|
|
3307
|
+
var classes = useStyles$6();
|
|
3294
3308
|
|
|
3295
3309
|
var _useState = React.useState(false),
|
|
3296
3310
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -3387,7 +3401,7 @@ var ManageConnectionsDialog = /*#__PURE__*/React.lazy(function () {
|
|
|
3387
3401
|
var ToggleConnectionsDialog = /*#__PURE__*/React.lazy(function () {
|
|
3388
3402
|
return Promise.resolve().then(function () { return ToggleConnectionsDialog$2; });
|
|
3389
3403
|
});
|
|
3390
|
-
var useStyles$
|
|
3404
|
+
var useStyles$7 = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
3391
3405
|
var _theme$palette$tertia, _theme$palette$tertia2;
|
|
3392
3406
|
|
|
3393
3407
|
return {
|
|
@@ -3457,11 +3471,13 @@ var Node = function Node(props) {
|
|
|
3457
3471
|
_onChange = data.onChange,
|
|
3458
3472
|
toggleCollapse = data.toggleCollapse,
|
|
3459
3473
|
conf = data.conf,
|
|
3460
|
-
onMoreInfo = data.onMoreInfo
|
|
3461
|
-
|
|
3474
|
+
onMoreInfo = data.onMoreInfo,
|
|
3475
|
+
drawerPosition = data.drawerPosition;
|
|
3476
|
+
var classes = useStyles$7();
|
|
3462
3477
|
var width = 10;
|
|
3463
3478
|
var marginLeft = nestingLevel * width + (isLeaf ? width : 0);
|
|
3464
3479
|
var unsupported = name && (name.endsWith('(Unsupported)') || name.endsWith('(Unknown)'));
|
|
3480
|
+
var description = conf && configuration.readConfObject(conf, ['description']) || '';
|
|
3465
3481
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
3466
3482
|
style: style,
|
|
3467
3483
|
className: !isLeaf ? classes.accordionBase : undefined
|
|
@@ -3489,7 +3505,10 @@ var Node = function Node(props) {
|
|
|
3489
3505
|
className: !isLeaf ? classes.accordionColor : undefined
|
|
3490
3506
|
}, !isLeaf ? /*#__PURE__*/React__default.createElement("div", {
|
|
3491
3507
|
className: classes.accordionText
|
|
3492
|
-
}, /*#__PURE__*/React__default.createElement(core.Typography, null, isOpen ? /*#__PURE__*/React__default.createElement(ArrowDropDownIcon, null) : /*#__PURE__*/React__default.createElement(ArrowRightIcon, null), name)) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.
|
|
3508
|
+
}, /*#__PURE__*/React__default.createElement(core.Typography, null, isOpen ? /*#__PURE__*/React__default.createElement(ArrowDropDownIcon, null) : /*#__PURE__*/React__default.createElement(ArrowRightIcon, null), name)) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.Tooltip, {
|
|
3509
|
+
title: description,
|
|
3510
|
+
placement: drawerPosition === 'left' ? 'right' : 'left'
|
|
3511
|
+
}, /*#__PURE__*/React__default.createElement(core.FormControlLabel, {
|
|
3493
3512
|
className: classes.checkboxLabel,
|
|
3494
3513
|
control: /*#__PURE__*/React__default.createElement(core.Checkbox, {
|
|
3495
3514
|
className: classes.compactCheckbox,
|
|
@@ -3504,7 +3523,7 @@ var Node = function Node(props) {
|
|
|
3504
3523
|
}
|
|
3505
3524
|
}),
|
|
3506
3525
|
label: name
|
|
3507
|
-
}), /*#__PURE__*/React__default.createElement(core.IconButton, {
|
|
3526
|
+
})), /*#__PURE__*/React__default.createElement(core.IconButton, {
|
|
3508
3527
|
onClick: function onClick(e) {
|
|
3509
3528
|
return onMoreInfo({
|
|
3510
3529
|
target: e.currentTarget,
|
|
@@ -3550,6 +3569,7 @@ var HierarchicalTree = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
|
3550
3569
|
setMoreInfo = _useState2[1];
|
|
3551
3570
|
|
|
3552
3571
|
var session = util.getSession(model);
|
|
3572
|
+
var drawerPosition = session.drawerPosition;
|
|
3553
3573
|
var extra = React.useMemo(function () {
|
|
3554
3574
|
return {
|
|
3555
3575
|
onChange: function onChange(trackId) {
|
|
@@ -3558,9 +3578,10 @@ var HierarchicalTree = /*#__PURE__*/mobxReact.observer(function (_ref) {
|
|
|
3558
3578
|
toggleCollapse: function toggleCollapse(pathName) {
|
|
3559
3579
|
return model.toggleCategory(pathName);
|
|
3560
3580
|
},
|
|
3561
|
-
onMoreInfo: setMoreInfo
|
|
3581
|
+
onMoreInfo: setMoreInfo,
|
|
3582
|
+
drawerPosition: drawerPosition
|
|
3562
3583
|
};
|
|
3563
|
-
}, [view, model]);
|
|
3584
|
+
}, [view, model, drawerPosition]);
|
|
3564
3585
|
var treeWalker = React.useCallback( /*#__PURE__*/runtime_1.mark(function treeWalker() {
|
|
3565
3586
|
var i, parentMeta, _i, curr;
|
|
3566
3587
|
|
|
@@ -3678,7 +3699,7 @@ var HierarchicalTrackSelectorContainer = /*#__PURE__*/mobxReact.observer(functio
|
|
|
3678
3699
|
var model = _ref5.model,
|
|
3679
3700
|
toolbarHeight = _ref5.toolbarHeight,
|
|
3680
3701
|
overrideDimensions = _ref5.overrideDimensions;
|
|
3681
|
-
var classes = useStyles$
|
|
3702
|
+
var classes = useStyles$7();
|
|
3682
3703
|
var session = util.getSession(model);
|
|
3683
3704
|
|
|
3684
3705
|
var _useState3 = React.useState(null),
|
|
@@ -3729,7 +3750,7 @@ var HierarchicalTrackSelectorHeader = /*#__PURE__*/mobxReact.observer(function (
|
|
|
3729
3750
|
setHeaderHeight = _ref6.setHeaderHeight,
|
|
3730
3751
|
setAssemblyIdx = _ref6.setAssemblyIdx,
|
|
3731
3752
|
assemblyIdx = _ref6.assemblyIdx;
|
|
3732
|
-
var classes = useStyles$
|
|
3753
|
+
var classes = useStyles$7();
|
|
3733
3754
|
var session = util.getSession(model);
|
|
3734
3755
|
|
|
3735
3756
|
var _useState5 = React.useState(),
|
|
@@ -3947,7 +3968,7 @@ var HierarchicalTrackSelector$1 = {
|
|
|
3947
3968
|
'default': HierarchicalTrackSelectorContainer
|
|
3948
3969
|
};
|
|
3949
3970
|
|
|
3950
|
-
var useStyles$
|
|
3971
|
+
var useStyles$8 = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
3951
3972
|
return {
|
|
3952
3973
|
spacing: {
|
|
3953
3974
|
marginBottom: theme.spacing(3)
|
|
@@ -3960,28 +3981,76 @@ function StatusMessage(_ref) {
|
|
|
3960
3981
|
|
|
3961
3982
|
var trackAdapter = _ref.trackAdapter,
|
|
3962
3983
|
trackType = _ref.trackType;
|
|
3963
|
-
var classes = useStyles$
|
|
3964
|
-
return trackAdapter.type === 'SNPCoverageAdapter' ? /*#__PURE__*/React__default.createElement(Typography, {
|
|
3984
|
+
var classes = useStyles$8();
|
|
3985
|
+
return trackAdapter.type === 'SNPCoverageAdapter' ? /*#__PURE__*/React__default.createElement(core.Typography, {
|
|
3965
3986
|
className: classes.spacing
|
|
3966
|
-
}, "Selected ", /*#__PURE__*/React__default.createElement("code", null, trackType), ". Using adapter", ' ', /*#__PURE__*/React__default.createElement("code", null, trackAdapter.type), " with subadapter", ' ', /*#__PURE__*/React__default.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__default.createElement(Typography, {
|
|
3987
|
+
}, "Selected ", /*#__PURE__*/React__default.createElement("code", null, trackType), ". Using adapter", ' ', /*#__PURE__*/React__default.createElement("code", null, trackAdapter.type), " with subadapter", ' ', /*#__PURE__*/React__default.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__default.createElement(core.Typography, {
|
|
3967
3988
|
className: classes.spacing
|
|
3968
3989
|
}, "Using adapter ", /*#__PURE__*/React__default.createElement("code", null, trackAdapter.type), " and guessing track type", ' ', /*#__PURE__*/React__default.createElement("code", null, trackType), ". Please enter a track name and, if necessary, update the track type.");
|
|
3969
3990
|
}
|
|
3991
|
+
/**
|
|
3992
|
+
* categorizeAdapters takes a list of adapters and sorts their menu item elements under an appropriate ListSubheader
|
|
3993
|
+
* element. In this way, adapters that are from external plugins can have headers that differentiate them from the
|
|
3994
|
+
* out-of-the-box plugins.
|
|
3995
|
+
* @param adaptersList - a list of adapters found in the PluginManager
|
|
3996
|
+
* @returns a series of JSX elements that are ListSubheaders followed by the adapters
|
|
3997
|
+
* found under that subheader
|
|
3998
|
+
*/
|
|
3999
|
+
|
|
4000
|
+
|
|
4001
|
+
function categorizeAdapters(adaptersList) {
|
|
4002
|
+
var currentCategory = ''; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4003
|
+
|
|
4004
|
+
var items = [];
|
|
4005
|
+
adaptersList.forEach(function (adapter) {
|
|
4006
|
+
var _adapter$adapterMetad;
|
|
4007
|
+
|
|
4008
|
+
if ((_adapter$adapterMetad = adapter.adapterMetadata) !== null && _adapter$adapterMetad !== void 0 && _adapter$adapterMetad.category) {
|
|
4009
|
+
var _adapter$adapterMetad2, _adapter$adapterMetad7, _adapter$adapterMetad8;
|
|
4010
|
+
|
|
4011
|
+
if (currentCategory !== ((_adapter$adapterMetad2 = adapter.adapterMetadata) === null || _adapter$adapterMetad2 === void 0 ? void 0 : _adapter$adapterMetad2.category)) {
|
|
4012
|
+
var _adapter$adapterMetad3, _adapter$adapterMetad4, _adapter$adapterMetad5, _adapter$adapterMetad6;
|
|
4013
|
+
|
|
4014
|
+
currentCategory = (_adapter$adapterMetad3 = adapter.adapterMetadata) === null || _adapter$adapterMetad3 === void 0 ? void 0 : _adapter$adapterMetad3.category;
|
|
4015
|
+
items.push( /*#__PURE__*/React__default.createElement(core.ListSubheader, {
|
|
4016
|
+
key: (_adapter$adapterMetad4 = adapter.adapterMetadata) === null || _adapter$adapterMetad4 === void 0 ? void 0 : _adapter$adapterMetad4.category,
|
|
4017
|
+
value: (_adapter$adapterMetad5 = adapter.adapterMetadata) === null || _adapter$adapterMetad5 === void 0 ? void 0 : _adapter$adapterMetad5.category
|
|
4018
|
+
}, (_adapter$adapterMetad6 = adapter.adapterMetadata) === null || _adapter$adapterMetad6 === void 0 ? void 0 : _adapter$adapterMetad6.category));
|
|
4019
|
+
}
|
|
3970
4020
|
|
|
3971
|
-
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
4021
|
+
items.push( /*#__PURE__*/React__default.createElement(core.MenuItem, {
|
|
4022
|
+
key: adapter.name,
|
|
4023
|
+
value: adapter.name
|
|
4024
|
+
}, (_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));
|
|
4025
|
+
}
|
|
4026
|
+
});
|
|
4027
|
+
return items;
|
|
4028
|
+
}
|
|
4029
|
+
|
|
4030
|
+
function getAdapterTypes(pluginManager) {
|
|
4031
|
+
return pluginManager.getElementTypesInGroup('adapter');
|
|
4032
|
+
}
|
|
4033
|
+
|
|
4034
|
+
function getTrackTypes(pluginManager) {
|
|
4035
|
+
return pluginManager.getElementTypesInGroup('track');
|
|
4036
|
+
}
|
|
4037
|
+
|
|
4038
|
+
var TrackAdapterSelector = /*#__PURE__*/mobxReact.observer(function (_ref2) {
|
|
4039
|
+
var model = _ref2.model;
|
|
4040
|
+
var classes = useStyles$8();
|
|
3975
4041
|
var session = util.getSession(model);
|
|
3976
|
-
|
|
4042
|
+
var trackAdapter = model.trackAdapter; // prettier-ignore
|
|
4043
|
+
|
|
4044
|
+
var adapters = getAdapterTypes(mobxStateTree.getEnv(session).pluginManager);
|
|
4045
|
+
return /*#__PURE__*/React__default.createElement(core.TextField, {
|
|
3977
4046
|
className: classes.spacing,
|
|
3978
|
-
value:
|
|
4047
|
+
value: (trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type) !== 'UNKNOWN' ? trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type : '',
|
|
3979
4048
|
label: "adapterType",
|
|
3980
|
-
helperText: "
|
|
4049
|
+
helperText: "Select an adapter type",
|
|
3981
4050
|
select: true,
|
|
3982
4051
|
fullWidth: true,
|
|
3983
4052
|
onChange: function onChange(event) {
|
|
3984
|
-
model.setAdapterHint(event.target.value);
|
|
4053
|
+
return model.setAdapterHint(event.target.value);
|
|
3985
4054
|
},
|
|
3986
4055
|
SelectProps: {
|
|
3987
4056
|
// @ts-ignore
|
|
@@ -3989,56 +4058,119 @@ function TrackAdapterSelector(_ref2) {
|
|
|
3989
4058
|
'data-testid': 'adapterTypeSelect'
|
|
3990
4059
|
}
|
|
3991
4060
|
}
|
|
3992
|
-
},
|
|
4061
|
+
}, adapters // Excludes any adapter with the 'adapterMetadata.hiddenFromGUI' property, and anything with the 'adapterMetadata.category' property
|
|
3993
4062
|
.filter(function (elt) {
|
|
3994
|
-
|
|
4063
|
+
var _elt$adapterMetadata, _elt$adapterMetadata2;
|
|
4064
|
+
|
|
4065
|
+
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);
|
|
3995
4066
|
}).map(function (elt) {
|
|
3996
|
-
|
|
4067
|
+
var _elt$adapterMetadata3, _elt$adapterMetadata4;
|
|
4068
|
+
|
|
4069
|
+
return /*#__PURE__*/React__default.createElement(core.MenuItem, {
|
|
3997
4070
|
key: elt.name,
|
|
3998
4071
|
value: elt.name
|
|
3999
|
-
}, elt.name);
|
|
4000
|
-
}))
|
|
4001
|
-
|
|
4072
|
+
}, (_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);
|
|
4073
|
+
}), categorizeAdapters(adapters.filter(function (elt) {
|
|
4074
|
+
var _elt$adapterMetadata5;
|
|
4075
|
+
|
|
4076
|
+
return !((_elt$adapterMetadata5 = elt.adapterMetadata) !== null && _elt$adapterMetadata5 !== void 0 && _elt$adapterMetadata5.hiddenFromGUI);
|
|
4077
|
+
})));
|
|
4078
|
+
});
|
|
4002
4079
|
|
|
4003
4080
|
function UnknownAdapterPrompt(_ref3) {
|
|
4004
4081
|
var model = _ref3.model;
|
|
4005
|
-
var classes = useStyles$
|
|
4006
|
-
|
|
4007
|
-
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Typography, {
|
|
4082
|
+
var classes = useStyles$8();
|
|
4083
|
+
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.Typography, {
|
|
4008
4084
|
className: classes.spacing
|
|
4009
|
-
}, "
|
|
4085
|
+
}, "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__default.createElement(core.Link, {
|
|
4010
4086
|
href: "https://github.com/GMOD/jbrowse-components/releases",
|
|
4011
4087
|
target: "_blank",
|
|
4012
4088
|
rel: "noopener noreferrer"
|
|
4013
|
-
}, "check for new releases"), ' ', "of JBrowse to see if they support this data type or", ' ', /*#__PURE__*/React__default.createElement(Link, {
|
|
4089
|
+
}, "check for new releases"), ' ', "of JBrowse to see if they support this data type or", ' ', /*#__PURE__*/React__default.createElement(core.Link, {
|
|
4014
4090
|
href: "https://github.com/GMOD/jbrowse-components/issues/new",
|
|
4015
4091
|
target: "_blank",
|
|
4016
4092
|
rel: "noopener noreferrer"
|
|
4017
4093
|
}, "file an issue"), ' ', "and add a feature request for this data type."), /*#__PURE__*/React__default.createElement(TrackAdapterSelector, {
|
|
4018
|
-
adapterHint: adapterHint,
|
|
4019
4094
|
model: model
|
|
4020
4095
|
}));
|
|
4021
4096
|
}
|
|
4022
4097
|
|
|
4023
|
-
function
|
|
4098
|
+
var TrackTypeSelector = /*#__PURE__*/mobxReact.observer(function (_ref4) {
|
|
4024
4099
|
var model = _ref4.model;
|
|
4025
|
-
var classes = useStyles$
|
|
4100
|
+
var classes = useStyles$8();
|
|
4026
4101
|
var session = util.getSession(model);
|
|
4102
|
+
var trackType = model.trackType;
|
|
4103
|
+
var trackTypes = getTrackTypes(mobxStateTree.getEnv(session).pluginManager);
|
|
4104
|
+
return /*#__PURE__*/React__default.createElement(core.TextField, {
|
|
4105
|
+
className: classes.spacing,
|
|
4106
|
+
value: trackType,
|
|
4107
|
+
label: "trackType",
|
|
4108
|
+
helperText: "Select a track type",
|
|
4109
|
+
select: true,
|
|
4110
|
+
fullWidth: true,
|
|
4111
|
+
onChange: function onChange(event) {
|
|
4112
|
+
model.setTrackType(event.target.value);
|
|
4113
|
+
},
|
|
4114
|
+
SelectProps: {
|
|
4115
|
+
// @ts-ignore
|
|
4116
|
+
SelectDisplayProps: {
|
|
4117
|
+
'data-testid': 'trackTypeSelect'
|
|
4118
|
+
}
|
|
4119
|
+
}
|
|
4120
|
+
}, trackTypes.map(function (_ref5) {
|
|
4121
|
+
var name = _ref5.name;
|
|
4122
|
+
return /*#__PURE__*/React__default.createElement(core.MenuItem, {
|
|
4123
|
+
key: name,
|
|
4124
|
+
value: name
|
|
4125
|
+
}, name);
|
|
4126
|
+
}));
|
|
4127
|
+
});
|
|
4128
|
+
var TrackAssemblySelector = /*#__PURE__*/mobxReact.observer(function (_ref6) {
|
|
4129
|
+
var model = _ref6.model;
|
|
4130
|
+
var session = util.getSession(model);
|
|
4131
|
+
var assembly = model.assembly;
|
|
4132
|
+
return /*#__PURE__*/React__default.createElement(core.TextField, {
|
|
4133
|
+
value: assembly,
|
|
4134
|
+
label: "assemblyName",
|
|
4135
|
+
helperText: "Assembly to which the track will be added",
|
|
4136
|
+
select: true,
|
|
4137
|
+
fullWidth: true,
|
|
4138
|
+
onChange: function onChange(event) {
|
|
4139
|
+
return model.setAssembly(event.target.value);
|
|
4140
|
+
},
|
|
4141
|
+
SelectProps: {
|
|
4142
|
+
// @ts-ignore
|
|
4143
|
+
SelectDisplayProps: {
|
|
4144
|
+
'data-testid': 'assemblyNameSelect'
|
|
4145
|
+
}
|
|
4146
|
+
}
|
|
4147
|
+
}, session.assemblies.map(function (conf) {
|
|
4148
|
+
return configuration.readConfObject(conf, 'name');
|
|
4149
|
+
}).map(function (name) {
|
|
4150
|
+
return /*#__PURE__*/React__default.createElement(core.MenuItem, {
|
|
4151
|
+
key: name,
|
|
4152
|
+
value: name
|
|
4153
|
+
}, name);
|
|
4154
|
+
}));
|
|
4155
|
+
});
|
|
4156
|
+
|
|
4157
|
+
function ConfirmTrack(_ref7) {
|
|
4158
|
+
var model = _ref7.model;
|
|
4159
|
+
var classes = useStyles$8();
|
|
4027
4160
|
var trackName = model.trackName,
|
|
4028
4161
|
trackAdapter = model.trackAdapter,
|
|
4029
4162
|
trackType = model.trackType,
|
|
4030
|
-
assembly = model.assembly,
|
|
4031
4163
|
warningMessage = model.warningMessage,
|
|
4032
4164
|
adapterHint = model.adapterHint;
|
|
4033
4165
|
|
|
4034
4166
|
if (model.unsupported) {
|
|
4035
|
-
return /*#__PURE__*/React__default.createElement(Typography, {
|
|
4167
|
+
return /*#__PURE__*/React__default.createElement(core.Typography, {
|
|
4036
4168
|
className: classes.spacing
|
|
4037
|
-
}, "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__default.createElement(Link, {
|
|
4169
|
+
}, "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__default.createElement(core.Link, {
|
|
4038
4170
|
href: "https://github.com/GMOD/jbrowse-components/releases",
|
|
4039
4171
|
target: "_blank",
|
|
4040
4172
|
rel: "noopener noreferrer"
|
|
4041
|
-
}, "check for new releases"), ' ', "of JBrowse or", ' ', /*#__PURE__*/React__default.createElement(Link, {
|
|
4173
|
+
}, "check for new releases"), ' ', "of JBrowse or", ' ', /*#__PURE__*/React__default.createElement(core.Link, {
|
|
4042
4174
|
href: "https://github.com/GMOD/jbrowse-components/issues/new",
|
|
4043
4175
|
target: "_blank",
|
|
4044
4176
|
rel: "noopener noreferrer"
|
|
@@ -4051,21 +4183,22 @@ function ConfirmTrack(_ref4) {
|
|
|
4051
4183
|
});
|
|
4052
4184
|
}
|
|
4053
4185
|
|
|
4186
|
+
if (adapterHint === '' && trackAdapter) {
|
|
4187
|
+
model.setAdapterHint(trackAdapter.type);
|
|
4188
|
+
}
|
|
4189
|
+
|
|
4054
4190
|
if (!(trackAdapter !== null && trackAdapter !== void 0 && trackAdapter.type)) {
|
|
4055
|
-
return /*#__PURE__*/React__default.createElement(Typography, null, "Could not recognize this data type.");
|
|
4191
|
+
return /*#__PURE__*/React__default.createElement(core.Typography, null, "Could not recognize this data type.");
|
|
4056
4192
|
}
|
|
4057
4193
|
|
|
4058
|
-
return /*#__PURE__*/React__default.createElement(
|
|
4194
|
+
return /*#__PURE__*/React__default.createElement("div", null, trackAdapter ? /*#__PURE__*/React__default.createElement(StatusMessage, {
|
|
4059
4195
|
trackAdapter: trackAdapter,
|
|
4060
4196
|
trackType: trackType
|
|
4061
|
-
}) : null, warningMessage ? /*#__PURE__*/React__default.createElement(Typography, {
|
|
4197
|
+
}) : null, warningMessage ? /*#__PURE__*/React__default.createElement(core.Typography, {
|
|
4062
4198
|
style: {
|
|
4063
4199
|
color: 'orange'
|
|
4064
4200
|
}
|
|
4065
|
-
}, warningMessage) : null, /*#__PURE__*/React__default.createElement(
|
|
4066
|
-
adapterHint: adapterHint,
|
|
4067
|
-
model: model
|
|
4068
|
-
}), /*#__PURE__*/React__default.createElement(TextField, {
|
|
4201
|
+
}, warningMessage) : null, /*#__PURE__*/React__default.createElement(core.TextField, {
|
|
4069
4202
|
className: classes.spacing,
|
|
4070
4203
|
label: "trackName",
|
|
4071
4204
|
helperText: "A name for this track",
|
|
@@ -4077,88 +4210,58 @@ function ConfirmTrack(_ref4) {
|
|
|
4077
4210
|
inputProps: {
|
|
4078
4211
|
'data-testid': 'trackNameInput'
|
|
4079
4212
|
}
|
|
4080
|
-
}), /*#__PURE__*/React__default.createElement(
|
|
4081
|
-
|
|
4082
|
-
|
|
4083
|
-
|
|
4084
|
-
|
|
4085
|
-
|
|
4086
|
-
|
|
4087
|
-
onChange: function onChange(event) {
|
|
4088
|
-
model.setTrackType(event.target.value);
|
|
4089
|
-
},
|
|
4090
|
-
SelectProps: {
|
|
4091
|
-
// @ts-ignore
|
|
4092
|
-
SelectDisplayProps: {
|
|
4093
|
-
'data-testid': 'trackTypeSelect'
|
|
4094
|
-
}
|
|
4095
|
-
}
|
|
4096
|
-
}, mobxStateTree.getEnv(session).pluginManager.getElementTypesInGroup('track') // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4097
|
-
.map(function (_ref5) {
|
|
4098
|
-
var name = _ref5.name;
|
|
4099
|
-
return /*#__PURE__*/React__default.createElement(MenuItem, {
|
|
4100
|
-
key: name,
|
|
4101
|
-
value: name
|
|
4102
|
-
}, name);
|
|
4103
|
-
})), /*#__PURE__*/React__default.createElement(TextField, {
|
|
4104
|
-
value: assembly,
|
|
4105
|
-
label: "assemblyName",
|
|
4106
|
-
helperText: "Assembly to which the track will be added",
|
|
4107
|
-
select: true,
|
|
4108
|
-
fullWidth: true,
|
|
4109
|
-
onChange: function onChange(event) {
|
|
4110
|
-
model.setAssembly(event.target.value);
|
|
4111
|
-
},
|
|
4112
|
-
SelectProps: {
|
|
4113
|
-
// @ts-ignore
|
|
4114
|
-
SelectDisplayProps: {
|
|
4115
|
-
'data-testid': 'assemblyNameSelect'
|
|
4116
|
-
}
|
|
4117
|
-
}
|
|
4118
|
-
}, session.assemblies.map(function (assemblyConf) {
|
|
4119
|
-
var assemblyName = configuration.readConfObject(assemblyConf, 'name');
|
|
4120
|
-
return /*#__PURE__*/React__default.createElement(MenuItem, {
|
|
4121
|
-
key: assemblyName,
|
|
4122
|
-
value: assemblyName
|
|
4123
|
-
}, assemblyName);
|
|
4124
|
-
})));
|
|
4213
|
+
}), /*#__PURE__*/React__default.createElement(TrackAdapterSelector, {
|
|
4214
|
+
model: model
|
|
4215
|
+
}), /*#__PURE__*/React__default.createElement(TrackTypeSelector, {
|
|
4216
|
+
model: model
|
|
4217
|
+
}), /*#__PURE__*/React__default.createElement(TrackAssemblySelector, {
|
|
4218
|
+
model: model
|
|
4219
|
+
}));
|
|
4125
4220
|
}
|
|
4126
4221
|
|
|
4127
4222
|
var ConfirmTrack$1 = /*#__PURE__*/mobxReact.observer(ConfirmTrack);
|
|
4128
4223
|
|
|
4129
|
-
var useStyles$
|
|
4224
|
+
var useStyles$9 = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
4130
4225
|
return {
|
|
4131
|
-
root: {
|
|
4132
|
-
display: 'flex',
|
|
4133
|
-
flexDirection: 'column'
|
|
4134
|
-
},
|
|
4135
4226
|
paper: {
|
|
4227
|
+
display: 'flex',
|
|
4228
|
+
flexDirection: 'column',
|
|
4136
4229
|
padding: theme.spacing(1)
|
|
4230
|
+
},
|
|
4231
|
+
spacer: {
|
|
4232
|
+
height: theme.spacing(8)
|
|
4137
4233
|
}
|
|
4138
4234
|
};
|
|
4139
4235
|
});
|
|
4140
4236
|
|
|
4141
4237
|
function TrackSourceSelect(_ref) {
|
|
4142
4238
|
var model = _ref.model;
|
|
4143
|
-
var classes = useStyles$
|
|
4144
|
-
|
|
4145
|
-
|
|
4146
|
-
}, /*#__PURE__*/React__default.createElement(Paper, {
|
|
4239
|
+
var classes = useStyles$9();
|
|
4240
|
+
var rootModel = mobxStateTree.getRoot(model);
|
|
4241
|
+
return /*#__PURE__*/React__default.createElement(core.Paper, {
|
|
4147
4242
|
className: classes.paper
|
|
4148
4243
|
}, /*#__PURE__*/React__default.createElement(ui.FileSelector, {
|
|
4149
4244
|
name: "Main file",
|
|
4150
4245
|
description: "",
|
|
4151
4246
|
location: model.trackData,
|
|
4152
|
-
setLocation: model.setTrackData
|
|
4247
|
+
setLocation: model.setTrackData,
|
|
4248
|
+
setName: model.setTrackName,
|
|
4249
|
+
rootModel: rootModel
|
|
4250
|
+
}), /*#__PURE__*/React__default.createElement("div", {
|
|
4251
|
+
className: classes.spacer
|
|
4153
4252
|
}), /*#__PURE__*/React__default.createElement(ui.FileSelector, {
|
|
4154
4253
|
name: "Index file",
|
|
4155
|
-
description: "
|
|
4254
|
+
description: "(Optional) The URL of the index file is automatically inferred from the URL of the main file if it is not supplied.",
|
|
4156
4255
|
location: model.indexTrackData,
|
|
4157
|
-
setLocation: model.setIndexTrackData
|
|
4158
|
-
|
|
4256
|
+
setLocation: model.setIndexTrackData,
|
|
4257
|
+
setName: model.setTrackName,
|
|
4258
|
+
rootModel: rootModel
|
|
4259
|
+
}));
|
|
4159
4260
|
}
|
|
4160
4261
|
|
|
4161
|
-
var
|
|
4262
|
+
var TrackSourceSelect$1 = /*#__PURE__*/mobxReact.observer(TrackSourceSelect);
|
|
4263
|
+
|
|
4264
|
+
var useStyles$a = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
4162
4265
|
return {
|
|
4163
4266
|
root: {
|
|
4164
4267
|
marginTop: theme.spacing(1)
|
|
@@ -4191,7 +4294,7 @@ function AddTrackWidget(_ref) {
|
|
|
4191
4294
|
activeStep = _useState2[0],
|
|
4192
4295
|
setActiveStep = _useState2[1];
|
|
4193
4296
|
|
|
4194
|
-
var classes = useStyles$
|
|
4297
|
+
var classes = useStyles$a();
|
|
4195
4298
|
var session = util.getSession(model);
|
|
4196
4299
|
var assembly = model.assembly,
|
|
4197
4300
|
trackAdapter = model.trackAdapter,
|
|
@@ -4207,7 +4310,7 @@ function AddTrackWidget(_ref) {
|
|
|
4207
4310
|
function getStepContent(step) {
|
|
4208
4311
|
switch (step) {
|
|
4209
4312
|
case 0:
|
|
4210
|
-
return /*#__PURE__*/React__default.createElement(TrackSourceSelect, {
|
|
4313
|
+
return /*#__PURE__*/React__default.createElement(TrackSourceSelect$1, {
|
|
4211
4314
|
model: model
|
|
4212
4315
|
});
|
|
4213
4316
|
|
|
@@ -4222,38 +4325,61 @@ function AddTrackWidget(_ref) {
|
|
|
4222
4325
|
}
|
|
4223
4326
|
|
|
4224
4327
|
function handleNext() {
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
return;
|
|
4228
|
-
}
|
|
4229
|
-
|
|
4230
|
-
var trackId = "".concat(trackName.toLowerCase().replace(/ /g, '_'), "-").concat(Date.now()).concat(session.adminMode ? '' : '-sessionTrack');
|
|
4231
|
-
var assemblyInstance = session.assemblyManager.get(assembly);
|
|
4328
|
+
return _handleNext.apply(this, arguments);
|
|
4329
|
+
}
|
|
4232
4330
|
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
|
|
4240
|
-
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
|
|
4331
|
+
function _handleNext() {
|
|
4332
|
+
_handleNext = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
|
|
4333
|
+
var trackId, assemblyInstance;
|
|
4334
|
+
return runtime_1.wrap(function _callee$(_context) {
|
|
4335
|
+
while (1) {
|
|
4336
|
+
switch (_context.prev = _context.next) {
|
|
4337
|
+
case 0:
|
|
4338
|
+
if (!(activeStep !== steps.length - 1)) {
|
|
4339
|
+
_context.next = 3;
|
|
4340
|
+
break;
|
|
4341
|
+
}
|
|
4244
4342
|
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
} else {
|
|
4248
|
-
session.notify('Open a new view, or use the track selector in an existing view, to view this track', 'info');
|
|
4249
|
-
}
|
|
4343
|
+
setActiveStep(activeStep + 1);
|
|
4344
|
+
return _context.abrupt("return");
|
|
4250
4345
|
|
|
4251
|
-
|
|
4346
|
+
case 3:
|
|
4347
|
+
trackId = "".concat(trackName.toLowerCase().replace(/ /g, '_'), "-").concat(Date.now()).concat(session.adminMode ? '' : '-sessionTrack');
|
|
4348
|
+
assemblyInstance = session.assemblyManager.get(assembly);
|
|
4349
|
+
|
|
4350
|
+
if (trackAdapter && trackAdapter.type !== 'UNKNOWN') {
|
|
4351
|
+
// @ts-ignore
|
|
4352
|
+
session.addTrackConf({
|
|
4353
|
+
trackId: trackId,
|
|
4354
|
+
type: trackType,
|
|
4355
|
+
name: trackName,
|
|
4356
|
+
assemblyNames: [assembly],
|
|
4357
|
+
adapter: _objectSpread2(_objectSpread2({}, trackAdapter), {}, {
|
|
4358
|
+
sequenceAdapter: configuration.getConf(assemblyInstance, ['sequence', 'adapter'])
|
|
4359
|
+
})
|
|
4360
|
+
});
|
|
4361
|
+
|
|
4362
|
+
if (model.view) {
|
|
4363
|
+
model.view.showTrack(trackId);
|
|
4364
|
+
} else {
|
|
4365
|
+
session.notify('Open a new view, or use the track selector in an existing view, to view this track', 'info');
|
|
4366
|
+
}
|
|
4367
|
+
|
|
4368
|
+
model.clearData(); // @ts-ignore
|
|
4369
|
+
|
|
4370
|
+
session.hideWidget(model);
|
|
4371
|
+
} else {
|
|
4372
|
+
setTrackErrorMessage('Failed to add track.\nThe configuration of this file is not currently supported.');
|
|
4373
|
+
}
|
|
4252
4374
|
|
|
4253
|
-
|
|
4254
|
-
|
|
4255
|
-
|
|
4256
|
-
|
|
4375
|
+
case 6:
|
|
4376
|
+
case "end":
|
|
4377
|
+
return _context.stop();
|
|
4378
|
+
}
|
|
4379
|
+
}
|
|
4380
|
+
}, _callee);
|
|
4381
|
+
}));
|
|
4382
|
+
return _handleNext.apply(this, arguments);
|
|
4257
4383
|
}
|
|
4258
4384
|
|
|
4259
4385
|
function handleBack() {
|
|
@@ -4369,7 +4495,7 @@ function ConnectionTypeSelect(props) {
|
|
|
4369
4495
|
})));
|
|
4370
4496
|
}
|
|
4371
4497
|
|
|
4372
|
-
var useStyles$
|
|
4498
|
+
var useStyles$b = /*#__PURE__*/styles.makeStyles(function (theme) {
|
|
4373
4499
|
return {
|
|
4374
4500
|
root: {
|
|
4375
4501
|
marginTop: theme.spacing(1)
|
|
@@ -4411,7 +4537,7 @@ function AddConnectionWidget(_ref) {
|
|
|
4411
4537
|
activeStep = _useState8[0],
|
|
4412
4538
|
setActiveStep = _useState8[1];
|
|
4413
4539
|
|
|
4414
|
-
var classes = useStyles$
|
|
4540
|
+
var classes = useStyles$b();
|
|
4415
4541
|
var session = util.getSession(model);
|
|
4416
4542
|
|
|
4417
4543
|
var _getEnv = mobxStateTree.getEnv(session),
|
|
@@ -4584,7 +4710,7 @@ var DeleteConnectionDialog$3 = {
|
|
|
4584
4710
|
'default': DeleteConnectionDialog$2
|
|
4585
4711
|
};
|
|
4586
4712
|
|
|
4587
|
-
var useStyles$
|
|
4713
|
+
var useStyles$c = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
4588
4714
|
return {
|
|
4589
4715
|
closeButton: {
|
|
4590
4716
|
position: 'absolute',
|
|
@@ -4603,7 +4729,7 @@ function ManageConnectionsDlg(_ref) {
|
|
|
4603
4729
|
var session = _ref.session,
|
|
4604
4730
|
handleClose = _ref.handleClose,
|
|
4605
4731
|
breakConnection = _ref.breakConnection;
|
|
4606
|
-
var classes = useStyles$
|
|
4732
|
+
var classes = useStyles$c();
|
|
4607
4733
|
var adminMode = session.adminMode,
|
|
4608
4734
|
connections = session.connections,
|
|
4609
4735
|
sessionConnections = session.sessionConnections;
|
|
@@ -4649,7 +4775,7 @@ var ManageConnectionsDialog$2 = {
|
|
|
4649
4775
|
'default': ManageConnectionsDialog$1
|
|
4650
4776
|
};
|
|
4651
4777
|
|
|
4652
|
-
var useStyles$
|
|
4778
|
+
var useStyles$d = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
4653
4779
|
return {
|
|
4654
4780
|
closeButton: {
|
|
4655
4781
|
position: 'absolute',
|
|
@@ -4669,7 +4795,7 @@ function ToggleConnectionDialog(_ref) {
|
|
|
4669
4795
|
handleClose = _ref.handleClose,
|
|
4670
4796
|
assemblyName = _ref.assemblyName,
|
|
4671
4797
|
breakConnection = _ref.breakConnection;
|
|
4672
|
-
var classes = useStyles$
|
|
4798
|
+
var classes = useStyles$d();
|
|
4673
4799
|
var connections = session.connections,
|
|
4674
4800
|
connectionInstances = session.connectionInstances;
|
|
4675
4801
|
var assemblySpecificConnections = connections.filter(function (c) {
|