@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,191 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
+
7
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
+
9
+ var _rootModel = require("@jbrowse/web/src/rootModel");
10
+
11
+ var _styles = require("@material-ui/core/styles");
12
+
13
+ var _react = require("@testing-library/react");
14
+
15
+ var _react2 = _interopRequireDefault(require("react"));
16
+
17
+ var _HierarchicalTrackSelector = _interopRequireDefault(require("./HierarchicalTrackSelector"));
18
+
19
+ jest.mock('@jbrowse/web/src/makeWorkerInstance', function () {
20
+ return function () {};
21
+ });
22
+
23
+ window.requestIdleCallback = function (cb) {
24
+ return cb();
25
+ };
26
+
27
+ window.cancelIdleCallback = function () {};
28
+
29
+ describe('HierarchicalTrackSelector widget', function () {
30
+ afterEach(_react.cleanup);
31
+ it('renders nothing with no assembly', function () {
32
+ var session = (0, _rootModel.createTestSession)();
33
+ var firstView = session.addView('LinearGenomeView');
34
+ var model = firstView.activateTrackSelector();
35
+
36
+ var _render = (0, _react.render)( /*#__PURE__*/_react2["default"].createElement(_styles.ThemeProvider, {
37
+ theme: (0, _styles.createTheme)()
38
+ }, /*#__PURE__*/_react2["default"].createElement(_HierarchicalTrackSelector["default"], {
39
+ model: model
40
+ }))),
41
+ container = _render.container;
42
+
43
+ expect(container.firstChild).toMatchSnapshot();
44
+ });
45
+ it('renders with a couple of uncategorized tracks', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
46
+ var session, firstView, model, _render2, container, findByTestId;
47
+
48
+ return _regenerator["default"].wrap(function _callee$(_context) {
49
+ while (1) {
50
+ switch (_context.prev = _context.next) {
51
+ case 0:
52
+ session = (0, _rootModel.createTestSession)();
53
+ session.addAssemblyConf({
54
+ name: 'volMyt1',
55
+ sequence: {
56
+ trackId: 'sequenceConfigId',
57
+ type: 'ReferenceSequenceTrack',
58
+ adapter: {
59
+ type: 'FromConfigSequenceAdapter',
60
+ features: [{
61
+ refName: 'ctgA',
62
+ uniqueId: 'firstId',
63
+ start: 0,
64
+ end: 10,
65
+ seq: 'cattgttgcg'
66
+ }]
67
+ }
68
+ }
69
+ });
70
+ session.addTrackConf({
71
+ trackId: 'fooC',
72
+ assemblyNames: ['volMyt1'],
73
+ type: 'FeatureTrack',
74
+ adapter: {
75
+ type: 'FromConfigAdapter',
76
+ features: []
77
+ }
78
+ });
79
+ session.addTrackConf({
80
+ trackId: 'barC',
81
+ assemblyNames: ['volMyt1'],
82
+ type: 'FeatureTrack',
83
+ adapter: {
84
+ type: 'FromConfigAdapter',
85
+ features: []
86
+ }
87
+ });
88
+ firstView = session.addView('LinearGenomeView', {
89
+ displayedRegions: [{
90
+ assemblyName: 'volMyt1',
91
+ refName: 'ctgA',
92
+ start: 0,
93
+ end: 1000
94
+ }]
95
+ });
96
+ firstView.showTrack(session.sessionTracks[0].trackId);
97
+ firstView.showTrack(session.sessionTracks[1].trackId);
98
+ model = firstView.activateTrackSelector();
99
+ _render2 = (0, _react.render)( /*#__PURE__*/_react2["default"].createElement(_styles.ThemeProvider, {
100
+ theme: (0, _styles.createTheme)()
101
+ }, /*#__PURE__*/_react2["default"].createElement(_HierarchicalTrackSelector["default"], {
102
+ model: model
103
+ }))), container = _render2.container, findByTestId = _render2.findByTestId;
104
+ _context.next = 11;
105
+ return findByTestId('hierarchical_track_selector');
106
+
107
+ case 11:
108
+ expect(container.firstChild).toMatchSnapshot();
109
+
110
+ case 12:
111
+ case "end":
112
+ return _context.stop();
113
+ }
114
+ }
115
+ }, _callee);
116
+ })));
117
+ it('renders with a couple of categorized tracks', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
118
+ var session, firstView, model, _render3, container, findByTestId;
119
+
120
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
121
+ while (1) {
122
+ switch (_context2.prev = _context2.next) {
123
+ case 0:
124
+ session = (0, _rootModel.createTestSession)();
125
+ session.addAssemblyConf({
126
+ name: 'volMyt1',
127
+ sequence: {
128
+ trackId: 'sequenceConfigId',
129
+ type: 'ReferenceSequenceTrack',
130
+ adapter: {
131
+ type: 'FromConfigSequenceAdapter',
132
+ features: [{
133
+ refName: 'ctgA',
134
+ uniqueId: 'firstId',
135
+ start: 0,
136
+ end: 10,
137
+ seq: 'cattgttgcg'
138
+ }]
139
+ }
140
+ }
141
+ });
142
+ session.addTrackConf({
143
+ trackId: 'fooC',
144
+ assemblyNames: ['volMyt1'],
145
+ type: 'FeatureTrack',
146
+ adapter: {
147
+ type: 'FromConfigAdapter',
148
+ features: []
149
+ }
150
+ });
151
+ session.addTrackConf({
152
+ trackId: 'barC',
153
+ assemblyNames: ['volMyt1'],
154
+ type: 'FeatureTrack',
155
+ adapter: {
156
+ type: 'FromConfigAdapter',
157
+ features: []
158
+ }
159
+ });
160
+ firstView = session.addView('LinearGenomeView', {
161
+ displayedRegions: [{
162
+ assemblyName: 'volMyt1',
163
+ refName: 'ctgA',
164
+ start: 0,
165
+ end: 1000
166
+ }]
167
+ });
168
+ firstView.showTrack(session.sessionTracks[0].trackId);
169
+ firstView.showTrack(session.sessionTracks[1].trackId);
170
+ firstView.tracks[0].configuration.category.set(['Foo Category']);
171
+ firstView.tracks[1].configuration.category.set(['Foo Category', 'Bar Category']);
172
+ model = firstView.activateTrackSelector();
173
+ _render3 = (0, _react.render)( /*#__PURE__*/_react2["default"].createElement(_styles.ThemeProvider, {
174
+ theme: (0, _styles.createTheme)()
175
+ }, /*#__PURE__*/_react2["default"].createElement(_HierarchicalTrackSelector["default"], {
176
+ model: model
177
+ }))), container = _render3.container, findByTestId = _render3.findByTestId;
178
+ _context2.next = 13;
179
+ return findByTestId('hierarchical_track_selector');
180
+
181
+ case 13:
182
+ expect(container.firstChild).toMatchSnapshot();
183
+
184
+ case 14:
185
+ case "end":
186
+ return _context2.stop();
187
+ }
188
+ }
189
+ }, _callee2);
190
+ })));
191
+ });
@@ -0,0 +1,80 @@
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 _react = _interopRequireDefault(require("react"));
11
+
12
+ var _core = require("@material-ui/core");
13
+
14
+ var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
15
+
16
+ var _mobxReact = require("mobx-react");
17
+
18
+ var _configuration = require("@jbrowse/core/configuration");
19
+
20
+ var useStyles = (0, _core.makeStyles)(function (theme) {
21
+ return {
22
+ closeButton: {
23
+ position: 'absolute',
24
+ right: theme.spacing(1),
25
+ top: theme.spacing(1),
26
+ color: theme.palette.grey[500]
27
+ },
28
+ connectionContainer: {
29
+ margin: theme.spacing(4),
30
+ width: 500
31
+ }
32
+ };
33
+ });
34
+
35
+ function ManageConnectionsDlg(_ref) {
36
+ var session = _ref.session,
37
+ handleClose = _ref.handleClose,
38
+ breakConnection = _ref.breakConnection;
39
+ var classes = useStyles();
40
+ var adminMode = session.adminMode,
41
+ connections = session.connections,
42
+ sessionConnections = session.sessionConnections;
43
+ return /*#__PURE__*/_react["default"].createElement(_core.Dialog, {
44
+ open: true,
45
+ onClose: handleClose,
46
+ maxWidth: "lg"
47
+ }, /*#__PURE__*/_react["default"].createElement(_core.DialogTitle, null, "Delete connections", /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
48
+ className: classes.closeButton,
49
+ onClick: function onClick() {
50
+ return handleClose();
51
+ }
52
+ }, /*#__PURE__*/_react["default"].createElement(_Close["default"], null))), /*#__PURE__*/_react["default"].createElement(_core.DialogContent, null, /*#__PURE__*/_react["default"].createElement(_core.Typography, null, "Click the X icon to delete the connection from your config completely"), /*#__PURE__*/_react["default"].createElement("div", {
53
+ className: classes.connectionContainer
54
+ }, connections.map(function (conf) {
55
+ var name = (0, _configuration.readConfObject)(conf, 'name');
56
+ return /*#__PURE__*/_react["default"].createElement("div", {
57
+ key: "conn-".concat(name)
58
+ }, /*#__PURE__*/_react["default"].createElement(_core.Typography, null, adminMode || sessionConnections !== null && sessionConnections !== void 0 && sessionConnections.includes(conf) ? /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
59
+ onClick: function onClick() {
60
+ return breakConnection(conf, true);
61
+ }
62
+ }, /*#__PURE__*/_react["default"].createElement(_Close["default"], {
63
+ color: "error"
64
+ })) : /*#__PURE__*/_react["default"].createElement(_core.Tooltip, {
65
+ title: "Unable to delete connection in config file as non-admin user"
66
+ }, /*#__PURE__*/_react["default"].createElement(_core.IconButton, null, /*#__PURE__*/_react["default"].createElement(_Close["default"], {
67
+ color: "disabled"
68
+ }))), name));
69
+ }), !connections.length ? /*#__PURE__*/_react["default"].createElement(_core.Typography, null, "No connections found") : null)), /*#__PURE__*/_react["default"].createElement(_core.DialogActions, null, /*#__PURE__*/_react["default"].createElement(_core.Button, {
70
+ onClick: function onClick() {
71
+ return handleClose();
72
+ },
73
+ variant: "contained",
74
+ color: "primary"
75
+ }, "Close")));
76
+ }
77
+
78
+ var _default = (0, _mobxReact.observer)(ManageConnectionsDlg);
79
+
80
+ exports["default"] = _default;
@@ -0,0 +1,98 @@
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 _react = _interopRequireDefault(require("react"));
11
+
12
+ var _core = require("@material-ui/core");
13
+
14
+ var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
15
+
16
+ var _mobxReact = require("mobx-react");
17
+
18
+ var _configuration = require("@jbrowse/core/configuration");
19
+
20
+ var useStyles = (0, _core.makeStyles)(function (theme) {
21
+ return {
22
+ closeButton: {
23
+ position: 'absolute',
24
+ right: theme.spacing(1),
25
+ top: theme.spacing(1),
26
+ color: theme.palette.grey[500]
27
+ },
28
+ connectionContainer: {
29
+ width: 500,
30
+ margin: theme.spacing(4)
31
+ }
32
+ };
33
+ });
34
+
35
+ function ToggleConnectionDialog(_ref) {
36
+ var session = _ref.session,
37
+ handleClose = _ref.handleClose,
38
+ assemblyName = _ref.assemblyName,
39
+ breakConnection = _ref.breakConnection;
40
+ var classes = useStyles();
41
+ var connections = session.connections,
42
+ connectionInstances = session.connectionInstances;
43
+ var assemblySpecificConnections = connections.filter(function (c) {
44
+ var configAssemblyNames = (0, _configuration.readConfObject)(c, 'assemblyNames');
45
+
46
+ if (configAssemblyNames.length === 0) {
47
+ return true;
48
+ }
49
+
50
+ return configAssemblyNames.includes(assemblyName);
51
+ });
52
+ return /*#__PURE__*/_react["default"].createElement(_core.Dialog, {
53
+ open: true,
54
+ onClose: handleClose,
55
+ maxWidth: "lg"
56
+ }, /*#__PURE__*/_react["default"].createElement(_core.DialogTitle, null, "Turn on/off connections", /*#__PURE__*/_react["default"].createElement(_core.IconButton, {
57
+ className: classes.closeButton,
58
+ onClick: function onClick() {
59
+ return handleClose();
60
+ }
61
+ }, /*#__PURE__*/_react["default"].createElement(_Close["default"], null))), /*#__PURE__*/_react["default"].createElement(_core.DialogContent, null, /*#__PURE__*/_react["default"].createElement(_core.Typography, null, "Use the checkbox to turn on/off connections"), /*#__PURE__*/_react["default"].createElement("div", {
62
+ className: classes.connectionContainer
63
+ }, assemblySpecificConnections.map(function (conf) {
64
+ var name = (0, _configuration.readConfObject)(conf, 'name');
65
+ return /*#__PURE__*/_react["default"].createElement("div", {
66
+ key: conf.connectionId
67
+ }, /*#__PURE__*/_react["default"].createElement(_core.FormControlLabel, {
68
+ control: /*#__PURE__*/_react["default"].createElement(_core.Checkbox, {
69
+ checked: !!(connectionInstances !== null && connectionInstances !== void 0 && connectionInstances.find(function (conn) {
70
+ return name === conn.name;
71
+ })),
72
+ onChange: function onChange() {
73
+ if (connectionInstances !== null && connectionInstances !== void 0 && connectionInstances.find(function (conn) {
74
+ return conn.name === (0, _configuration.readConfObject)(conf, 'name');
75
+ })) {
76
+ breakConnection(conf);
77
+ } else {
78
+ var _session$makeConnecti;
79
+
80
+ (_session$makeConnecti = session.makeConnection) === null || _session$makeConnecti === void 0 ? void 0 : _session$makeConnecti.call(session, conf);
81
+ }
82
+ },
83
+ color: "primary"
84
+ }),
85
+ label: name
86
+ }));
87
+ }), !assemblySpecificConnections.length ? /*#__PURE__*/_react["default"].createElement(_core.Typography, null, "No connections found for ", assemblyName) : null)), /*#__PURE__*/_react["default"].createElement(_core.DialogActions, null, /*#__PURE__*/_react["default"].createElement(_core.Button, {
88
+ onClick: function onClick() {
89
+ return handleClose();
90
+ },
91
+ variant: "contained",
92
+ color: "primary"
93
+ }, "Close")));
94
+ }
95
+
96
+ var _default = (0, _mobxReact.observer)(ToggleConnectionDialog);
97
+
98
+ exports["default"] = _default;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.configSchema = void 0;
9
+ Object.defineProperty(exports, "stateModelFactory", {
10
+ enumerable: true,
11
+ get: function get() {
12
+ return _model["default"];
13
+ }
14
+ });
15
+
16
+ var _configuration = require("@jbrowse/core/configuration");
17
+
18
+ var _model = _interopRequireDefault(require("./model"));
19
+
20
+ var configSchema = (0, _configuration.ConfigurationSchema)('HierarchicalTrackSelectorWidget', {});
21
+ exports.configSchema = configSchema;