@jbrowse/plugin-data-management 2.6.3 → 2.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.
- package/dist/AddConnectionWidget/components/AddConnectionWidget.d.ts +2 -2
- package/dist/AddConnectionWidget/components/AddConnectionWidget.js +17 -8
- package/dist/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -2
- package/dist/AddConnectionWidget/components/ConfigureConnection.js +2 -1
- package/dist/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +2 -2
- package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +5 -3
- package/dist/AddTrackWidget/components/AddTrackWidget.d.ts +3 -4
- package/dist/AddTrackWidget/components/AddTrackWidget.js +3 -3
- package/dist/AddTrackWidget/components/ConfirmTrack.d.ts +2 -2
- package/dist/AddTrackWidget/components/ConfirmTrack.js +3 -2
- package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.d.ts +3 -4
- package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +32 -27
- package/dist/AddTrackWidget/components/PasteConfigWorkflow.d.ts +3 -4
- package/dist/AddTrackWidget/components/PasteConfigWorkflow.js +10 -7
- package/dist/AddTrackWidget/components/TrackAdapterSelector.js +1 -1
- package/dist/AddTrackWidget/components/TrackSourceSelect.d.ts +3 -4
- package/dist/AddTrackWidget/components/TrackSourceSelect.js +3 -3
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +2 -2
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +2 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +2 -2
- package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +2 -1
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.d.ts +3 -5
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +2 -1
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.d.ts +3 -4
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +5 -8
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.d.ts +3 -4
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +3 -3
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.d.ts +2 -3
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +2 -3
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +13 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +72 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +31 -77
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +3 -4
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +3 -3
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +5 -3
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +10 -4
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +2 -2
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +50 -29
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +2 -2
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +4 -2
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.d.ts +3 -4
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +3 -3
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +2 -2
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +5 -6
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +2 -2
- package/dist/HierarchicalTrackSelectorWidget/components/util.js +1 -2
- package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +2 -2
- package/dist/HierarchicalTrackSelectorWidget/model.js +8 -10
- package/dist/PluginStoreWidget/components/AddCustomPluginDialog.d.ts +2 -2
- package/dist/PluginStoreWidget/components/AddCustomPluginDialog.js +2 -1
- package/dist/PluginStoreWidget/components/InstalledPlugin.d.ts +2 -2
- package/dist/PluginStoreWidget/components/InstalledPlugin.js +8 -4
- package/dist/PluginStoreWidget/components/InstalledPluginsList.d.ts +2 -2
- package/dist/PluginStoreWidget/components/InstalledPluginsList.js +2 -1
- package/dist/PluginStoreWidget/components/PluginCard.d.ts +2 -2
- package/dist/PluginStoreWidget/components/PluginCard.js +2 -1
- package/dist/PluginStoreWidget/components/PluginStoreWidget.d.ts +3 -4
- package/dist/PluginStoreWidget/components/PluginStoreWidget.js +3 -3
- package/dist/index.d.ts +1 -9
- package/dist/index.js +1 -4
- package/dist/ucsc-trackhub/model.js +2 -2
- package/esm/AddConnectionWidget/components/AddConnectionWidget.d.ts +2 -2
- package/esm/AddConnectionWidget/components/AddConnectionWidget.js +19 -10
- package/esm/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -2
- package/esm/AddConnectionWidget/components/ConfigureConnection.js +2 -1
- package/esm/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +2 -2
- package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +5 -3
- package/esm/AddTrackWidget/components/AddTrackWidget.d.ts +3 -4
- package/esm/AddTrackWidget/components/AddTrackWidget.js +3 -3
- package/esm/AddTrackWidget/components/ConfirmTrack.d.ts +2 -2
- package/esm/AddTrackWidget/components/ConfirmTrack.js +4 -3
- package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.d.ts +3 -4
- package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +33 -28
- package/esm/AddTrackWidget/components/PasteConfigWorkflow.d.ts +3 -4
- package/esm/AddTrackWidget/components/PasteConfigWorkflow.js +11 -8
- package/esm/AddTrackWidget/components/TrackAdapterSelector.js +1 -1
- package/esm/AddTrackWidget/components/TrackSourceSelect.d.ts +3 -4
- package/esm/AddTrackWidget/components/TrackSourceSelect.js +3 -3
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +2 -2
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +2 -1
- package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +2 -2
- package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +2 -1
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.d.ts +3 -5
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +2 -1
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.d.ts +3 -4
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +6 -9
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.d.ts +3 -4
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +3 -3
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.d.ts +2 -3
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +3 -2
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +13 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +43 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +31 -54
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +3 -4
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +3 -3
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +5 -3
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +10 -4
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +2 -2
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +50 -29
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +2 -2
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +4 -2
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.d.ts +3 -4
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +3 -3
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +2 -2
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +5 -6
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +1 -1
- package/esm/HierarchicalTrackSelectorWidget/components/util.js +1 -2
- package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +2 -2
- package/esm/HierarchicalTrackSelectorWidget/model.js +8 -10
- package/esm/PluginStoreWidget/components/AddCustomPluginDialog.d.ts +2 -2
- package/esm/PluginStoreWidget/components/AddCustomPluginDialog.js +2 -1
- package/esm/PluginStoreWidget/components/InstalledPlugin.d.ts +2 -2
- package/esm/PluginStoreWidget/components/InstalledPlugin.js +8 -4
- package/esm/PluginStoreWidget/components/InstalledPluginsList.d.ts +2 -2
- package/esm/PluginStoreWidget/components/InstalledPluginsList.js +2 -1
- package/esm/PluginStoreWidget/components/PluginCard.d.ts +2 -2
- package/esm/PluginStoreWidget/components/PluginCard.js +2 -1
- package/esm/PluginStoreWidget/components/PluginStoreWidget.d.ts +3 -4
- package/esm/PluginStoreWidget/components/PluginStoreWidget.js +3 -3
- package/esm/index.d.ts +1 -9
- package/esm/index.js +1 -3
- package/esm/ucsc-trackhub/model.js +2 -2
- package/package.json +5 -4
- package/dist/SetDefaultSession/SetDefaultSession.d.ts +0 -6
- package/dist/SetDefaultSession/SetDefaultSession.js +0 -38
- package/dist/SetDefaultSession/index.d.ts +0 -1
- package/dist/SetDefaultSession/index.js +0 -8
- package/esm/SetDefaultSession/SetDefaultSession.d.ts +0 -6
- package/esm/SetDefaultSession/SetDefaultSession.js +0 -33
- package/esm/SetDefaultSession/index.d.ts +0 -1
- package/esm/SetDefaultSession/index.js +0 -1
|
@@ -262,21 +262,19 @@ function stateTreeFactory(pluginManager) {
|
|
|
262
262
|
])) {
|
|
263
263
|
self.collapseTopLevelCategories();
|
|
264
264
|
}
|
|
265
|
-
|
|
265
|
+
if ((0, configuration_1.getConf)(session, [
|
|
266
266
|
'hierarchical',
|
|
267
267
|
'defaultCollapsed',
|
|
268
268
|
'subCategories',
|
|
269
269
|
])) {
|
|
270
270
|
self.collapseSubCategories();
|
|
271
271
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
self.collapsed.set(entry, true);
|
|
279
|
-
}
|
|
272
|
+
for (const entry of (0, configuration_1.getConf)(session, [
|
|
273
|
+
'hierarchical',
|
|
274
|
+
'defaultCollapsed',
|
|
275
|
+
'categoryNames',
|
|
276
|
+
])) {
|
|
277
|
+
self.collapsed.set(entry, true);
|
|
280
278
|
}
|
|
281
279
|
self.initialized = true;
|
|
282
280
|
}
|
|
@@ -284,7 +282,7 @@ function stateTreeFactory(pluginManager) {
|
|
|
284
282
|
}))
|
|
285
283
|
.views(self => ({
|
|
286
284
|
get hasAnySubcategories() {
|
|
287
|
-
return self.allTracks.some(group => group.tracks.some(
|
|
285
|
+
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
286
|
},
|
|
289
287
|
}));
|
|
290
288
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { PluginStoreModel } from '../model';
|
|
3
|
-
declare const
|
|
3
|
+
declare const AddCustomPluginDialog: ({ onClose, model, }: {
|
|
4
4
|
onClose: () => void;
|
|
5
5
|
model: PluginStoreModel;
|
|
6
6
|
}) => React.JSX.Element;
|
|
7
|
-
export 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
|
-
|
|
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
|
|
4
|
+
declare const InstalledPlugin: ({ plugin, model, }: {
|
|
5
5
|
plugin: BasePlugin;
|
|
6
6
|
model: PluginStoreModel;
|
|
7
7
|
}) => React.JSX.Element;
|
|
8
|
-
export 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
|
-
|
|
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
|
|
54
|
-
const isSessionPlugin =
|
|
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, { "
|
|
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
|
|
4
|
+
declare const InstalledPluginsList: ({ pluginManager, model, }: {
|
|
5
5
|
pluginManager: PluginManager;
|
|
6
6
|
model: PluginStoreModel;
|
|
7
7
|
}) => React.JSX.Element;
|
|
8
|
-
export 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
|
-
|
|
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
|
|
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
|
|
9
|
+
export default PluginCard;
|
|
@@ -53,7 +53,7 @@ const useStyles = (0, mui_1.makeStyles)()({
|
|
|
53
53
|
alignItems: 'center',
|
|
54
54
|
},
|
|
55
55
|
});
|
|
56
|
-
|
|
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
|
|
3
|
+
declare const PluginStoreWidget: ({ model, }: {
|
|
4
4
|
model: PluginStoreModel;
|
|
5
|
-
})
|
|
6
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
|
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.
|
|
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,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
|
-
|
|
26
|
+
const AddConnectionWidget = observer(function ({ model }) {
|
|
26
27
|
const [connectionType, setConnectionType] = useState();
|
|
27
|
-
const [
|
|
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
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
6
|
+
const ConnectionTypeSelect = observer(function ConnectionTypeSelect({ connectionTypeChoices, connectionType, setConnectionType, }) {
|
|
7
|
+
const firstChoice = connectionTypeChoices[0];
|
|
7
8
|
useEffect(() => {
|
|
8
9
|
if (!connectionType) {
|
|
9
|
-
setConnectionType(
|
|
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
|
|
3
|
+
declare const AddTrackSelector: ({ model, }: {
|
|
4
4
|
model: AddTrackModel;
|
|
5
|
-
})
|
|
6
|
-
|
|
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
|
-
|
|
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
|
|
25
|
+
});
|
|
26
|
+
export default AddTrackSelector;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useState } from 'react';
|
|
2
2
|
import { Checkbox, FormControl, FormControlLabel, Link, TextField, Typography, } from '@mui/material';
|
|
3
3
|
import { makeStyles } from 'tss-react/mui';
|
|
4
|
-
import {
|
|
4
|
+
import { isSupportedIndexingAdapter, getSession, isElectron, } from '@jbrowse/core/util';
|
|
5
5
|
import { observer } from 'mobx-react';
|
|
6
6
|
import { UNKNOWN } from '@jbrowse/core/util/tracks';
|
|
7
7
|
import { AssemblySelector } from '@jbrowse/core/ui';
|
|
@@ -46,7 +46,7 @@ function UnknownAdapterPrompt({ model }) {
|
|
|
46
46
|
"and add a feature request for this data type."),
|
|
47
47
|
React.createElement(TrackAdapterSelector, { model: model })));
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
const ConfirmTrack = observer(function ConfirmTrack({ model, }) {
|
|
50
50
|
const { classes } = useStyles();
|
|
51
51
|
const [check, setCheck] = useState(true);
|
|
52
52
|
const session = getSession(model);
|
|
@@ -74,7 +74,7 @@ export default observer(function ConfirmTrack({ model, }) {
|
|
|
74
74
|
if (!(trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type)) {
|
|
75
75
|
return React.createElement(Typography, null, "Could not recognize this data type.");
|
|
76
76
|
}
|
|
77
|
-
const supportedForIndexing =
|
|
77
|
+
const supportedForIndexing = isSupportedIndexingAdapter(trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type);
|
|
78
78
|
return (React.createElement("div", null,
|
|
79
79
|
trackAdapter ? (React.createElement(StatusMessage, { trackAdapter: trackAdapter, trackType: trackType })) : null,
|
|
80
80
|
warningMessage ? (React.createElement(Typography, { style: { color: 'orange' } }, warningMessage)) : null,
|
|
@@ -95,3 +95,4 @@ export default observer(function ConfirmTrack({ model, }) {
|
|
|
95
95
|
} }) }))),
|
|
96
96
|
isElectron && check && supportedForIndexing ? (React.createElement(TextIndexingConfig, { model: model })) : null));
|
|
97
97
|
});
|
|
98
|
+
export default ConfirmTrack;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AddTrackModel } from '../model';
|
|
3
|
-
declare
|
|
3
|
+
declare const DefaultAddTrackWorkflow: ({ model, }: {
|
|
4
4
|
model: AddTrackModel;
|
|
5
|
-
})
|
|
6
|
-
|
|
7
|
-
export default _default;
|
|
5
|
+
}) => React.JSX.Element;
|
|
6
|
+
export default DefaultAddTrackWorkflow;
|
|
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
|
|
|
2
2
|
import { Alert, Button, Step, StepContent, StepLabel, Stepper, Typography, } from '@mui/material';
|
|
3
3
|
import { makeStyles } from 'tss-react/mui';
|
|
4
4
|
import { getRoot } from 'mobx-state-tree';
|
|
5
|
-
import { getSession, isElectron,
|
|
5
|
+
import { getSession, isElectron, isSessionModelWithWidgets, isSessionWithAddTracks, isSupportedIndexingAdapter, } from '@jbrowse/core/util';
|
|
6
6
|
import { getConf } from '@jbrowse/core/configuration';
|
|
7
7
|
import { observer } from 'mobx-react';
|
|
8
8
|
// locals
|
|
@@ -27,7 +27,7 @@ const useStyles = makeStyles()(theme => ({
|
|
|
27
27
|
},
|
|
28
28
|
}));
|
|
29
29
|
const steps = ['Enter track data', 'Confirm track type'];
|
|
30
|
-
function
|
|
30
|
+
const DefaultAddTrackWorkflow = observer(function ({ model, }) {
|
|
31
31
|
const [activeStep, setActiveStep] = useState(0);
|
|
32
32
|
const { classes } = useStyles();
|
|
33
33
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -46,6 +46,7 @@ function AddTrackWorkflow({ model }) {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
async function handleNext() {
|
|
49
|
+
var _a, _b;
|
|
49
50
|
if (activeStep !== steps.length - 1) {
|
|
50
51
|
setActiveStep(activeStep + 1);
|
|
51
52
|
return;
|
|
@@ -55,6 +56,10 @@ function AddTrackWorkflow({ model }) {
|
|
|
55
56
|
`${session.adminMode ? '' : '-sessionTrack'}`,
|
|
56
57
|
].join('');
|
|
57
58
|
const assemblyInstance = session.assemblyManager.get(assembly);
|
|
59
|
+
if (!isSessionWithAddTracks(session)) {
|
|
60
|
+
setTrackErrorMessage('Unable to add tracks to this model');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
58
63
|
if (assemblyInstance && trackAdapter && trackAdapter.type !== 'UNKNOWN') {
|
|
59
64
|
session.addTrackConf({
|
|
60
65
|
trackId,
|
|
@@ -66,36 +71,36 @@ function AddTrackWorkflow({ model }) {
|
|
|
66
71
|
sequenceAdapter: getConf(assemblyInstance, ['sequence', 'adapter']),
|
|
67
72
|
},
|
|
68
73
|
});
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
indexType: 'perTrack',
|
|
85
|
-
name: indexName,
|
|
86
|
-
timestamp: new Date().toISOString(),
|
|
87
|
-
},
|
|
74
|
+
(_b = (_a = model.view).showTrack) === null || _b === void 0 ? void 0 : _b.call(_a, trackId);
|
|
75
|
+
if (isElectron &&
|
|
76
|
+
textIndexTrack &&
|
|
77
|
+
isSupportedIndexingAdapter(trackAdapter.type)) {
|
|
78
|
+
const attr = textIndexingConf || {
|
|
79
|
+
attributes: ['Name', 'ID'],
|
|
80
|
+
exclude: ['CDS', 'exon'],
|
|
81
|
+
};
|
|
82
|
+
const indexName = trackName + '-index';
|
|
83
|
+
const newEntry = {
|
|
84
|
+
indexingParams: {
|
|
85
|
+
...attr,
|
|
86
|
+
assemblies: [assembly],
|
|
87
|
+
tracks: [trackId],
|
|
88
|
+
indexType: 'perTrack',
|
|
88
89
|
name: indexName,
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
timestamp: new Date().toISOString(),
|
|
91
|
+
},
|
|
92
|
+
name: indexName,
|
|
93
|
+
cancelCallback: () => jobsManager.abortJob(),
|
|
94
|
+
};
|
|
95
|
+
jobsManager.queueJob(newEntry);
|
|
93
96
|
}
|
|
94
97
|
else {
|
|
95
98
|
session.notify('Open a new view, or use the track selector in an existing view, to view this track', 'info');
|
|
96
99
|
}
|
|
97
100
|
model.clearData();
|
|
98
|
-
session
|
|
101
|
+
if (isSessionModelWithWidgets(session)) {
|
|
102
|
+
session.hideWidget(model);
|
|
103
|
+
}
|
|
99
104
|
}
|
|
100
105
|
else {
|
|
101
106
|
setTrackErrorMessage('Failed to add track.\nThe configuration of this file is not currently supported.');
|
|
@@ -125,5 +130,5 @@ function AddTrackWorkflow({ model }) {
|
|
|
125
130
|
React.createElement(Button, { disabled: isNextDisabled(), variant: "contained", color: "primary", onClick: handleNext, className: classes.button, "data-testid": "addTrackNextButton" }, activeStep === steps.length - 1 ? 'Add' : 'Next')),
|
|
126
131
|
trackErrorMessage ? (React.createElement("div", { className: classes.alertContainer },
|
|
127
132
|
React.createElement(Alert, { severity: "error" }, trackErrorMessage))) : null)))))));
|
|
128
|
-
}
|
|
129
|
-
export default
|
|
133
|
+
});
|
|
134
|
+
export default DefaultAddTrackWorkflow;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AddTrackModel } from '../model';
|
|
3
|
-
declare
|
|
3
|
+
declare const PasteConfigAddTrackWorkflow: ({ model, }: {
|
|
4
4
|
model: AddTrackModel;
|
|
5
|
-
})
|
|
6
|
-
|
|
7
|
-
export default _default;
|
|
5
|
+
}) => React.JSX.Element;
|
|
6
|
+
export default PasteConfigAddTrackWorkflow;
|