@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.
- package/dist/AddConnectionWidget/components/AddConnectionWidget.test.js +25 -16
- package/dist/AddConnectionWidget/model.d.ts +1 -1
- package/dist/AddTrackWidget/index.test.js +1 -0
- package/dist/AddTrackWidget/model.js +1 -1
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.d.ts +7 -1
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +2 -5
- package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.d.ts +1 -1
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +9 -5
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +67 -51
- package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.d.ts +2 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.d.ts +2 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +10 -11
- package/dist/HierarchicalTrackSelectorWidget/index.d.ts +2 -2
- package/dist/HierarchicalTrackSelectorWidget/model.d.ts +38 -16
- package/dist/HierarchicalTrackSelectorWidget/model.js +89 -97
- package/dist/ucsc-trackhub/configSchema.d.ts +1 -1
- package/dist/ucsc-trackhub/ucscAssemblies.d.ts +1 -1
- package/package.json +2 -2
- package/src/AddConnectionWidget/components/AddConnectionWidget.test.js +2 -1
- package/src/AddTrackWidget/index.test.jsx +1 -0
- package/src/AddTrackWidget/model.ts +1 -1
- package/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx +7 -11
- package/src/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.tsx +1 -1
- package/src/HierarchicalTrackSelectorWidget/components/{HierarchicalTrackSelector.js → HierarchicalTrackSelector.tsx} +247 -135
- package/src/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.tsx +5 -2
- package/src/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.tsx +24 -26
- package/src/HierarchicalTrackSelectorWidget/{index.js → index.ts} +0 -0
- 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 =
|
|
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
|
-
|
|
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
|
|
39
|
-
var categories = (0, _configuration.readConfObject)(config, 'category') || [];
|
|
38
|
+
var categories = (0, _configuration.readConfObject)(config, 'category');
|
|
40
39
|
var filterLower = filter.toLowerCase();
|
|
41
|
-
return
|
|
42
|
-
return
|
|
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 (
|
|
61
|
-
return passesFilter(filterText,
|
|
62
|
-
}).forEach(function (
|
|
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)(
|
|
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 (
|
|
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
|
-
}
|
|
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:
|
|
104
|
-
name: getTrackName(
|
|
105
|
-
conf:
|
|
106
|
-
checked: !!
|
|
107
|
-
return f.configuration ===
|
|
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
|
-
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
try {
|
|
152
|
-
var _loop2 = function _loop2() {
|
|
153
|
-
var display = _step.value;
|
|
147
|
+
if (!trackConf) {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
154
150
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
})) {
|
|
158
|
-
return {
|
|
159
|
-
v: trackConf
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
};
|
|
151
|
+
var _iterator = _createForOfIteratorHelper(trackConf.displays),
|
|
152
|
+
_step;
|
|
163
153
|
|
|
164
|
-
|
|
165
|
-
|
|
154
|
+
try {
|
|
155
|
+
var _loop2 = function _loop2() {
|
|
156
|
+
var display = _step.value;
|
|
166
157
|
|
|
167
|
-
|
|
158
|
+
if (viewType.displayTypes.find(function (d) {
|
|
159
|
+
return d.name === display.type;
|
|
160
|
+
})) {
|
|
161
|
+
return {
|
|
162
|
+
v: trackConf
|
|
163
|
+
};
|
|
168
164
|
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
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
|
|
184
|
-
|
|
185
|
-
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)(
|
|
196
|
-
var trackConfAssemblies = (0, _configuration.readConfObject)(
|
|
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 (
|
|
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 (
|
|
204
|
-
return
|
|
207
|
+
var compatibleDisplays = displayTypes.map(function (d) {
|
|
208
|
+
return d.name;
|
|
205
209
|
});
|
|
206
|
-
var trackDisplays =
|
|
207
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
224
|
-
var
|
|
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 (
|
|
233
|
-
var trackConfAssemblies = (0, _configuration.readConfObject)(
|
|
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 (
|
|
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 (
|
|
241
|
-
return
|
|
248
|
+
var compatibleDisplays = displayTypes.map(function (d) {
|
|
249
|
+
return d.name;
|
|
242
250
|
});
|
|
243
|
-
var trackDisplays =
|
|
244
|
-
return
|
|
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(
|
|
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
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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 =
|
|
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(
|
|
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
|
|
1
|
+
declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
|
|
2
2
|
export default _default;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare
|
|
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.
|
|
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": "
|
|
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
|
})
|
|
@@ -15,8 +15,11 @@ function CloseConnectionDialog({
|
|
|
15
15
|
modalInfo = {},
|
|
16
16
|
setModalInfo,
|
|
17
17
|
}: {
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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:
|
|
21
|
+
handleClose: () => void
|
|
22
22
|
}) {
|
|
23
23
|
const { connectionConf, name } = deleteDialogDetails
|
|
24
24
|
return (
|