@jbrowse/plugin-data-management 1.6.7 → 1.7.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 +178 -0
- package/dist/AddConnectionWidget/components/AddConnectionWidget.test.js +270 -0
- package/dist/AddConnectionWidget/components/ConfigureConnection.js +35 -0
- package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +70 -0
- package/dist/AddConnectionWidget/index.js +21 -0
- package/dist/AddConnectionWidget/model.js +17 -0
- package/dist/AddTrackWidget/components/AddTrackWidget.js +215 -0
- package/dist/AddTrackWidget/components/AddTrackWidget.test.js +218 -0
- package/dist/AddTrackWidget/components/ConfirmTrack.js +277 -0
- package/dist/AddTrackWidget/components/TrackSourceSelect.js +60 -0
- package/dist/AddTrackWidget/index.js +21 -0
- package/dist/AddTrackWidget/index.test.js +291 -0
- package/dist/AddTrackWidget/model.js +167 -0
- package/dist/AssemblyManager/AssemblyAddForm.js +299 -0
- package/dist/AssemblyManager/AssemblyEditor.js +25 -0
- package/dist/AssemblyManager/AssemblyManager.js +144 -0
- package/dist/AssemblyManager/AssemblyManager.test.js +113 -0
- package/dist/AssemblyManager/AssemblyTable.js +92 -0
- package/dist/AssemblyManager/index.js +15 -0
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +55 -0
- package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +46 -0
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +648 -0
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +191 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +80 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +98 -0
- package/dist/HierarchicalTrackSelectorWidget/index.js +21 -0
- package/dist/HierarchicalTrackSelectorWidget/model.js +306 -0
- package/dist/HierarchicalTrackSelectorWidget/model.test.js +28 -0
- package/dist/PluginStoreWidget/components/CustomPluginForm.js +217 -0
- package/dist/PluginStoreWidget/components/InstalledPlugin.js +138 -0
- package/dist/PluginStoreWidget/components/InstalledPluginsList.js +47 -0
- package/dist/PluginStoreWidget/components/PluginCard.js +121 -0
- package/dist/PluginStoreWidget/components/PluginStoreWidget.js +240 -0
- package/dist/PluginStoreWidget/components/PluginStoreWidget.test.js +201 -0
- package/dist/PluginStoreWidget/index.js +29 -0
- package/dist/PluginStoreWidget/model.js +28 -0
- package/dist/PluginStoreWidget/model.test.js +17 -0
- package/dist/SetDefaultSession/SetDefaultSession.js +64 -0
- package/dist/SetDefaultSession/SetDefaultSession.test.js +75 -0
- package/dist/SetDefaultSession/index.js +15 -0
- package/dist/index.js +159 -6
- package/dist/index.test.js +56 -0
- package/dist/plugin-data-management.cjs.development.js +29 -23
- 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 +29 -23
- package/dist/plugin-data-management.esm.js.map +1 -1
- package/dist/ucsc-trackhub/configSchema.js +30 -0
- package/dist/ucsc-trackhub/index.js +23 -0
- package/dist/ucsc-trackhub/model.js +130 -0
- package/dist/ucsc-trackhub/ucscAssemblies.js +13 -0
- package/dist/ucsc-trackhub/ucscTrackHub.js +503 -0
- package/package.json +3 -6
- package/src/AddConnectionWidget/components/AddConnectionWidget.test.js +1 -0
- package/src/AddTrackWidget/components/AddTrackWidget.test.js +1 -0
- package/src/AddTrackWidget/components/AddTrackWidget.tsx +1 -1
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +94 -89
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +1 -0
- package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.js.snap +2 -2
- package/src/PluginStoreWidget/components/CustomPluginForm.tsx +1 -1
- package/src/PluginStoreWidget/components/InstalledPlugin.tsx +4 -2
- package/src/PluginStoreWidget/components/PluginCard.tsx +4 -2
- package/src/PluginStoreWidget/components/PluginStoreWidget.test.js +1 -0
- package/src/PluginStoreWidget/model.test.js +1 -0
- package/src/SetDefaultSession/SetDefaultSession.tsx +4 -3
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
13
|
+
|
|
14
|
+
var _util = require("@jbrowse/core/util");
|
|
15
|
+
|
|
16
|
+
var _core = require("@material-ui/core");
|
|
17
|
+
|
|
18
|
+
var _mobxReact = require("mobx-react");
|
|
19
|
+
|
|
20
|
+
var _mobxStateTree = require("mobx-state-tree");
|
|
21
|
+
|
|
22
|
+
var _tracks = require("@jbrowse/core/util/tracks");
|
|
23
|
+
|
|
24
|
+
var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
25
|
+
return {
|
|
26
|
+
spacing: {
|
|
27
|
+
marginBottom: theme.spacing(3)
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
function StatusMessage(_ref) {
|
|
33
|
+
var _trackAdapter$subadap;
|
|
34
|
+
|
|
35
|
+
var trackAdapter = _ref.trackAdapter,
|
|
36
|
+
trackType = _ref.trackType;
|
|
37
|
+
var classes = useStyles();
|
|
38
|
+
return trackAdapter.type === 'SNPCoverageAdapter' ? /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
39
|
+
className: classes.spacing
|
|
40
|
+
}, "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, {
|
|
41
|
+
className: classes.spacing
|
|
42
|
+
}, "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.");
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* categorizeAdapters takes a list of adapters and sorts their menu item elements under an appropriate ListSubheader
|
|
46
|
+
* element. In this way, adapters that are from external plugins can have headers that differentiate them from the
|
|
47
|
+
* out-of-the-box plugins.
|
|
48
|
+
* @param adaptersList - a list of adapters found in the PluginManager
|
|
49
|
+
* @returns a series of JSX elements that are ListSubheaders followed by the adapters
|
|
50
|
+
* found under that subheader
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
function categorizeAdapters(adaptersList) {
|
|
55
|
+
var currentCategory = ''; // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
|
|
57
|
+
var items = [];
|
|
58
|
+
adaptersList.forEach(function (adapter) {
|
|
59
|
+
var _adapter$adapterMetad;
|
|
60
|
+
|
|
61
|
+
if ((_adapter$adapterMetad = adapter.adapterMetadata) !== null && _adapter$adapterMetad !== void 0 && _adapter$adapterMetad.category) {
|
|
62
|
+
var _adapter$adapterMetad2, _adapter$adapterMetad7, _adapter$adapterMetad8;
|
|
63
|
+
|
|
64
|
+
if (currentCategory !== ((_adapter$adapterMetad2 = adapter.adapterMetadata) === null || _adapter$adapterMetad2 === void 0 ? void 0 : _adapter$adapterMetad2.category)) {
|
|
65
|
+
var _adapter$adapterMetad3, _adapter$adapterMetad4, _adapter$adapterMetad5, _adapter$adapterMetad6;
|
|
66
|
+
|
|
67
|
+
currentCategory = (_adapter$adapterMetad3 = adapter.adapterMetadata) === null || _adapter$adapterMetad3 === void 0 ? void 0 : _adapter$adapterMetad3.category;
|
|
68
|
+
items.push( /*#__PURE__*/_react["default"].createElement(_core.ListSubheader, {
|
|
69
|
+
key: (_adapter$adapterMetad4 = adapter.adapterMetadata) === null || _adapter$adapterMetad4 === void 0 ? void 0 : _adapter$adapterMetad4.category,
|
|
70
|
+
value: (_adapter$adapterMetad5 = adapter.adapterMetadata) === null || _adapter$adapterMetad5 === void 0 ? void 0 : _adapter$adapterMetad5.category
|
|
71
|
+
}, (_adapter$adapterMetad6 = adapter.adapterMetadata) === null || _adapter$adapterMetad6 === void 0 ? void 0 : _adapter$adapterMetad6.category));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
items.push( /*#__PURE__*/_react["default"].createElement(_core.MenuItem, {
|
|
75
|
+
key: adapter.name,
|
|
76
|
+
value: adapter.name
|
|
77
|
+
}, (_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));
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return items;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function getAdapterTypes(pluginManager) {
|
|
84
|
+
return pluginManager.getElementTypesInGroup('adapter');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function getTrackTypes(pluginManager) {
|
|
88
|
+
return pluginManager.getElementTypesInGroup('track');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var TrackAdapterSelector = (0, _mobxReact.observer)(function (_ref2) {
|
|
92
|
+
var model = _ref2.model;
|
|
93
|
+
var classes = useStyles();
|
|
94
|
+
var session = (0, _util.getSession)(model);
|
|
95
|
+
var trackAdapter = model.trackAdapter; // prettier-ignore
|
|
96
|
+
|
|
97
|
+
var adapters = getAdapterTypes((0, _mobxStateTree.getEnv)(session).pluginManager);
|
|
98
|
+
return /*#__PURE__*/_react["default"].createElement(_core.TextField, {
|
|
99
|
+
className: classes.spacing,
|
|
100
|
+
value: (trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type) !== 'UNKNOWN' ? trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type : '',
|
|
101
|
+
label: "adapterType",
|
|
102
|
+
helperText: "Select an adapter type",
|
|
103
|
+
select: true,
|
|
104
|
+
fullWidth: true,
|
|
105
|
+
onChange: function onChange(event) {
|
|
106
|
+
model.setAdapterHint(event.target.value);
|
|
107
|
+
},
|
|
108
|
+
SelectProps: {
|
|
109
|
+
// @ts-ignore
|
|
110
|
+
SelectDisplayProps: {
|
|
111
|
+
'data-testid': 'adapterTypeSelect'
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}, adapters // Excludes any adapter with the 'adapterMetadata.hiddenFromGUI' property, and anything with the 'adapterMetadata.category' property
|
|
115
|
+
.filter(function (elt) {
|
|
116
|
+
var _elt$adapterMetadata, _elt$adapterMetadata2;
|
|
117
|
+
|
|
118
|
+
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);
|
|
119
|
+
}).map(function (elt) {
|
|
120
|
+
var _elt$adapterMetadata3, _elt$adapterMetadata4;
|
|
121
|
+
|
|
122
|
+
return /*#__PURE__*/_react["default"].createElement(_core.MenuItem, {
|
|
123
|
+
key: elt.name,
|
|
124
|
+
value: elt.name
|
|
125
|
+
}, (_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);
|
|
126
|
+
}), categorizeAdapters(adapters.filter(function (elt) {
|
|
127
|
+
var _elt$adapterMetadata5;
|
|
128
|
+
|
|
129
|
+
return !((_elt$adapterMetadata5 = elt.adapterMetadata) !== null && _elt$adapterMetadata5 !== void 0 && _elt$adapterMetadata5.hiddenFromGUI);
|
|
130
|
+
})));
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
function UnknownAdapterPrompt(_ref3) {
|
|
134
|
+
var model = _ref3.model;
|
|
135
|
+
var classes = useStyles();
|
|
136
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
137
|
+
className: classes.spacing
|
|
138
|
+
}, "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, {
|
|
139
|
+
href: "https://github.com/GMOD/jbrowse-components/releases",
|
|
140
|
+
target: "_blank",
|
|
141
|
+
rel: "noopener noreferrer"
|
|
142
|
+
}, "check for new releases"), ' ', "of JBrowse to see if they support this data type or", ' ', /*#__PURE__*/_react["default"].createElement(_core.Link, {
|
|
143
|
+
href: "https://github.com/GMOD/jbrowse-components/issues/new",
|
|
144
|
+
target: "_blank",
|
|
145
|
+
rel: "noopener noreferrer"
|
|
146
|
+
}, "file an issue"), ' ', "and add a feature request for this data type."), /*#__PURE__*/_react["default"].createElement(TrackAdapterSelector, {
|
|
147
|
+
model: model
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
var TrackTypeSelector = (0, _mobxReact.observer)(function (_ref4) {
|
|
152
|
+
var model = _ref4.model;
|
|
153
|
+
var classes = useStyles();
|
|
154
|
+
var session = (0, _util.getSession)(model);
|
|
155
|
+
var trackType = model.trackType;
|
|
156
|
+
var trackTypes = getTrackTypes((0, _mobxStateTree.getEnv)(session).pluginManager);
|
|
157
|
+
return /*#__PURE__*/_react["default"].createElement(_core.TextField, {
|
|
158
|
+
className: classes.spacing,
|
|
159
|
+
value: trackType,
|
|
160
|
+
label: "trackType",
|
|
161
|
+
helperText: "Select a track type",
|
|
162
|
+
select: true,
|
|
163
|
+
fullWidth: true,
|
|
164
|
+
onChange: function onChange(event) {
|
|
165
|
+
model.setTrackType(event.target.value);
|
|
166
|
+
},
|
|
167
|
+
SelectProps: {
|
|
168
|
+
// @ts-ignore
|
|
169
|
+
SelectDisplayProps: {
|
|
170
|
+
'data-testid': 'trackTypeSelect'
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}, trackTypes.map(function (_ref5) {
|
|
174
|
+
var name = _ref5.name;
|
|
175
|
+
return /*#__PURE__*/_react["default"].createElement(_core.MenuItem, {
|
|
176
|
+
key: name,
|
|
177
|
+
value: name
|
|
178
|
+
}, name);
|
|
179
|
+
}));
|
|
180
|
+
});
|
|
181
|
+
var TrackAssemblySelector = (0, _mobxReact.observer)(function (_ref6) {
|
|
182
|
+
var model = _ref6.model;
|
|
183
|
+
var session = (0, _util.getSession)(model);
|
|
184
|
+
var assembly = model.assembly;
|
|
185
|
+
return /*#__PURE__*/_react["default"].createElement(_core.TextField, {
|
|
186
|
+
value: assembly,
|
|
187
|
+
label: "assemblyName",
|
|
188
|
+
helperText: "Assembly to which the track will be added",
|
|
189
|
+
select: true,
|
|
190
|
+
fullWidth: true,
|
|
191
|
+
onChange: function onChange(event) {
|
|
192
|
+
return model.setAssembly(event.target.value);
|
|
193
|
+
},
|
|
194
|
+
SelectProps: {
|
|
195
|
+
// @ts-ignore
|
|
196
|
+
SelectDisplayProps: {
|
|
197
|
+
'data-testid': 'assemblyNameSelect'
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}, session.assemblies.map(function (conf) {
|
|
201
|
+
return (0, _configuration.readConfObject)(conf, 'name');
|
|
202
|
+
}).map(function (name) {
|
|
203
|
+
return /*#__PURE__*/_react["default"].createElement(_core.MenuItem, {
|
|
204
|
+
key: name,
|
|
205
|
+
value: name
|
|
206
|
+
}, name);
|
|
207
|
+
}));
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
function ConfirmTrack(_ref7) {
|
|
211
|
+
var model = _ref7.model;
|
|
212
|
+
var classes = useStyles();
|
|
213
|
+
var trackName = model.trackName,
|
|
214
|
+
trackAdapter = model.trackAdapter,
|
|
215
|
+
trackType = model.trackType,
|
|
216
|
+
warningMessage = model.warningMessage,
|
|
217
|
+
adapterHint = model.adapterHint;
|
|
218
|
+
|
|
219
|
+
if (model.unsupported) {
|
|
220
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
221
|
+
className: classes.spacing
|
|
222
|
+
}, "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, {
|
|
223
|
+
href: "https://github.com/GMOD/jbrowse-components/releases",
|
|
224
|
+
target: "_blank",
|
|
225
|
+
rel: "noopener noreferrer"
|
|
226
|
+
}, "check for new releases"), ' ', "of JBrowse or", ' ', /*#__PURE__*/_react["default"].createElement(_core.Link, {
|
|
227
|
+
href: "https://github.com/GMOD/jbrowse-components/issues/new",
|
|
228
|
+
target: "_blank",
|
|
229
|
+
rel: "noopener noreferrer"
|
|
230
|
+
}, "file an issue"), ' ', "and add a feature request for this data type.");
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
if ((trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type) === _tracks.UNKNOWN) {
|
|
234
|
+
return /*#__PURE__*/_react["default"].createElement(UnknownAdapterPrompt, {
|
|
235
|
+
model: model
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (adapterHint === '' && trackAdapter) {
|
|
240
|
+
model.setAdapterHint(trackAdapter.type);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (!(trackAdapter !== null && trackAdapter !== void 0 && trackAdapter.type)) {
|
|
244
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Typography, null, "Could not recognize this data type.");
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, trackAdapter ? /*#__PURE__*/_react["default"].createElement(StatusMessage, {
|
|
248
|
+
trackAdapter: trackAdapter,
|
|
249
|
+
trackType: trackType
|
|
250
|
+
}) : null, warningMessage ? /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
251
|
+
style: {
|
|
252
|
+
color: 'orange'
|
|
253
|
+
}
|
|
254
|
+
}, warningMessage) : null, /*#__PURE__*/_react["default"].createElement(_core.TextField, {
|
|
255
|
+
className: classes.spacing,
|
|
256
|
+
label: "trackName",
|
|
257
|
+
helperText: "A name for this track",
|
|
258
|
+
fullWidth: true,
|
|
259
|
+
value: trackName,
|
|
260
|
+
onChange: function onChange(event) {
|
|
261
|
+
return model.setTrackName(event.target.value);
|
|
262
|
+
},
|
|
263
|
+
inputProps: {
|
|
264
|
+
'data-testid': 'trackNameInput'
|
|
265
|
+
}
|
|
266
|
+
}), /*#__PURE__*/_react["default"].createElement(TrackAdapterSelector, {
|
|
267
|
+
model: model
|
|
268
|
+
}), /*#__PURE__*/_react["default"].createElement(TrackTypeSelector, {
|
|
269
|
+
model: model
|
|
270
|
+
}), /*#__PURE__*/_react["default"].createElement(TrackAssemblySelector, {
|
|
271
|
+
model: model
|
|
272
|
+
}));
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
var _default = (0, _mobxReact.observer)(ConfirmTrack);
|
|
276
|
+
|
|
277
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _ui = require("@jbrowse/core/ui");
|
|
13
|
+
|
|
14
|
+
var _core = require("@material-ui/core");
|
|
15
|
+
|
|
16
|
+
var _mobxStateTree = require("mobx-state-tree");
|
|
17
|
+
|
|
18
|
+
var _mobxReact = require("mobx-react");
|
|
19
|
+
|
|
20
|
+
var useStyles = (0, _core.makeStyles)(function (theme) {
|
|
21
|
+
return {
|
|
22
|
+
paper: {
|
|
23
|
+
display: 'flex',
|
|
24
|
+
flexDirection: 'column',
|
|
25
|
+
padding: theme.spacing(1)
|
|
26
|
+
},
|
|
27
|
+
spacer: {
|
|
28
|
+
height: theme.spacing(8)
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
function TrackSourceSelect(_ref) {
|
|
34
|
+
var model = _ref.model;
|
|
35
|
+
var classes = useStyles();
|
|
36
|
+
var rootModel = (0, _mobxStateTree.getRoot)(model);
|
|
37
|
+
return /*#__PURE__*/_react["default"].createElement(_core.Paper, {
|
|
38
|
+
className: classes.paper
|
|
39
|
+
}, /*#__PURE__*/_react["default"].createElement(_ui.FileSelector, {
|
|
40
|
+
name: "Main file",
|
|
41
|
+
description: "",
|
|
42
|
+
location: model.trackData,
|
|
43
|
+
setLocation: model.setTrackData,
|
|
44
|
+
setName: model.setTrackName,
|
|
45
|
+
rootModel: rootModel
|
|
46
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
47
|
+
className: classes.spacer
|
|
48
|
+
}), /*#__PURE__*/_react["default"].createElement(_ui.FileSelector, {
|
|
49
|
+
name: "Index file",
|
|
50
|
+
description: "(Optional) The URL of the index file is automatically inferred from the URL of the main file if it is not supplied.",
|
|
51
|
+
location: model.indexTrackData,
|
|
52
|
+
setLocation: model.setIndexTrackData,
|
|
53
|
+
setName: model.setTrackName,
|
|
54
|
+
rootModel: rootModel
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
var _default = (0, _mobxReact.observer)(TrackSourceSelect);
|
|
59
|
+
|
|
60
|
+
exports["default"] = _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.configSchema = void 0;
|
|
9
|
+
Object.defineProperty(exports, "stateModelFactory", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function get() {
|
|
12
|
+
return _model["default"];
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
var _configuration = require("@jbrowse/core/configuration");
|
|
17
|
+
|
|
18
|
+
var _model = _interopRequireDefault(require("./model"));
|
|
19
|
+
|
|
20
|
+
var configSchema = (0, _configuration.ConfigurationSchema)('AddTrackWidget', {});
|
|
21
|
+
exports.configSchema = configSchema;
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
6
|
+
|
|
7
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
8
|
+
|
|
9
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
10
|
+
|
|
11
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
12
|
+
|
|
13
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
14
|
+
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
|
+
|
|
17
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
18
|
+
|
|
19
|
+
var _react = _interopRequireDefault(require("react"));
|
|
20
|
+
|
|
21
|
+
var _mobxStateTree = require("mobx-state-tree");
|
|
22
|
+
|
|
23
|
+
var _PluginManager = _interopRequireDefault(require("@jbrowse/core/PluginManager"));
|
|
24
|
+
|
|
25
|
+
var _Plugin2 = _interopRequireDefault(require("@jbrowse/core/Plugin"));
|
|
26
|
+
|
|
27
|
+
var _ViewType = _interopRequireDefault(require("@jbrowse/core/pluggableElementTypes/ViewType"));
|
|
28
|
+
|
|
29
|
+
var _model = _interopRequireDefault(require("./model"));
|
|
30
|
+
|
|
31
|
+
var _pluginAlignments = _interopRequireDefault(require("@jbrowse/plugin-alignments"));
|
|
32
|
+
|
|
33
|
+
var _pluginSvg = _interopRequireDefault(require("@jbrowse/plugin-svg"));
|
|
34
|
+
|
|
35
|
+
var _pluginVariants = _interopRequireDefault(require("@jbrowse/plugin-variants"));
|
|
36
|
+
|
|
37
|
+
var _pluginHic = _interopRequireDefault(require("@jbrowse/plugin-hic"));
|
|
38
|
+
|
|
39
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
40
|
+
|
|
41
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
42
|
+
|
|
43
|
+
function standardInitializer() {
|
|
44
|
+
var pluginManager = new _PluginManager["default"]([new FakeViewPlugin(), new _pluginAlignments["default"](), new _pluginSvg["default"](), new _pluginVariants["default"](), new _pluginHic["default"]()]);
|
|
45
|
+
pluginManager.createPluggableElements();
|
|
46
|
+
pluginManager.configure();
|
|
47
|
+
|
|
48
|
+
var SessionModel = _mobxStateTree.types.model({
|
|
49
|
+
view: FakeViewModel,
|
|
50
|
+
widget: (0, _model["default"])(pluginManager)
|
|
51
|
+
})["volatile"](function () {
|
|
52
|
+
return {
|
|
53
|
+
rpcManager: {},
|
|
54
|
+
configuration: {}
|
|
55
|
+
};
|
|
56
|
+
}); // assemblyNames is defined on the view, which is done in LGV for example
|
|
57
|
+
// this is really just used for convenience to automatically fill in the
|
|
58
|
+
// assembly field in the form
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
return SessionModel.create({
|
|
62
|
+
view: {
|
|
63
|
+
id: 'testing',
|
|
64
|
+
type: 'FakeView',
|
|
65
|
+
assemblyNames: ['volvox']
|
|
66
|
+
},
|
|
67
|
+
widget: {
|
|
68
|
+
type: 'AddTrackWidget',
|
|
69
|
+
view: 'testing'
|
|
70
|
+
}
|
|
71
|
+
}, {
|
|
72
|
+
pluginManager: pluginManager
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
var realLocation = window.location; // https://stackoverflow.com/a/60110508/2129219
|
|
77
|
+
|
|
78
|
+
function setWindowLoc(loc) {
|
|
79
|
+
delete window.location;
|
|
80
|
+
window.location = new URL(loc);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
var FakeViewModel = _mobxStateTree.types.model('FakeView', {
|
|
84
|
+
id: _mobxStateTree.types.identifier,
|
|
85
|
+
type: _mobxStateTree.types.literal('FakeView'),
|
|
86
|
+
assemblyNames: _mobxStateTree.types.maybe(_mobxStateTree.types.array(_mobxStateTree.types.string))
|
|
87
|
+
}); // register a true fake view plugin because the widget.view is a true
|
|
88
|
+
// safeReference to a pluginManager.pluggableMstType('view', 'stateModel')
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
var FakeViewPlugin = /*#__PURE__*/function (_Plugin) {
|
|
92
|
+
(0, _inherits2["default"])(FakeViewPlugin, _Plugin);
|
|
93
|
+
|
|
94
|
+
var _super = _createSuper(FakeViewPlugin);
|
|
95
|
+
|
|
96
|
+
function FakeViewPlugin() {
|
|
97
|
+
var _this;
|
|
98
|
+
|
|
99
|
+
(0, _classCallCheck2["default"])(this, FakeViewPlugin);
|
|
100
|
+
|
|
101
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
102
|
+
args[_key] = arguments[_key];
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
106
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "name", 'FakeViewPlugin');
|
|
107
|
+
return _this;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
(0, _createClass2["default"])(FakeViewPlugin, [{
|
|
111
|
+
key: "install",
|
|
112
|
+
value: function install(pluginManager) {
|
|
113
|
+
pluginManager.addViewType(function () {
|
|
114
|
+
return new _ViewType["default"]({
|
|
115
|
+
name: 'FakeView',
|
|
116
|
+
stateModel: FakeViewModel,
|
|
117
|
+
ReactComponent: function ReactComponent() {
|
|
118
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, "Hello world");
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}]);
|
|
124
|
+
return FakeViewPlugin;
|
|
125
|
+
}(_Plugin2["default"]);
|
|
126
|
+
|
|
127
|
+
describe('tests on an LGV type system with view.assemblyNames, using URL', function () {
|
|
128
|
+
var session;
|
|
129
|
+
beforeEach(function () {
|
|
130
|
+
session = standardInitializer();
|
|
131
|
+
});
|
|
132
|
+
afterEach(function () {
|
|
133
|
+
window.location = realLocation;
|
|
134
|
+
});
|
|
135
|
+
it('adds relative URL (BAM)', function () {
|
|
136
|
+
var _session = session,
|
|
137
|
+
widget = _session.widget;
|
|
138
|
+
widget.setTrackData({
|
|
139
|
+
uri: 'volvox-sorted.bam',
|
|
140
|
+
locationType: 'UriLocation'
|
|
141
|
+
});
|
|
142
|
+
expect(widget.trackName).toBe('volvox-sorted.bam');
|
|
143
|
+
expect(widget.isFtp).toBe(false);
|
|
144
|
+
expect(widget.isRelativeUrl).toBe(true);
|
|
145
|
+
expect(widget.assembly).toBe('volvox');
|
|
146
|
+
expect(widget.trackType).toBe('AlignmentsTrack');
|
|
147
|
+
});
|
|
148
|
+
it('adds full URL (BAM)', function () {
|
|
149
|
+
var _session2 = session,
|
|
150
|
+
widget = _session2.widget;
|
|
151
|
+
widget.setTrackData({
|
|
152
|
+
uri: 'http://google.com/volvox-sorted.bam',
|
|
153
|
+
locationType: 'UriLocation'
|
|
154
|
+
});
|
|
155
|
+
expect(widget.trackName).toBe('volvox-sorted.bam');
|
|
156
|
+
expect(widget.isRelativeUrl).toBe(false);
|
|
157
|
+
expect(widget.assembly).toBe('volvox');
|
|
158
|
+
});
|
|
159
|
+
it('test wrongProtocol returning false', function () {
|
|
160
|
+
var _session3 = session,
|
|
161
|
+
widget = _session3.widget;
|
|
162
|
+
widget.setTrackData({
|
|
163
|
+
uri: 'http://google.com/volvox-sorted.bam',
|
|
164
|
+
locationType: 'UriLocation'
|
|
165
|
+
});
|
|
166
|
+
setWindowLoc('http://google.com');
|
|
167
|
+
expect(widget.wrongProtocol).toBe(false);
|
|
168
|
+
});
|
|
169
|
+
it('test wrongProtocol returning true', function () {
|
|
170
|
+
var _session4 = session,
|
|
171
|
+
widget = _session4.widget;
|
|
172
|
+
widget.setTrackData({
|
|
173
|
+
uri: 'http://google.com/volvox-sorted.bam',
|
|
174
|
+
locationType: 'UriLocation'
|
|
175
|
+
});
|
|
176
|
+
setWindowLoc('https://google.com');
|
|
177
|
+
expect(widget.wrongProtocol).toBe(true);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('tests on an view without view.assemblyNames', function () {
|
|
181
|
+
var session;
|
|
182
|
+
beforeEach(function () {
|
|
183
|
+
var pluginManager = new _PluginManager["default"]([new FakeViewPlugin()]);
|
|
184
|
+
pluginManager.createPluggableElements();
|
|
185
|
+
pluginManager.configure();
|
|
186
|
+
|
|
187
|
+
var SessionModel = _mobxStateTree.types.model({
|
|
188
|
+
view: FakeViewModel,
|
|
189
|
+
widget: (0, _model["default"])(pluginManager)
|
|
190
|
+
}); // no assemblyNames on the view, just in case some view does not implement
|
|
191
|
+
// view.assemblyNames (it is just a convenience)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
session = SessionModel.create({
|
|
195
|
+
view: {
|
|
196
|
+
type: 'FakeView',
|
|
197
|
+
id: 'testing'
|
|
198
|
+
},
|
|
199
|
+
widget: {
|
|
200
|
+
type: 'AddTrackWidget',
|
|
201
|
+
view: 'testing'
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
it('adds url', function () {
|
|
206
|
+
var _session5 = session,
|
|
207
|
+
widget = _session5.widget;
|
|
208
|
+
widget.setTrackData({
|
|
209
|
+
uri: 'volvox-sorted.bam',
|
|
210
|
+
locationType: 'UriLocation'
|
|
211
|
+
});
|
|
212
|
+
expect(widget.trackName).toBe('volvox-sorted.bam');
|
|
213
|
+
expect(widget.isRelativeUrl).toBe(true);
|
|
214
|
+
expect(widget.assembly).toBe(undefined);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
describe('tests different file types', function () {
|
|
218
|
+
var session;
|
|
219
|
+
beforeEach(function () {
|
|
220
|
+
session = standardInitializer();
|
|
221
|
+
});
|
|
222
|
+
afterEach(function () {
|
|
223
|
+
window.location = realLocation;
|
|
224
|
+
});
|
|
225
|
+
it('adds bam', function () {
|
|
226
|
+
var _session6 = session,
|
|
227
|
+
widget = _session6.widget;
|
|
228
|
+
widget.setTrackData({
|
|
229
|
+
uri: 'volvox-sorted.bam',
|
|
230
|
+
locationType: 'UriLocation'
|
|
231
|
+
});
|
|
232
|
+
expect(widget.trackType).toBe('AlignmentsTrack');
|
|
233
|
+
});
|
|
234
|
+
it('adds cram', function () {
|
|
235
|
+
var _session7 = session,
|
|
236
|
+
widget = _session7.widget;
|
|
237
|
+
widget.setTrackData({
|
|
238
|
+
uri: 'volvox-sorted.cram',
|
|
239
|
+
locationType: 'UriLocation'
|
|
240
|
+
});
|
|
241
|
+
expect(widget.trackType).toBe('AlignmentsTrack');
|
|
242
|
+
});
|
|
243
|
+
it('adds .vcf.gz', function () {
|
|
244
|
+
var _session8 = session,
|
|
245
|
+
widget = _session8.widget;
|
|
246
|
+
widget.setTrackData({
|
|
247
|
+
uri: 'volvox-sorted.vcf.gz',
|
|
248
|
+
locationType: 'UriLocation'
|
|
249
|
+
});
|
|
250
|
+
expect(widget.trackType).toBe('VariantTrack');
|
|
251
|
+
});
|
|
252
|
+
it('adds .gff3', function () {
|
|
253
|
+
var _session9 = session,
|
|
254
|
+
widget = _session9.widget;
|
|
255
|
+
widget.setTrackData({
|
|
256
|
+
uri: 'volvox-sorted.gff3',
|
|
257
|
+
locationType: 'UriLocation'
|
|
258
|
+
});
|
|
259
|
+
expect(widget.trackType).toBe('FeatureTrack');
|
|
260
|
+
});
|
|
261
|
+
it('adds .hic', function () {
|
|
262
|
+
var _session10 = session,
|
|
263
|
+
widget = _session10.widget;
|
|
264
|
+
widget.setTrackData({
|
|
265
|
+
uri: 'volvox-sorted.hic',
|
|
266
|
+
locationType: 'UriLocation'
|
|
267
|
+
});
|
|
268
|
+
expect(widget.trackType).toBe('HicTrack');
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
describe('tests localpath', function () {
|
|
272
|
+
var session;
|
|
273
|
+
beforeEach(function () {
|
|
274
|
+
session = standardInitializer();
|
|
275
|
+
});
|
|
276
|
+
it('adds bam', function () {
|
|
277
|
+
var _session11 = session,
|
|
278
|
+
widget = _session11.widget;
|
|
279
|
+
widget.setTrackData({
|
|
280
|
+
localPath: 'volvox-sorted.bam',
|
|
281
|
+
locationType: 'LocalPathLocation'
|
|
282
|
+
});
|
|
283
|
+
expect(widget.trackType).toBe('AlignmentsTrack');
|
|
284
|
+
expect(widget.trackName).toBe('volvox-sorted.bam'); // the localPath is not a "relativeUrl"
|
|
285
|
+
|
|
286
|
+
expect(widget.isRelativeUrl).toBe(false);
|
|
287
|
+
expect(widget.isFtp).toBe(false);
|
|
288
|
+
expect(widget.wrongProtocol).toBe(false);
|
|
289
|
+
expect(widget.assembly).toBe('volvox');
|
|
290
|
+
});
|
|
291
|
+
});
|