@jbrowse/plugin-data-management 2.6.3 → 2.7.1

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 (133) hide show
  1. package/dist/AddConnectionWidget/components/AddConnectionWidget.d.ts +2 -2
  2. package/dist/AddConnectionWidget/components/AddConnectionWidget.js +17 -8
  3. package/dist/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -2
  4. package/dist/AddConnectionWidget/components/ConfigureConnection.js +2 -1
  5. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +2 -2
  6. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +5 -3
  7. package/dist/AddTrackWidget/components/AddTrackWidget.d.ts +3 -4
  8. package/dist/AddTrackWidget/components/AddTrackWidget.js +3 -3
  9. package/dist/AddTrackWidget/components/ConfirmTrack.d.ts +2 -2
  10. package/dist/AddTrackWidget/components/ConfirmTrack.js +3 -2
  11. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.d.ts +3 -4
  12. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +32 -27
  13. package/dist/AddTrackWidget/components/PasteConfigWorkflow.d.ts +3 -4
  14. package/dist/AddTrackWidget/components/PasteConfigWorkflow.js +10 -7
  15. package/dist/AddTrackWidget/components/TrackAdapterSelector.js +1 -1
  16. package/dist/AddTrackWidget/components/TrackSourceSelect.d.ts +3 -4
  17. package/dist/AddTrackWidget/components/TrackSourceSelect.js +3 -3
  18. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +2 -2
  19. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +2 -1
  20. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +2 -2
  21. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +2 -1
  22. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.d.ts +3 -5
  23. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +2 -1
  24. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.d.ts +3 -4
  25. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +5 -8
  26. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.d.ts +3 -4
  27. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +3 -3
  28. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.d.ts +2 -3
  29. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +2 -3
  30. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +13 -0
  31. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +79 -0
  32. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +31 -77
  33. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +3 -4
  34. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +3 -3
  35. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +5 -3
  36. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +10 -4
  37. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +2 -2
  38. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +50 -29
  39. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +2 -2
  40. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +4 -2
  41. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.d.ts +3 -4
  42. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +3 -3
  43. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +2 -2
  44. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +5 -6
  45. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +24 -49
  46. package/dist/HierarchicalTrackSelectorWidget/components/util.js +1 -2
  47. package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +16 -13
  48. package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.js +2 -2
  49. package/dist/HierarchicalTrackSelectorWidget/model.js +17 -12
  50. package/dist/PluginStoreWidget/components/AddCustomPluginDialog.d.ts +2 -2
  51. package/dist/PluginStoreWidget/components/AddCustomPluginDialog.js +2 -1
  52. package/dist/PluginStoreWidget/components/InstalledPlugin.d.ts +2 -2
  53. package/dist/PluginStoreWidget/components/InstalledPlugin.js +8 -4
  54. package/dist/PluginStoreWidget/components/InstalledPluginsList.d.ts +2 -2
  55. package/dist/PluginStoreWidget/components/InstalledPluginsList.js +2 -1
  56. package/dist/PluginStoreWidget/components/PluginCard.d.ts +2 -2
  57. package/dist/PluginStoreWidget/components/PluginCard.js +2 -1
  58. package/dist/PluginStoreWidget/components/PluginStoreWidget.d.ts +3 -4
  59. package/dist/PluginStoreWidget/components/PluginStoreWidget.js +3 -3
  60. package/dist/index.d.ts +1 -9
  61. package/dist/index.js +1 -4
  62. package/dist/ucsc-trackhub/model.js +2 -2
  63. package/esm/AddConnectionWidget/components/AddConnectionWidget.d.ts +2 -2
  64. package/esm/AddConnectionWidget/components/AddConnectionWidget.js +19 -10
  65. package/esm/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -2
  66. package/esm/AddConnectionWidget/components/ConfigureConnection.js +2 -1
  67. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +2 -2
  68. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +5 -3
  69. package/esm/AddTrackWidget/components/AddTrackWidget.d.ts +3 -4
  70. package/esm/AddTrackWidget/components/AddTrackWidget.js +3 -3
  71. package/esm/AddTrackWidget/components/ConfirmTrack.d.ts +2 -2
  72. package/esm/AddTrackWidget/components/ConfirmTrack.js +4 -3
  73. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.d.ts +3 -4
  74. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +33 -28
  75. package/esm/AddTrackWidget/components/PasteConfigWorkflow.d.ts +3 -4
  76. package/esm/AddTrackWidget/components/PasteConfigWorkflow.js +11 -8
  77. package/esm/AddTrackWidget/components/TrackAdapterSelector.js +1 -1
  78. package/esm/AddTrackWidget/components/TrackSourceSelect.d.ts +3 -4
  79. package/esm/AddTrackWidget/components/TrackSourceSelect.js +3 -3
  80. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +2 -2
  81. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +2 -1
  82. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +2 -2
  83. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +2 -1
  84. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.d.ts +3 -5
  85. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +2 -1
  86. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.d.ts +3 -4
  87. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +6 -9
  88. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.d.ts +3 -4
  89. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +3 -3
  90. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.d.ts +2 -3
  91. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +3 -2
  92. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +13 -0
  93. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +50 -0
  94. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +31 -54
  95. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +3 -4
  96. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +3 -3
  97. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +5 -3
  98. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +10 -4
  99. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +2 -2
  100. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +50 -29
  101. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +2 -2
  102. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +4 -2
  103. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.d.ts +3 -4
  104. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +3 -3
  105. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +2 -2
  106. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +5 -6
  107. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +24 -26
  108. package/esm/HierarchicalTrackSelectorWidget/components/util.js +1 -2
  109. package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +16 -13
  110. package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.js +2 -2
  111. package/esm/HierarchicalTrackSelectorWidget/model.js +17 -12
  112. package/esm/PluginStoreWidget/components/AddCustomPluginDialog.d.ts +2 -2
  113. package/esm/PluginStoreWidget/components/AddCustomPluginDialog.js +2 -1
  114. package/esm/PluginStoreWidget/components/InstalledPlugin.d.ts +2 -2
  115. package/esm/PluginStoreWidget/components/InstalledPlugin.js +8 -4
  116. package/esm/PluginStoreWidget/components/InstalledPluginsList.d.ts +2 -2
  117. package/esm/PluginStoreWidget/components/InstalledPluginsList.js +2 -1
  118. package/esm/PluginStoreWidget/components/PluginCard.d.ts +2 -2
  119. package/esm/PluginStoreWidget/components/PluginCard.js +2 -1
  120. package/esm/PluginStoreWidget/components/PluginStoreWidget.d.ts +3 -4
  121. package/esm/PluginStoreWidget/components/PluginStoreWidget.js +3 -3
  122. package/esm/index.d.ts +1 -9
  123. package/esm/index.js +1 -3
  124. package/esm/ucsc-trackhub/model.js +2 -2
  125. package/package.json +5 -4
  126. package/dist/SetDefaultSession/SetDefaultSession.d.ts +0 -6
  127. package/dist/SetDefaultSession/SetDefaultSession.js +0 -38
  128. package/dist/SetDefaultSession/index.d.ts +0 -1
  129. package/dist/SetDefaultSession/index.js +0 -8
  130. package/esm/SetDefaultSession/SetDefaultSession.d.ts +0 -6
  131. package/esm/SetDefaultSession/SetDefaultSession.js +0 -33
  132. package/esm/SetDefaultSession/index.d.ts +0 -1
  133. package/esm/SetDefaultSession/index.js +0 -1
@@ -1,42 +1,19 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
- const react_1 = __importStar(require("react"));
6
+ const react_1 = __importDefault(require("react"));
30
7
  const material_1 = require("@mui/material");
31
8
  const mui_1 = require("tss-react/mui");
32
- const Menu_1 = __importDefault(require("@jbrowse/core/ui/Menu"));
33
9
  const util_1 = require("@jbrowse/core/util");
10
+ const SanitizedHTML_1 = __importDefault(require("@jbrowse/core/ui/SanitizedHTML"));
34
11
  const configuration_1 = require("@jbrowse/core/configuration");
35
12
  // icons
36
13
  const MoreHoriz_1 = __importDefault(require("@mui/icons-material/MoreHoriz"));
37
14
  // locals
38
15
  const util_2 = require("../util");
39
- const ui_1 = require("@jbrowse/core/ui");
16
+ const CascadingMenuButton_1 = __importDefault(require("@jbrowse/core/ui/CascadingMenuButton"));
40
17
  const useStyles = (0, mui_1.makeStyles)()(theme => ({
41
18
  compactCheckbox: {
42
19
  padding: 0,
@@ -49,10 +26,8 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
49
26
  },
50
27
  }));
51
28
  function TrackLabel({ data }) {
52
- var _a, _b;
53
29
  const { classes } = useStyles();
54
30
  const { checked, conf, model, drawerPosition, id, name, onChange, selected } = data;
55
- const [info, setInfo] = (0, react_1.useState)();
56
31
  const description = (conf && (0, configuration_1.readConfObject)(conf, ['description'])) || '';
57
32
  return (react_1.default.createElement(react_1.default.Fragment, null,
58
33
  react_1.default.createElement(material_1.Tooltip, { title: description + (selected ? ' (in selection)' : ''), placement: drawerPosition === 'left' ? 'right' : 'left' },
@@ -60,26 +35,26 @@ function TrackLabel({ data }) {
60
35
  // @ts-expect-error
61
36
  'data-testid': `htsTrackEntry-${id}`,
62
37
  } }), label: react_1.default.createElement("div", { "data-testid": `htsTrackLabel-${id}`, style: { background: selected ? '#cccc' : undefined } },
63
- react_1.default.createElement(ui_1.SanitizedHTML, { html: name })) })),
64
- react_1.default.createElement(material_1.IconButton, { onClick: e => setInfo({ target: e.currentTarget, id, conf }), style: { padding: 0 }, "data-testid": `htsTrackEntryMenu-${id}` },
65
- react_1.default.createElement(MoreHoriz_1.default, null)),
66
- info ? (react_1.default.createElement(Menu_1.default, { anchorEl: info === null || info === void 0 ? void 0 : info.target, menuItems: [
67
- ...(((_b = (_a = (0, util_1.getSession)(model)).getTrackActionMenuItems) === null || _b === void 0 ? void 0 : _b.call(_a, info.conf)) || []),
68
- {
69
- label: 'Add to selection',
70
- onClick: () => model.addToSelection([info.conf]),
71
- },
72
- ...(selected
73
- ? [
74
- {
75
- label: 'Remove from selection',
76
- onClick: () => model.removeFromSelection([info.conf]),
77
- },
78
- ]
79
- : []),
80
- ], onMenuItemClick: (_event, callback) => {
81
- callback();
82
- setInfo(undefined);
83
- }, open: Boolean(info), onClose: () => setInfo(undefined) })) : null));
38
+ react_1.default.createElement(SanitizedHTML_1.default, { html: name })) })),
39
+ react_1.default.createElement(TrackMenuButton, { model: model, selected: selected, id: id, conf: conf })));
84
40
  }
85
41
  exports.default = TrackLabel;
42
+ function TrackMenuButton({ id, model, selected, conf, }) {
43
+ var _a, _b;
44
+ return (react_1.default.createElement(CascadingMenuButton_1.default, { style: { padding: 0 }, "data-testid": `htsTrackEntryMenu-${id}`, menuItems: [
45
+ ...(((_b = (_a = (0, util_1.getSession)(model)).getTrackActionMenuItems) === null || _b === void 0 ? void 0 : _b.call(_a, conf)) || []),
46
+ {
47
+ label: 'Add to selection',
48
+ onClick: () => model.addToSelection([conf]),
49
+ },
50
+ ...(selected
51
+ ? [
52
+ {
53
+ label: 'Remove from selection',
54
+ onClick: () => model.removeFromSelection([conf]),
55
+ },
56
+ ]
57
+ : []),
58
+ ] },
59
+ react_1.default.createElement(MoreHoriz_1.default, null)));
60
+ }
@@ -10,8 +10,7 @@ function treeToMap(tree, map = new Map()) {
10
10
  if (tree.id && tree.children.length) {
11
11
  map.set(tree.id, tree);
12
12
  }
13
- for (let i = 0; i < tree.children.length; i++) {
14
- const node = tree.children[i];
13
+ for (const node of tree.children) {
15
14
  treeToMap(node, map);
16
15
  }
17
16
  return map;
@@ -1,21 +1,24 @@
1
1
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
2
- export type TreeNode = {
2
+ export interface TreeNode {
3
3
  name: string;
4
4
  id: string;
5
5
  conf?: AnyConfigurationModel;
6
6
  checked?: boolean;
7
7
  isOpenByDefault?: boolean;
8
8
  children: TreeNode[];
9
- };
10
- export declare function generateHierarchy(model: {
11
- filterText: string;
12
- activeSortTrackNames: boolean;
13
- activeSortCategories: boolean;
14
- view?: {
15
- tracks: {
16
- configuration: AnyConfigurationModel;
17
- }[];
9
+ }
10
+ export declare function generateHierarchy({ model, trackConfs, extra, }: {
11
+ model: {
12
+ filterText: string;
13
+ activeSortTrackNames: boolean;
14
+ activeSortCategories: boolean;
15
+ collapsed: Map<string, boolean>;
16
+ view?: {
17
+ tracks: {
18
+ configuration: AnyConfigurationModel;
19
+ }[];
20
+ };
18
21
  };
19
- }, trackConfs: AnyConfigurationModel[], collapsed: {
20
- get: (arg: string) => boolean | undefined;
21
- }, extra?: string): TreeNode[];
22
+ trackConfs: AnyConfigurationModel[];
23
+ extra?: string;
24
+ }): TreeNode[];
@@ -40,9 +40,9 @@ function sortConfs(confs, sortNames, sortCategories) {
40
40
  }
41
41
  return ret.map(a => a[0]);
42
42
  }
43
- function generateHierarchy(model, trackConfs, collapsed, extra) {
43
+ function generateHierarchy({ model, trackConfs, extra, }) {
44
44
  const hierarchy = { children: [] };
45
- const { filterText, activeSortTrackNames, activeSortCategories, view } = model;
45
+ const { collapsed, filterText, activeSortTrackNames, activeSortCategories, view, } = model;
46
46
  if (!view) {
47
47
  return [];
48
48
  }
@@ -188,7 +188,11 @@ function stateTreeFactory(pluginManager) {
188
188
  * #method
189
189
  */
190
190
  connectionHierarchy(connection) {
191
- return (0, generateHierarchy_1.generateHierarchy)(self, self.connectionTrackConfigurations(connection), self.collapsed, connection.name);
191
+ return (0, generateHierarchy_1.generateHierarchy)({
192
+ model: self,
193
+ trackConfs: self.connectionTrackConfigurations(connection),
194
+ extra: connection.name,
195
+ });
192
196
  },
193
197
  }))
194
198
  .views(self => ({
@@ -218,7 +222,10 @@ function stateTreeFactory(pluginManager) {
218
222
  .map(s => ({
219
223
  name: s.group,
220
224
  id: s.group,
221
- children: (0, generateHierarchy_1.generateHierarchy)(self, s.tracks, self.collapsed),
225
+ children: (0, generateHierarchy_1.generateHierarchy)({
226
+ model: self,
227
+ trackConfs: s.tracks,
228
+ }),
222
229
  }))
223
230
  // always keep the Tracks entry at idx 0
224
231
  .filter((f, idx) => idx === 0 || !!f.children.length),
@@ -262,21 +269,19 @@ function stateTreeFactory(pluginManager) {
262
269
  ])) {
263
270
  self.collapseTopLevelCategories();
264
271
  }
265
- else if ((0, configuration_1.getConf)(session, [
272
+ if ((0, configuration_1.getConf)(session, [
266
273
  'hierarchical',
267
274
  'defaultCollapsed',
268
275
  'subCategories',
269
276
  ])) {
270
277
  self.collapseSubCategories();
271
278
  }
272
- else {
273
- for (const entry of (0, configuration_1.getConf)(session, [
274
- 'hierarchical',
275
- 'defaultCollapsed',
276
- 'categoryNames',
277
- ])) {
278
- self.collapsed.set(entry, true);
279
- }
279
+ for (const entry of (0, configuration_1.getConf)(session, [
280
+ 'hierarchical',
281
+ 'defaultCollapsed',
282
+ 'categoryNames',
283
+ ])) {
284
+ self.collapsed.set(entry, true);
280
285
  }
281
286
  self.initialized = true;
282
287
  }
@@ -284,7 +289,7 @@ function stateTreeFactory(pluginManager) {
284
289
  }))
285
290
  .views(self => ({
286
291
  get hasAnySubcategories() {
287
- return self.allTracks.some(group => group.tracks.some(track => { var _a; return ((_a = (0, configuration_1.readConfObject)(track, 'category')) === null || _a === void 0 ? void 0 : _a.length) > 1; }));
292
+ return self.allTracks.some(group => group.tracks.some(t => { var _a; return ((_a = (0, configuration_1.readConfObject)(t, 'category')) === null || _a === void 0 ? void 0 : _a.length) > 1; }));
288
293
  },
289
294
  }));
290
295
  }
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { PluginStoreModel } from '../model';
3
- declare const _default: ({ onClose, model, }: {
3
+ declare const AddCustomPluginDialog: ({ onClose, model, }: {
4
4
  onClose: () => void;
5
5
  model: PluginStoreModel;
6
6
  }) => React.JSX.Element;
7
- export default _default;
7
+ export default AddCustomPluginDialog;
@@ -51,7 +51,7 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
51
51
  transform: 'rotate(180deg)',
52
52
  },
53
53
  }));
54
- exports.default = (0, mobx_react_1.observer)(function ({ onClose, model, }) {
54
+ const AddCustomPluginDialog = (0, mobx_react_1.observer)(function ({ onClose, model, }) {
55
55
  const { classes, cx } = useStyles();
56
56
  const [umdPluginName, setUMDPluginName] = (0, react_1.useState)('');
57
57
  const [umdPluginUrl, setUMDPluginUrl] = (0, react_1.useState)('');
@@ -92,3 +92,4 @@ exports.default = (0, mobx_react_1.observer)(function ({ onClose, model, }) {
92
92
  react_1.default.createElement(material_1.Button, { variant: "contained", onClick: onClose }, "Cancel"),
93
93
  react_1.default.createElement(material_1.Button, { variant: "contained", color: "primary", onClick: handleSubmit, disabled: !ready }, "Submit")))));
94
94
  });
95
+ exports.default = AddCustomPluginDialog;
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { BasePlugin } from '@jbrowse/core/util/types';
3
3
  import { PluginStoreModel } from '../model';
4
- declare const _default: ({ plugin, model, }: {
4
+ declare const InstalledPlugin: ({ plugin, model, }: {
5
5
  plugin: BasePlugin;
6
6
  model: PluginStoreModel;
7
7
  }) => React.JSX.Element;
8
- export default _default;
8
+ export default InstalledPlugin;
@@ -46,12 +46,15 @@ function LockedPlugin() {
46
46
  return (react_1.default.createElement(material_1.Tooltip, { className: classes.lockedPluginTooltip, title: "This plugin was installed by an administrator, you cannot remove it." },
47
47
  react_1.default.createElement(Lock_1.default, null)));
48
48
  }
49
- exports.default = (0, mobx_react_1.observer)(function ({ plugin, model, }) {
49
+ const InstalledPlugin = (0, mobx_react_1.observer)(function ({ plugin, model, }) {
50
+ var _a;
50
51
  const [dialogPlugin, setDialogPlugin] = (0, react_1.useState)();
51
52
  const { pluginManager } = (0, util_1.getEnv)(model);
52
53
  const session = (0, util_1.getSession)(model);
53
- const { jbrowse, adminMode, sessionPlugins } = session;
54
- const isSessionPlugin = sessionPlugins === null || sessionPlugins === void 0 ? void 0 : sessionPlugins.some((p) => pluginManager.pluginMetadata[plugin.name].url === p.url);
54
+ const { jbrowse, adminMode } = session;
55
+ const isSessionPlugin = (0, types_1.isSessionWithSessionPlugins)(session)
56
+ ? (_a = session.sessionPlugins) === null || _a === void 0 ? void 0 : _a.some(p => pluginManager.pluginMetadata[plugin.name].url === p.url)
57
+ : false;
55
58
  return (react_1.default.createElement(react_1.default.Fragment, null,
56
59
  dialogPlugin ? (react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement(react_1.default.Fragment, null) },
57
60
  react_1.default.createElement(DeletePluginDialog, { plugin: dialogPlugin, onClose: name => {
@@ -67,7 +70,8 @@ exports.default = (0, mobx_react_1.observer)(function ({ plugin, model, }) {
67
70
  setDialogPlugin(undefined);
68
71
  } }))) : null,
69
72
  react_1.default.createElement(material_1.ListItem, { key: plugin.name },
70
- adminMode || isSessionPlugin ? (react_1.default.createElement(material_1.IconButton, { "aria-label": "removePlugin", "data-testid": `removePlugin-${plugin.name}`, onClick: () => setDialogPlugin(plugin.name) },
73
+ adminMode || isSessionPlugin ? (react_1.default.createElement(material_1.IconButton, { "data-testid": `removePlugin-${plugin.name}`, onClick: () => setDialogPlugin(plugin.name) },
71
74
  react_1.default.createElement(Close_1.default, null))) : (react_1.default.createElement(LockedPlugin, null)),
72
75
  react_1.default.createElement(material_1.Typography, null, plugin.name))));
73
76
  });
77
+ exports.default = InstalledPlugin;
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import PluginManager from '@jbrowse/core/PluginManager';
3
3
  import { PluginStoreModel } from '../model';
4
- declare const _default: ({ pluginManager, model, }: {
4
+ declare const InstalledPluginsList: ({ pluginManager, model, }: {
5
5
  pluginManager: PluginManager;
6
6
  model: PluginStoreModel;
7
7
  }) => React.JSX.Element;
8
- export default _default;
8
+ export default InstalledPluginsList;
@@ -7,7 +7,7 @@ const react_1 = __importDefault(require("react"));
7
7
  const mobx_react_1 = require("mobx-react");
8
8
  const material_1 = require("@mui/material");
9
9
  const InstalledPlugin_1 = __importDefault(require("./InstalledPlugin"));
10
- exports.default = (0, mobx_react_1.observer)(function InstalledPluginsList({ pluginManager, model, }) {
10
+ const InstalledPluginsList = (0, mobx_react_1.observer)(function InstalledPluginsList({ pluginManager, model, }) {
11
11
  const { plugins } = pluginManager;
12
12
  const { filterText } = model;
13
13
  const externalPlugins = plugins.filter(p => { var _a; return !((_a = pluginManager.pluginMetadata[p.name]) === null || _a === void 0 ? void 0 : _a.isCore); });
@@ -15,3 +15,4 @@ exports.default = (0, mobx_react_1.observer)(function InstalledPluginsList({ plu
15
15
  .filter(p => p.name.toLowerCase().includes(filterText.toLowerCase()))
16
16
  .map(p => react_1.default.createElement(InstalledPlugin_1.default, { key: p.name, plugin: p, model: model }))) : (react_1.default.createElement(material_1.Typography, null, "No plugins currently installed"))));
17
17
  });
18
+ exports.default = InstalledPluginsList;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { JBrowsePlugin } from '@jbrowse/core/util/types';
3
3
  import { PluginStoreModel } from '../model';
4
- declare const _default: ({ plugin, model, adminMode, }: {
4
+ declare const PluginCard: ({ plugin, model, adminMode, }: {
5
5
  plugin: JBrowsePlugin;
6
6
  model: PluginStoreModel;
7
7
  adminMode: boolean;
8
8
  }) => React.JSX.Element;
9
- export default _default;
9
+ export default PluginCard;
@@ -53,7 +53,7 @@ const useStyles = (0, mui_1.makeStyles)()({
53
53
  alignItems: 'center',
54
54
  },
55
55
  });
56
- exports.default = (0, mobx_react_1.observer)(function PluginCard({ plugin, model, adminMode, }) {
56
+ const PluginCard = (0, mobx_react_1.observer)(function PluginCard({ plugin, model, adminMode, }) {
57
57
  const { classes } = useStyles();
58
58
  const session = (0, util_1.getSession)(model);
59
59
  const { pluginManager } = (0, util_1.getEnv)(model);
@@ -84,3 +84,4 @@ exports.default = (0, mobx_react_1.observer)(function PluginCard({ plugin, model
84
84
  setTempDisabled(true);
85
85
  } }, isInstalled ? 'Installed' : 'Install'))));
86
86
  });
87
+ exports.default = PluginCard;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { PluginStoreModel } from '../model';
3
- declare function PluginStoreWidget({ model }: {
3
+ declare const PluginStoreWidget: ({ model, }: {
4
4
  model: PluginStoreModel;
5
- }): React.JSX.Element;
6
- declare const _default: typeof PluginStoreWidget;
7
- export default _default;
5
+ }) => React.JSX.Element;
6
+ export default PluginStoreWidget;
@@ -59,7 +59,7 @@ const useStyles = (0, mui_1.makeStyles)()(theme => ({
59
59
  display: 'flex',
60
60
  },
61
61
  }));
62
- function PluginStoreWidget({ model }) {
62
+ const PluginStoreWidget = (0, mobx_react_1.observer)(function ({ model, }) {
63
63
  const { classes } = useStyles();
64
64
  const { plugins, error } = (0, util_2.useFetchPlugins)();
65
65
  const [open, setOpen] = (0, react_1.useState)(false);
@@ -98,5 +98,5 @@ function PluginStoreWidget({ model }) {
98
98
  .includes(model.filterText.toLowerCase()));
99
99
  })
100
100
  .map(plugin => (react_1.default.createElement(PluginCard_1.default, { key: plugin.name, plugin: plugin, model: model, adminMode: !!adminMode })))) : (react_1.default.createElement(ui_1.LoadingEllipses, null)))));
101
- }
102
- exports.default = (0, mobx_react_1.observer)(PluginStoreWidget);
101
+ });
102
+ exports.default = PluginStoreWidget;
package/dist/index.d.ts CHANGED
@@ -1,10 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import Plugin from '@jbrowse/core/Plugin';
3
3
  import PluginManager from '@jbrowse/core/PluginManager';
4
- declare const SetDefaultSession: import("react").LazyExoticComponent<({ rootModel, onClose }: {
5
- rootModel?: unknown;
6
- onClose: () => void;
7
- }) => import("react").JSX.Element | null>;
8
4
  declare const AssemblyManager: import("react").LazyExoticComponent<({ rootModel, onClose, }: {
9
5
  rootModel: any;
10
6
  onClose: (arg: boolean) => void;
@@ -16,14 +12,10 @@ export default class extends Plugin {
16
12
  rootModel: any;
17
13
  onClose: (arg: boolean) => void;
18
14
  }) => import("react").JSX.Element>;
19
- SetDefaultSession: import("react").LazyExoticComponent<({ rootModel, onClose }: {
20
- rootModel?: unknown;
21
- onClose: () => void;
22
- }) => import("react").JSX.Element | null>;
23
15
  };
24
16
  install(pluginManager: PluginManager): void;
25
17
  configure(_pluginManager: PluginManager): void;
26
18
  }
27
- export { AssemblyManager, SetDefaultSession };
19
+ export { AssemblyManager };
28
20
  export { type AddTrackModel } from './AddTrackWidget/model';
29
21
  export { type HierarchicalTrackSelectorModel } from './HierarchicalTrackSelectorWidget';
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.SetDefaultSession = exports.AssemblyManager = void 0;
29
+ exports.AssemblyManager = void 0;
30
30
  const react_1 = require("react");
31
31
  const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
32
32
  const ucsc_trackhub_1 = __importDefault(require("./ucsc-trackhub"));
@@ -34,8 +34,6 @@ const AddTrackWidget_1 = __importDefault(require("./AddTrackWidget"));
34
34
  const AddConnectionWidget_1 = __importDefault(require("./AddConnectionWidget"));
35
35
  const PluginStoreWidget_1 = __importDefault(require("./PluginStoreWidget"));
36
36
  const HierarchicalTrackSelectorWidget_1 = __importDefault(require("./HierarchicalTrackSelectorWidget"));
37
- const SetDefaultSession = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./SetDefaultSession'))));
38
- exports.SetDefaultSession = SetDefaultSession;
39
37
  const AssemblyManager = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./AssemblyManager'))));
40
38
  exports.AssemblyManager = AssemblyManager;
41
39
  class default_1 extends Plugin_1.default {
@@ -44,7 +42,6 @@ class default_1 extends Plugin_1.default {
44
42
  this.name = 'DataManagementPlugin';
45
43
  this.exports = {
46
44
  AssemblyManager,
47
- SetDefaultSession,
48
45
  };
49
46
  }
50
47
  install(pluginManager) {
@@ -40,7 +40,7 @@ function UCSCTrackHubConnection(pluginManager) {
40
40
  }))
41
41
  .actions(self => ({
42
42
  async connect() {
43
- var _a;
43
+ var _a, _b;
44
44
  const session = (0, util_1.getSession)(self);
45
45
  const notLoadedAssemblies = [];
46
46
  try {
@@ -108,7 +108,7 @@ function UCSCTrackHubConnection(pluginManager) {
108
108
  catch (e) {
109
109
  console.error(e);
110
110
  session.notify(`There was a problem connecting to the UCSC Track Hub "${self.configuration.name}". Please make sure you have entered a valid hub.txt file. The error that was thrown is: "${e}"`, 'error');
111
- session.breakConnection(self.configuration);
111
+ (_b = session.breakConnection) === null || _b === void 0 ? void 0 : _b.call(session, self.configuration);
112
112
  }
113
113
  },
114
114
  }));
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- declare const _default: ({ model, }: {
2
+ declare const AddConnectionWidget: ({ model }: {
3
3
  model: unknown;
4
4
  }) => React.JSX.Element;
5
- export default _default;
5
+ export default AddConnectionWidget;
@@ -1,11 +1,12 @@
1
- import React, { useState } from 'react';
1
+ import React, { useMemo, useState } from 'react';
2
2
  import { Button, Step, StepContent, StepLabel, Stepper } from '@mui/material';
3
- import { getSession, getEnv } from '@jbrowse/core/util';
3
+ import { getSession, getEnv, isSessionModelWithWidgets, } from '@jbrowse/core/util';
4
4
  import { makeStyles } from 'tss-react/mui';
5
5
  import { observer } from 'mobx-react';
6
6
  // locals
7
7
  import ConfigureConnection from './ConfigureConnection';
8
8
  import ConnectionTypeSelect from './ConnectionTypeSelect';
9
+ import { isSessionWithConnections } from '@jbrowse/product-core';
9
10
  const useStyles = makeStyles()(theme => ({
10
11
  root: {
11
12
  marginTop: theme.spacing(1),
@@ -22,13 +23,15 @@ const useStyles = makeStyles()(theme => ({
22
23
  },
23
24
  }));
24
25
  const steps = ['Select a Connection Type', 'Configure Connection'];
25
- export default observer(function AddConnectionWidget({ model, }) {
26
+ const AddConnectionWidget = observer(function ({ model }) {
26
27
  const [connectionType, setConnectionType] = useState();
27
- const [configModel, setConfigModel] = useState();
28
+ const [connectionId, setConnectionId] = useState();
28
29
  const [activeStep, setActiveStep] = useState(0);
29
30
  const { classes } = useStyles();
30
31
  const session = getSession(model);
31
32
  const { pluginManager } = getEnv(session);
33
+ // useMemo is needed for react@18+mobx-react@9, previous code called configScema.create directly in a setConfigModel useState hook setter but this caused infinite loop
34
+ const configModel = useMemo(() => connectionType === null || connectionType === void 0 ? void 0 : connectionType.configSchema.create({ connectionId }, getEnv(model)), [connectionId, connectionType, model]);
32
35
  return (React.createElement("div", { className: classes.root },
33
36
  React.createElement(Stepper, { className: classes.stepper, activeStep: activeStep, orientation: "vertical" }, steps.map(label => (React.createElement(Step, { key: label },
34
37
  React.createElement(StepLabel, null, label),
@@ -38,21 +41,27 @@ export default observer(function AddConnectionWidget({ model, }) {
38
41
  if (!c) {
39
42
  return;
40
43
  }
41
- const connectionId = `${c.name}-${Date.now()}`;
42
- setConfigModel(c.configSchema.create({ connectionId }, getEnv(model)));
44
+ setConnectionId(`${c.name}-${Date.now()}`);
43
45
  } })) : connectionType && configModel ? (React.createElement(ConfigureConnection, { connectionType: connectionType, model: configModel, session: session })) : null,
44
46
  React.createElement("div", { className: classes.actionsContainer },
45
47
  React.createElement(Button, { disabled: activeStep === 0, onClick: () => setActiveStep(activeStep - 1), className: classes.button }, "Back"),
46
48
  React.createElement(Button, { disabled: !((activeStep === 0 && connectionType) ||
47
49
  (activeStep === 1 && configModel)), variant: "contained", color: "primary", onClick: () => {
48
- var _a;
49
50
  if (activeStep === steps.length - 1) {
50
- const conf = session.addConnectionConf(configModel);
51
- (_a = session.makeConnection) === null || _a === void 0 ? void 0 : _a.call(session, conf);
52
- session.hideWidget(model);
51
+ if (configModel && isSessionWithConnections(session)) {
52
+ const conf = session.addConnectionConf(configModel);
53
+ session.makeConnection(conf);
54
+ }
55
+ else {
56
+ session.notify('No config model to add');
57
+ }
58
+ if (isSessionModelWithWidgets(session)) {
59
+ session.hideWidget(model);
60
+ }
53
61
  }
54
62
  else {
55
63
  setActiveStep(activeStep + 1);
56
64
  }
57
65
  }, className: classes.button, "data-testid": "addConnectionNext" }, activeStep === steps.length - 1 ? 'Connect' : 'Next')))))))));
58
66
  });
67
+ export default AddConnectionWidget;
@@ -2,9 +2,9 @@ import React from 'react';
2
2
  import { ConnectionType } from '@jbrowse/core/pluggableElementTypes';
3
3
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
4
4
  import { AbstractSessionModel } from '@jbrowse/core/util';
5
- declare const _default: ({ connectionType, model, session, }: {
5
+ declare const ConfigureConnection: ({ connectionType, model, session, }: {
6
6
  connectionType: ConnectionType;
7
7
  model: AnyConfigurationModel;
8
8
  session: AbstractSessionModel;
9
9
  }) => React.JSX.Element;
10
- export default _default;
10
+ export default ConfigureConnection;
@@ -2,8 +2,9 @@ import React, { Suspense } from 'react';
2
2
  import { observer } from 'mobx-react';
3
3
  import { ConfigurationEditor } from '@jbrowse/plugin-config';
4
4
  import { LoadingEllipses } from '@jbrowse/core/ui';
5
- export default observer(function ({ connectionType, model, session, }) {
5
+ const ConfigureConnection = observer(function ({ connectionType, model, session, }) {
6
6
  const ConfigEditorComponent = connectionType.configEditorComponent || ConfigurationEditor;
7
7
  return (React.createElement(Suspense, { fallback: React.createElement(LoadingEllipses, null) },
8
8
  React.createElement(ConfigEditorComponent, { model: { target: model }, session: session })));
9
9
  });
10
+ export default ConfigureConnection;
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { ConnectionType } from '@jbrowse/core/pluggableElementTypes';
3
- declare const _default: ({ connectionTypeChoices, connectionType, setConnectionType, }: {
3
+ declare const ConnectionTypeSelect: ({ connectionTypeChoices, connectionType, setConnectionType, }: {
4
4
  connectionTypeChoices: ConnectionType[];
5
5
  connectionType?: ConnectionType | undefined;
6
6
  setConnectionType: (c?: ConnectionType) => void;
7
7
  }) => React.JSX.Element;
8
- export default _default;
8
+ export default ConnectionTypeSelect;
@@ -3,14 +3,16 @@ import { IconButton, MenuItem, TextField } from '@mui/material';
3
3
  import { observer } from 'mobx-react';
4
4
  // icons
5
5
  import OpenInNewIcon from '@mui/icons-material/OpenInNew';
6
- export default observer(function ConnectionTypeSelect({ connectionTypeChoices, connectionType, setConnectionType, }) {
6
+ const ConnectionTypeSelect = observer(function ConnectionTypeSelect({ connectionTypeChoices, connectionType, setConnectionType, }) {
7
+ const firstChoice = connectionTypeChoices[0];
7
8
  useEffect(() => {
8
9
  if (!connectionType) {
9
- setConnectionType(connectionTypeChoices[0]);
10
+ setConnectionType(firstChoice);
10
11
  }
11
- });
12
+ }, [connectionType, firstChoice, setConnectionType]);
12
13
  return (React.createElement("form", { autoComplete: "off" }, connectionType ? (React.createElement(TextField, { value: connectionType.name, label: "connectionType", helperText: connectionType.description ? (React.createElement(React.Fragment, null,
13
14
  connectionType.description,
14
15
  connectionType.url ? (React.createElement(IconButton, { href: connectionType.url, rel: "noopener noreferrer", target: "_blank" },
15
16
  React.createElement(OpenInNewIcon, null))) : null)) : null, select: true, fullWidth: true, onChange: event => setConnectionType(connectionTypeChoices.find(c => c.name === event.target.value)), variant: "outlined" }, connectionTypeChoices.map(c => (React.createElement(MenuItem, { key: c.name, value: c.name }, c.displayName || c.name))))) : null));
16
17
  });
18
+ export default ConnectionTypeSelect;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { AddTrackModel } from '../model';
3
- declare function AddTrackSelector({ model }: {
3
+ declare const AddTrackSelector: ({ model, }: {
4
4
  model: AddTrackModel;
5
- }): React.JSX.Element;
6
- declare const _default: typeof AddTrackSelector;
7
- export default _default;
5
+ }) => React.JSX.Element;
6
+ export default AddTrackSelector;
@@ -4,7 +4,7 @@ import { FormControl, FormHelperText, Select, MenuItem } from '@mui/material';
4
4
  import { getEnv } from '@jbrowse/core/util';
5
5
  import DefaultAddTrackWorkflow from './DefaultAddTrackWorkflow';
6
6
  import PasteConfigWorkflow from './PasteConfigWorkflow';
7
- function AddTrackSelector({ model }) {
7
+ const AddTrackSelector = observer(function ({ model, }) {
8
8
  const [val, setVal] = useState('Default add track workflow');
9
9
  const { pluginManager } = getEnv(model);
10
10
  const widgets = pluginManager.getAddTrackWorkflowElements();
@@ -22,5 +22,5 @@ function AddTrackSelector({ model }) {
22
22
  React.createElement(FormHelperText, null, "Type of add track workflow")),
23
23
  React.createElement("br", null),
24
24
  React.createElement(Component, { model: model })));
25
- }
26
- export default observer(AddTrackSelector);
25
+ });
26
+ export default AddTrackSelector;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { AddTrackModel } from '../model';
3
- declare const _default: ({ model, }: {
3
+ declare const ConfirmTrack: ({ model, }: {
4
4
  model: AddTrackModel;
5
5
  }) => React.JSX.Element;
6
- export default _default;
6
+ export default ConfirmTrack;