@jbrowse/plugin-data-management 2.3.2 → 2.3.4
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/index.d.ts +3 -2
- package/dist/AddConnectionWidget/index.js +38 -4
- package/dist/AddConnectionWidget/index.js.map +1 -1
- package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +1 -4
- package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js.map +1 -1
- package/dist/AddTrackWidget/components/TrackSourceSelect.js +1 -4
- package/dist/AddTrackWidget/components/TrackSourceSelect.js.map +1 -1
- package/dist/AddTrackWidget/index.d.ts +3 -2
- package/dist/AddTrackWidget/index.js +38 -4
- package/dist/AddTrackWidget/index.js.map +1 -1
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +6 -0
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +71 -0
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +10 -104
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +6 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +70 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.d.ts → dialogs/CloseConnectionDialog.d.ts} +0 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.js → dialogs/CloseConnectionDialog.js} +0 -0
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.d.ts → dialogs/DeleteConnectionDialog.d.ts} +0 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.js → dialogs/DeleteConnectionDialog.js} +0 -0
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.d.ts → dialogs/ManageConnectionsDialog.d.ts} +0 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.js → dialogs/ManageConnectionsDialog.js} +0 -0
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.d.ts → dialogs/ToggleConnectionsDialog.d.ts} +0 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.js → dialogs/ToggleConnectionsDialog.js} +0 -0
- package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.d.ts +13 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +99 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +8 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +18 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +11 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +71 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +12 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +211 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.js +10 -0
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +7 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +136 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/{Header.d.ts → tree/HierarchicalHeader.d.ts} +2 -3
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +65 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +8 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +91 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.d.ts +7 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +89 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.d.ts +11 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +86 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.d.ts +10 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js +54 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/util.d.ts +17 -1
- package/dist/HierarchicalTrackSelectorWidget/components/util.js +16 -1
- package/dist/HierarchicalTrackSelectorWidget/components/util.js.map +1 -1
- package/dist/HierarchicalTrackSelectorWidget/index.d.ts +3 -0
- package/dist/HierarchicalTrackSelectorWidget/index.js +36 -0
- package/dist/HierarchicalTrackSelectorWidget/index.js.map +1 -1
- package/dist/HierarchicalTrackSelectorWidget/model.d.ts +4 -1
- package/dist/HierarchicalTrackSelectorWidget/model.js +12 -8
- package/dist/HierarchicalTrackSelectorWidget/model.js.map +1 -1
- package/dist/PluginStoreWidget/index.d.ts +3 -2
- package/dist/PluginStoreWidget/index.js +38 -4
- package/dist/PluginStoreWidget/index.js.map +1 -1
- package/dist/index.js +10 -51
- package/dist/index.js.map +1 -1
- package/dist/ucsc-trackhub/index.d.ts +3 -2
- package/dist/ucsc-trackhub/index.js +13 -5
- package/dist/ucsc-trackhub/index.js.map +1 -1
- package/esm/AddConnectionWidget/index.d.ts +3 -2
- package/esm/AddConnectionWidget/index.js +15 -2
- package/esm/AddConnectionWidget/index.js.map +1 -1
- package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +1 -4
- package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js.map +1 -1
- package/esm/AddTrackWidget/components/TrackSourceSelect.js +1 -4
- package/esm/AddTrackWidget/components/TrackSourceSelect.js.map +1 -1
- package/esm/AddTrackWidget/index.d.ts +3 -2
- package/esm/AddTrackWidget/index.js +15 -2
- package/esm/AddTrackWidget/index.js.map +1 -1
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +6 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +43 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +9 -103
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -1
- package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +6 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +42 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.d.ts → dialogs/CloseConnectionDialog.d.ts} +0 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.js → dialogs/CloseConnectionDialog.js} +0 -0
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.d.ts → dialogs/DeleteConnectionDialog.d.ts} +0 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.js → dialogs/DeleteConnectionDialog.js} +0 -0
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.d.ts → dialogs/ManageConnectionsDialog.d.ts} +0 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.js → dialogs/ManageConnectionsDialog.js} +0 -0
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.d.ts → dialogs/ToggleConnectionsDialog.d.ts} +0 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.js → dialogs/ToggleConnectionsDialog.js} +0 -0
- package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.d.ts +13 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +70 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +8 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +13 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +11 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +42 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +12 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +183 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.js +6 -0
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +7 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +108 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/{Header.d.ts → tree/HierarchicalHeader.d.ts} +2 -3
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +37 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +8 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +63 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.d.ts +7 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +60 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.d.ts +11 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +57 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.d.ts +10 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js +48 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/util.d.ts +17 -1
- package/esm/HierarchicalTrackSelectorWidget/components/util.js +13 -0
- package/esm/HierarchicalTrackSelectorWidget/components/util.js.map +1 -1
- package/esm/HierarchicalTrackSelectorWidget/index.d.ts +3 -0
- package/esm/HierarchicalTrackSelectorWidget/index.js +13 -0
- package/esm/HierarchicalTrackSelectorWidget/index.js.map +1 -1
- package/esm/HierarchicalTrackSelectorWidget/model.d.ts +4 -1
- package/esm/HierarchicalTrackSelectorWidget/model.js +10 -7
- package/esm/HierarchicalTrackSelectorWidget/model.js.map +1 -1
- package/esm/PluginStoreWidget/index.d.ts +3 -2
- package/esm/PluginStoreWidget/index.js +15 -2
- package/esm/PluginStoreWidget/index.js.map +1 -1
- package/esm/index.js +10 -51
- package/esm/index.js.map +1 -1
- package/esm/ucsc-trackhub/index.d.ts +3 -2
- package/esm/ucsc-trackhub/index.js +13 -2
- package/esm/ucsc-trackhub/index.js.map +1 -1
- package/package.json +3 -2
- package/src/AddConnectionWidget/components/{AddConnectionWidget.test.js → AddConnectionWidget.test.tsx} +17 -8
- package/src/AddConnectionWidget/components/__snapshots__/{AddConnectionWidget.test.js.snap → AddConnectionWidget.test.tsx.snap} +0 -0
- package/src/AddConnectionWidget/index.ts +17 -2
- package/src/AddTrackWidget/components/DefaultAddTrackWorkflow.tsx +1 -4
- package/src/AddTrackWidget/components/TrackSourceSelect.tsx +3 -5
- package/src/AddTrackWidget/{index.test.jsx → index.test.tsx} +34 -37
- package/src/AddTrackWidget/index.ts +17 -2
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalFab.tsx +94 -0
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.tsx +124 -128
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.tsx +47 -228
- package/src/HierarchicalTrackSelectorWidget/components/ShoppingCart.tsx +73 -0
- package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.tsx.snap +25 -43
- package/src/HierarchicalTrackSelectorWidget/components/{CloseConnectionDialog.tsx → dialogs/CloseConnectionDialog.tsx} +0 -0
- package/src/HierarchicalTrackSelectorWidget/components/{DeleteConnectionDialog.tsx → dialogs/DeleteConnectionDialog.tsx} +0 -0
- package/src/HierarchicalTrackSelectorWidget/components/{ManageConnectionsDialog.tsx → dialogs/ManageConnectionsDialog.tsx} +0 -0
- package/src/HierarchicalTrackSelectorWidget/components/{ToggleConnectionsDialog.tsx → dialogs/ToggleConnectionsDialog.tsx} +0 -0
- package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.tsx +138 -0
- package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.tsx +29 -0
- package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.tsx +86 -0
- package/src/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.tsx +339 -0
- package/src/HierarchicalTrackSelectorWidget/components/faceted/util.ts +5 -0
- package/src/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.tsx +197 -0
- package/src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.tsx +88 -0
- package/src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.tsx +101 -0
- package/src/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.tsx +92 -0
- package/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx +107 -0
- package/src/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.tsx +84 -0
- package/src/HierarchicalTrackSelectorWidget/components/util.ts +31 -1
- package/src/HierarchicalTrackSelectorWidget/index.ts +17 -0
- package/src/HierarchicalTrackSelectorWidget/model.ts +12 -9
- package/src/PluginStoreWidget/components/PluginStoreWidget.test.tsx +132 -0
- package/src/PluginStoreWidget/components/__snapshots__/{PluginStoreWidget.test.js.snap → PluginStoreWidget.test.tsx.snap} +2 -2
- package/src/PluginStoreWidget/index.ts +17 -2
- package/src/PluginStoreWidget/{model.test.js → model.test.tsx} +0 -0
- package/src/__snapshots__/index.test.ts.snap +9 -0
- package/src/index.test.ts +54 -0
- package/src/index.ts +10 -83
- package/src/ucsc-trackhub/index.ts +19 -2
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +0 -1
- package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +0 -1
- package/dist/HierarchicalTrackSelectorWidget/components/Header.js +0 -174
- package/dist/HierarchicalTrackSelectorWidget/components/Header.js.map +0 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +0 -1
- package/dist/HierarchicalTrackSelectorWidget/components/Node.d.ts +0 -29
- package/dist/HierarchicalTrackSelectorWidget/components/Node.js +0 -173
- package/dist/HierarchicalTrackSelectorWidget/components/Node.js.map +0 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +0 -1
- package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +0 -1
- package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +0 -1
- package/esm/HierarchicalTrackSelectorWidget/components/Header.js +0 -146
- package/esm/HierarchicalTrackSelectorWidget/components/Header.js.map +0 -1
- package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +0 -1
- package/esm/HierarchicalTrackSelectorWidget/components/Node.d.ts +0 -29
- package/esm/HierarchicalTrackSelectorWidget/components/Node.js +0 -144
- package/esm/HierarchicalTrackSelectorWidget/components/Node.js.map +0 -1
- package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +0 -1
- package/src/HierarchicalTrackSelectorWidget/components/Header.tsx +0 -286
- package/src/HierarchicalTrackSelectorWidget/components/Node.tsx +0 -282
- package/src/PluginStoreWidget/components/PluginStoreWidget.test.js +0 -123
- package/src/__snapshots__/index.test.js.snap +0 -9
- package/src/index.test.js +0 -61
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import React, { Suspense, lazy, useState } from 'react';
|
|
2
|
+
import { IconButton } from '@mui/material';
|
|
3
|
+
import { makeStyles } from 'tss-react/mui';
|
|
4
|
+
import { observer } from 'mobx-react';
|
|
5
|
+
import JBrowseMenu from '@jbrowse/core/ui/Menu';
|
|
6
|
+
import { getSession, isSessionModelWithWidgets, isSessionModelWithConnections, } from '@jbrowse/core/util';
|
|
7
|
+
import { readConfObject, } from '@jbrowse/core/configuration';
|
|
8
|
+
// icons
|
|
9
|
+
import MenuIcon from '@mui/icons-material/Menu';
|
|
10
|
+
// lazy components
|
|
11
|
+
const CloseConnectionDlg = lazy(() => import('../dialogs/CloseConnectionDialog'));
|
|
12
|
+
const DeleteConnectionDlg = lazy(() => import('../dialogs/DeleteConnectionDialog'));
|
|
13
|
+
const ManageConnectionsDlg = lazy(() => import('../dialogs/ManageConnectionsDialog'));
|
|
14
|
+
const ToggleConnectionsDlg = lazy(() => import('../dialogs/ToggleConnectionsDialog'));
|
|
15
|
+
const useStyles = makeStyles()(theme => ({
|
|
16
|
+
menuIcon: {
|
|
17
|
+
marginRight: theme.spacing(1),
|
|
18
|
+
marginBottom: 0,
|
|
19
|
+
},
|
|
20
|
+
}));
|
|
21
|
+
export default observer(function HamburgerMenu({ model, setAssemblyIdx, }) {
|
|
22
|
+
const session = getSession(model);
|
|
23
|
+
const [menuEl, setMenuEl] = useState();
|
|
24
|
+
const [modalInfo, setModalInfo] = useState();
|
|
25
|
+
const [deleteDlgDetails, setDeleteDlgDetails] = useState();
|
|
26
|
+
const [connectionToggleOpen, setConnectionToggleOpen] = useState(false);
|
|
27
|
+
const [connectionManagerOpen, setConnectionManagerOpen] = useState(false);
|
|
28
|
+
const { classes } = useStyles();
|
|
29
|
+
const { assemblyNames } = model;
|
|
30
|
+
function breakConnection(connectionConf, deletingConnection) {
|
|
31
|
+
const name = readConfObject(connectionConf, 'name');
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
const result = session.prepareToBreakConnection(connectionConf);
|
|
34
|
+
if (result) {
|
|
35
|
+
const [safelyBreakConnection, dereferenceTypeCount] = result;
|
|
36
|
+
if (Object.keys(dereferenceTypeCount).length > 0) {
|
|
37
|
+
setModalInfo({
|
|
38
|
+
connectionConf,
|
|
39
|
+
safelyBreakConnection,
|
|
40
|
+
dereferenceTypeCount,
|
|
41
|
+
name,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
safelyBreakConnection();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (deletingConnection) {
|
|
49
|
+
setDeleteDlgDetails({ name, connectionConf });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const connectionMenuItems = [
|
|
53
|
+
{
|
|
54
|
+
label: 'Turn on/off connections...',
|
|
55
|
+
onClick: () => setConnectionToggleOpen(true),
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
if (isSessionModelWithConnections(session)) {
|
|
59
|
+
connectionMenuItems.unshift({
|
|
60
|
+
label: 'Add connection...',
|
|
61
|
+
onClick: () => {
|
|
62
|
+
if (isSessionModelWithWidgets(session)) {
|
|
63
|
+
session.showWidget(session.addWidget('AddConnectionWidget', 'addConnectionWidget'));
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
connectionMenuItems.push({
|
|
68
|
+
label: 'Delete connections...',
|
|
69
|
+
onClick: () => setConnectionManagerOpen(true),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return (React.createElement(React.Fragment, null,
|
|
73
|
+
React.createElement(IconButton, { className: classes.menuIcon, onClick: event => setMenuEl(event.currentTarget) },
|
|
74
|
+
React.createElement(MenuIcon, null)),
|
|
75
|
+
React.createElement(JBrowseMenu, { anchorEl: menuEl, open: Boolean(menuEl), onMenuItemClick: (_, callback) => {
|
|
76
|
+
callback();
|
|
77
|
+
setMenuEl(undefined);
|
|
78
|
+
}, onClose: () => setMenuEl(undefined), menuItems: [
|
|
79
|
+
{
|
|
80
|
+
label: 'Add track...',
|
|
81
|
+
onClick: () => {
|
|
82
|
+
if (isSessionModelWithWidgets(session)) {
|
|
83
|
+
session.showWidget(session.addWidget('AddTrackWidget', 'addTrackWidget', {
|
|
84
|
+
view: model.view.id,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
...(session.makeConnection ? connectionMenuItems : []),
|
|
90
|
+
...(assemblyNames.length > 1
|
|
91
|
+
? [
|
|
92
|
+
{
|
|
93
|
+
label: 'Select assembly...',
|
|
94
|
+
subMenu: assemblyNames.map((name, idx) => ({
|
|
95
|
+
label: name,
|
|
96
|
+
onClick: () => setAssemblyIdx(idx),
|
|
97
|
+
})),
|
|
98
|
+
},
|
|
99
|
+
]
|
|
100
|
+
: []),
|
|
101
|
+
] }),
|
|
102
|
+
React.createElement(Suspense, { fallback: React.createElement("div", null) },
|
|
103
|
+
modalInfo ? (React.createElement(CloseConnectionDlg, { modalInfo: modalInfo, setModalInfo: setModalInfo })) : null,
|
|
104
|
+
deleteDlgDetails ? (React.createElement(DeleteConnectionDlg, { handleClose: () => setDeleteDlgDetails(undefined), deleteDialogDetails: deleteDlgDetails, session: session })) : null,
|
|
105
|
+
connectionManagerOpen ? (React.createElement(ManageConnectionsDlg, { handleClose: () => setConnectionManagerOpen(false), breakConnection: breakConnection, session: session })) : null,
|
|
106
|
+
connectionToggleOpen ? (React.createElement(ToggleConnectionsDlg, { handleClose: () => setConnectionToggleOpen(false), session: session, breakConnection: breakConnection })) : null)));
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=HamburgerMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HamburgerMenu.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.tsx"],"names":[],"mappings":"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"}
|
package/esm/HierarchicalTrackSelectorWidget/components/{Header.d.ts → tree/HierarchicalHeader.d.ts}
RENAMED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { HierarchicalTrackSelectorModel } from '
|
|
3
|
-
declare function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, setAssemblyIdx,
|
|
2
|
+
import { HierarchicalTrackSelectorModel } from '../../model';
|
|
3
|
+
declare function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, setAssemblyIdx, }: {
|
|
4
4
|
model: HierarchicalTrackSelectorModel;
|
|
5
5
|
setHeaderHeight: (n: number) => void;
|
|
6
6
|
setAssemblyIdx: (n: number) => void;
|
|
7
|
-
assemblyIdx: number;
|
|
8
7
|
}): JSX.Element;
|
|
9
8
|
declare const _default: typeof HierarchicalTrackSelectorHeader;
|
|
10
9
|
export default _default;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React, { Suspense, lazy, useState } from 'react';
|
|
2
|
+
import { Button, IconButton, InputAdornment, TextField } from '@mui/material';
|
|
3
|
+
import { makeStyles } from 'tss-react/mui';
|
|
4
|
+
import { observer } from 'mobx-react';
|
|
5
|
+
// icons
|
|
6
|
+
import ClearIcon from '@mui/icons-material/Clear';
|
|
7
|
+
import HamburgerMenu from './HamburgerMenu';
|
|
8
|
+
import ShoppingCart from '../ShoppingCart';
|
|
9
|
+
// lazies
|
|
10
|
+
const FacetedDialog = lazy(() => import('../faceted/FacetedDialog'));
|
|
11
|
+
const useStyles = makeStyles()(theme => ({
|
|
12
|
+
searchBox: {
|
|
13
|
+
margin: theme.spacing(2),
|
|
14
|
+
},
|
|
15
|
+
menuIcon: {
|
|
16
|
+
marginRight: theme.spacing(1),
|
|
17
|
+
marginBottom: 0,
|
|
18
|
+
},
|
|
19
|
+
}));
|
|
20
|
+
function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, setAssemblyIdx, }) {
|
|
21
|
+
const { classes } = useStyles();
|
|
22
|
+
const [facetedOpen, setFacetedOpen] = useState(false);
|
|
23
|
+
const { filterText } = model;
|
|
24
|
+
return (React.createElement("div", { ref: ref => setHeaderHeight((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect().height) || 0), "data-testid": "hierarchical_track_selector" },
|
|
25
|
+
React.createElement("div", { style: { display: 'flex' } },
|
|
26
|
+
React.createElement(HamburgerMenu, { model: model, setAssemblyIdx: setAssemblyIdx }),
|
|
27
|
+
React.createElement(ShoppingCart, { model: model }),
|
|
28
|
+
React.createElement(TextField, { className: classes.searchBox, label: "Filter tracks", value: filterText, onChange: event => model.setFilterText(event.target.value), fullWidth: true, InputProps: {
|
|
29
|
+
endAdornment: (React.createElement(InputAdornment, { position: "end" },
|
|
30
|
+
React.createElement(IconButton, { color: "secondary", onClick: () => model.clearFilterText() },
|
|
31
|
+
React.createElement(ClearIcon, null)))),
|
|
32
|
+
} }),
|
|
33
|
+
React.createElement(Button, { className: classes.menuIcon, onClick: () => setFacetedOpen(true) }, "Open faceted selector")),
|
|
34
|
+
React.createElement(Suspense, { fallback: React.createElement("div", null) }, facetedOpen ? (React.createElement(FacetedDialog, { handleClose: () => setFacetedOpen(false), model: model })) : null)));
|
|
35
|
+
}
|
|
36
|
+
export default observer(HierarchicalTrackSelectorHeader);
|
|
37
|
+
//# sourceMappingURL=HierarchicalHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HierarchicalHeader.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,QAAQ;AACR,OAAO,SAAS,MAAM,2BAA2B,CAAA;AAIjD,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,YAAY,MAAM,iBAAiB,CAAA;AAE1C,SAAS;AACT,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAA;AAEpE,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,SAAS,EAAE;QACT,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KACzB;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7B,YAAY,EAAE,CAAC;KAChB;CACF,CAAC,CAAC,CAAA;AAEH,SAAS,+BAA+B,CAAC,EACvC,KAAK,EACL,eAAe,EACf,cAAc,GAKf;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAE5B,OAAO,CACL,6BACE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,qBAAqB,GAAG,MAAM,KAAI,CAAC,CAAC,iBACzD,6BAA6B;QAEzC,6BAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;YAC7B,oBAAC,aAAa,IAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,GAAI;YAC/D,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI;YAE9B,oBAAC,SAAS,IACR,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,KAAK,EAAC,eAAe,EACrB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1D,SAAS,QACT,UAAU,EAAE;oBACV,YAAY,EAAE,CACZ,oBAAC,cAAc,IAAC,QAAQ,EAAC,KAAK;wBAC5B,oBAAC,UAAU,IACT,KAAK,EAAC,WAAW,EACjB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE;4BAEtC,oBAAC,SAAS,OAAG,CACF,CACE,CAClB;iBACF,GACD;YACF,oBAAC,MAAM,IACL,SAAS,EAAE,OAAO,CAAC,QAAQ,EAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,4BAG5B,CACL;QAEN,oBAAC,QAAQ,IAAC,QAAQ,EAAE,gCAAO,IACxB,WAAW,CAAC,CAAC,CAAC,CACb,oBAAC,aAAa,IACZ,WAAW,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EACxC,KAAK,EAAE,KAAK,GACZ,CACH,CAAC,CAAC,CAAC,IAAI,CACC,CACP,CACP,CAAA;AACH,CAAC;AAED,eAAe,QAAQ,CAAC,+BAA+B,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { TreeNode, HierarchicalTrackSelectorModel } from '../../model';
|
|
3
|
+
declare const _default: ({ height, tree, model, }: {
|
|
4
|
+
height: number;
|
|
5
|
+
tree: TreeNode;
|
|
6
|
+
model: HierarchicalTrackSelectorModel;
|
|
7
|
+
}) => JSX.Element;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React, { useCallback, useMemo, useRef, useEffect } from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { VariableSizeTree } from 'react-vtree';
|
|
4
|
+
import { getSession } from '@jbrowse/core/util';
|
|
5
|
+
import Node from './TrackListNode';
|
|
6
|
+
function getNodeData(node, nestingLevel, extra, selection) {
|
|
7
|
+
const isLeaf = !!node.conf;
|
|
8
|
+
const selected = !!selection[node.id];
|
|
9
|
+
return {
|
|
10
|
+
data: {
|
|
11
|
+
defaultHeight: isLeaf ? 22 : 40,
|
|
12
|
+
isLeaf,
|
|
13
|
+
isOpenByDefault: true,
|
|
14
|
+
nestingLevel,
|
|
15
|
+
selected,
|
|
16
|
+
...node,
|
|
17
|
+
...extra,
|
|
18
|
+
},
|
|
19
|
+
nestingLevel,
|
|
20
|
+
node,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// this is the main tree component for the hierarchical track selector in note:
|
|
24
|
+
// in jbrowse-web the toolbar is position="sticky" which means the autosizer
|
|
25
|
+
// includes the height of the toolbar, so we subtract the given offsets
|
|
26
|
+
export default observer(function HierarchicalTree({ height, tree, model, }) {
|
|
27
|
+
const { filterText, selection, view } = model;
|
|
28
|
+
const treeRef = useRef(null);
|
|
29
|
+
const session = getSession(model);
|
|
30
|
+
const { drawerPosition } = session;
|
|
31
|
+
const obj = useMemo(() => Object.fromEntries(selection.map(s => [s.trackId, s])), [selection]);
|
|
32
|
+
const extra = useMemo(() => ({
|
|
33
|
+
onChange: (trackId) => view.toggleTrack(trackId),
|
|
34
|
+
toggleCollapse: (pathName) => model.toggleCategory(pathName),
|
|
35
|
+
tree,
|
|
36
|
+
model,
|
|
37
|
+
drawerPosition,
|
|
38
|
+
}), [view, model, drawerPosition, tree]);
|
|
39
|
+
const treeWalker = useCallback(function* treeWalker() {
|
|
40
|
+
for (let i = 0; i < tree.children.length; i++) {
|
|
41
|
+
const r = tree.children[i];
|
|
42
|
+
yield getNodeData(r, 0, extra, obj);
|
|
43
|
+
}
|
|
44
|
+
while (true) {
|
|
45
|
+
// @ts-ignore
|
|
46
|
+
const parentMeta = yield;
|
|
47
|
+
for (let i = 0; i < parentMeta.node.children.length; i++) {
|
|
48
|
+
const curr = parentMeta.node.children[i];
|
|
49
|
+
yield getNodeData(curr, parentMeta.nestingLevel + 1, extra, obj);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}, [tree, extra, obj]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
treeRef.current.recomputeTree({
|
|
56
|
+
refreshNodes: true,
|
|
57
|
+
useDefaultHeight: true,
|
|
58
|
+
});
|
|
59
|
+
}, [tree, filterText]);
|
|
60
|
+
return (React.createElement(React.Fragment, null,
|
|
61
|
+
React.createElement(VariableSizeTree, { ref: treeRef, treeWalker: treeWalker, height: height }, Node)));
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=HierarchicalTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HierarchicalTree.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { IconButton, Typography } from '@mui/material';
|
|
3
|
+
import { makeStyles } from 'tss-react/mui';
|
|
4
|
+
import JBrowseMenu from '@jbrowse/core/ui/Menu';
|
|
5
|
+
// icons
|
|
6
|
+
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';
|
|
7
|
+
import ArrowRightIcon from '@mui/icons-material/ArrowRight';
|
|
8
|
+
import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
|
|
9
|
+
// locals
|
|
10
|
+
import { getAllChildren, treeToMap } from '../util';
|
|
11
|
+
const useStyles = makeStyles()(theme => ({
|
|
12
|
+
contrastColor: {
|
|
13
|
+
color: theme.palette.secondary.contrastText,
|
|
14
|
+
},
|
|
15
|
+
// margin:auto 0 to center text vertically
|
|
16
|
+
accordionText: {
|
|
17
|
+
margin: 'auto 0',
|
|
18
|
+
// width 100 so you can click anywhere on the category bar
|
|
19
|
+
width: '100%',
|
|
20
|
+
},
|
|
21
|
+
}));
|
|
22
|
+
export default function Category({ isOpen, setOpen, data, }) {
|
|
23
|
+
const { classes } = useStyles();
|
|
24
|
+
const [menuEl, setMenuEl] = useState(null);
|
|
25
|
+
const { name, model, id, tree, toggleCollapse } = data;
|
|
26
|
+
return (React.createElement("div", { className: classes.accordionText, onClick: () => {
|
|
27
|
+
if (!menuEl) {
|
|
28
|
+
toggleCollapse(id);
|
|
29
|
+
setOpen(!isOpen);
|
|
30
|
+
}
|
|
31
|
+
} },
|
|
32
|
+
React.createElement(Typography, null,
|
|
33
|
+
isOpen ? React.createElement(ArrowDropDownIcon, null) : React.createElement(ArrowRightIcon, null),
|
|
34
|
+
name,
|
|
35
|
+
React.createElement(IconButton, { onClick: event => {
|
|
36
|
+
setMenuEl(event.currentTarget);
|
|
37
|
+
event.stopPropagation();
|
|
38
|
+
}, className: classes.contrastColor },
|
|
39
|
+
React.createElement(MoreHorizIcon, null))),
|
|
40
|
+
menuEl ? (React.createElement(JBrowseMenu, { anchorEl: menuEl, menuItems: [
|
|
41
|
+
{
|
|
42
|
+
label: 'Add to selection',
|
|
43
|
+
onClick: () => {
|
|
44
|
+
const r = treeToMap(tree).get(id);
|
|
45
|
+
model.addToSelection(getAllChildren(r));
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
label: 'Remove from selection',
|
|
50
|
+
onClick: () => {
|
|
51
|
+
const r = treeToMap(tree).get(id);
|
|
52
|
+
model.removeFromSelection(getAllChildren(r));
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
], onMenuItemClick: (_event, callback) => {
|
|
56
|
+
callback();
|
|
57
|
+
setMenuEl(null);
|
|
58
|
+
}, open: Boolean(menuEl), onClose: () => setMenuEl(null) })) : null));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=TrackCategory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackCategory.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { AnyConfigurationModel } from '@jbrowse/core/configuration';
|
|
3
|
+
import { NodeData } from '../util';
|
|
4
|
+
export interface InfoArgs {
|
|
5
|
+
target: HTMLElement;
|
|
6
|
+
id: string;
|
|
7
|
+
conf: AnyConfigurationModel;
|
|
8
|
+
}
|
|
9
|
+
export default function TrackLabel({ data }: {
|
|
10
|
+
data: NodeData;
|
|
11
|
+
}): JSX.Element;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Checkbox, FormControlLabel, IconButton, Tooltip } from '@mui/material';
|
|
3
|
+
import { makeStyles } from 'tss-react/mui';
|
|
4
|
+
import JBrowseMenu from '@jbrowse/core/ui/Menu';
|
|
5
|
+
import { getSession } from '@jbrowse/core/util';
|
|
6
|
+
import { readConfObject, } from '@jbrowse/core/configuration';
|
|
7
|
+
// icons
|
|
8
|
+
import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
|
|
9
|
+
// locals
|
|
10
|
+
import { isUnsupported } from '../util';
|
|
11
|
+
import { SanitizedHTML } from '@jbrowse/core/ui';
|
|
12
|
+
const useStyles = makeStyles()({
|
|
13
|
+
compactCheckbox: {
|
|
14
|
+
padding: 0,
|
|
15
|
+
},
|
|
16
|
+
checkboxLabel: {
|
|
17
|
+
marginRight: 0,
|
|
18
|
+
'&:hover': {
|
|
19
|
+
backgroundColor: '#eee',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
export default function TrackLabel({ data }) {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
const { classes } = useStyles();
|
|
26
|
+
const { checked, conf, model, drawerPosition, id, name, onChange, selected } = data;
|
|
27
|
+
const [info, setInfo] = useState();
|
|
28
|
+
const description = (conf && readConfObject(conf, ['description'])) || '';
|
|
29
|
+
return (React.createElement(React.Fragment, null,
|
|
30
|
+
React.createElement(Tooltip, { title: description + (selected ? ' (in selection)' : ''), placement: drawerPosition === 'left' ? 'right' : 'left' },
|
|
31
|
+
React.createElement(FormControlLabel, { className: classes.checkboxLabel, control: React.createElement(Checkbox, { className: classes.compactCheckbox, checked: checked, onChange: () => onChange(id), disabled: isUnsupported(name), inputProps: {
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
'data-testid': `htsTrackEntry-${id}`,
|
|
34
|
+
} }), label: React.createElement("div", { style: { background: selected ? '#cccc' : undefined } },
|
|
35
|
+
React.createElement(SanitizedHTML, { html: name })) })),
|
|
36
|
+
React.createElement(IconButton, { onClick: e => setInfo({ target: e.currentTarget, id, conf }), style: { padding: 0 }, color: "secondary", "data-testid": `htsTrackEntryMenu-${id}` },
|
|
37
|
+
React.createElement(MoreHorizIcon, null)),
|
|
38
|
+
info ? (React.createElement(JBrowseMenu, { anchorEl: info === null || info === void 0 ? void 0 : info.target, menuItems: [
|
|
39
|
+
...(((_b = (_a = getSession(model)).getTrackActionMenuItems) === null || _b === void 0 ? void 0 : _b.call(_a, info.conf)) || []),
|
|
40
|
+
{
|
|
41
|
+
label: 'Add to selection',
|
|
42
|
+
onClick: () => model.addToSelection([info.conf]),
|
|
43
|
+
},
|
|
44
|
+
...(selected
|
|
45
|
+
? [
|
|
46
|
+
{
|
|
47
|
+
label: 'Remove from selection',
|
|
48
|
+
onClick: () => model.removeFromSelection([info.conf]),
|
|
49
|
+
},
|
|
50
|
+
]
|
|
51
|
+
: []),
|
|
52
|
+
], onMenuItemClick: (_event, callback) => {
|
|
53
|
+
callback();
|
|
54
|
+
setInfo(undefined);
|
|
55
|
+
}, open: Boolean(info), onClose: () => setInfo(undefined) })) : null));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=TrackLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackLabel.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { NodeData } from '../util';
|
|
3
|
+
export default function Node({ data, isOpen, style, setOpen, }: {
|
|
4
|
+
data: NodeData;
|
|
5
|
+
isOpen: boolean;
|
|
6
|
+
style?: {
|
|
7
|
+
height: number;
|
|
8
|
+
};
|
|
9
|
+
setOpen: (arg: boolean) => void;
|
|
10
|
+
}): JSX.Element;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { makeStyles } from 'tss-react/mui';
|
|
3
|
+
// locals
|
|
4
|
+
import Category from './TrackCategory';
|
|
5
|
+
import TrackLabel from './TrackLabel';
|
|
6
|
+
const useStyles = makeStyles()(theme => ({
|
|
7
|
+
// this accordionBase element's small padding is used to give a margin to
|
|
8
|
+
// accordionColor it a "margin" because the virtualized elements can't really
|
|
9
|
+
// use margin in a conventional way (it doesn't affect layout)
|
|
10
|
+
accordionBase: {
|
|
11
|
+
display: 'flex',
|
|
12
|
+
},
|
|
13
|
+
accordionCard: {
|
|
14
|
+
padding: 3,
|
|
15
|
+
cursor: 'pointer',
|
|
16
|
+
display: 'flex',
|
|
17
|
+
},
|
|
18
|
+
nestingLevelMarker: {
|
|
19
|
+
position: 'absolute',
|
|
20
|
+
borderLeft: '1.5px solid #555',
|
|
21
|
+
},
|
|
22
|
+
// accordionColor set's display:flex so that the child accordionText use
|
|
23
|
+
// vertically centered text
|
|
24
|
+
accordionColor: {
|
|
25
|
+
background: theme.palette.tertiary.main,
|
|
26
|
+
color: theme.palette.tertiary.contrastText,
|
|
27
|
+
width: '100%',
|
|
28
|
+
display: 'flex',
|
|
29
|
+
paddingLeft: 5,
|
|
30
|
+
},
|
|
31
|
+
}));
|
|
32
|
+
// An individual node in the track selector. Note: manually sets cursor:
|
|
33
|
+
// pointer improves usability for what can be clicked
|
|
34
|
+
export default function Node({ data, isOpen, style, setOpen, }) {
|
|
35
|
+
const { isLeaf, nestingLevel } = data;
|
|
36
|
+
const { classes } = useStyles();
|
|
37
|
+
const width = 10;
|
|
38
|
+
const marginLeft = nestingLevel * width + (isLeaf ? width : 0);
|
|
39
|
+
return (React.createElement("div", { style: style, className: !isLeaf ? classes.accordionBase : undefined },
|
|
40
|
+
new Array(nestingLevel).fill(0).map((_, idx) => (React.createElement("div", { key: `mark-${idx}`, style: { left: idx * width + 4, height: style === null || style === void 0 ? void 0 : style.height }, className: classes.nestingLevelMarker }))),
|
|
41
|
+
React.createElement("div", { className: !isLeaf ? classes.accordionCard : undefined, style: {
|
|
42
|
+
marginLeft,
|
|
43
|
+
whiteSpace: 'nowrap',
|
|
44
|
+
width: '100%',
|
|
45
|
+
} },
|
|
46
|
+
React.createElement("div", { className: !isLeaf ? classes.accordionColor : undefined }, !isLeaf ? (React.createElement(Category, { isOpen: isOpen, data: data, setOpen: setOpen })) : (React.createElement(TrackLabel, { data: data }))))));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=TrackListNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackListNode.js","sourceRoot":"","sources":["../../../../src/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,SAAS;AACT,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AACtC,OAAO,UAAU,MAAM,cAAc,CAAA;AAGrC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,yEAAyE;IACzE,6EAA6E;IAC7E,8DAA8D;IAC9D,aAAa,EAAE;QACb,OAAO,EAAE,MAAM;KAChB;IAED,aAAa,EAAE;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,MAAM;KAChB;IAED,kBAAkB,EAAE;QAClB,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,kBAAkB;KAC/B;IACD,wEAAwE;IACxE,2BAA2B;IAC3B,cAAc,EAAE;QACd,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI;QACvC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY;QAC1C,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,CAAC;KACf;CACF,CAAC,CAAC,CAAA;AAEH,wEAAwE;AACxE,qDAAqD;AACrD,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAC3B,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,GAMR;IACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;IAErC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,EAAE,CAAA;IAChB,MAAM,UAAU,GAAG,YAAY,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE9D,OAAO,CACL,6BAAK,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACtE,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAC/C,6BACE,GAAG,EAAE,QAAQ,GAAG,EAAE,EAClB,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,EACvD,SAAS,EAAE,OAAO,CAAC,kBAAkB,GACrC,CACH,CAAC;QACF,6BACE,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EACtD,KAAK,EAAE;gBACL,UAAU;gBACV,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,MAAM;aACd;YAED,6BAAK,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,IACzD,CAAC,MAAM,CAAC,CAAC,CAAC,CACT,oBAAC,QAAQ,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAI,CAC3D,CAAC,CAAC,CAAC,CACF,oBAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CAC3B,CACG,CACF,CACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,3 +1,19 @@
|
|
|
1
1
|
import { AnyConfigurationModel } from '@jbrowse/core/configuration';
|
|
2
|
-
import { TreeNode } from '../model';
|
|
2
|
+
import { HierarchicalTrackSelectorModel, TreeNode } from '../model';
|
|
3
|
+
export interface NodeData {
|
|
4
|
+
nestingLevel: number;
|
|
5
|
+
checked: boolean;
|
|
6
|
+
conf: AnyConfigurationModel;
|
|
7
|
+
drawerPosition: unknown;
|
|
8
|
+
id: string;
|
|
9
|
+
isLeaf: boolean;
|
|
10
|
+
name: string;
|
|
11
|
+
onChange: Function;
|
|
12
|
+
toggleCollapse: (arg: string) => void;
|
|
13
|
+
tree: TreeNode;
|
|
14
|
+
selected: boolean;
|
|
15
|
+
model: HierarchicalTrackSelectorModel;
|
|
16
|
+
}
|
|
3
17
|
export declare function getAllChildren(subtree?: TreeNode): AnyConfigurationModel[];
|
|
18
|
+
export declare function treeToMap(tree: TreeNode, map?: Map<string, TreeNode>): Map<string, TreeNode>;
|
|
19
|
+
export declare function isUnsupported(name?: string): boolean;
|
|
@@ -2,4 +2,17 @@ export function getAllChildren(subtree) {
|
|
|
2
2
|
// @ts-ignore
|
|
3
3
|
return ((subtree === null || subtree === void 0 ? void 0 : subtree.children.map(t => t.children.length ? getAllChildren(t) : t.conf)) || []).flat(Infinity);
|
|
4
4
|
}
|
|
5
|
+
export function treeToMap(tree, map = new Map()) {
|
|
6
|
+
if (tree.id && tree.children.length) {
|
|
7
|
+
map.set(tree.id, tree);
|
|
8
|
+
}
|
|
9
|
+
for (let i = 0; i < tree.children.length; i++) {
|
|
10
|
+
const node = tree.children[i];
|
|
11
|
+
treeToMap(node, map);
|
|
12
|
+
}
|
|
13
|
+
return map;
|
|
14
|
+
}
|
|
15
|
+
export function isUnsupported(name = '') {
|
|
16
|
+
return name.endsWith('(Unsupported)') || name.endsWith('(Unknown)');
|
|
17
|
+
}
|
|
5
18
|
//# sourceMappingURL=util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/HierarchicalTrackSelectorWidget/components/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/HierarchicalTrackSelectorWidget/components/util.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,cAAc,CAAC,OAAkB;IAC/C,aAAa;IACb,OAAO,CACL,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACxB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,IAA8B,CAC1E,KAAI,EAAE,CACR,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,MAAM,IAAI,GAAG,EAAoB;IACzE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QACnC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;KACvB;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC7B,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;KACrB;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,EAAE;IACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AACrE,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import stateModelFactory, { HierarchicalTrackSelectorModel } from './model';
|
|
2
2
|
import configSchema from './configSchema';
|
|
3
|
+
import PluginManager from '@jbrowse/core/PluginManager';
|
|
3
4
|
export { stateModelFactory, configSchema };
|
|
4
5
|
export type { HierarchicalTrackSelectorModel };
|
|
6
|
+
declare const _default: (pluginManager: PluginManager) => void;
|
|
7
|
+
export default _default;
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import stateModelFactory from './model';
|
|
2
2
|
import configSchema from './configSchema';
|
|
3
|
+
import { WidgetType } from '@jbrowse/core/pluggableElementTypes';
|
|
4
|
+
import { lazy } from 'react';
|
|
3
5
|
export { stateModelFactory, configSchema };
|
|
6
|
+
export default (pluginManager) => {
|
|
7
|
+
pluginManager.addWidgetType(() => {
|
|
8
|
+
return new WidgetType({
|
|
9
|
+
name: 'HierarchicalTrackSelectorWidget',
|
|
10
|
+
heading: 'Available tracks',
|
|
11
|
+
configSchema,
|
|
12
|
+
stateModel: stateModelFactory(pluginManager),
|
|
13
|
+
ReactComponent: lazy(() => import('./components/HierarchicalTrackSelector')),
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
};
|
|
4
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/HierarchicalTrackSelectorWidget/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAqD,MAAM,SAAS,CAAA;AAC3E,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/HierarchicalTrackSelectorWidget/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAqD,MAAM,SAAS,CAAA;AAC3E,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAE5B,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAA;AAG1C,eAAe,CAAC,aAA4B,EAAE,EAAE;IAC9C,aAAa,CAAC,aAAa,CAAC,GAAG,EAAE;QAC/B,OAAO,IAAI,UAAU,CAAC;YACpB,IAAI,EAAE,iCAAiC;YACvC,OAAO,EAAE,kBAAkB;YAC3B,YAAY;YACZ,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC;YAC5C,cAAc,EAAE,IAAI,CAClB,GAAG,EAAE,CAAC,MAAM,CAAC,wCAAwC,CAAC,CACvD;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Instance } from 'mobx-state-tree';
|
|
2
2
|
import { AnyConfigurationModel } from '@jbrowse/core/configuration';
|
|
3
|
+
import { AbstractSessionModel } from '@jbrowse/core/util';
|
|
3
4
|
import PluginManager from '@jbrowse/core/PluginManager';
|
|
5
|
+
export declare function matches(query: string, conf: AnyConfigurationModel, session: AbstractSessionModel): any;
|
|
4
6
|
export type TreeNode = {
|
|
5
7
|
name: string;
|
|
6
8
|
id: string;
|
|
@@ -16,7 +18,6 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
16
18
|
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
17
19
|
type: import("mobx-state-tree").ISimpleType<"HierarchicalTrackSelectorWidget">;
|
|
18
20
|
collapsed: import("mobx-state-tree").IMapType<import("mobx-state-tree").ISimpleType<boolean>>;
|
|
19
|
-
filterText: import("mobx-state-tree").IType<string | undefined, string, string>;
|
|
20
21
|
view: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
|
|
21
22
|
}, {
|
|
22
23
|
selection: ({
|
|
@@ -24,7 +25,9 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
24
25
|
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
25
26
|
setSubschema(slotName: string, data: unknown): any;
|
|
26
27
|
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
|
|
28
|
+
filterText: string;
|
|
27
29
|
} & {
|
|
30
|
+
setSelection(elt: AnyConfigurationModel[]): void;
|
|
28
31
|
addToSelection(elt: AnyConfigurationModel[]): void;
|
|
29
32
|
removeFromSelection(elt: AnyConfigurationModel[]): void;
|
|
30
33
|
clearSelection(): void;
|
|
@@ -6,11 +6,11 @@ import { ElementId } from '@jbrowse/core/util/types/mst';
|
|
|
6
6
|
function hasAnyOverlap(a1 = [], a2 = []) {
|
|
7
7
|
return !!a1.find(value => a2.includes(value));
|
|
8
8
|
}
|
|
9
|
-
function
|
|
10
|
-
const categories = readConfObject(
|
|
11
|
-
const
|
|
12
|
-
return (getTrackName(
|
|
13
|
-
!!(categories === null || categories === void 0 ? void 0 : categories.filter(c => c.toLowerCase().includes(
|
|
9
|
+
export function matches(query, conf, session) {
|
|
10
|
+
const categories = readConfObject(conf, 'category');
|
|
11
|
+
const queryLower = query.toLowerCase();
|
|
12
|
+
return (getTrackName(conf, session).toLowerCase().includes(queryLower) ||
|
|
13
|
+
!!(categories === null || categories === void 0 ? void 0 : categories.filter(c => c.toLowerCase().includes(queryLower)).length));
|
|
14
14
|
}
|
|
15
15
|
function filterTracks(tracks, self, assemblyName) {
|
|
16
16
|
const { assemblyManager } = getSession(self);
|
|
@@ -34,7 +34,7 @@ export function generateHierarchy(model, trackConfigurations, collapsed, extra)
|
|
|
34
34
|
const { filterText, view } = model;
|
|
35
35
|
const session = getSession(model);
|
|
36
36
|
trackConfigurations
|
|
37
|
-
.filter(conf =>
|
|
37
|
+
.filter(conf => matches(filterText, conf, session))
|
|
38
38
|
.forEach(conf => {
|
|
39
39
|
// copy the categories since this array can be mutated downstream
|
|
40
40
|
const categories = [...(readConfObject(conf, 'category') || [])];
|
|
@@ -82,13 +82,16 @@ export default function stateTreeFactory(pluginManager) {
|
|
|
82
82
|
id: ElementId,
|
|
83
83
|
type: types.literal('HierarchicalTrackSelectorWidget'),
|
|
84
84
|
collapsed: types.map(types.boolean),
|
|
85
|
-
filterText: '',
|
|
86
85
|
view: types.safeReference(pluginManager.pluggableMstType('view', 'stateModel')),
|
|
87
86
|
})
|
|
88
87
|
.volatile(() => ({
|
|
89
88
|
selection: [],
|
|
89
|
+
filterText: '',
|
|
90
90
|
}))
|
|
91
91
|
.actions(self => ({
|
|
92
|
+
setSelection(elt) {
|
|
93
|
+
self.selection = elt;
|
|
94
|
+
},
|
|
92
95
|
addToSelection(elt) {
|
|
93
96
|
self.selection = dedupe([...self.selection, ...elt], e => e.trackId);
|
|
94
97
|
},
|