@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,17 @@
1
+ "use strict";
2
+
3
+ var _rootModel = require("@jbrowse/web/src/rootModel");
4
+
5
+ jest.mock('@jbrowse/web/src/makeWorkerInstance', function () {
6
+ return function () {};
7
+ });
8
+ describe('PluginStoreModel', function () {
9
+ it('filters plugins correctly', function () {
10
+ var session = (0, _rootModel.createTestSession)();
11
+ var model = session.addWidget('PluginStoreWidget', 'pluginStoreWidget');
12
+ model.setFilterText('Foo');
13
+ expect(model.filterText).toEqual('Foo');
14
+ model.clearFilterText();
15
+ expect(model.filterText).toEqual('');
16
+ });
17
+ });
@@ -0,0 +1,64 @@
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 _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _mobxReact = require("mobx-react");
15
+
16
+ var _core = require("@material-ui/core");
17
+
18
+ function canSetDefaultSession(obj) {
19
+ return (0, _typeof2["default"])(obj) === 'object' && !!obj && 'jbrowse' in obj;
20
+ }
21
+
22
+ var SetDefaultSession = (0, _mobxReact.observer)(function (_ref) {
23
+ var rootModel = _ref.rootModel,
24
+ onClose = _ref.onClose;
25
+
26
+ if (!rootModel) {
27
+ return null;
28
+ }
29
+
30
+ if (!canSetDefaultSession(rootModel)) {
31
+ console.error('Incorrect rootmodel');
32
+ return null;
33
+ }
34
+
35
+ var jbrowse = rootModel.jbrowse,
36
+ session = rootModel.session;
37
+ return /*#__PURE__*/_react["default"].createElement(_core.Dialog, {
38
+ open: true,
39
+ onClose: onClose
40
+ }, /*#__PURE__*/_react["default"].createElement(_core.DialogTitle, null, "Set default session"), /*#__PURE__*/_react["default"].createElement(_core.DialogContent, null, /*#__PURE__*/_react["default"].createElement(_core.Typography, null, "Select \"Set current session as default\" to make your current session saved to the config file. You can also hit \"Clear default session\", which would remove the default session from the config.")), /*#__PURE__*/_react["default"].createElement(_core.DialogActions, null, /*#__PURE__*/_react["default"].createElement(_core.Button, {
41
+ variant: "contained",
42
+ onClick: function onClick() {
43
+ jbrowse.setDefaultSessionConf({
44
+ name: "New session"
45
+ });
46
+ onClose();
47
+ }
48
+ }, "Clear default session"), /*#__PURE__*/_react["default"].createElement(_core.Button, {
49
+ color: "secondary",
50
+ variant: "contained",
51
+ onClick: function onClick() {
52
+ return onClose();
53
+ }
54
+ }, "Cancel"), /*#__PURE__*/_react["default"].createElement(_core.Button, {
55
+ color: "primary",
56
+ variant: "contained",
57
+ onClick: function onClick() {
58
+ jbrowse.setDefaultSessionConf(session);
59
+ onClose();
60
+ }
61
+ }, "Set current session as default")));
62
+ });
63
+ var _default = SetDefaultSession;
64
+ exports["default"] = _default;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+
7
+ var _react = _interopRequireDefault(require("react"));
8
+
9
+ var _react2 = require("@testing-library/react");
10
+
11
+ var _SetDefaultSession = _interopRequireDefault(require("./SetDefaultSession"));
12
+
13
+ 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; }
14
+
15
+ 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; }
16
+
17
+ var mockRootModel = {
18
+ jbrowse: {
19
+ assemblies: [{
20
+ name: 'testAssembly',
21
+ sequence: {
22
+ type: 'testSequenceTrack',
23
+ trackId: '',
24
+ adapter: {
25
+ type: 'testSeqAdapter',
26
+ twoBitLocation: {
27
+ uri: 'test.2bit',
28
+ locationType: 'UriLocation'
29
+ }
30
+ }
31
+ }
32
+ }],
33
+ setDefaultSessionConf: jest.fn()
34
+ },
35
+ session: {
36
+ savedSessions: [],
37
+ notify: jest.fn()
38
+ }
39
+ };
40
+ describe('SetDefaultSession GUI', function () {
41
+ it('closes when the return button is clicked', function () {
42
+ var onClose = jest.fn();
43
+
44
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_SetDefaultSession["default"], {
45
+ rootModel: mockRootModel,
46
+ onClose: onClose
47
+ })),
48
+ getByText = _render.getByText;
49
+
50
+ _react2.fireEvent.click(getByText('Cancel'));
51
+
52
+ expect(onClose).toHaveBeenCalled();
53
+ });
54
+ it('unsets to the default session with reset button', function () {
55
+ var MockSession = _objectSpread(_objectSpread({}, mockRootModel), {}, {
56
+ session: _objectSpread(_objectSpread({}, mockRootModel.session), {}, {
57
+ name: "Moo session",
58
+ savedSessions: [],
59
+ notify: jest.fn()
60
+ })
61
+ });
62
+
63
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_SetDefaultSession["default"], {
64
+ rootModel: MockSession,
65
+ onClose: function onClose() {}
66
+ })),
67
+ getByText = _render2.getByText;
68
+
69
+ _react2.fireEvent.click(getByText('Clear default session'));
70
+
71
+ expect(MockSession.jbrowse.setDefaultSessionConf).toHaveBeenCalledWith({
72
+ name: "New session"
73
+ });
74
+ });
75
+ });
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "default", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _SetDefaultSession["default"];
12
+ }
13
+ });
14
+
15
+ var _SetDefaultSession = _interopRequireDefault(require("./SetDefaultSession"));
package/dist/index.js CHANGED
@@ -1,8 +1,161 @@
1
+ "use strict";
1
2
 
2
- 'use strict'
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
 
4
- if (process.env.NODE_ENV === 'production') {
5
- module.exports = require('./plugin-data-management.cjs.production.min.js')
6
- } else {
7
- module.exports = require('./plugin-data-management.cjs.development.js')
8
- }
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = exports.SetDefaultSession = exports.AssemblyManager = void 0;
9
+
10
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
+
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
+
24
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
+
26
+ var _react = require("react");
27
+
28
+ var _ConnectionType = _interopRequireDefault(require("@jbrowse/core/pluggableElementTypes/ConnectionType"));
29
+
30
+ var _WidgetType = _interopRequireDefault(require("@jbrowse/core/pluggableElementTypes/WidgetType"));
31
+
32
+ var _Plugin2 = _interopRequireDefault(require("@jbrowse/core/Plugin"));
33
+
34
+ var _ucscTrackhub = require("./ucsc-trackhub");
35
+
36
+ var _AddTrackWidget = require("./AddTrackWidget");
37
+
38
+ var _AddConnectionWidget = require("./AddConnectionWidget");
39
+
40
+ var _HierarchicalTrackSelectorWidget = require("./HierarchicalTrackSelectorWidget");
41
+
42
+ var _PluginStoreWidget = require("./PluginStoreWidget");
43
+
44
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
45
+
46
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
+
48
+ 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); }
49
+
50
+ 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; }
51
+
52
+ var SetDefaultSession = /*#__PURE__*/(0, _react.lazy)(function () {
53
+ return Promise.resolve().then(function () {
54
+ return _interopRequireWildcard(require('./SetDefaultSession'));
55
+ });
56
+ });
57
+ exports.SetDefaultSession = SetDefaultSession;
58
+ var AssemblyManager = /*#__PURE__*/(0, _react.lazy)(function () {
59
+ return Promise.resolve().then(function () {
60
+ return _interopRequireWildcard(require('./AssemblyManager'));
61
+ });
62
+ });
63
+ exports.AssemblyManager = AssemblyManager;
64
+
65
+ var _default = /*#__PURE__*/function (_Plugin) {
66
+ (0, _inherits2["default"])(_default, _Plugin);
67
+
68
+ var _super = _createSuper(_default);
69
+
70
+ function _default() {
71
+ var _this;
72
+
73
+ (0, _classCallCheck2["default"])(this, _default);
74
+
75
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
76
+ args[_key] = arguments[_key];
77
+ }
78
+
79
+ _this = _super.call.apply(_super, [this].concat(args));
80
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "name", 'DataManagementPlugin');
81
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "exports", {
82
+ AssemblyManager: AssemblyManager,
83
+ SetDefaultSession: SetDefaultSession
84
+ });
85
+ return _this;
86
+ }
87
+
88
+ (0, _createClass2["default"])(_default, [{
89
+ key: "install",
90
+ value: function install(pluginManager) {
91
+ pluginManager.addConnectionType(function () {
92
+ return new _ConnectionType["default"]({
93
+ name: 'UCSCTrackHubConnection',
94
+ configSchema: _ucscTrackhub.configSchema,
95
+ stateModel: (0, _ucscTrackhub.modelFactory)(pluginManager),
96
+ displayName: 'UCSC Track Hub',
97
+ description: 'A track or assembly hub in the Track Hub format',
98
+ url: '//genome.ucsc.edu/goldenPath/help/hgTrackHubHelp.html#Intro'
99
+ });
100
+ });
101
+ pluginManager.addWidgetType(function () {
102
+ return new _WidgetType["default"]({
103
+ name: 'HierarchicalTrackSelectorWidget',
104
+ heading: 'Available tracks',
105
+ configSchema: _HierarchicalTrackSelectorWidget.configSchema,
106
+ stateModel: (0, _HierarchicalTrackSelectorWidget.stateModelFactory)(pluginManager),
107
+ ReactComponent: /*#__PURE__*/(0, _react.lazy)(function () {
108
+ return Promise.resolve().then(function () {
109
+ return _interopRequireWildcard(require('./HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector'));
110
+ });
111
+ })
112
+ });
113
+ });
114
+ pluginManager.addWidgetType(function () {
115
+ return new _WidgetType["default"]({
116
+ name: 'AddTrackWidget',
117
+ heading: 'Add a track',
118
+ configSchema: _AddTrackWidget.configSchema,
119
+ stateModel: (0, _AddTrackWidget.stateModelFactory)(pluginManager),
120
+ ReactComponent: /*#__PURE__*/(0, _react.lazy)(function () {
121
+ return Promise.resolve().then(function () {
122
+ return _interopRequireWildcard(require('./AddTrackWidget/components/AddTrackWidget'));
123
+ });
124
+ })
125
+ });
126
+ });
127
+ pluginManager.addWidgetType(function () {
128
+ return new _WidgetType["default"]({
129
+ name: 'AddConnectionWidget',
130
+ heading: 'Add a connection',
131
+ configSchema: _AddConnectionWidget.configSchema,
132
+ stateModel: _AddConnectionWidget.stateModel,
133
+ ReactComponent: /*#__PURE__*/(0, _react.lazy)(function () {
134
+ return Promise.resolve().then(function () {
135
+ return _interopRequireWildcard(require('./AddConnectionWidget/components/AddConnectionWidget'));
136
+ });
137
+ })
138
+ });
139
+ });
140
+ pluginManager.addWidgetType(function () {
141
+ return new _WidgetType["default"]({
142
+ name: 'PluginStoreWidget',
143
+ heading: 'Plugin store',
144
+ configSchema: _PluginStoreWidget.configSchema,
145
+ stateModel: (0, _PluginStoreWidget.stateModelFactory)(pluginManager),
146
+ ReactComponent: /*#__PURE__*/(0, _react.lazy)(function () {
147
+ return Promise.resolve().then(function () {
148
+ return _interopRequireWildcard(require('./PluginStoreWidget/components/PluginStoreWidget'));
149
+ });
150
+ })
151
+ });
152
+ });
153
+ }
154
+ }, {
155
+ key: "configure",
156
+ value: function configure(pluginManager) {}
157
+ }]);
158
+ return _default;
159
+ }(_Plugin2["default"]);
160
+
161
+ exports["default"] = _default;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _PluginManager = _interopRequireDefault(require("@jbrowse/core/PluginManager"));
6
+
7
+ var _pluginConfig = _interopRequireDefault(require("@jbrowse/plugin-config"));
8
+
9
+ var _mobxStateTree = require("mobx-state-tree");
10
+
11
+ var _ = _interopRequireDefault(require("."));
12
+
13
+ describe('Data management', function () {
14
+ var pluginManager;
15
+ beforeAll(function () {
16
+ var originalConsoleWarn = console.warn;
17
+ console.warn = jest.fn();
18
+ pluginManager = new _PluginManager["default"]([new _["default"](), new _pluginConfig["default"]()]);
19
+ pluginManager.createPluggableElements();
20
+ pluginManager.configure();
21
+ console.warn = originalConsoleWarn;
22
+ });
23
+ it("won't add if already added", function () {
24
+ expect(function () {
25
+ return pluginManager.addPlugin(new _["default"]());
26
+ }).toThrow(/JBrowse already configured, cannot add plugins/);
27
+ });
28
+ it('adds track add widget', function () {
29
+ var AddTrackWidget = pluginManager.getWidgetType('AddTrackWidget');
30
+ var config = AddTrackWidget.configSchema.create({
31
+ type: 'AddTrackWidget'
32
+ });
33
+ expect((0, _mobxStateTree.getSnapshot)(config)).toMatchSnapshot();
34
+ });
35
+ it('adds config editor widget', function () {
36
+ var ConfigurationEditorWidget = pluginManager.getWidgetType('ConfigurationEditorWidget');
37
+ var config = ConfigurationEditorWidget.configSchema.create({
38
+ type: 'ConfigurationEditorWidget'
39
+ });
40
+ expect((0, _mobxStateTree.getSnapshot)(config)).toMatchSnapshot();
41
+ });
42
+ it('adds connection add widget', function () {
43
+ var AddConnectionWidget = pluginManager.getWidgetType('AddConnectionWidget');
44
+ var config = AddConnectionWidget.configSchema.create({
45
+ type: 'AddConnectionWidget'
46
+ });
47
+ expect((0, _mobxStateTree.getSnapshot)(config)).toMatchSnapshot();
48
+ });
49
+ it('adds hierarchical track selector', function () {
50
+ var HierarchicalTrackSelectorWidget = pluginManager.getWidgetType('HierarchicalTrackSelectorWidget');
51
+ var config = HierarchicalTrackSelectorWidget.configSchema.create({
52
+ type: 'HierarchicalTrackSelectorWidget'
53
+ });
54
+ expect((0, _mobxStateTree.getSnapshot)(config)).toMatchSnapshot();
55
+ });
56
+ });
@@ -58,7 +58,7 @@ var ArrowDropDownIcon = _interopDefault(require('@material-ui/icons/ArrowDropDow
58
58
  var ArrowRightIcon = _interopDefault(require('@material-ui/icons/ArrowRight'));
59
59
  var MenuIcon = _interopDefault(require('@material-ui/icons/Menu'));
60
60
  var MoreIcon = _interopDefault(require('@material-ui/icons/MoreHoriz'));
61
- var PowerOutlinedIcon = _interopDefault(require('@material-ui/icons/PowerOutlined'));
61
+ var Icons = require('@jbrowse/core/ui/Icons');
62
62
  var AutoSizer = _interopDefault(require('react-virtualized-auto-sizer'));
63
63
  var JBrowseMenu = _interopDefault(require('@jbrowse/core/ui/Menu'));
64
64
  var reactVtree = require('react-vtree');
@@ -3392,7 +3392,7 @@ var useStyles$7 = /*#__PURE__*/core.makeStyles(function (theme) {
3392
3392
 
3393
3393
  return {
3394
3394
  searchBox: {
3395
- marginBottom: theme.spacing(2)
3395
+ margin: theme.spacing(2)
3396
3396
  },
3397
3397
  menuIcon: {
3398
3398
  marginRight: theme.spacing(1),
@@ -3703,7 +3703,7 @@ var HierarchicalTrackSelectorContainer = /*#__PURE__*/mobxReact.observer(functio
3703
3703
  model: model,
3704
3704
  toolbarHeight: toolbarHeight,
3705
3705
  overrideDimensions: overrideDimensions
3706
- }), /*#__PURE__*/React__default.createElement(core.Fab, {
3706
+ }), session.addConnectionConf || session.addTrackConf ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.Fab, {
3707
3707
  color: "secondary",
3708
3708
  className: classes.fab,
3709
3709
  onClick: function onClick(event) {
@@ -3715,13 +3715,13 @@ var HierarchicalTrackSelectorContainer = /*#__PURE__*/mobxReact.observer(functio
3715
3715
  onClose: function onClose() {
3716
3716
  return setAnchorEl(null);
3717
3717
  }
3718
- }, /*#__PURE__*/React__default.createElement(core.MenuItem, {
3718
+ }, session.addConnectionConf ? /*#__PURE__*/React__default.createElement(core.MenuItem, {
3719
3719
  onClick: function onClick() {
3720
3720
  handleFabClose();
3721
3721
  var widget = session.addWidget('AddConnectionWidget', 'addConnectionWidget');
3722
3722
  session.showWidget(widget);
3723
3723
  }
3724
- }, "Add connection"), /*#__PURE__*/React__default.createElement(core.MenuItem, {
3724
+ }, "Add connection") : null, session.addTrackConf ? /*#__PURE__*/React__default.createElement(core.MenuItem, {
3725
3725
  onClick: function onClick() {
3726
3726
  handleFabClose();
3727
3727
  var widget = session.addWidget('AddTrackWidget', 'addTrackWidget', {
@@ -3729,7 +3729,7 @@ var HierarchicalTrackSelectorContainer = /*#__PURE__*/mobxReact.observer(functio
3729
3729
  });
3730
3730
  session.showWidget(widget);
3731
3731
  }
3732
- }, "Add track")));
3732
+ }, "Add track") : null)) : null);
3733
3733
  });
3734
3734
  var HierarchicalTrackSelectorHeader = /*#__PURE__*/mobxReact.observer(function (_ref6) {
3735
3735
  var model = _ref6.model,
@@ -3806,12 +3806,23 @@ var HierarchicalTrackSelectorHeader = /*#__PURE__*/mobxReact.observer(function (
3806
3806
  onClick: function onClick() {
3807
3807
  return setConnectionToggleOpen(true);
3808
3808
  }
3809
- }, {
3810
- label: 'Delete connections...',
3811
- onClick: function onClick() {
3812
- return setConnectionManagerOpen(true);
3813
- }
3814
3809
  }];
3810
+
3811
+ if (session.addConnectionConf) {
3812
+ connectionMenuItems.unshift({
3813
+ label: 'Add connection',
3814
+ onClick: function onClick() {
3815
+ session.showWidget(session.addWidget('AddConnectionWidget', 'addConnectionWidget'));
3816
+ }
3817
+ });
3818
+ connectionMenuItems.push({
3819
+ label: 'Delete connections...',
3820
+ onClick: function onClick() {
3821
+ return setConnectionManagerOpen(true);
3822
+ }
3823
+ });
3824
+ }
3825
+
3815
3826
  var assemblyMenuItems = assemblyNames.length > 1 ? [{
3816
3827
  label: 'Select assembly...',
3817
3828
  subMenu: assemblyNames.map(function (name, idx) {
@@ -3840,17 +3851,17 @@ var HierarchicalTrackSelectorHeader = /*#__PURE__*/mobxReact.observer(function (
3840
3851
  style: {
3841
3852
  display: 'flex'
3842
3853
  }
3843
- }, /*#__PURE__*/React__default.createElement(core.IconButton, {
3854
+ }, session.addTrackConf && /*#__PURE__*/React__default.createElement(core.IconButton, {
3844
3855
  className: classes.menuIcon,
3845
3856
  onClick: function onClick(event) {
3846
3857
  setMenuAnchorEl(event.currentTarget);
3847
3858
  }
3848
- }, /*#__PURE__*/React__default.createElement(MenuIcon, null)), /*#__PURE__*/React__default.createElement(core.IconButton, {
3859
+ }, /*#__PURE__*/React__default.createElement(MenuIcon, null)), session.makeConnection && /*#__PURE__*/React__default.createElement(core.IconButton, {
3849
3860
  className: classes.menuIcon,
3850
3861
  onClick: function onClick(event) {
3851
3862
  setConnectionAnchorEl(event.currentTarget);
3852
3863
  }
3853
- }, /*#__PURE__*/React__default.createElement(PowerOutlinedIcon, null)), /*#__PURE__*/React__default.createElement(core.TextField, {
3864
+ }, /*#__PURE__*/React__default.createElement(Icons.Cable, null)), /*#__PURE__*/React__default.createElement(core.TextField, {
3854
3865
  className: classes.searchBox,
3855
3866
  label: "Filter tracks",
3856
3867
  value: model.filterText,
@@ -3874,14 +3885,9 @@ var HierarchicalTrackSelectorHeader = /*#__PURE__*/mobxReact.observer(function (
3874
3885
  setConnectionAnchorEl(undefined);
3875
3886
  },
3876
3887
  onClose: function onClose() {
3877
- setConnectionAnchorEl(undefined);
3888
+ return setConnectionAnchorEl(undefined);
3878
3889
  },
3879
- menuItems: [{
3880
- label: 'Add connection',
3881
- onClick: function onClick() {
3882
- session.showWidget(session.addWidget('AddConnectionWidget', 'addConnectionWidget'));
3883
- }
3884
- }].concat(connectionMenuItems)
3890
+ menuItems: connectionMenuItems
3885
3891
  }), /*#__PURE__*/React__default.createElement(JBrowseMenu, {
3886
3892
  anchorEl: menuAnchorEl,
3887
3893
  open: Boolean(menuAnchorEl),
@@ -3890,7 +3896,7 @@ var HierarchicalTrackSelectorHeader = /*#__PURE__*/mobxReact.observer(function (
3890
3896
  setMenuAnchorEl(undefined);
3891
3897
  },
3892
3898
  onClose: function onClose() {
3893
- setMenuAnchorEl(undefined);
3899
+ return setMenuAnchorEl(undefined);
3894
3900
  },
3895
3901
  menuItems: menuItems
3896
3902
  }), /*#__PURE__*/React__default.createElement(React.Suspense, {
@@ -3901,7 +3907,7 @@ var HierarchicalTrackSelectorHeader = /*#__PURE__*/mobxReact.observer(function (
3901
3907
  session: session
3902
3908
  }) : deleteDialogDetails ? /*#__PURE__*/React__default.createElement(DeleteConnectionDialog, {
3903
3909
  handleClose: function handleClose() {
3904
- setDeleteDialogDetails(undefined);
3910
+ return setDeleteDialogDetails(undefined);
3905
3911
  },
3906
3912
  deleteDialogDetails: deleteDialogDetails,
3907
3913
  session: session