@jbrowse/plugin-data-management 1.7.11 → 2.0.0
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/AddConnectionWidget/components/AddConnectionWidget.js +115 -162
- package/dist/AddConnectionWidget/components/AddConnectionWidget.js.map +1 -0
- package/dist/AddConnectionWidget/components/ConfigureConnection.js +33 -32
- package/dist/AddConnectionWidget/components/ConfigureConnection.js.map +1 -0
- package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +48 -64
- package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js.map +1 -0
- package/dist/AddConnectionWidget/index.js +10 -20
- package/dist/AddConnectionWidget/index.js.map +1 -0
- package/dist/AddConnectionWidget/model.js +7 -15
- package/dist/AddConnectionWidget/model.js.map +1 -0
- package/dist/AddTrackWidget/components/AddTrackWidget.js +206 -230
- package/dist/AddTrackWidget/components/AddTrackWidget.js.map +1 -0
- package/dist/AddTrackWidget/components/ConfirmTrack.js +268 -385
- package/dist/AddTrackWidget/components/ConfirmTrack.js.map +1 -0
- package/dist/AddTrackWidget/components/TrackSourceSelect.js +28 -55
- package/dist/AddTrackWidget/components/TrackSourceSelect.js.map +1 -0
- package/dist/AddTrackWidget/index.js +10 -20
- package/dist/AddTrackWidget/index.js.map +1 -0
- package/dist/AddTrackWidget/model.js +150 -174
- package/dist/AddTrackWidget/model.js.map +1 -0
- package/dist/AssemblyManager/AssemblyAddForm.js +162 -282
- package/dist/AssemblyManager/AssemblyAddForm.js.map +1 -0
- package/dist/AssemblyManager/AssemblyEditor.js +12 -23
- package/dist/AssemblyManager/AssemblyEditor.js.map +1 -0
- package/dist/AssemblyManager/AssemblyManager.js +102 -132
- package/dist/AssemblyManager/AssemblyManager.js.map +1 -0
- package/dist/AssemblyManager/AssemblyTable.d.ts +1 -1
- package/dist/AssemblyManager/AssemblyTable.js +60 -84
- package/dist/AssemblyManager/AssemblyTable.js.map +1 -0
- package/dist/AssemblyManager/index.js +8 -14
- package/dist/AssemblyManager/index.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +49 -50
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +28 -44
- package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +416 -639
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +45 -74
- package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +57 -91
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/index.js +10 -20
- package/dist/HierarchicalTrackSelectorWidget/index.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/model.d.ts +3 -1
- package/dist/HierarchicalTrackSelectorWidget/model.js +247 -285
- package/dist/HierarchicalTrackSelectorWidget/model.js.map +1 -0
- package/dist/PluginStoreWidget/components/CustomPluginForm.js +140 -202
- package/dist/PluginStoreWidget/components/CustomPluginForm.js.map +1 -0
- package/dist/PluginStoreWidget/components/InstalledPlugin.js +112 -127
- package/dist/PluginStoreWidget/components/InstalledPlugin.js.map +1 -0
- package/dist/PluginStoreWidget/components/InstalledPluginsList.js +22 -45
- package/dist/PluginStoreWidget/components/InstalledPluginsList.js.map +1 -0
- package/dist/PluginStoreWidget/components/PluginCard.js +95 -110
- package/dist/PluginStoreWidget/components/PluginCard.js.map +1 -0
- package/dist/PluginStoreWidget/components/PluginStoreWidget.js +188 -227
- package/dist/PluginStoreWidget/components/PluginStoreWidget.js.map +1 -0
- package/dist/PluginStoreWidget/index.d.ts +0 -1
- package/dist/PluginStoreWidget/index.js +10 -28
- package/dist/PluginStoreWidget/index.js.map +1 -0
- package/dist/PluginStoreWidget/model.js +21 -26
- package/dist/PluginStoreWidget/model.js.map +1 -0
- package/dist/SetDefaultSession/SetDefaultSession.js +34 -58
- package/dist/SetDefaultSession/SetDefaultSession.js.map +1 -0
- package/dist/SetDefaultSession/index.js +8 -14
- package/dist/SetDefaultSession/index.js.map +1 -0
- package/dist/index.js +109 -147
- package/dist/index.js.map +1 -0
- package/dist/ucsc-trackhub/configSchema.js +18 -28
- package/dist/ucsc-trackhub/configSchema.js.map +1 -0
- package/dist/ucsc-trackhub/index.js +10 -22
- package/dist/ucsc-trackhub/index.js.map +1 -0
- package/dist/ucsc-trackhub/model.js +150 -128
- package/dist/ucsc-trackhub/model.js.map +1 -0
- package/dist/ucsc-trackhub/ucscAssemblies.js +3 -9
- package/dist/ucsc-trackhub/ucscAssemblies.js.map +1 -0
- package/dist/ucsc-trackhub/ucscTrackHub.js +458 -491
- package/dist/ucsc-trackhub/ucscTrackHub.js.map +1 -0
- package/esm/AddConnectionWidget/components/AddConnectionWidget.d.ts +9 -0
- package/esm/AddConnectionWidget/components/AddConnectionWidget.js +86 -0
- package/esm/AddConnectionWidget/components/AddConnectionWidget.js.map +1 -0
- package/esm/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -0
- package/esm/AddConnectionWidget/components/ConfigureConnection.js +11 -0
- package/esm/AddConnectionWidget/components/ConfigureConnection.js.map +1 -0
- package/esm/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +8 -0
- package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +24 -0
- package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js.map +1 -0
- package/esm/AddConnectionWidget/index.d.ts +2 -0
- package/esm/AddConnectionWidget/index.js +4 -0
- package/esm/AddConnectionWidget/index.js.map +1 -0
- package/esm/AddConnectionWidget/model.d.ts +5 -0
- package/esm/AddConnectionWidget/model.js +7 -0
- package/esm/AddConnectionWidget/model.js.map +1 -0
- package/esm/AddTrackWidget/components/AddTrackWidget.d.ts +7 -0
- package/esm/AddTrackWidget/components/AddTrackWidget.js +139 -0
- package/esm/AddTrackWidget/components/AddTrackWidget.js.map +1 -0
- package/esm/AddTrackWidget/components/ConfirmTrack.d.ts +7 -0
- package/esm/AddTrackWidget/components/ConfirmTrack.js +247 -0
- package/esm/AddTrackWidget/components/ConfirmTrack.js.map +1 -0
- package/esm/AddTrackWidget/components/TrackSourceSelect.d.ts +7 -0
- package/esm/AddTrackWidget/components/TrackSourceSelect.js +27 -0
- package/esm/AddTrackWidget/components/TrackSourceSelect.js.map +1 -0
- package/esm/AddTrackWidget/index.d.ts +2 -0
- package/esm/AddTrackWidget/index.js +4 -0
- package/esm/AddTrackWidget/index.js.map +1 -0
- package/esm/AddTrackWidget/model.d.ts +51 -0
- package/esm/AddTrackWidget/model.js +154 -0
- package/esm/AddTrackWidget/model.js.map +1 -0
- package/esm/AssemblyManager/AssemblyAddForm.d.ts +6 -0
- package/esm/AssemblyManager/AssemblyAddForm.js +132 -0
- package/esm/AssemblyManager/AssemblyAddForm.js.map +1 -0
- package/esm/AssemblyManager/AssemblyEditor.d.ts +5 -0
- package/esm/AssemblyManager/AssemblyEditor.js +8 -0
- package/esm/AssemblyManager/AssemblyEditor.js.map +1 -0
- package/esm/AssemblyManager/AssemblyManager.d.ts +6 -0
- package/esm/AssemblyManager/AssemblyManager.js +69 -0
- package/esm/AssemblyManager/AssemblyManager.js.map +1 -0
- package/esm/AssemblyManager/AssemblyTable.d.ts +13 -0
- package/esm/AssemblyManager/AssemblyTable.js +62 -0
- package/esm/AssemblyManager/AssemblyTable.js.map +1 -0
- package/esm/AssemblyManager/index.d.ts +1 -0
- package/esm/AssemblyManager/index.js +2 -0
- package/esm/AssemblyManager/index.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.d.ts +13 -0
- package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +26 -0
- package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.d.ts +13 -0
- package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +24 -0
- package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +11 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +326 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.d.ts +10 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +45 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.d.ts +11 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +57 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/index.d.ts +2 -0
- package/esm/HierarchicalTrackSelectorWidget/index.js +4 -0
- package/esm/HierarchicalTrackSelectorWidget/index.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/model.d.ts +61 -0
- package/esm/HierarchicalTrackSelectorWidget/model.js +200 -0
- package/esm/HierarchicalTrackSelectorWidget/model.js.map +1 -0
- package/esm/PluginStoreWidget/components/CustomPluginForm.d.ts +9 -0
- package/esm/PluginStoreWidget/components/CustomPluginForm.js +109 -0
- package/esm/PluginStoreWidget/components/CustomPluginForm.js.map +1 -0
- package/esm/PluginStoreWidget/components/InstalledPlugin.d.ts +11 -0
- package/esm/PluginStoreWidget/components/InstalledPlugin.js +77 -0
- package/esm/PluginStoreWidget/components/InstalledPlugin.js.map +1 -0
- package/esm/PluginStoreWidget/components/InstalledPluginsList.d.ts +9 -0
- package/esm/PluginStoreWidget/components/InstalledPluginsList.js +16 -0
- package/esm/PluginStoreWidget/components/InstalledPluginsList.js.map +1 -0
- package/esm/PluginStoreWidget/components/PluginCard.d.ts +10 -0
- package/esm/PluginStoreWidget/components/PluginCard.js +61 -0
- package/esm/PluginStoreWidget/components/PluginCard.js.map +1 -0
- package/esm/PluginStoreWidget/components/PluginStoreWidget.d.ts +7 -0
- package/esm/PluginStoreWidget/components/PluginStoreWidget.js +106 -0
- package/esm/PluginStoreWidget/components/PluginStoreWidget.js.map +1 -0
- package/esm/PluginStoreWidget/index.d.ts +2 -0
- package/esm/PluginStoreWidget/index.js +4 -0
- package/esm/PluginStoreWidget/index.js.map +1 -0
- package/esm/PluginStoreWidget/model.d.ts +13 -0
- package/esm/PluginStoreWidget/model.js +20 -0
- package/esm/PluginStoreWidget/model.js.map +1 -0
- package/esm/SetDefaultSession/SetDefaultSession.d.ts +6 -0
- package/esm/SetDefaultSession/SetDefaultSession.js +34 -0
- package/esm/SetDefaultSession/SetDefaultSession.js.map +1 -0
- package/esm/SetDefaultSession/index.d.ts +1 -0
- package/esm/SetDefaultSession/index.js +2 -0
- package/esm/SetDefaultSession/index.js.map +1 -0
- package/esm/index.d.ts +27 -0
- package/esm/index.js +70 -0
- package/esm/index.js.map +1 -0
- package/esm/ucsc-trackhub/configSchema.d.ts +2 -0
- package/esm/ucsc-trackhub/configSchema.js +18 -0
- package/esm/ucsc-trackhub/configSchema.js.map +1 -0
- package/esm/ucsc-trackhub/index.d.ts +2 -0
- package/esm/ucsc-trackhub/index.js +3 -0
- package/esm/ucsc-trackhub/index.js.map +1 -0
- package/esm/ucsc-trackhub/model.d.ts +15 -0
- package/esm/ucsc-trackhub/model.js +82 -0
- package/esm/ucsc-trackhub/model.js.map +1 -0
- package/esm/ucsc-trackhub/ucscAssemblies.d.ts +2 -0
- package/esm/ucsc-trackhub/ucscAssemblies.js +201 -0
- package/esm/ucsc-trackhub/ucscAssemblies.js.map +1 -0
- package/esm/ucsc-trackhub/ucscTrackHub.d.ts +6 -0
- package/esm/ucsc-trackhub/ucscTrackHub.js +348 -0
- package/esm/ucsc-trackhub/ucscTrackHub.js.map +1 -0
- package/package.json +19 -11
- package/src/AddConnectionWidget/components/AddConnectionWidget.js +14 -10
- package/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx +2 -4
- package/src/AddConnectionWidget/components/__snapshots__/AddConnectionWidget.test.js.snap +63 -67
- package/src/AddTrackWidget/components/AddTrackWidget.test.js +4 -4
- package/src/AddTrackWidget/components/AddTrackWidget.tsx +5 -5
- package/src/AddTrackWidget/components/ConfirmTrack.tsx +22 -22
- package/src/AddTrackWidget/components/TrackSourceSelect.tsx +9 -5
- package/src/AddTrackWidget/components/__snapshots__/AddTrackWidget.test.js.snap +76 -95
- package/src/AssemblyManager/AssemblyAddForm.tsx +5 -11
- package/src/AssemblyManager/AssemblyManager.tsx +8 -8
- package/src/AssemblyManager/AssemblyTable.tsx +10 -10
- package/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx +1 -1
- package/src/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.tsx +1 -1
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +1 -1
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.tsx +15 -13
- package/src/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.tsx +6 -6
- package/src/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.tsx +7 -7
- package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.js.snap +122 -115
- package/src/PluginStoreWidget/components/CustomPluginForm.tsx +11 -14
- package/src/PluginStoreWidget/components/InstalledPlugin.tsx +9 -8
- package/src/PluginStoreWidget/components/InstalledPluginsList.tsx +1 -1
- package/src/PluginStoreWidget/components/PluginCard.tsx +10 -11
- package/src/PluginStoreWidget/components/PluginStoreWidget.tsx +9 -9
- package/src/PluginStoreWidget/components/__snapshots__/PluginStoreWidget.test.js.snap +267 -217
- package/src/PluginStoreWidget/index.js +0 -1
- package/src/SetDefaultSession/SetDefaultSession.tsx +1 -1
- package/dist/AddConnectionWidget/components/AddConnectionWidget.test.js +0 -279
- package/dist/AddTrackWidget/components/AddTrackWidget.test.js +0 -218
- package/dist/AddTrackWidget/index.test.js +0 -292
- package/dist/AssemblyManager/AssemblyManager.test.js +0 -113
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +0 -191
- package/dist/HierarchicalTrackSelectorWidget/model.test.js +0 -28
- package/dist/PluginStoreWidget/components/PluginStoreWidget.test.js +0 -201
- package/dist/PluginStoreWidget/model.test.js +0 -17
- package/dist/SetDefaultSession/SetDefaultSession.test.js +0 -75
- package/dist/index.test.js +0 -56
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { getEnv } from 'mobx-state-tree';
|
|
4
|
+
import { Accordion, AccordionSummary, Button, IconButton, InputAdornment, TextField, Typography, } from '@mui/material';
|
|
5
|
+
import { makeStyles } from 'tss-react/mui';
|
|
6
|
+
import { getSession, isElectron } from '@jbrowse/core/util';
|
|
7
|
+
// icons
|
|
8
|
+
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
9
|
+
import ClearIcon from '@mui/icons-material/Clear';
|
|
10
|
+
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined';
|
|
11
|
+
// locals
|
|
12
|
+
import InstalledPluginsList from './InstalledPluginsList';
|
|
13
|
+
import PluginCard from './PluginCard';
|
|
14
|
+
import CustomPluginForm from './CustomPluginForm';
|
|
15
|
+
const useStyles = makeStyles()(theme => ({
|
|
16
|
+
root: {
|
|
17
|
+
margin: theme.spacing(1),
|
|
18
|
+
},
|
|
19
|
+
expandIcon: {
|
|
20
|
+
color: '#fff',
|
|
21
|
+
},
|
|
22
|
+
adminBadge: {
|
|
23
|
+
margin: '0.5em',
|
|
24
|
+
borderRadius: 3,
|
|
25
|
+
// this is the quaternary color in JB2 palette
|
|
26
|
+
backgroundColor: '#FFB11D',
|
|
27
|
+
padding: '1em',
|
|
28
|
+
display: 'flex',
|
|
29
|
+
alignContent: 'center',
|
|
30
|
+
},
|
|
31
|
+
customPluginButton: {
|
|
32
|
+
margin: '0.5em',
|
|
33
|
+
display: 'flex',
|
|
34
|
+
justifyContent: 'center',
|
|
35
|
+
},
|
|
36
|
+
}));
|
|
37
|
+
function PluginStoreWidget({ model }) {
|
|
38
|
+
const { classes } = useStyles();
|
|
39
|
+
const [pluginArray, setPluginArray] = useState();
|
|
40
|
+
const [error, setError] = useState();
|
|
41
|
+
const [customPluginFormOpen, setCustomPluginFormOpen] = useState(false);
|
|
42
|
+
const { adminMode } = getSession(model);
|
|
43
|
+
const { pluginManager } = getEnv(model);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
const controller = new AbortController();
|
|
46
|
+
const { signal } = controller;
|
|
47
|
+
(async () => {
|
|
48
|
+
try {
|
|
49
|
+
const response = await fetch('https://jbrowse.org/plugin-store/plugins.json', { signal });
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
const err = await response.text();
|
|
52
|
+
throw new Error(`Failed to fetch plugin data: ${response.status} ${response.statusText} ${err}`);
|
|
53
|
+
}
|
|
54
|
+
const array = await response.json();
|
|
55
|
+
if (!signal.aborted) {
|
|
56
|
+
setPluginArray(array.plugins);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
console.error(e);
|
|
61
|
+
setError(e);
|
|
62
|
+
}
|
|
63
|
+
})();
|
|
64
|
+
return () => {
|
|
65
|
+
controller.abort();
|
|
66
|
+
};
|
|
67
|
+
}, []);
|
|
68
|
+
return (React.createElement("div", { className: classes.root },
|
|
69
|
+
adminMode && (React.createElement(React.Fragment, null,
|
|
70
|
+
!isElectron && (React.createElement("div", { className: classes.adminBadge },
|
|
71
|
+
React.createElement(InfoOutlinedIcon, { style: { marginRight: '0.3em' } }),
|
|
72
|
+
React.createElement(Typography, null,
|
|
73
|
+
"You are using the ",
|
|
74
|
+
React.createElement("code", null, "admin-server"),
|
|
75
|
+
". Any changes you make will be saved to your configuration file. You also have the ability to add custom plugins that are not in the store."))),
|
|
76
|
+
React.createElement("div", { className: classes.customPluginButton },
|
|
77
|
+
React.createElement(Button, { variant: "contained", color: "primary", onClick: () => setCustomPluginFormOpen(true) }, "Add custom plugin")),
|
|
78
|
+
React.createElement(CustomPluginForm, { open: customPluginFormOpen, onClose: () => setCustomPluginFormOpen(false), model: model }))),
|
|
79
|
+
React.createElement(TextField, { label: "Filter plugins", value: model.filterText, onChange: event => model.setFilterText(event.target.value), fullWidth: true, InputProps: {
|
|
80
|
+
endAdornment: (React.createElement(InputAdornment, { position: "end" },
|
|
81
|
+
React.createElement(IconButton, { color: "secondary", onClick: () => model.clearFilterText() },
|
|
82
|
+
React.createElement(ClearIcon, null)))),
|
|
83
|
+
} }),
|
|
84
|
+
React.createElement(Accordion, { defaultExpanded: true },
|
|
85
|
+
React.createElement(AccordionSummary, { expandIcon: React.createElement(ExpandMoreIcon, { className: classes.expandIcon }) },
|
|
86
|
+
React.createElement(Typography, { variant: "h5" }, "Installed plugins")),
|
|
87
|
+
React.createElement("div", { style: { margin: '1em' } },
|
|
88
|
+
React.createElement(InstalledPluginsList, { pluginManager: pluginManager, model: model }))),
|
|
89
|
+
React.createElement(Accordion, { defaultExpanded: true },
|
|
90
|
+
React.createElement(AccordionSummary, { expandIcon: React.createElement(ExpandMoreIcon, { className: classes.expandIcon }) },
|
|
91
|
+
React.createElement(Typography, { variant: "h5" }, "Available plugins")),
|
|
92
|
+
error ? (React.createElement(Typography, { color: "error" }, `${error}`)) : pluginArray ? (pluginArray
|
|
93
|
+
.filter(plugin => {
|
|
94
|
+
// If pugin only has cjsUrl, don't display outside desktop
|
|
95
|
+
if (!isElectron &&
|
|
96
|
+
!(plugin.esmUrl || plugin.url || plugin.umdUrl)) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
return plugin.name
|
|
100
|
+
.toLowerCase()
|
|
101
|
+
.includes(model.filterText.toLowerCase());
|
|
102
|
+
})
|
|
103
|
+
.map(plugin => (React.createElement(PluginCard, { key: plugin.name, plugin: plugin, model: model, adminMode: !!adminMode })))) : (React.createElement(Typography, null, "Loading...")))));
|
|
104
|
+
}
|
|
105
|
+
export default observer(PluginStoreWidget);
|
|
106
|
+
//# sourceMappingURL=PluginStoreWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginStoreWidget.js","sourceRoot":"","sources":["../../../src/PluginStoreWidget/components/PluginStoreWidget.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/PluginStoreWidget/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,SAAS,CAAA;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Instance } from 'mobx-state-tree';
|
|
2
|
+
import PluginManager from '@jbrowse/core/PluginManager';
|
|
3
|
+
export default function f(pluginManager: PluginManager): import("mobx-state-tree").IModelType<{
|
|
4
|
+
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
5
|
+
type: import("mobx-state-tree").ISimpleType<"PluginStoreWidget">;
|
|
6
|
+
filterText: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
7
|
+
view: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
|
|
8
|
+
}, {
|
|
9
|
+
clearFilterText(): void;
|
|
10
|
+
setFilterText(newText: string): void;
|
|
11
|
+
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
12
|
+
export declare type PluginStoreStateModel = ReturnType<typeof f>;
|
|
13
|
+
export declare type PluginStoreModel = Instance<PluginStoreStateModel>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { types } from 'mobx-state-tree';
|
|
2
|
+
import { ElementId } from '@jbrowse/core/util/types/mst';
|
|
3
|
+
export default function f(pluginManager) {
|
|
4
|
+
return types
|
|
5
|
+
.model('PluginStoreModel', {
|
|
6
|
+
id: ElementId,
|
|
7
|
+
type: types.literal('PluginStoreWidget'),
|
|
8
|
+
filterText: '',
|
|
9
|
+
view: types.safeReference(pluginManager.pluggableMstType('view', 'stateModel')),
|
|
10
|
+
})
|
|
11
|
+
.actions(self => ({
|
|
12
|
+
clearFilterText() {
|
|
13
|
+
self.filterText = '';
|
|
14
|
+
},
|
|
15
|
+
setFilterText(newText) {
|
|
16
|
+
self.filterText = newText;
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/PluginStoreWidget/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,aAA4B;IACpD,OAAO,KAAK;SACT,KAAK,CAAC,kBAAkB,EAAE;QACzB,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACxC,UAAU,EAAE,EAAE;QACd,IAAI,EAAE,KAAK,CAAC,aAAa,CACvB,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CACrD;KACF,CAAC;SACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAe;YACb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACtB,CAAC;QACD,aAAa,CAAC,OAAe;YAC3B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAA;QAC3B,CAAC;KACF,CAAC,CAAC,CAAA;AACP,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Typography, } from '@mui/material';
|
|
4
|
+
function canSetDefaultSession(obj) {
|
|
5
|
+
return typeof obj === 'object' && !!obj && 'jbrowse' in obj;
|
|
6
|
+
}
|
|
7
|
+
const SetDefaultSession = observer(({ rootModel, onClose }) => {
|
|
8
|
+
if (!rootModel) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
if (!canSetDefaultSession(rootModel)) {
|
|
12
|
+
console.error('Incorrect rootmodel');
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
const { jbrowse, session } = rootModel;
|
|
16
|
+
return (React.createElement(Dialog, { open: true, onClose: onClose },
|
|
17
|
+
React.createElement(DialogTitle, null, "Set default session"),
|
|
18
|
+
React.createElement(DialogContent, null,
|
|
19
|
+
React.createElement(Typography, null, "Select \"Set current session as default\" to make your current session saved to the config file. You can also hit \"Clear default session\", which would remove the default session from the config.")),
|
|
20
|
+
React.createElement(DialogActions, null,
|
|
21
|
+
React.createElement(Button, { variant: "contained", onClick: () => {
|
|
22
|
+
jbrowse.setDefaultSessionConf({
|
|
23
|
+
name: `New session`,
|
|
24
|
+
});
|
|
25
|
+
onClose();
|
|
26
|
+
} }, "Clear default session"),
|
|
27
|
+
React.createElement(Button, { color: "secondary", variant: "contained", onClick: () => onClose() }, "Cancel"),
|
|
28
|
+
React.createElement(Button, { color: "primary", variant: "contained", onClick: () => {
|
|
29
|
+
jbrowse.setDefaultSessionConf(session);
|
|
30
|
+
onClose();
|
|
31
|
+
} }, "Set current session as default"))));
|
|
32
|
+
});
|
|
33
|
+
export default SetDefaultSession;
|
|
34
|
+
//# sourceMappingURL=SetDefaultSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetDefaultSession.js","sourceRoot":"","sources":["../../src/SetDefaultSession/SetDefaultSession.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EACL,MAAM,EACN,WAAW,EACX,aAAa,EACb,aAAa,EACb,MAAM,EACN,UAAU,GACX,MAAM,eAAe,CAAA;AAEtB,SAAS,oBAAoB,CAAC,GAAY;IAIxC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,SAAS,IAAI,GAAG,CAAA;AAC7D,CAAC;AAED,MAAM,iBAAiB,GAAG,QAAQ,CAChC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAgD,EAAE,EAAE;IACvE,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,IAAI,CAAA;KACZ;IACD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE;QACpC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACpC,OAAO,IAAI,CAAA;KACZ;IACD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAA;IAEtC,OAAO,CACL,oBAAC,MAAM,IAAC,IAAI,QAAC,OAAO,EAAE,OAAO;QAC3B,oBAAC,WAAW,8BAAkC;QAC9C,oBAAC,aAAa;YACZ,oBAAC,UAAU,+MAKE,CACC;QAChB,oBAAC,aAAa;YACZ,oBAAC,MAAM,IACL,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,CAAC,qBAAqB,CAAC;wBAC5B,IAAI,EAAE,aAAa;qBACpB,CAAC,CAAA;oBACF,OAAO,EAAE,CAAA;gBACX,CAAC,4BAGM;YACT,oBAAC,MAAM,IACL,KAAK,EAAC,WAAW,EACjB,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,aAGjB;YACT,oBAAC,MAAM,IACL,KAAK,EAAC,SAAS,EACf,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAA;oBACtC,OAAO,EAAE,CAAA;gBACX,CAAC,qCAGM,CACK,CACT,CACV,CAAA;AACH,CAAC,CACF,CAAA;AAED,eAAe,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './SetDefaultSession';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/SetDefaultSession/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA"}
|
package/esm/index.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import Plugin from '@jbrowse/core/Plugin';
|
|
3
|
+
import PluginManager from '@jbrowse/core/PluginManager';
|
|
4
|
+
declare const SetDefaultSession: import("react").LazyExoticComponent<({ rootModel, onClose }: {
|
|
5
|
+
rootModel?: unknown;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
}) => JSX.Element | null>;
|
|
8
|
+
declare const AssemblyManager: import("react").LazyExoticComponent<({ rootModel, onClose, }: {
|
|
9
|
+
rootModel: any;
|
|
10
|
+
onClose: (arg: boolean) => void;
|
|
11
|
+
}) => JSX.Element>;
|
|
12
|
+
export default class extends Plugin {
|
|
13
|
+
name: string;
|
|
14
|
+
exports: {
|
|
15
|
+
AssemblyManager: import("react").LazyExoticComponent<({ rootModel, onClose, }: {
|
|
16
|
+
rootModel: any;
|
|
17
|
+
onClose: (arg: boolean) => void;
|
|
18
|
+
}) => JSX.Element>;
|
|
19
|
+
SetDefaultSession: import("react").LazyExoticComponent<({ rootModel, onClose }: {
|
|
20
|
+
rootModel?: unknown;
|
|
21
|
+
onClose: () => void;
|
|
22
|
+
}) => JSX.Element | null>;
|
|
23
|
+
};
|
|
24
|
+
install(pluginManager: PluginManager): void;
|
|
25
|
+
configure(pluginManager: PluginManager): void;
|
|
26
|
+
}
|
|
27
|
+
export { AssemblyManager, SetDefaultSession };
|
package/esm/index.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { lazy } from 'react';
|
|
2
|
+
import ConnectionType from '@jbrowse/core/pluggableElementTypes/ConnectionType';
|
|
3
|
+
import WidgetType from '@jbrowse/core/pluggableElementTypes/WidgetType';
|
|
4
|
+
import Plugin from '@jbrowse/core/Plugin';
|
|
5
|
+
import { configSchema as ucscConfigSchema, modelFactory as ucscModelFactory, } from './ucsc-trackhub';
|
|
6
|
+
import { stateModelFactory as AddTrackStateModelFactory, configSchema as AddTrackConfigSchema, } from './AddTrackWidget';
|
|
7
|
+
import { stateModel as AddConnectionStateModel, configSchema as AddConnectionConfigSchema, } from './AddConnectionWidget';
|
|
8
|
+
import { stateModelFactory as HierarchicalTrackSelectorStateModelFactory, configSchema as HierarchicalTrackSelectorConfigSchema, } from './HierarchicalTrackSelectorWidget';
|
|
9
|
+
import { stateModelFactory as PluginStoreStateModelFactory, configSchema as PluginStoreConfigSchema, } from './PluginStoreWidget';
|
|
10
|
+
const SetDefaultSession = lazy(() => import('./SetDefaultSession'));
|
|
11
|
+
const AssemblyManager = lazy(() => import('./AssemblyManager'));
|
|
12
|
+
export default class extends Plugin {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments);
|
|
15
|
+
this.name = 'DataManagementPlugin';
|
|
16
|
+
this.exports = {
|
|
17
|
+
AssemblyManager,
|
|
18
|
+
SetDefaultSession,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
install(pluginManager) {
|
|
22
|
+
pluginManager.addConnectionType(() => new ConnectionType({
|
|
23
|
+
name: 'UCSCTrackHubConnection',
|
|
24
|
+
configSchema: ucscConfigSchema,
|
|
25
|
+
stateModel: ucscModelFactory(pluginManager),
|
|
26
|
+
displayName: 'UCSC Track Hub',
|
|
27
|
+
description: 'A track or assembly hub in the Track Hub format',
|
|
28
|
+
url: '//genome.ucsc.edu/goldenPath/help/hgTrackHubHelp.html#Intro',
|
|
29
|
+
}));
|
|
30
|
+
pluginManager.addWidgetType(() => {
|
|
31
|
+
return new WidgetType({
|
|
32
|
+
name: 'HierarchicalTrackSelectorWidget',
|
|
33
|
+
heading: 'Available tracks',
|
|
34
|
+
configSchema: HierarchicalTrackSelectorConfigSchema,
|
|
35
|
+
stateModel: HierarchicalTrackSelectorStateModelFactory(pluginManager),
|
|
36
|
+
ReactComponent: lazy(() => import('./HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector')),
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
pluginManager.addWidgetType(() => {
|
|
40
|
+
return new WidgetType({
|
|
41
|
+
name: 'AddTrackWidget',
|
|
42
|
+
heading: 'Add a track',
|
|
43
|
+
configSchema: AddTrackConfigSchema,
|
|
44
|
+
stateModel: AddTrackStateModelFactory(pluginManager),
|
|
45
|
+
ReactComponent: lazy(() => import('./AddTrackWidget/components/AddTrackWidget')),
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
pluginManager.addWidgetType(() => {
|
|
49
|
+
return new WidgetType({
|
|
50
|
+
name: 'AddConnectionWidget',
|
|
51
|
+
heading: 'Add a connection',
|
|
52
|
+
configSchema: AddConnectionConfigSchema,
|
|
53
|
+
stateModel: AddConnectionStateModel,
|
|
54
|
+
ReactComponent: lazy(() => import('./AddConnectionWidget/components/AddConnectionWidget')),
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
pluginManager.addWidgetType(() => {
|
|
58
|
+
return new WidgetType({
|
|
59
|
+
name: 'PluginStoreWidget',
|
|
60
|
+
heading: 'Plugin store',
|
|
61
|
+
configSchema: PluginStoreConfigSchema,
|
|
62
|
+
stateModel: PluginStoreStateModelFactory(pluginManager),
|
|
63
|
+
ReactComponent: lazy(() => import('./PluginStoreWidget/components/PluginStoreWidget')),
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
configure(pluginManager) { }
|
|
68
|
+
}
|
|
69
|
+
export { AssemblyManager, SetDefaultSession };
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { baseConnectionConfig } from '@jbrowse/core/pluggableElementTypes/models';
|
|
2
|
+
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
3
|
+
export default ConfigurationSchema('UCSCTrackHubConnection', {
|
|
4
|
+
hubTxtLocation: {
|
|
5
|
+
type: 'fileLocation',
|
|
6
|
+
defaultValue: {
|
|
7
|
+
uri: 'http://mysite.com/path/to/hub.txt',
|
|
8
|
+
locationType: 'UriLocation',
|
|
9
|
+
},
|
|
10
|
+
description: 'location of the hub file (usually called hub.txt)',
|
|
11
|
+
},
|
|
12
|
+
assemblyNames: {
|
|
13
|
+
type: 'stringArray',
|
|
14
|
+
defaultValue: [],
|
|
15
|
+
description: 'optional list of genomes to import from this track hub, if empty all genomes will be imported',
|
|
16
|
+
},
|
|
17
|
+
}, { baseConfiguration: baseConnectionConfig });
|
|
18
|
+
//# sourceMappingURL=configSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/ucsc-trackhub/configSchema.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,eAAe,mBAAmB,CAChC,wBAAwB,EACxB;IACE,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE;YACZ,GAAG,EAAE,mCAAmC;YACxC,YAAY,EAAE,aAAa;SAC5B;QACD,WAAW,EAAE,mDAAmD;KACjE;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,EAAE;QAChB,WAAW,EACT,+FAA+F;KAClG;CACF,EACD,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAC5C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ucsc-trackhub/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export default function UCSCTrackHubConnection(pluginManager: any): import("mobx-state-tree").IModelType<{
|
|
2
|
+
name: import("mobx-state-tree").ISimpleType<string>;
|
|
3
|
+
tracks: import("mobx-state-tree").IArrayType<any>;
|
|
4
|
+
} & {
|
|
5
|
+
configuration: import("mobx-state-tree").ITypeUnion<any, any, any>;
|
|
6
|
+
type: import("mobx-state-tree").ISimpleType<"UCSCTrackHubConnection">;
|
|
7
|
+
}, {
|
|
8
|
+
afterAttach(): void;
|
|
9
|
+
addTrackConf(trackConf: any): any;
|
|
10
|
+
addTrackConfs(trackConfs: any): any[];
|
|
11
|
+
setTrackConfs(trackConfs: any): import("mobx-state-tree").IMSTArray<any> & import("mobx-state-tree").IStateTreeNode<import("mobx-state-tree").IArrayType<any>>;
|
|
12
|
+
clear(): void;
|
|
13
|
+
} & {
|
|
14
|
+
connect(): void;
|
|
15
|
+
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { BaseConnectionModelFactory } from '@jbrowse/core/pluggableElementTypes/models';
|
|
2
|
+
import { ConfigurationReference, readConfObject, getConf, } from '@jbrowse/core/configuration';
|
|
3
|
+
import { getSession } from '@jbrowse/core/util';
|
|
4
|
+
import { types } from 'mobx-state-tree';
|
|
5
|
+
import configSchema from './configSchema';
|
|
6
|
+
import { fetchGenomesFile, fetchHubFile, fetchTrackDbFile, generateTracks, } from './ucscTrackHub';
|
|
7
|
+
export default function UCSCTrackHubConnection(pluginManager) {
|
|
8
|
+
return types.compose('UCSCTrackHubConnection', BaseConnectionModelFactory(pluginManager), types
|
|
9
|
+
.model({
|
|
10
|
+
configuration: ConfigurationReference(configSchema),
|
|
11
|
+
type: types.literal('UCSCTrackHubConnection'),
|
|
12
|
+
})
|
|
13
|
+
.actions(self => ({
|
|
14
|
+
connect() {
|
|
15
|
+
const connectionName = getConf(self, 'name');
|
|
16
|
+
const hubFileLocation = getConf(self, 'hubTxtLocation');
|
|
17
|
+
const session = getSession(self);
|
|
18
|
+
fetchHubFile(hubFileLocation)
|
|
19
|
+
.then(hubFile => {
|
|
20
|
+
const genomesFileLocation = hubFileLocation.uri
|
|
21
|
+
? {
|
|
22
|
+
uri: new URL(hubFile.get('genomesFile'), hubFileLocation.uri).href,
|
|
23
|
+
locationType: 'UriLocation',
|
|
24
|
+
}
|
|
25
|
+
: {
|
|
26
|
+
localPath: hubFile.get('genomesFile'),
|
|
27
|
+
locationType: 'LocalPathLocation',
|
|
28
|
+
};
|
|
29
|
+
return Promise.all([
|
|
30
|
+
hubFile,
|
|
31
|
+
fetchGenomesFile(genomesFileLocation),
|
|
32
|
+
]);
|
|
33
|
+
})
|
|
34
|
+
.then(([hubFile, genomesFile]) => {
|
|
35
|
+
const trackDbData = [];
|
|
36
|
+
for (const [genomeName, genome] of genomesFile) {
|
|
37
|
+
const assemblyNames = getConf(self, 'assemblyNames');
|
|
38
|
+
if (assemblyNames.length > 0 &&
|
|
39
|
+
!assemblyNames.includes(genomeName)) {
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
const assemblyConf = session.assemblies.find(assembly => readConfObject(assembly, 'name') === genomeName);
|
|
43
|
+
if (!assemblyConf) {
|
|
44
|
+
throw new Error(`Cannot find assembly for "${genomeName}" from the genomes file for connection "${connectionName}"`);
|
|
45
|
+
}
|
|
46
|
+
const trackDbFileLocation = hubFileLocation.uri
|
|
47
|
+
? {
|
|
48
|
+
uri: new URL(genome.get('trackDb'), new URL(hubFile.get('genomesFile'), hubFileLocation.uri)).href,
|
|
49
|
+
locationType: 'UriLocation',
|
|
50
|
+
}
|
|
51
|
+
: {
|
|
52
|
+
localPath: genome.get('trackDb'),
|
|
53
|
+
locationType: 'LocalPathLocation',
|
|
54
|
+
};
|
|
55
|
+
trackDbData.push(Promise.all([
|
|
56
|
+
trackDbFileLocation,
|
|
57
|
+
fetchTrackDbFile(trackDbFileLocation),
|
|
58
|
+
genomeName,
|
|
59
|
+
assemblyConf,
|
|
60
|
+
]));
|
|
61
|
+
}
|
|
62
|
+
return Promise.all([...trackDbData]);
|
|
63
|
+
})
|
|
64
|
+
.then(trackDbData => {
|
|
65
|
+
for (const [trackDbFileLocation, trackDbFile, genomeName, assemblyConf,] of trackDbData) {
|
|
66
|
+
const sequenceAdapter = readConfObject(assemblyConf, [
|
|
67
|
+
'sequence',
|
|
68
|
+
'adapter',
|
|
69
|
+
]);
|
|
70
|
+
const tracks = generateTracks(trackDbFile, trackDbFileLocation, genomeName, sequenceAdapter);
|
|
71
|
+
self.addTrackConfs(tracks);
|
|
72
|
+
}
|
|
73
|
+
})
|
|
74
|
+
.catch(error => {
|
|
75
|
+
console.error(error);
|
|
76
|
+
session.notify(`There was a problem connecting to the UCSC Track Hub "${self.name}". Please make sure you have entered a valid hub.txt file. The error that was thrown is: "${error}"`, 'error');
|
|
77
|
+
session.breakConnection(self.configuration);
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
})));
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/ucsc-trackhub/model.js"],"names":[],"mappings":"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"}
|