@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.
Files changed (66) hide show
  1. package/dist/AddConnectionWidget/components/AddConnectionWidget.js +178 -0
  2. package/dist/AddConnectionWidget/components/AddConnectionWidget.test.js +270 -0
  3. package/dist/AddConnectionWidget/components/ConfigureConnection.js +35 -0
  4. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +70 -0
  5. package/dist/AddConnectionWidget/index.js +21 -0
  6. package/dist/AddConnectionWidget/model.js +17 -0
  7. package/dist/AddTrackWidget/components/AddTrackWidget.js +215 -0
  8. package/dist/AddTrackWidget/components/AddTrackWidget.test.js +218 -0
  9. package/dist/AddTrackWidget/components/ConfirmTrack.js +277 -0
  10. package/dist/AddTrackWidget/components/TrackSourceSelect.js +60 -0
  11. package/dist/AddTrackWidget/index.js +21 -0
  12. package/dist/AddTrackWidget/index.test.js +291 -0
  13. package/dist/AddTrackWidget/model.js +167 -0
  14. package/dist/AssemblyManager/AssemblyAddForm.js +299 -0
  15. package/dist/AssemblyManager/AssemblyEditor.js +25 -0
  16. package/dist/AssemblyManager/AssemblyManager.js +144 -0
  17. package/dist/AssemblyManager/AssemblyManager.test.js +113 -0
  18. package/dist/AssemblyManager/AssemblyTable.js +92 -0
  19. package/dist/AssemblyManager/index.js +15 -0
  20. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +55 -0
  21. package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +46 -0
  22. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +648 -0
  23. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +191 -0
  24. package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +80 -0
  25. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +98 -0
  26. package/dist/HierarchicalTrackSelectorWidget/index.js +21 -0
  27. package/dist/HierarchicalTrackSelectorWidget/model.js +306 -0
  28. package/dist/HierarchicalTrackSelectorWidget/model.test.js +28 -0
  29. package/dist/PluginStoreWidget/components/CustomPluginForm.js +217 -0
  30. package/dist/PluginStoreWidget/components/InstalledPlugin.js +138 -0
  31. package/dist/PluginStoreWidget/components/InstalledPluginsList.js +47 -0
  32. package/dist/PluginStoreWidget/components/PluginCard.js +121 -0
  33. package/dist/PluginStoreWidget/components/PluginStoreWidget.js +240 -0
  34. package/dist/PluginStoreWidget/components/PluginStoreWidget.test.js +201 -0
  35. package/dist/PluginStoreWidget/index.js +29 -0
  36. package/dist/PluginStoreWidget/model.js +28 -0
  37. package/dist/PluginStoreWidget/model.test.js +17 -0
  38. package/dist/SetDefaultSession/SetDefaultSession.js +64 -0
  39. package/dist/SetDefaultSession/SetDefaultSession.test.js +75 -0
  40. package/dist/SetDefaultSession/index.js +15 -0
  41. package/dist/index.js +159 -6
  42. package/dist/index.test.js +56 -0
  43. package/dist/plugin-data-management.cjs.development.js +29 -23
  44. package/dist/plugin-data-management.cjs.development.js.map +1 -1
  45. package/dist/plugin-data-management.cjs.production.min.js +1 -1
  46. package/dist/plugin-data-management.cjs.production.min.js.map +1 -1
  47. package/dist/plugin-data-management.esm.js +29 -23
  48. package/dist/plugin-data-management.esm.js.map +1 -1
  49. package/dist/ucsc-trackhub/configSchema.js +30 -0
  50. package/dist/ucsc-trackhub/index.js +23 -0
  51. package/dist/ucsc-trackhub/model.js +130 -0
  52. package/dist/ucsc-trackhub/ucscAssemblies.js +13 -0
  53. package/dist/ucsc-trackhub/ucscTrackHub.js +503 -0
  54. package/package.json +3 -6
  55. package/src/AddConnectionWidget/components/AddConnectionWidget.test.js +1 -0
  56. package/src/AddTrackWidget/components/AddTrackWidget.test.js +1 -0
  57. package/src/AddTrackWidget/components/AddTrackWidget.tsx +1 -1
  58. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +94 -89
  59. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +1 -0
  60. package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.js.snap +2 -2
  61. package/src/PluginStoreWidget/components/CustomPluginForm.tsx +1 -1
  62. package/src/PluginStoreWidget/components/InstalledPlugin.tsx +4 -2
  63. package/src/PluginStoreWidget/components/PluginCard.tsx +4 -2
  64. package/src/PluginStoreWidget/components/PluginStoreWidget.test.js +1 -0
  65. package/src/PluginStoreWidget/model.test.js +1 -0
  66. 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
+ });