@jbrowse/plugin-data-management 1.5.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/PluginStoreWidget/components/CustomPluginForm.d.ts +1 -1
- package/dist/plugin-data-management.cjs.development.js +159 -54
- 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 +160 -55
- package/dist/plugin-data-management.esm.js.map +1 -1
- package/package.json +3 -2
- package/src/HierarchicalTrackSelectorWidget/model.js +3 -2
- package/src/PluginStoreWidget/components/CustomPluginForm.tsx +151 -43
- package/src/PluginStoreWidget/components/InstalledPlugin.tsx +5 -1
- package/src/PluginStoreWidget/components/PluginStoreWidget.test.js +7 -6
- package/src/PluginStoreWidget/components/PluginStoreWidget.tsx +16 -7
- package/src/PluginStoreWidget/components/__snapshots__/PluginStoreWidget.test.js.snap +20 -0
|
@@ -47,6 +47,7 @@ var types = require('@jbrowse/core/util/types');
|
|
|
47
47
|
var PersonIcon = _interopDefault(require('@material-ui/icons/Person'));
|
|
48
48
|
var AddIcon = _interopDefault(require('@material-ui/icons/Add'));
|
|
49
49
|
var CheckIcon = _interopDefault(require('@material-ui/icons/Check'));
|
|
50
|
+
var clsx = _interopDefault(require('clsx'));
|
|
50
51
|
var IconButton = _interopDefault(require('@material-ui/core/IconButton'));
|
|
51
52
|
var ArrowBackIosIcon = _interopDefault(require('@material-ui/icons/ArrowBackIos'));
|
|
52
53
|
var CreateIcon = _interopDefault(require('@material-ui/icons/Create'));
|
|
@@ -1799,7 +1800,8 @@ function f(pluginManager) {
|
|
|
1799
1800
|
|
|
1800
1801
|
var track = self.trackData,
|
|
1801
1802
|
index = self.indexTrackData;
|
|
1802
|
-
return !!(
|
|
1803
|
+
return !!( // @ts-ignore
|
|
1804
|
+
index !== null && index !== void 0 && (_index$uri = index.uri) !== null && _index$uri !== void 0 && _index$uri.startsWith('ftp://') || track !== null && track !== void 0 && (_track$uri = track.uri) !== null && _track$uri !== void 0 && _track$uri.startsWith('ftp://'));
|
|
1803
1805
|
},
|
|
1804
1806
|
|
|
1805
1807
|
get isRelativeTrackUrl() {
|
|
@@ -1895,9 +1897,9 @@ var hasAnyOverlap = function hasAnyOverlap() {
|
|
|
1895
1897
|
function passesFilter(filter, config) {
|
|
1896
1898
|
var name = getTrackName(config);
|
|
1897
1899
|
var categories = configuration.readConfObject(config, 'category') || [];
|
|
1898
|
-
var
|
|
1899
|
-
return !!name.
|
|
1900
|
-
return !!cat.
|
|
1900
|
+
var filterLower = filter.toLowerCase();
|
|
1901
|
+
return !!name.toLowerCase().includes(filterLower) || categories.filter(function (cat) {
|
|
1902
|
+
return !!cat.toLowerCase().includes(filterLower);
|
|
1901
1903
|
}).length;
|
|
1902
1904
|
}
|
|
1903
1905
|
|
|
@@ -2244,7 +2246,7 @@ function InstalledPlugin(_ref2) {
|
|
|
2244
2246
|
onClose: function onClose(name) {
|
|
2245
2247
|
if (name) {
|
|
2246
2248
|
var pluginMetadata = pluginManager.pluginMetadata[plugin.name];
|
|
2247
|
-
var pluginUrl = pluginMetadata.url;
|
|
2249
|
+
var pluginUrl = pluginMetadata.url || pluginMetadata.esmUrl || pluginMetadata.umdUrl || pluginMetadata.cjsUrl;
|
|
2248
2250
|
|
|
2249
2251
|
if (adminMode) {
|
|
2250
2252
|
jbrowse.removePlugin(pluginUrl);
|
|
@@ -2380,87 +2382,182 @@ function PluginCard(_ref) {
|
|
|
2380
2382
|
|
|
2381
2383
|
var PluginCard$1 = /*#__PURE__*/mobxReact.observer(PluginCard);
|
|
2382
2384
|
|
|
2383
|
-
var useStyles$2 = /*#__PURE__*/core.makeStyles(function () {
|
|
2385
|
+
var useStyles$2 = /*#__PURE__*/core.makeStyles(function (theme) {
|
|
2384
2386
|
return {
|
|
2385
|
-
|
|
2387
|
+
closeButton: {
|
|
2386
2388
|
position: 'absolute',
|
|
2387
|
-
right:
|
|
2388
|
-
top:
|
|
2389
|
+
right: theme.spacing(1),
|
|
2390
|
+
top: theme.spacing(1)
|
|
2389
2391
|
},
|
|
2390
|
-
|
|
2391
|
-
margin: 15,
|
|
2392
|
+
dialogContent: {
|
|
2392
2393
|
display: 'flex',
|
|
2393
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)'
|
|
2394
2405
|
}
|
|
2395
2406
|
};
|
|
2396
2407
|
});
|
|
2397
2408
|
|
|
2398
2409
|
function CustomPluginForm(_ref) {
|
|
2399
2410
|
var open = _ref.open,
|
|
2400
|
-
|
|
2411
|
+
onClose = _ref.onClose,
|
|
2401
2412
|
model = _ref.model;
|
|
2402
2413
|
var classes = useStyles$2();
|
|
2403
2414
|
|
|
2404
2415
|
var _useState = React.useState(''),
|
|
2405
2416
|
_useState2 = _slicedToArray(_useState, 2),
|
|
2406
|
-
|
|
2407
|
-
|
|
2417
|
+
umdPluginName = _useState2[0],
|
|
2418
|
+
setUMDPluginName = _useState2[1];
|
|
2408
2419
|
|
|
2409
2420
|
var _useState3 = React.useState(''),
|
|
2410
2421
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
2411
|
-
|
|
2412
|
-
|
|
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
|
+
}
|
|
2413
2465
|
|
|
2414
2466
|
var rootModel = mobxStateTree.getRoot(model);
|
|
2415
2467
|
var jbrowse = rootModel.jbrowse;
|
|
2468
|
+
var ready = Boolean(umdPluginName && umdPluginUrl || esmPluginUrl || cjsPluginUrl);
|
|
2469
|
+
|
|
2470
|
+
function handleSubmit() {
|
|
2471
|
+
if (!ready) {
|
|
2472
|
+
return;
|
|
2473
|
+
}
|
|
2474
|
+
|
|
2475
|
+
var pluginDefinition = {};
|
|
2476
|
+
|
|
2477
|
+
if (umdPluginName && umdPluginUrl) {
|
|
2478
|
+
pluginDefinition.name = umdPluginName;
|
|
2479
|
+
pluginDefinition.umdUrl = umdPluginUrl;
|
|
2480
|
+
}
|
|
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
|
+
|
|
2416
2501
|
return /*#__PURE__*/React__default.createElement(core.Dialog, {
|
|
2417
2502
|
open: open,
|
|
2418
|
-
onClose:
|
|
2419
|
-
return _onClose();
|
|
2420
|
-
}
|
|
2503
|
+
onClose: handleClose
|
|
2421
2504
|
}, /*#__PURE__*/React__default.createElement(core.DialogTitle, null, "Add custom plugin", /*#__PURE__*/React__default.createElement(IconButton, {
|
|
2422
|
-
|
|
2505
|
+
size: "medium",
|
|
2506
|
+
className: classes.closeButton,
|
|
2423
2507
|
onClick: function onClick() {
|
|
2424
|
-
return
|
|
2508
|
+
return onClose();
|
|
2425
2509
|
}
|
|
2426
|
-
}, /*#__PURE__*/React__default.createElement(CloseIcon, null))), /*#__PURE__*/React__default.createElement(
|
|
2427
|
-
|
|
2428
|
-
}, /*#__PURE__*/React__default.createElement(core.
|
|
2429
|
-
|
|
2430
|
-
|
|
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",
|
|
2431
2517
|
label: "Plugin name",
|
|
2432
2518
|
variant: "outlined",
|
|
2433
|
-
value:
|
|
2434
|
-
onChange:
|
|
2435
|
-
return setFormName(event.target.value);
|
|
2436
|
-
}
|
|
2519
|
+
value: umdPluginName,
|
|
2520
|
+
onChange: handleChange
|
|
2437
2521
|
}), /*#__PURE__*/React__default.createElement(core.TextField, {
|
|
2438
|
-
id: "url-input",
|
|
2439
|
-
name: "
|
|
2522
|
+
id: "umd-url-input",
|
|
2523
|
+
name: "umdUrl",
|
|
2440
2524
|
label: "Plugin URL",
|
|
2441
2525
|
variant: "outlined",
|
|
2442
|
-
value:
|
|
2443
|
-
onChange:
|
|
2444
|
-
|
|
2445
|
-
|
|
2446
|
-
}
|
|
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, {
|
|
2447
2553
|
variant: "contained",
|
|
2448
|
-
|
|
2449
|
-
onClick: function onClick() {
|
|
2450
|
-
return _onClose();
|
|
2451
|
-
}
|
|
2554
|
+
onClick: handleClose
|
|
2452
2555
|
}, "Cancel"), /*#__PURE__*/React__default.createElement(core.Button, {
|
|
2453
2556
|
variant: "contained",
|
|
2454
2557
|
color: "primary",
|
|
2455
|
-
onClick:
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
url: formUrl
|
|
2459
|
-
});
|
|
2460
|
-
|
|
2461
|
-
_onClose();
|
|
2462
|
-
}
|
|
2463
|
-
}, "Submit")));
|
|
2558
|
+
onClick: handleSubmit,
|
|
2559
|
+
disabled: !ready
|
|
2560
|
+
}, "Submit"))));
|
|
2464
2561
|
}
|
|
2465
2562
|
|
|
2466
2563
|
var CustomPluginForm$1 = /*#__PURE__*/mobxReact.observer(CustomPluginForm);
|
|
@@ -2516,7 +2613,8 @@ function PluginStoreWidget(_ref) {
|
|
|
2516
2613
|
pluginManager = _getEnv.pluginManager;
|
|
2517
2614
|
|
|
2518
2615
|
React.useEffect(function () {
|
|
2519
|
-
var
|
|
2616
|
+
var controller = new AbortController();
|
|
2617
|
+
var signal = controller.signal;
|
|
2520
2618
|
|
|
2521
2619
|
_asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee() {
|
|
2522
2620
|
var response, err, array;
|
|
@@ -2526,7 +2624,9 @@ function PluginStoreWidget(_ref) {
|
|
|
2526
2624
|
case 0:
|
|
2527
2625
|
_context.prev = 0;
|
|
2528
2626
|
_context.next = 3;
|
|
2529
|
-
return fetch('https://jbrowse.org/plugin-store/plugins.json'
|
|
2627
|
+
return fetch('https://jbrowse.org/plugin-store/plugins.json', {
|
|
2628
|
+
signal: signal
|
|
2629
|
+
});
|
|
2530
2630
|
|
|
2531
2631
|
case 3:
|
|
2532
2632
|
response = _context.sent;
|
|
@@ -2550,7 +2650,7 @@ function PluginStoreWidget(_ref) {
|
|
|
2550
2650
|
case 11:
|
|
2551
2651
|
array = _context.sent;
|
|
2552
2652
|
|
|
2553
|
-
if (!
|
|
2653
|
+
if (!signal.aborted) {
|
|
2554
2654
|
setPluginArray(array.plugins);
|
|
2555
2655
|
}
|
|
2556
2656
|
|
|
@@ -2572,7 +2672,7 @@ function PluginStoreWidget(_ref) {
|
|
|
2572
2672
|
}))();
|
|
2573
2673
|
|
|
2574
2674
|
return function () {
|
|
2575
|
-
|
|
2675
|
+
controller.abort();
|
|
2576
2676
|
};
|
|
2577
2677
|
}, []);
|
|
2578
2678
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
@@ -2640,6 +2740,11 @@ function PluginStoreWidget(_ref) {
|
|
|
2640
2740
|
}, "Available plugins")), error ? /*#__PURE__*/React__default.createElement(core.Typography, {
|
|
2641
2741
|
color: "error"
|
|
2642
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
|
+
|
|
2643
2748
|
return plugin.name.toLowerCase().includes(model.filterText.toLowerCase());
|
|
2644
2749
|
}).map(function (plugin) {
|
|
2645
2750
|
return /*#__PURE__*/React__default.createElement(PluginCard$1, {
|