@jbrowse/plugin-data-management 1.7.8 → 1.7.11

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 (28) hide show
  1. package/dist/AddConnectionWidget/components/AddConnectionWidget.test.js +25 -16
  2. package/dist/AddConnectionWidget/model.d.ts +1 -1
  3. package/dist/AddTrackWidget/index.test.js +1 -0
  4. package/dist/AddTrackWidget/model.js +1 -1
  5. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.d.ts +7 -1
  6. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +2 -5
  7. package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.d.ts +1 -1
  8. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +9 -5
  9. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +67 -51
  10. package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.d.ts +2 -1
  11. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.d.ts +2 -1
  12. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +10 -11
  13. package/dist/HierarchicalTrackSelectorWidget/index.d.ts +2 -2
  14. package/dist/HierarchicalTrackSelectorWidget/model.d.ts +38 -16
  15. package/dist/HierarchicalTrackSelectorWidget/model.js +89 -97
  16. package/dist/ucsc-trackhub/configSchema.d.ts +1 -1
  17. package/dist/ucsc-trackhub/ucscAssemblies.d.ts +1 -1
  18. package/package.json +2 -2
  19. package/src/AddConnectionWidget/components/AddConnectionWidget.test.js +2 -1
  20. package/src/AddTrackWidget/index.test.jsx +1 -0
  21. package/src/AddTrackWidget/model.ts +1 -1
  22. package/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx +7 -11
  23. package/src/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.tsx +1 -1
  24. package/src/HierarchicalTrackSelectorWidget/components/{HierarchicalTrackSelector.js → HierarchicalTrackSelector.tsx} +247 -135
  25. package/src/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.tsx +5 -2
  26. package/src/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.tsx +24 -26
  27. package/src/HierarchicalTrackSelectorWidget/{index.js → index.ts} +0 -0
  28. package/src/HierarchicalTrackSelectorWidget/{model.js → model.ts} +113 -105
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.default = stateTreeFactory;
9
9
  exports.generateHierarchy = generateHierarchy;
10
10
 
11
11
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
@@ -26,21 +26,20 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
26
26
 
27
27
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
28
28
 
29
- var hasAnyOverlap = function hasAnyOverlap() {
29
+ function hasAnyOverlap() {
30
30
  var a1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
31
31
  var a2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
32
32
  return !!a1.find(function (value) {
33
33
  return a2.includes(value);
34
34
  });
35
- };
35
+ }
36
36
 
37
37
  function passesFilter(filter, config) {
38
- var name = getTrackName(config);
39
- var categories = (0, _configuration.readConfObject)(config, 'category') || [];
38
+ var categories = (0, _configuration.readConfObject)(config, 'category');
40
39
  var filterLower = filter.toLowerCase();
41
- return !!name.toLowerCase().includes(filterLower) || categories.filter(function (cat) {
42
- return !!cat.toLowerCase().includes(filterLower);
43
- }).length;
40
+ return getTrackName(config).toLowerCase().includes(filterLower) || (categories === null || categories === void 0 ? void 0 : categories.filter(function (c) {
41
+ return c.toLowerCase().includes(filterLower);
42
+ }).length);
44
43
  }
45
44
 
46
45
  function getTrackName(config) {
@@ -57,15 +56,15 @@ function generateHierarchy(model, trackConfigurations, collapsed) {
57
56
  };
58
57
  var filterText = model.filterText,
59
58
  view = model.view;
60
- trackConfigurations.filter(function (trackConf) {
61
- return passesFilter(filterText, trackConf);
62
- }).forEach(function (trackConf) {
59
+ trackConfigurations.filter(function (conf) {
60
+ return passesFilter(filterText, conf);
61
+ }).forEach(function (conf) {
63
62
  // copy the categories since this array can be mutated downstream
64
- var categories = (0, _toConsumableArray2.default)((0, _configuration.readConfObject)(trackConf, 'category') || []); // silly thing where if trackId ends with sessionTrack, then push it to
63
+ var categories = (0, _toConsumableArray2.default)((0, _configuration.readConfObject)(conf, 'category') || []); // silly thing where if trackId ends with sessionTrack, then push it to
65
64
  // a category that starts with a space to force sort to the top...
66
65
  // double whammy hackyness
67
66
 
68
- if (trackConf.trackId.endsWith('sessionTrack')) {
67
+ if (conf.trackId.endsWith('sessionTrack')) {
69
68
  categories.unshift(' Session tracks');
70
69
  }
71
70
 
@@ -94,17 +93,18 @@ function generateHierarchy(model, trackConfigurations, collapsed) {
94
93
 
95
94
  for (var i = 0; i < categories.length; i++) {
96
95
  _loop(i);
97
- } // using splice here tries to group leaf nodes above hierarchical nodes
96
+ }
98
97
 
98
+ var tracks = view.tracks; // using splice here tries to group leaf nodes above hierarchical nodes
99
99
 
100
100
  currLevel.children.splice(currLevel.children.findIndex(function (elt) {
101
101
  return elt.children.length;
102
102
  }), 0, {
103
- id: trackConf.trackId,
104
- name: getTrackName(trackConf),
105
- conf: trackConf,
106
- checked: !!view.tracks.find(function (f) {
107
- return f.configuration === trackConf;
103
+ id: conf.trackId,
104
+ name: getTrackName(conf),
105
+ conf: conf,
106
+ checked: !!tracks.find(function (f) {
107
+ return f.configuration === conf;
108
108
  }),
109
109
  children: []
110
110
  });
@@ -112,7 +112,7 @@ function generateHierarchy(model, trackConfigurations, collapsed) {
112
112
  return hierarchy.children;
113
113
  }
114
114
 
115
- var _default = function _default(pluginManager) {
115
+ function stateTreeFactory(pluginManager) {
116
116
  return _mobxStateTree.types.model('HierarchicalTrackSelectorWidget', {
117
117
  id: _mst.ElementId,
118
118
  type: _mobxStateTree.types.literal('HierarchicalTrackSelectorWidget'),
@@ -144,45 +144,49 @@ var _default = function _default(pluginManager) {
144
144
  var trackConf = assembly === null || assembly === void 0 ? void 0 : assembly.configuration.sequence;
145
145
  var viewType = pluginManager.getViewType(self.view.type);
146
146
 
147
- if (trackConf) {
148
- var _iterator = _createForOfIteratorHelper(trackConf.displays),
149
- _step;
150
-
151
- try {
152
- var _loop2 = function _loop2() {
153
- var display = _step.value;
147
+ if (!trackConf) {
148
+ return undefined;
149
+ }
154
150
 
155
- if (viewType.displayTypes.find(function (displayType) {
156
- return displayType.name === display.type;
157
- })) {
158
- return {
159
- v: trackConf
160
- };
161
- }
162
- };
151
+ var _iterator = _createForOfIteratorHelper(trackConf.displays),
152
+ _step;
163
153
 
164
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
165
- var _ret = _loop2();
154
+ try {
155
+ var _loop2 = function _loop2() {
156
+ var display = _step.value;
166
157
 
167
- if ((0, _typeof2.default)(_ret) === "object") return _ret.v;
158
+ if (viewType.displayTypes.find(function (d) {
159
+ return d.name === display.type;
160
+ })) {
161
+ return {
162
+ v: trackConf
163
+ };
168
164
  }
169
- } catch (err) {
170
- _iterator.e(err);
171
- } finally {
172
- _iterator.f();
165
+ };
166
+
167
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
168
+ var _ret = _loop2();
169
+
170
+ if ((0, _typeof2.default)(_ret) === "object") return _ret.v;
173
171
  }
172
+ } catch (err) {
173
+ _iterator.e(err);
174
+ } finally {
175
+ _iterator.f();
174
176
  }
175
-
176
- return undefined;
177
- },
177
+ }
178
+ };
179
+ }).views(function (self) {
180
+ return {
178
181
  trackConfigurations: function trackConfigurations(assemblyName) {
179
182
  if (!self.view) {
180
183
  return [];
181
184
  }
182
185
 
183
- var session = (0, _util.getSession)(self);
184
- var trackConfigurations = session.tracks,
185
- assemblyManager = session.assemblyManager;
186
+ var _getSession2 = (0, _util.getSession)(self),
187
+ tracks = _getSession2.tracks,
188
+ assemblyManager = _getSession2.assemblyManager;
189
+
186
190
  var assembly = assemblyManager.get(assemblyName);
187
191
 
188
192
  if (!assembly) {
@@ -192,26 +196,28 @@ var _default = function _default(pluginManager) {
192
196
  var refseq = self.getRefSeqTrackConf(assemblyName); // filter out tracks that don't match the current assembly (check all
193
197
  // assembly aliases) and display types
194
198
 
195
- return (refseq ? [refseq] : []).concat((0, _toConsumableArray2.default)(trackConfigurations.filter(function (conf) {
196
- var trackConfAssemblies = (0, _configuration.readConfObject)(conf, 'assemblyNames');
199
+ return (refseq ? [refseq] : []).concat((0, _toConsumableArray2.default)(tracks.filter(function (c) {
200
+ var trackConfAssemblies = (0, _configuration.readConfObject)(c, 'assemblyNames');
197
201
  var allAliases = assembly.allAliases;
198
202
  return hasAnyOverlap(allAliases, trackConfAssemblies);
199
- }).filter(function (conf) {
203
+ }).filter(function (c) {
200
204
  var _pluginManager$getVie = pluginManager.getViewType(self.view.type),
201
205
  displayTypes = _pluginManager$getVie.displayTypes;
202
206
 
203
- var compatibleDisplays = displayTypes.map(function (display) {
204
- return display.name;
207
+ var compatibleDisplays = displayTypes.map(function (d) {
208
+ return d.name;
205
209
  });
206
- var trackDisplays = conf.displays.map(function (display) {
207
- return display.type;
210
+ var trackDisplays = c.displays.map(function (d) {
211
+ return d.type;
208
212
  });
209
213
  return hasAnyOverlap(compatibleDisplays, trackDisplays);
210
214
  })));
211
215
  },
212
216
 
213
217
  get assemblyNames() {
214
- return self.view ? self.view.assemblyNames : [];
218
+ var _self$view;
219
+
220
+ return ((_self$view = self.view) === null || _self$view === void 0 ? void 0 : _self$view.assemblyNames) || [];
215
221
  },
216
222
 
217
223
  connectionTrackConfigurations: function connectionTrackConfigurations(assemblyName, connection) {
@@ -220,8 +226,10 @@ var _default = function _default(pluginManager) {
220
226
  }
221
227
 
222
228
  var trackConfigurations = connection.tracks;
223
- var session = (0, _util.getSession)(self);
224
- var assemblyManager = session.assemblyManager;
229
+
230
+ var _getSession3 = (0, _util.getSession)(self),
231
+ assemblyManager = _getSession3.assemblyManager;
232
+
225
233
  var assembly = assemblyManager.get(assemblyName);
226
234
 
227
235
  if (!(assembly && assembly.initialized)) {
@@ -229,38 +237,39 @@ var _default = function _default(pluginManager) {
229
237
  } // filter out tracks that don't match the current display types
230
238
 
231
239
 
232
- return trackConfigurations.filter(function (conf) {
233
- var trackConfAssemblies = (0, _configuration.readConfObject)(conf, 'assemblyNames');
240
+ return trackConfigurations.filter(function (c) {
241
+ var trackConfAssemblies = (0, _configuration.readConfObject)(c, 'assemblyNames');
234
242
  var allAliases = assembly.allAliases;
235
243
  return hasAnyOverlap(allAliases, trackConfAssemblies);
236
- }).filter(function (conf) {
244
+ }).filter(function (c) {
237
245
  var _pluginManager$getVie2 = pluginManager.getViewType(self.view.type),
238
246
  displayTypes = _pluginManager$getVie2.displayTypes;
239
247
 
240
- var compatibleDisplays = displayTypes.map(function (display) {
241
- return display.name;
248
+ var compatibleDisplays = displayTypes.map(function (d) {
249
+ return d.name;
242
250
  });
243
- var trackDisplays = conf.displays.map(function (display) {
244
- return display.type;
251
+ var trackDisplays = c.displays.map(function (d) {
252
+ return d.type;
245
253
  });
246
254
  return hasAnyOverlap(compatibleDisplays, trackDisplays);
247
255
  });
248
- },
256
+ }
257
+ };
258
+ }).views(function (self) {
259
+ return {
249
260
  hierarchy: function hierarchy(assemblyName) {
250
261
  var _this = this;
251
262
 
252
- var hier = generateHierarchy(self, self.trackConfigurations(assemblyName), self.collapsed);
263
+ var hier = generateHierarchy( // eslint-disable-next-line @typescript-eslint/no-explicit-any
264
+ self, self.trackConfigurations(assemblyName), self.collapsed);
253
265
  var session = (0, _util.getSession)(self);
254
- var conns = session.connectionInstances.filter(function (conn) {
255
- var configAssemblyNames = (0, _configuration.readConfObject)(conn.configuration, 'assemblyNames');
256
-
257
- if (configAssemblyNames.length === 0) {
258
- return true;
259
- }
260
-
261
- return configAssemblyNames.includes(assemblyName);
266
+ var connections = session.connections,
267
+ connectionInstances = session.connectionInstances;
268
+ var conns = (connectionInstances === null || connectionInstances === void 0 ? void 0 : connectionInstances.filter(function (c) {
269
+ var names = (0, _configuration.getConf)(c, 'assemblyNames');
270
+ return names.length === 0 ? true : names.includes(assemblyName);
262
271
  }).map(function (conn, index) {
263
- var c = session.connections[index];
272
+ var c = connections[index];
264
273
  return {
265
274
  id: c.connectionId,
266
275
  name: (0, _configuration.readConfObject)(c, 'name'),
@@ -269,7 +278,7 @@ var _default = function _default(pluginManager) {
269
278
  expanded: true
270
279
  }
271
280
  };
272
- });
281
+ })) || [];
273
282
  return {
274
283
  name: 'Root',
275
284
  id: 'Root',
@@ -281,26 +290,9 @@ var _default = function _default(pluginManager) {
281
290
  };
282
291
  },
283
292
  connectionHierarchy: function connectionHierarchy(assemblyName, connection) {
284
- return generateHierarchy(self, self.connectionTrackConfigurations(assemblyName, connection), self.collapsed);
285
- },
286
- // This recursively gets tracks from lower paths
287
- allTracksInCategoryPath: function allTracksInCategoryPath(path, connection, assemblyName) {
288
- var currentHier = connection ? self.connectionHierarchy(connection) : self.hierarchy(assemblyName);
289
- path.forEach(function (pathItem) {
290
- currentHier = currentHier.get(pathItem) || new Map();
291
- });
292
- var tracks = {};
293
- currentHier.forEach(function (contents, name) {
294
- if (contents.trackId) {
295
- tracks[contents.trackId] = contents;
296
- } else {
297
- tracks = Object.assign(tracks, self.allTracksInCategoryPath(path.concat([name])));
298
- }
299
- });
300
- return tracks;
293
+ return generateHierarchy( // eslint-disable-next-line @typescript-eslint/no-explicit-any
294
+ self, self.connectionTrackConfigurations(assemblyName, connection), self.collapsed);
301
295
  }
302
296
  };
303
297
  });
304
- };
305
-
306
- exports.default = _default;
298
+ }
@@ -1,2 +1,2 @@
1
- declare var _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
1
+ declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare var _default: string[];
1
+ declare const _default: string[];
2
2
  export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-data-management",
3
- "version": "1.7.8",
3
+ "version": "1.7.11",
4
4
  "description": "JBrowse 2 linear genome view",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -54,5 +54,5 @@
54
54
  "publishConfig": {
55
55
  "access": "public"
56
56
  },
57
- "gitHead": "b429fa2bb5734fc8a5380988f6dfdd3f7a41a39f"
57
+ "gitHead": "5c21beb48a21f08b0091d293f09ac99174c48f77"
58
58
  }
@@ -104,8 +104,8 @@ type bigWig
104
104
  const {
105
105
  findByTestId,
106
106
  getAllByRole,
107
- findByPlaceholderText,
108
107
  findByText,
108
+ findByPlaceholderText,
109
109
  findByDisplayValue,
110
110
  } = render(<AddConnectionWidget model={model} />)
111
111
  expect(session.connections.length).toBe(0)
@@ -121,6 +121,7 @@ type bigWig
121
121
  target: { value: 'http://test.com/jbrowse/data/' },
122
122
  },
123
123
  )
124
+ fireEvent.click(await findByText('Add item'))
124
125
  fireEvent.change(await findByPlaceholderText('add new'), {
125
126
  target: { value: 'volMyt1' },
126
127
  })
@@ -89,6 +89,7 @@ describe('tests on an LGV type system with view.assemblyNames, using URL', () =>
89
89
  })
90
90
 
91
91
  it('adds relative URL (BAM)', () => {
92
+ console.warn = jest.fn()
92
93
  const { widget } = session
93
94
  widget.setTrackData({
94
95
  uri: 'volvox-sorted.bam',
@@ -82,7 +82,7 @@ export default function f(pluginManager: PluginManager) {
82
82
  self.indexTrackData = undefined
83
83
  self.trackData = undefined
84
84
  self.textIndexingConf = undefined
85
- self.textIndexTrack = false
85
+ self.textIndexTrack = true
86
86
  },
87
87
  }))
88
88
  .views(self => ({
@@ -15,8 +15,11 @@ function CloseConnectionDialog({
15
15
  modalInfo = {},
16
16
  setModalInfo,
17
17
  }: {
18
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
- modalInfo: any
18
+ modalInfo?: {
19
+ name?: string
20
+ dereferenceTypeCount?: { [key: string]: number }
21
+ safelyBreakConnection?: Function
22
+ }
20
23
  setModalInfo: Function
21
24
  }) {
22
25
  const { name, dereferenceTypeCount, safelyBreakConnection } = modalInfo
@@ -41,12 +44,7 @@ function CloseConnectionDialog({
41
44
  </DialogContentText>
42
45
  </DialogContent>
43
46
  <DialogActions>
44
- <Button
45
- onClick={() => {
46
- setModalInfo()
47
- }}
48
- color="primary"
49
- >
47
+ <Button onClick={() => setModalInfo()} color="primary">
50
48
  Cancel
51
49
  </Button>
52
50
  <Button
@@ -54,9 +52,7 @@ function CloseConnectionDialog({
54
52
  onClick={
55
53
  modalInfo
56
54
  ? () => {
57
- if (safelyBreakConnection) {
58
- safelyBreakConnection()
59
- }
55
+ safelyBreakConnection?.()
60
56
  setModalInfo()
61
57
  }
62
58
  : () => {}
@@ -18,7 +18,7 @@ function DeleteConnectionDialog({
18
18
  }: {
19
19
  deleteDialogDetails: { name: string; connectionConf: AnyConfigurationModel }
20
20
  session: AbstractSessionModel
21
- handleClose: Function
21
+ handleClose: () => void
22
22
  }) {
23
23
  const { connectionConf, name } = deleteDialogDetails
24
24
  return (