@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,648 @@
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 _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
+ var _react = _interopRequireWildcard(require("react"));
19
+
20
+ var _core = require("@material-ui/core");
21
+
22
+ var _Clear = _interopRequireDefault(require("@material-ui/icons/Clear"));
23
+
24
+ var _Add = _interopRequireDefault(require("@material-ui/icons/Add"));
25
+
26
+ var _ArrowDropDown = _interopRequireDefault(require("@material-ui/icons/ArrowDropDown"));
27
+
28
+ var _ArrowRight = _interopRequireDefault(require("@material-ui/icons/ArrowRight"));
29
+
30
+ var _Menu = _interopRequireDefault(require("@material-ui/icons/Menu"));
31
+
32
+ var _MoreHoriz = _interopRequireDefault(require("@material-ui/icons/MoreHoriz"));
33
+
34
+ var _Icons = require("@jbrowse/core/ui/Icons");
35
+
36
+ var _reactVirtualizedAutoSizer = _interopRequireDefault(require("react-virtualized-auto-sizer"));
37
+
38
+ var _Menu2 = _interopRequireDefault(require("@jbrowse/core/ui/Menu"));
39
+
40
+ var _util = require("@jbrowse/core/util");
41
+
42
+ var _configuration = require("@jbrowse/core/configuration");
43
+
44
+ var _mobxReact = require("mobx-react");
45
+
46
+ var _reactVtree = require("react-vtree");
47
+
48
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
49
+
50
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
51
+
52
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
53
+
54
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2["default"])(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
55
+
56
+ var CloseConnectionDialog = /*#__PURE__*/(0, _react.lazy)(function () {
57
+ return Promise.resolve().then(function () {
58
+ return _interopRequireWildcard(require('./CloseConnectionDialog'));
59
+ });
60
+ });
61
+ var DeleteConnectionDialog = /*#__PURE__*/(0, _react.lazy)(function () {
62
+ return Promise.resolve().then(function () {
63
+ return _interopRequireWildcard(require('./DeleteConnectionDialog'));
64
+ });
65
+ });
66
+ var ManageConnectionsDialog = /*#__PURE__*/(0, _react.lazy)(function () {
67
+ return Promise.resolve().then(function () {
68
+ return _interopRequireWildcard(require('./ManageConnectionsDialog'));
69
+ });
70
+ });
71
+ var ToggleConnectionsDialog = /*#__PURE__*/(0, _react.lazy)(function () {
72
+ return Promise.resolve().then(function () {
73
+ return _interopRequireWildcard(require('./ToggleConnectionsDialog'));
74
+ });
75
+ });
76
+ var useStyles = (0, _core.makeStyles)(function (theme) {
77
+ var _theme$palette$tertia, _theme$palette$tertia2;
78
+
79
+ return {
80
+ searchBox: {
81
+ margin: theme.spacing(2)
82
+ },
83
+ menuIcon: {
84
+ marginRight: theme.spacing(1),
85
+ marginBottom: 0
86
+ },
87
+ fab: {
88
+ position: 'absolute',
89
+ bottom: theme.spacing(6),
90
+ right: theme.spacing(6)
91
+ },
92
+ compactCheckbox: {
93
+ padding: 0
94
+ },
95
+ checkboxLabel: {
96
+ marginRight: 0,
97
+ '&:hover': {
98
+ backgroundColor: '#eee'
99
+ }
100
+ },
101
+ // this accordionBase element's small padding is used to give a margin to
102
+ // accordionColor it a "margin" because the virtualized elements can't really
103
+ // use margin in a conventional way (it doesn't affect layout)
104
+ accordionBase: {
105
+ display: 'flex'
106
+ },
107
+ accordionCard: {
108
+ padding: 3,
109
+ cursor: 'pointer',
110
+ display: 'flex'
111
+ },
112
+ nestingLevelMarker: {
113
+ position: 'absolute',
114
+ borderLeft: '1.5px solid #555'
115
+ },
116
+ // accordionColor set's display:flex so that the child accordionText use
117
+ // vertically centered text
118
+ accordionColor: {
119
+ background: (_theme$palette$tertia = theme.palette.tertiary) === null || _theme$palette$tertia === void 0 ? void 0 : _theme$palette$tertia.main,
120
+ color: (_theme$palette$tertia2 = theme.palette.tertiary) === null || _theme$palette$tertia2 === void 0 ? void 0 : _theme$palette$tertia2.contrastText,
121
+ width: '100%',
122
+ display: 'flex',
123
+ paddingLeft: 5
124
+ },
125
+ // margin:auto 0 to center text vertically
126
+ accordionText: {
127
+ margin: 'auto 0'
128
+ }
129
+ };
130
+ }); // An individual node in the track selector. Note: manually sets cursor:
131
+ // pointer improves usability for what can be clicked
132
+
133
+ var Node = function Node(props) {
134
+ var data = props.data,
135
+ isOpen = props.isOpen,
136
+ style = props.style,
137
+ setOpen = props.setOpen;
138
+ var isLeaf = data.isLeaf,
139
+ nestingLevel = data.nestingLevel,
140
+ checked = data.checked,
141
+ id = data.id,
142
+ name = data.name,
143
+ _onChange = data.onChange,
144
+ toggleCollapse = data.toggleCollapse,
145
+ conf = data.conf,
146
+ onMoreInfo = data.onMoreInfo,
147
+ drawerPosition = data.drawerPosition;
148
+ var classes = useStyles();
149
+ var width = 10;
150
+ var marginLeft = nestingLevel * width + (isLeaf ? width : 0);
151
+ var unsupported = name && (name.endsWith('(Unsupported)') || name.endsWith('(Unknown)'));
152
+ var description = conf && (0, _configuration.readConfObject)(conf, ['description']) || '';
153
+ return /*#__PURE__*/_react["default"].createElement("div", {
154
+ style: style,
155
+ className: !isLeaf ? classes.accordionBase : undefined
156
+ }, new Array(nestingLevel).fill(0).map(function (_, idx) {
157
+ return /*#__PURE__*/_react["default"].createElement("div", {
158
+ key: "mark-".concat(idx),
159
+ style: {
160
+ left: idx * width + 4,
161
+ height: style.height
162
+ },
163
+ className: classes.nestingLevelMarker
164
+ });
165
+ }), /*#__PURE__*/_react["default"].createElement("div", {
166
+ className: !isLeaf ? classes.accordionCard : undefined,
167
+ onClick: function onClick() {
168
+ toggleCollapse(id);
169
+ setOpen(!isOpen);
170
+ },
171
+ style: {
172
+ marginLeft: marginLeft,
173
+ whiteSpace: 'nowrap',
174
+ width: '100%'
175
+ }
176
+ }, /*#__PURE__*/_react["default"].createElement("div", {
177
+ className: !isLeaf ? classes.accordionColor : undefined
178
+ }, !isLeaf ? /*#__PURE__*/_react["default"].createElement("div", {
179
+ className: classes.accordionText
180
+ }, /*#__PURE__*/_react["default"].createElement(_core.Typography, null, isOpen ? /*#__PURE__*/_react["default"].createElement(_ArrowDropDown["default"], null) : /*#__PURE__*/_react["default"].createElement(_ArrowRight["default"], null), name)) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Tooltip, {
181
+ title: description,
182
+ placement: drawerPosition === 'left' ? 'right' : 'left'
183
+ }, /*#__PURE__*/_react["default"].createElement(_core.FormControlLabel, {
184
+ className: classes.checkboxLabel,
185
+ control: /*#__PURE__*/_react["default"].createElement(_core.Checkbox, {
186
+ className: classes.compactCheckbox,
187
+ checked: checked,
188
+ onChange: function onChange() {
189
+ return _onChange(id);
190
+ },
191
+ color: "primary",
192
+ disabled: unsupported,
193
+ inputProps: {
194
+ 'data-testid': "htsTrackEntry-".concat(id)
195
+ }
196
+ }),
197
+ label: name
198
+ })), /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
199
+ onClick: function onClick(e) {
200
+ return onMoreInfo({
201
+ target: e.currentTarget,
202
+ id: id,
203
+ conf: conf
204
+ });
205
+ },
206
+ color: "secondary",
207
+ "data-testid": "htsTrackEntryMenu-".concat(id)
208
+ }, /*#__PURE__*/_react["default"].createElement(_MoreHoriz["default"], null))))));
209
+ };
210
+
211
+ var getNodeData = function getNodeData(node, nestingLevel, extra) {
212
+ var isLeaf = !!node.conf;
213
+ return {
214
+ data: _objectSpread(_objectSpread({
215
+ defaultHeight: isLeaf ? 22 : 40,
216
+ isLeaf: isLeaf,
217
+ isOpenByDefault: true,
218
+ nestingLevel: nestingLevel
219
+ }, node), extra),
220
+ nestingLevel: nestingLevel,
221
+ node: node
222
+ };
223
+ }; // this is the main tree component for the hierarchical track selector in note:
224
+ // in jbrowse-web the toolbar is position="sticky" which means the autosizer
225
+ // includes the height of the toolbar, so we subtract the given offsets
226
+
227
+
228
+ var HierarchicalTree = (0, _mobxReact.observer)(function (_ref) {
229
+ var _session$getTrackActi;
230
+
231
+ var height = _ref.height,
232
+ tree = _ref.tree,
233
+ model = _ref.model;
234
+ var filterText = model.filterText,
235
+ view = model.view;
236
+ var treeRef = (0, _react.useRef)(null);
237
+
238
+ var _useState = (0, _react.useState)(),
239
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
240
+ info = _useState2[0],
241
+ setMoreInfo = _useState2[1];
242
+
243
+ var session = (0, _util.getSession)(model);
244
+ var drawerPosition = session.drawerPosition;
245
+ var extra = (0, _react.useMemo)(function () {
246
+ return {
247
+ onChange: function onChange(trackId) {
248
+ return view.toggleTrack(trackId);
249
+ },
250
+ toggleCollapse: function toggleCollapse(pathName) {
251
+ return model.toggleCategory(pathName);
252
+ },
253
+ onMoreInfo: setMoreInfo,
254
+ drawerPosition: drawerPosition
255
+ };
256
+ }, [view, model, drawerPosition]);
257
+ var treeWalker = (0, _react.useCallback)( /*#__PURE__*/_regenerator["default"].mark(function treeWalker() {
258
+ var i, parentMeta, _i, curr;
259
+
260
+ return _regenerator["default"].wrap(function treeWalker$(_context) {
261
+ while (1) {
262
+ switch (_context.prev = _context.next) {
263
+ case 0:
264
+ i = 0;
265
+
266
+ case 1:
267
+ if (!(i < tree.children.length)) {
268
+ _context.next = 7;
269
+ break;
270
+ }
271
+
272
+ _context.next = 4;
273
+ return getNodeData(tree.children[i], 0, extra);
274
+
275
+ case 4:
276
+ i++;
277
+ _context.next = 1;
278
+ break;
279
+
280
+ case 7:
281
+ if (!true) {
282
+ _context.next = 21;
283
+ break;
284
+ }
285
+
286
+ _context.next = 10;
287
+ return;
288
+
289
+ case 10:
290
+ parentMeta = _context.sent;
291
+ _i = 0;
292
+
293
+ case 12:
294
+ if (!(_i < parentMeta.node.children.length)) {
295
+ _context.next = 19;
296
+ break;
297
+ }
298
+
299
+ curr = parentMeta.node.children[_i];
300
+ _context.next = 16;
301
+ return getNodeData(curr, parentMeta.nestingLevel + 1, extra);
302
+
303
+ case 16:
304
+ _i++;
305
+ _context.next = 12;
306
+ break;
307
+
308
+ case 19:
309
+ _context.next = 7;
310
+ break;
311
+
312
+ case 21:
313
+ case "end":
314
+ return _context.stop();
315
+ }
316
+ }
317
+ }, treeWalker);
318
+ }), [tree, extra]);
319
+ var conf = info === null || info === void 0 ? void 0 : info.conf;
320
+ var menuItems = conf && ((_session$getTrackActi = session.getTrackActionMenuItems) === null || _session$getTrackActi === void 0 ? void 0 : _session$getTrackActi.call(session, conf)) || [];
321
+ (0, _react.useEffect)(function () {
322
+ treeRef.current.recomputeTree({
323
+ refreshNodes: true,
324
+ useDefaultHeight: true
325
+ });
326
+ }, [tree, filterText]);
327
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_reactVtree.VariableSizeTree, {
328
+ ref: treeRef,
329
+ treeWalker: treeWalker,
330
+ height: height
331
+ }, Node), /*#__PURE__*/_react["default"].createElement(_Menu2["default"], {
332
+ anchorEl: info === null || info === void 0 ? void 0 : info.target,
333
+ menuItems: menuItems,
334
+ onMenuItemClick: function onMenuItemClick(_event, callback) {
335
+ callback();
336
+ setMoreInfo(undefined);
337
+ },
338
+ open: Boolean(info),
339
+ onClose: function onClose() {
340
+ return setMoreInfo(undefined);
341
+ }
342
+ }));
343
+ }); // Don't use autosizer in jest and instead hardcode a height, otherwise fails
344
+ // jest tests
345
+
346
+ var AutoSizedHierarchicalTree = function AutoSizedHierarchicalTree(_ref2) {
347
+ var tree = _ref2.tree,
348
+ model = _ref2.model,
349
+ offset = _ref2.offset;
350
+ return typeof jest === 'undefined' ? /*#__PURE__*/_react["default"].createElement(_reactVirtualizedAutoSizer["default"], {
351
+ disableWidth: true
352
+ }, function (_ref3) {
353
+ var height = _ref3.height;
354
+ return /*#__PURE__*/_react["default"].createElement(HierarchicalTree, {
355
+ height: height - offset,
356
+ model: model,
357
+ tree: tree
358
+ });
359
+ }) : /*#__PURE__*/_react["default"].createElement(HierarchicalTree, {
360
+ height: 9000,
361
+ model: model,
362
+ tree: tree
363
+ });
364
+ };
365
+
366
+ var Wrapper = function Wrapper(_ref4) {
367
+ var overrideDimensions = _ref4.overrideDimensions,
368
+ children = _ref4.children;
369
+ return overrideDimensions ? /*#__PURE__*/_react["default"].createElement("div", {
370
+ style: _objectSpread({}, overrideDimensions)
371
+ }, children) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, children);
372
+ };
373
+
374
+ var HierarchicalTrackSelectorContainer = (0, _mobxReact.observer)(function (_ref5) {
375
+ var model = _ref5.model,
376
+ toolbarHeight = _ref5.toolbarHeight,
377
+ overrideDimensions = _ref5.overrideDimensions;
378
+ var classes = useStyles();
379
+ var session = (0, _util.getSession)(model);
380
+
381
+ var _useState3 = (0, _react.useState)(null),
382
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
383
+ anchorEl = _useState4[0],
384
+ setAnchorEl = _useState4[1];
385
+
386
+ function handleFabClose() {
387
+ setAnchorEl(null);
388
+ }
389
+
390
+ return /*#__PURE__*/_react["default"].createElement(Wrapper, {
391
+ overrideDimensions: overrideDimensions
392
+ }, /*#__PURE__*/_react["default"].createElement(HierarchicalTrackSelector, {
393
+ model: model,
394
+ toolbarHeight: toolbarHeight,
395
+ overrideDimensions: overrideDimensions
396
+ }), session.addConnectionConf || session.addTrackConf ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_core.Fab, {
397
+ color: "secondary",
398
+ className: classes.fab,
399
+ onClick: function onClick(event) {
400
+ setAnchorEl(event.currentTarget);
401
+ }
402
+ }, /*#__PURE__*/_react["default"].createElement(_Add["default"], null)), /*#__PURE__*/_react["default"].createElement(_core.Menu, {
403
+ anchorEl: anchorEl,
404
+ open: Boolean(anchorEl),
405
+ onClose: function onClose() {
406
+ return setAnchorEl(null);
407
+ }
408
+ }, session.addConnectionConf ? /*#__PURE__*/_react["default"].createElement(_core.MenuItem, {
409
+ onClick: function onClick() {
410
+ handleFabClose();
411
+ var widget = session.addWidget('AddConnectionWidget', 'addConnectionWidget');
412
+ session.showWidget(widget);
413
+ }
414
+ }, "Add connection") : null, session.addTrackConf ? /*#__PURE__*/_react["default"].createElement(_core.MenuItem, {
415
+ onClick: function onClick() {
416
+ handleFabClose();
417
+ var widget = session.addWidget('AddTrackWidget', 'addTrackWidget', {
418
+ view: model.view.id
419
+ });
420
+ session.showWidget(widget);
421
+ }
422
+ }, "Add track") : null)) : null);
423
+ });
424
+ var HierarchicalTrackSelectorHeader = (0, _mobxReact.observer)(function (_ref6) {
425
+ var model = _ref6.model,
426
+ setHeaderHeight = _ref6.setHeaderHeight,
427
+ setAssemblyIdx = _ref6.setAssemblyIdx,
428
+ assemblyIdx = _ref6.assemblyIdx;
429
+ var classes = useStyles();
430
+ var session = (0, _util.getSession)(model);
431
+
432
+ var _useState5 = (0, _react.useState)(),
433
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
434
+ connectionAnchorEl = _useState6[0],
435
+ setConnectionAnchorEl = _useState6[1];
436
+
437
+ var _useState7 = (0, _react.useState)(),
438
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
439
+ menuAnchorEl = _useState8[0],
440
+ setMenuAnchorEl = _useState8[1];
441
+
442
+ var _useState9 = (0, _react.useState)(),
443
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
444
+ modalInfo = _useState10[0],
445
+ setModalInfo = _useState10[1];
446
+
447
+ var _useState11 = (0, _react.useState)(),
448
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
449
+ deleteDialogDetails = _useState12[0],
450
+ setDeleteDialogDetails = _useState12[1];
451
+
452
+ var _useState13 = (0, _react.useState)(false),
453
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
454
+ connectionManagerOpen = _useState14[0],
455
+ setConnectionManagerOpen = _useState14[1];
456
+
457
+ var _useState15 = (0, _react.useState)(false),
458
+ _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
459
+ connectionToggleOpen = _useState16[0],
460
+ setConnectionToggleOpen = _useState16[1];
461
+
462
+ var assemblyNames = model.assemblyNames;
463
+ var assemblyName = assemblyNames[assemblyIdx];
464
+
465
+ function breakConnection(connectionConf, deletingConnection) {
466
+ var name = (0, _configuration.readConfObject)(connectionConf, 'name');
467
+ var result = session.prepareToBreakConnection(connectionConf);
468
+
469
+ if (result) {
470
+ var _result = (0, _slicedToArray2["default"])(result, 2),
471
+ safelyBreakConnection = _result[0],
472
+ dereferenceTypeCount = _result[1];
473
+
474
+ if (Object.keys(dereferenceTypeCount).length > 0) {
475
+ setModalInfo({
476
+ connectionConf: connectionConf,
477
+ safelyBreakConnection: safelyBreakConnection,
478
+ dereferenceTypeCount: dereferenceTypeCount,
479
+ name: name
480
+ });
481
+ } else {
482
+ safelyBreakConnection();
483
+ }
484
+ }
485
+
486
+ if (deletingConnection) {
487
+ setDeleteDialogDetails({
488
+ name: name,
489
+ connectionConf: connectionConf
490
+ });
491
+ }
492
+ }
493
+
494
+ var connectionMenuItems = [{
495
+ label: 'Turn on/off connections...',
496
+ onClick: function onClick() {
497
+ return setConnectionToggleOpen(true);
498
+ }
499
+ }];
500
+
501
+ if (session.addConnectionConf) {
502
+ connectionMenuItems.unshift({
503
+ label: 'Add connection',
504
+ onClick: function onClick() {
505
+ session.showWidget(session.addWidget('AddConnectionWidget', 'addConnectionWidget'));
506
+ }
507
+ });
508
+ connectionMenuItems.push({
509
+ label: 'Delete connections...',
510
+ onClick: function onClick() {
511
+ return setConnectionManagerOpen(true);
512
+ }
513
+ });
514
+ }
515
+
516
+ var assemblyMenuItems = assemblyNames.length > 1 ? [{
517
+ label: 'Select assembly...',
518
+ subMenu: assemblyNames.map(function (name, idx) {
519
+ return {
520
+ label: name,
521
+ onClick: function onClick() {
522
+ setAssemblyIdx(idx);
523
+ }
524
+ };
525
+ })
526
+ }] : [];
527
+ var menuItems = [{
528
+ label: 'Add track...',
529
+ onClick: function onClick() {
530
+ session.showWidget(session.addWidget('AddTrackWidget', 'addTrackWidget', {
531
+ view: model.view.id
532
+ }));
533
+ }
534
+ }].concat(assemblyMenuItems);
535
+ return /*#__PURE__*/_react["default"].createElement("div", {
536
+ ref: function ref(_ref7) {
537
+ return setHeaderHeight((_ref7 === null || _ref7 === void 0 ? void 0 : _ref7.getBoundingClientRect().height) || 0);
538
+ },
539
+ "data-testid": "hierarchical_track_selector"
540
+ }, /*#__PURE__*/_react["default"].createElement("div", {
541
+ style: {
542
+ display: 'flex'
543
+ }
544
+ }, session.addTrackConf && /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
545
+ className: classes.menuIcon,
546
+ onClick: function onClick(event) {
547
+ setMenuAnchorEl(event.currentTarget);
548
+ }
549
+ }, /*#__PURE__*/_react["default"].createElement(_Menu["default"], null)), session.makeConnection && /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
550
+ className: classes.menuIcon,
551
+ onClick: function onClick(event) {
552
+ setConnectionAnchorEl(event.currentTarget);
553
+ }
554
+ }, /*#__PURE__*/_react["default"].createElement(_Icons.Cable, null)), /*#__PURE__*/_react["default"].createElement(_core.TextField, {
555
+ className: classes.searchBox,
556
+ label: "Filter tracks",
557
+ value: model.filterText,
558
+ onChange: function onChange(event) {
559
+ return model.setFilterText(event.target.value);
560
+ },
561
+ fullWidth: true,
562
+ InputProps: {
563
+ endAdornment: /*#__PURE__*/_react["default"].createElement(_core.InputAdornment, {
564
+ position: "end"
565
+ }, /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
566
+ color: "secondary",
567
+ onClick: model.clearFilterText
568
+ }, /*#__PURE__*/_react["default"].createElement(_Clear["default"], null)))
569
+ }
570
+ })), /*#__PURE__*/_react["default"].createElement(_Menu2["default"], {
571
+ anchorEl: connectionAnchorEl,
572
+ open: Boolean(connectionAnchorEl),
573
+ onMenuItemClick: function onMenuItemClick(_, callback) {
574
+ callback();
575
+ setConnectionAnchorEl(undefined);
576
+ },
577
+ onClose: function onClose() {
578
+ return setConnectionAnchorEl(undefined);
579
+ },
580
+ menuItems: connectionMenuItems
581
+ }), /*#__PURE__*/_react["default"].createElement(_Menu2["default"], {
582
+ anchorEl: menuAnchorEl,
583
+ open: Boolean(menuAnchorEl),
584
+ onMenuItemClick: function onMenuItemClick(_, callback) {
585
+ callback();
586
+ setMenuAnchorEl(undefined);
587
+ },
588
+ onClose: function onClose() {
589
+ return setMenuAnchorEl(undefined);
590
+ },
591
+ menuItems: menuItems
592
+ }), /*#__PURE__*/_react["default"].createElement(_react.Suspense, {
593
+ fallback: /*#__PURE__*/_react["default"].createElement("div", null)
594
+ }, modalInfo ? /*#__PURE__*/_react["default"].createElement(CloseConnectionDialog, {
595
+ modalInfo: modalInfo,
596
+ setModalInfo: setModalInfo,
597
+ session: session
598
+ }) : deleteDialogDetails ? /*#__PURE__*/_react["default"].createElement(DeleteConnectionDialog, {
599
+ handleClose: function handleClose() {
600
+ return setDeleteDialogDetails(undefined);
601
+ },
602
+ deleteDialogDetails: deleteDialogDetails,
603
+ session: session
604
+ }) : null, connectionManagerOpen ? /*#__PURE__*/_react["default"].createElement(ManageConnectionsDialog, {
605
+ handleClose: function handleClose() {
606
+ return setConnectionManagerOpen(false);
607
+ },
608
+ breakConnection: breakConnection,
609
+ session: session
610
+ }) : null, connectionToggleOpen ? /*#__PURE__*/_react["default"].createElement(ToggleConnectionsDialog, {
611
+ handleClose: function handleClose() {
612
+ return setConnectionToggleOpen(false);
613
+ },
614
+ session: session,
615
+ breakConnection: breakConnection,
616
+ assemblyName: assemblyName
617
+ }) : null));
618
+ });
619
+ var HierarchicalTrackSelector = (0, _mobxReact.observer)(function (_ref8) {
620
+ var model = _ref8.model,
621
+ _ref8$toolbarHeight = _ref8.toolbarHeight,
622
+ toolbarHeight = _ref8$toolbarHeight === void 0 ? 0 : _ref8$toolbarHeight;
623
+
624
+ var _useState17 = (0, _react.useState)(0),
625
+ _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
626
+ assemblyIdx = _useState18[0],
627
+ setAssemblyIdx = _useState18[1];
628
+
629
+ var _useState19 = (0, _react.useState)(0),
630
+ _useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
631
+ headerHeight = _useState20[0],
632
+ setHeaderHeight = _useState20[1];
633
+
634
+ var assemblyNames = model.assemblyNames;
635
+ var assemblyName = assemblyNames[assemblyIdx];
636
+ return assemblyName ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(HierarchicalTrackSelectorHeader, {
637
+ model: model,
638
+ setHeaderHeight: setHeaderHeight,
639
+ setAssemblyIdx: setAssemblyIdx,
640
+ assemblyIdx: assemblyIdx
641
+ }), /*#__PURE__*/_react["default"].createElement(AutoSizedHierarchicalTree, {
642
+ tree: model.hierarchy(assemblyName),
643
+ model: model,
644
+ offset: toolbarHeight + headerHeight
645
+ })) : null;
646
+ });
647
+ var _default = HierarchicalTrackSelectorContainer;
648
+ exports["default"] = _default;