@jbrowse/plugin-data-management 1.7.10 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AddConnectionWidget/components/AddConnectionWidget.js +115 -162
- package/dist/AddConnectionWidget/components/AddConnectionWidget.js.map +1 -0
- package/dist/AddConnectionWidget/components/ConfigureConnection.js +33 -32
- package/dist/AddConnectionWidget/components/ConfigureConnection.js.map +1 -0
- package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +48 -64
- package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js.map +1 -0
- package/dist/AddConnectionWidget/index.js +10 -20
- package/dist/AddConnectionWidget/index.js.map +1 -0
- package/dist/AddConnectionWidget/model.js +7 -15
- package/dist/AddConnectionWidget/model.js.map +1 -0
- package/dist/AddTrackWidget/components/AddTrackWidget.js +206 -230
- package/dist/AddTrackWidget/components/AddTrackWidget.js.map +1 -0
- package/dist/AddTrackWidget/components/ConfirmTrack.js +268 -385
- package/dist/AddTrackWidget/components/ConfirmTrack.js.map +1 -0
- package/dist/AddTrackWidget/components/TrackSourceSelect.js +28 -55
- package/dist/AddTrackWidget/components/TrackSourceSelect.js.map +1 -0
- package/dist/AddTrackWidget/index.js +10 -20
- package/dist/AddTrackWidget/index.js.map +1 -0
- package/dist/AddTrackWidget/model.js +150 -174
- package/dist/AddTrackWidget/model.js.map +1 -0
- package/dist/AssemblyManager/AssemblyAddForm.js +162 -282
- package/dist/AssemblyManager/AssemblyAddForm.js.map +1 -0
- package/dist/AssemblyManager/AssemblyEditor.js +12 -23
- package/dist/AssemblyManager/AssemblyEditor.js.map +1 -0
- package/dist/AssemblyManager/AssemblyManager.js +102 -132
- package/dist/AssemblyManager/AssemblyManager.js.map +1 -0
- package/dist/AssemblyManager/AssemblyTable.d.ts +1 -1
- package/dist/AssemblyManager/AssemblyTable.js +60 -84
- package/dist/AssemblyManager/AssemblyTable.js.map +1 -0
- package/dist/AssemblyManager/index.js +8 -14
- package/dist/AssemblyManager/index.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.d.ts +7 -1
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +49 -53
- package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.d.ts +1 -1
- package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +28 -44
- package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +10 -5
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +423 -630
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.d.ts +2 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +45 -74
- package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.d.ts +2 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +57 -92
- package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/index.d.ts +2 -2
- package/dist/HierarchicalTrackSelectorWidget/index.js +10 -20
- package/dist/HierarchicalTrackSelectorWidget/index.js.map +1 -0
- package/dist/HierarchicalTrackSelectorWidget/model.d.ts +40 -16
- package/dist/HierarchicalTrackSelectorWidget/model.js +247 -293
- package/dist/HierarchicalTrackSelectorWidget/model.js.map +1 -0
- package/dist/PluginStoreWidget/components/CustomPluginForm.js +140 -202
- package/dist/PluginStoreWidget/components/CustomPluginForm.js.map +1 -0
- package/dist/PluginStoreWidget/components/InstalledPlugin.js +112 -127
- package/dist/PluginStoreWidget/components/InstalledPlugin.js.map +1 -0
- package/dist/PluginStoreWidget/components/InstalledPluginsList.js +22 -45
- package/dist/PluginStoreWidget/components/InstalledPluginsList.js.map +1 -0
- package/dist/PluginStoreWidget/components/PluginCard.js +95 -110
- package/dist/PluginStoreWidget/components/PluginCard.js.map +1 -0
- package/dist/PluginStoreWidget/components/PluginStoreWidget.js +188 -227
- package/dist/PluginStoreWidget/components/PluginStoreWidget.js.map +1 -0
- package/dist/PluginStoreWidget/index.d.ts +0 -1
- package/dist/PluginStoreWidget/index.js +10 -28
- package/dist/PluginStoreWidget/index.js.map +1 -0
- package/dist/PluginStoreWidget/model.js +21 -26
- package/dist/PluginStoreWidget/model.js.map +1 -0
- package/dist/SetDefaultSession/SetDefaultSession.js +34 -58
- package/dist/SetDefaultSession/SetDefaultSession.js.map +1 -0
- package/dist/SetDefaultSession/index.js +8 -14
- package/dist/SetDefaultSession/index.js.map +1 -0
- package/dist/index.js +109 -147
- package/dist/index.js.map +1 -0
- package/dist/ucsc-trackhub/configSchema.js +18 -28
- package/dist/ucsc-trackhub/configSchema.js.map +1 -0
- package/dist/ucsc-trackhub/index.js +10 -22
- package/dist/ucsc-trackhub/index.js.map +1 -0
- package/dist/ucsc-trackhub/model.js +150 -128
- package/dist/ucsc-trackhub/model.js.map +1 -0
- package/dist/ucsc-trackhub/ucscAssemblies.js +3 -9
- package/dist/ucsc-trackhub/ucscAssemblies.js.map +1 -0
- package/dist/ucsc-trackhub/ucscTrackHub.js +458 -491
- package/dist/ucsc-trackhub/ucscTrackHub.js.map +1 -0
- package/esm/AddConnectionWidget/components/AddConnectionWidget.d.ts +9 -0
- package/esm/AddConnectionWidget/components/AddConnectionWidget.js +86 -0
- package/esm/AddConnectionWidget/components/AddConnectionWidget.js.map +1 -0
- package/esm/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -0
- package/esm/AddConnectionWidget/components/ConfigureConnection.js +11 -0
- package/esm/AddConnectionWidget/components/ConfigureConnection.js.map +1 -0
- package/esm/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +8 -0
- package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +24 -0
- package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js.map +1 -0
- package/esm/AddConnectionWidget/index.d.ts +2 -0
- package/esm/AddConnectionWidget/index.js +4 -0
- package/esm/AddConnectionWidget/index.js.map +1 -0
- package/esm/AddConnectionWidget/model.d.ts +5 -0
- package/esm/AddConnectionWidget/model.js +7 -0
- package/esm/AddConnectionWidget/model.js.map +1 -0
- package/esm/AddTrackWidget/components/AddTrackWidget.d.ts +7 -0
- package/esm/AddTrackWidget/components/AddTrackWidget.js +139 -0
- package/esm/AddTrackWidget/components/AddTrackWidget.js.map +1 -0
- package/esm/AddTrackWidget/components/ConfirmTrack.d.ts +7 -0
- package/esm/AddTrackWidget/components/ConfirmTrack.js +247 -0
- package/esm/AddTrackWidget/components/ConfirmTrack.js.map +1 -0
- package/esm/AddTrackWidget/components/TrackSourceSelect.d.ts +7 -0
- package/esm/AddTrackWidget/components/TrackSourceSelect.js +27 -0
- package/esm/AddTrackWidget/components/TrackSourceSelect.js.map +1 -0
- package/esm/AddTrackWidget/index.d.ts +2 -0
- package/esm/AddTrackWidget/index.js +4 -0
- package/esm/AddTrackWidget/index.js.map +1 -0
- package/esm/AddTrackWidget/model.d.ts +51 -0
- package/esm/AddTrackWidget/model.js +154 -0
- package/esm/AddTrackWidget/model.js.map +1 -0
- package/esm/AssemblyManager/AssemblyAddForm.d.ts +6 -0
- package/esm/AssemblyManager/AssemblyAddForm.js +132 -0
- package/esm/AssemblyManager/AssemblyAddForm.js.map +1 -0
- package/esm/AssemblyManager/AssemblyEditor.d.ts +5 -0
- package/esm/AssemblyManager/AssemblyEditor.js +8 -0
- package/esm/AssemblyManager/AssemblyEditor.js.map +1 -0
- package/esm/AssemblyManager/AssemblyManager.d.ts +6 -0
- package/esm/AssemblyManager/AssemblyManager.js +69 -0
- package/esm/AssemblyManager/AssemblyManager.js.map +1 -0
- package/esm/AssemblyManager/AssemblyTable.d.ts +13 -0
- package/esm/AssemblyManager/AssemblyTable.js +62 -0
- package/esm/AssemblyManager/AssemblyTable.js.map +1 -0
- package/esm/AssemblyManager/index.d.ts +1 -0
- package/esm/AssemblyManager/index.js +2 -0
- package/esm/AssemblyManager/index.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.d.ts +13 -0
- package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +26 -0
- package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.d.ts +13 -0
- package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +24 -0
- package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +11 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +326 -0
- package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.d.ts +10 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +45 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.d.ts +11 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +57 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/index.d.ts +2 -0
- package/esm/HierarchicalTrackSelectorWidget/index.js +4 -0
- package/esm/HierarchicalTrackSelectorWidget/index.js.map +1 -0
- package/esm/HierarchicalTrackSelectorWidget/model.d.ts +61 -0
- package/esm/HierarchicalTrackSelectorWidget/model.js +200 -0
- package/esm/HierarchicalTrackSelectorWidget/model.js.map +1 -0
- package/esm/PluginStoreWidget/components/CustomPluginForm.d.ts +9 -0
- package/esm/PluginStoreWidget/components/CustomPluginForm.js +109 -0
- package/esm/PluginStoreWidget/components/CustomPluginForm.js.map +1 -0
- package/esm/PluginStoreWidget/components/InstalledPlugin.d.ts +11 -0
- package/esm/PluginStoreWidget/components/InstalledPlugin.js +77 -0
- package/esm/PluginStoreWidget/components/InstalledPlugin.js.map +1 -0
- package/esm/PluginStoreWidget/components/InstalledPluginsList.d.ts +9 -0
- package/esm/PluginStoreWidget/components/InstalledPluginsList.js +16 -0
- package/esm/PluginStoreWidget/components/InstalledPluginsList.js.map +1 -0
- package/esm/PluginStoreWidget/components/PluginCard.d.ts +10 -0
- package/esm/PluginStoreWidget/components/PluginCard.js +61 -0
- package/esm/PluginStoreWidget/components/PluginCard.js.map +1 -0
- package/esm/PluginStoreWidget/components/PluginStoreWidget.d.ts +7 -0
- package/esm/PluginStoreWidget/components/PluginStoreWidget.js +106 -0
- package/esm/PluginStoreWidget/components/PluginStoreWidget.js.map +1 -0
- package/esm/PluginStoreWidget/index.d.ts +2 -0
- package/esm/PluginStoreWidget/index.js +4 -0
- package/esm/PluginStoreWidget/index.js.map +1 -0
- package/esm/PluginStoreWidget/model.d.ts +13 -0
- package/esm/PluginStoreWidget/model.js +20 -0
- package/esm/PluginStoreWidget/model.js.map +1 -0
- package/esm/SetDefaultSession/SetDefaultSession.d.ts +6 -0
- package/esm/SetDefaultSession/SetDefaultSession.js +34 -0
- package/esm/SetDefaultSession/SetDefaultSession.js.map +1 -0
- package/esm/SetDefaultSession/index.d.ts +1 -0
- package/esm/SetDefaultSession/index.js +2 -0
- package/esm/SetDefaultSession/index.js.map +1 -0
- package/esm/index.d.ts +27 -0
- package/esm/index.js +70 -0
- package/esm/index.js.map +1 -0
- package/esm/ucsc-trackhub/configSchema.d.ts +2 -0
- package/esm/ucsc-trackhub/configSchema.js +18 -0
- package/esm/ucsc-trackhub/configSchema.js.map +1 -0
- package/esm/ucsc-trackhub/index.d.ts +2 -0
- package/esm/ucsc-trackhub/index.js +3 -0
- package/esm/ucsc-trackhub/index.js.map +1 -0
- package/esm/ucsc-trackhub/model.d.ts +15 -0
- package/esm/ucsc-trackhub/model.js +82 -0
- package/esm/ucsc-trackhub/model.js.map +1 -0
- package/esm/ucsc-trackhub/ucscAssemblies.d.ts +2 -0
- package/esm/ucsc-trackhub/ucscAssemblies.js +201 -0
- package/esm/ucsc-trackhub/ucscAssemblies.js.map +1 -0
- package/esm/ucsc-trackhub/ucscTrackHub.d.ts +6 -0
- package/esm/ucsc-trackhub/ucscTrackHub.js +348 -0
- package/esm/ucsc-trackhub/ucscTrackHub.js.map +1 -0
- package/package.json +21 -13
- package/src/AddConnectionWidget/components/AddConnectionWidget.js +14 -10
- package/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx +2 -4
- package/src/AddConnectionWidget/components/__snapshots__/AddConnectionWidget.test.js.snap +63 -67
- package/src/AddTrackWidget/components/AddTrackWidget.test.js +4 -4
- package/src/AddTrackWidget/components/AddTrackWidget.tsx +5 -5
- package/src/AddTrackWidget/components/ConfirmTrack.tsx +22 -22
- package/src/AddTrackWidget/components/TrackSourceSelect.tsx +9 -5
- package/src/AddTrackWidget/components/__snapshots__/AddTrackWidget.test.js.snap +76 -95
- package/src/AssemblyManager/AssemblyAddForm.tsx +5 -11
- package/src/AssemblyManager/AssemblyManager.tsx +8 -8
- package/src/AssemblyManager/AssemblyTable.tsx +10 -10
- package/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx +8 -12
- package/src/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.tsx +2 -2
- package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +1 -1
- package/src/HierarchicalTrackSelectorWidget/components/{HierarchicalTrackSelector.js → HierarchicalTrackSelector.tsx} +262 -148
- package/src/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.tsx +11 -8
- package/src/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.tsx +31 -33
- package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.js.snap +122 -115
- package/src/HierarchicalTrackSelectorWidget/{index.js → index.ts} +0 -0
- package/src/HierarchicalTrackSelectorWidget/{model.js → model.ts} +113 -105
- package/src/PluginStoreWidget/components/CustomPluginForm.tsx +11 -14
- package/src/PluginStoreWidget/components/InstalledPlugin.tsx +9 -8
- package/src/PluginStoreWidget/components/InstalledPluginsList.tsx +1 -1
- package/src/PluginStoreWidget/components/PluginCard.tsx +10 -11
- package/src/PluginStoreWidget/components/PluginStoreWidget.tsx +9 -9
- package/src/PluginStoreWidget/components/__snapshots__/PluginStoreWidget.test.js.snap +267 -217
- package/src/PluginStoreWidget/index.js +0 -1
- package/src/SetDefaultSession/SetDefaultSession.tsx +1 -1
- package/dist/AddConnectionWidget/components/AddConnectionWidget.test.js +0 -279
- package/dist/AddTrackWidget/components/AddTrackWidget.test.js +0 -218
- package/dist/AddTrackWidget/index.test.js +0 -292
- package/dist/AssemblyManager/AssemblyManager.test.js +0 -113
- package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +0 -191
- package/dist/HierarchicalTrackSelectorWidget/model.test.js +0 -28
- package/dist/PluginStoreWidget/components/PluginStoreWidget.test.js +0 -201
- package/dist/PluginStoreWidget/model.test.js +0 -17
- package/dist/SetDefaultSession/SetDefaultSession.test.js +0 -75
- package/dist/index.test.js +0 -56
|
@@ -1,22 +1,28 @@
|
|
|
1
|
-
import { types, getParent } from 'mobx-state-tree'
|
|
2
|
-
import {
|
|
1
|
+
import { types, getParent, Instance } from 'mobx-state-tree'
|
|
2
|
+
import {
|
|
3
|
+
AnyConfigurationModel,
|
|
4
|
+
getConf,
|
|
5
|
+
readConfObject,
|
|
6
|
+
} from '@jbrowse/core/configuration'
|
|
3
7
|
import { getSession } from '@jbrowse/core/util'
|
|
4
8
|
import { ElementId } from '@jbrowse/core/util/types/mst'
|
|
9
|
+
import PluginManager from '@jbrowse/core/PluginManager'
|
|
10
|
+
import { AbstractView } from 'react'
|
|
5
11
|
|
|
6
|
-
|
|
7
|
-
!!a1.find(value => a2.includes(value))
|
|
12
|
+
function hasAnyOverlap<T>(a1: T[] = [], a2: T[] = []) {
|
|
13
|
+
return !!a1.find(value => a2.includes(value))
|
|
14
|
+
}
|
|
8
15
|
|
|
9
|
-
function passesFilter(filter, config) {
|
|
10
|
-
const
|
|
11
|
-
const categories = readConfObject(config, 'category') || []
|
|
16
|
+
function passesFilter(filter: string, config: AnyConfigurationModel) {
|
|
17
|
+
const categories = readConfObject(config, 'category') as string[] | undefined
|
|
12
18
|
const filterLower = filter.toLowerCase()
|
|
13
19
|
return (
|
|
14
|
-
|
|
15
|
-
categories
|
|
20
|
+
getTrackName(config).toLowerCase().includes(filterLower) ||
|
|
21
|
+
categories?.filter(c => c.toLowerCase().includes(filterLower)).length
|
|
16
22
|
)
|
|
17
23
|
}
|
|
18
24
|
|
|
19
|
-
function getTrackName(config) {
|
|
25
|
+
function getTrackName(config: AnyConfigurationModel) {
|
|
20
26
|
if (!config.trackId) {
|
|
21
27
|
throw new Error('not a track')
|
|
22
28
|
}
|
|
@@ -26,20 +32,33 @@ function getTrackName(config) {
|
|
|
26
32
|
)
|
|
27
33
|
}
|
|
28
34
|
|
|
29
|
-
export
|
|
30
|
-
|
|
35
|
+
export type TreeNode = {
|
|
36
|
+
name: string
|
|
37
|
+
id: string
|
|
38
|
+
conf?: AnyConfigurationModel
|
|
39
|
+
checked?: boolean
|
|
40
|
+
isOpenByDefault?: boolean
|
|
41
|
+
children: TreeNode[]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function generateHierarchy(
|
|
45
|
+
model: HierarchicalTrackSelectorModel,
|
|
46
|
+
trackConfigurations: AnyConfigurationModel[],
|
|
47
|
+
collapsed: { get: (arg: string) => boolean | undefined },
|
|
48
|
+
) {
|
|
49
|
+
const hierarchy = { children: [] as TreeNode[] } as TreeNode
|
|
31
50
|
const { filterText, view } = model
|
|
32
51
|
|
|
33
52
|
trackConfigurations
|
|
34
|
-
.filter(
|
|
35
|
-
.forEach(
|
|
53
|
+
.filter(conf => passesFilter(filterText, conf))
|
|
54
|
+
.forEach(conf => {
|
|
36
55
|
// copy the categories since this array can be mutated downstream
|
|
37
|
-
const categories = [...(readConfObject(
|
|
56
|
+
const categories = [...(readConfObject(conf, 'category') || [])]
|
|
38
57
|
|
|
39
58
|
// silly thing where if trackId ends with sessionTrack, then push it to
|
|
40
59
|
// a category that starts with a space to force sort to the top...
|
|
41
60
|
// double whammy hackyness
|
|
42
|
-
if (
|
|
61
|
+
if (conf.trackId.endsWith('sessionTrack')) {
|
|
43
62
|
categories.unshift(' Session tracks')
|
|
44
63
|
}
|
|
45
64
|
|
|
@@ -63,16 +82,17 @@ export function generateHierarchy(model, trackConfigurations, collapsed) {
|
|
|
63
82
|
currLevel = ret
|
|
64
83
|
}
|
|
65
84
|
}
|
|
85
|
+
const tracks = view.tracks as { configuration: AnyConfigurationModel }[]
|
|
66
86
|
|
|
67
87
|
// using splice here tries to group leaf nodes above hierarchical nodes
|
|
68
88
|
currLevel.children.splice(
|
|
69
89
|
currLevel.children.findIndex(elt => elt.children.length),
|
|
70
90
|
0,
|
|
71
91
|
{
|
|
72
|
-
id:
|
|
73
|
-
name: getTrackName(
|
|
74
|
-
conf
|
|
75
|
-
checked: !!
|
|
92
|
+
id: conf.trackId,
|
|
93
|
+
name: getTrackName(conf),
|
|
94
|
+
conf,
|
|
95
|
+
checked: !!tracks.find(f => f.configuration === conf),
|
|
76
96
|
children: [],
|
|
77
97
|
},
|
|
78
98
|
)
|
|
@@ -81,8 +101,8 @@ export function generateHierarchy(model, trackConfigurations, collapsed) {
|
|
|
81
101
|
return hierarchy.children
|
|
82
102
|
}
|
|
83
103
|
|
|
84
|
-
export default pluginManager
|
|
85
|
-
types
|
|
104
|
+
export default function stateTreeFactory(pluginManager: PluginManager) {
|
|
105
|
+
return types
|
|
86
106
|
.model('HierarchicalTrackSelectorWidget', {
|
|
87
107
|
id: ElementId,
|
|
88
108
|
type: types.literal('HierarchicalTrackSelectorWidget'),
|
|
@@ -93,44 +113,41 @@ export default pluginManager =>
|
|
|
93
113
|
),
|
|
94
114
|
})
|
|
95
115
|
.actions(self => ({
|
|
96
|
-
setView(view) {
|
|
116
|
+
setView(view: AbstractView) {
|
|
97
117
|
self.view = view
|
|
98
118
|
},
|
|
99
|
-
toggleCategory(pathName) {
|
|
119
|
+
toggleCategory(pathName: string) {
|
|
100
120
|
self.collapsed.set(pathName, !self.collapsed.get(pathName))
|
|
101
121
|
},
|
|
102
122
|
clearFilterText() {
|
|
103
123
|
self.filterText = ''
|
|
104
124
|
},
|
|
105
|
-
setFilterText(newText) {
|
|
125
|
+
setFilterText(newText: string) {
|
|
106
126
|
self.filterText = newText
|
|
107
127
|
},
|
|
108
128
|
}))
|
|
109
129
|
.views(self => ({
|
|
110
|
-
getRefSeqTrackConf(assemblyName) {
|
|
130
|
+
getRefSeqTrackConf(assemblyName: string) {
|
|
111
131
|
const { assemblyManager } = getSession(self)
|
|
112
132
|
const assembly = assemblyManager.get(assemblyName)
|
|
113
133
|
const trackConf = assembly?.configuration.sequence
|
|
114
134
|
const viewType = pluginManager.getViewType(self.view.type)
|
|
115
|
-
if (trackConf) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
) {
|
|
122
|
-
return trackConf
|
|
123
|
-
}
|
|
135
|
+
if (!trackConf) {
|
|
136
|
+
return undefined
|
|
137
|
+
}
|
|
138
|
+
for (const display of trackConf.displays) {
|
|
139
|
+
if (viewType.displayTypes.find(d => d.name === display.type)) {
|
|
140
|
+
return trackConf
|
|
124
141
|
}
|
|
125
142
|
}
|
|
126
|
-
return undefined
|
|
127
143
|
},
|
|
128
|
-
|
|
144
|
+
}))
|
|
145
|
+
.views(self => ({
|
|
146
|
+
trackConfigurations(assemblyName: string) {
|
|
129
147
|
if (!self.view) {
|
|
130
148
|
return []
|
|
131
149
|
}
|
|
132
|
-
const
|
|
133
|
-
const { tracks: trackConfigurations, assemblyManager } = session
|
|
150
|
+
const { tracks, assemblyManager } = getSession(self)
|
|
134
151
|
const assembly = assemblyManager.get(assemblyName)
|
|
135
152
|
if (!assembly) {
|
|
136
153
|
return []
|
|
@@ -139,34 +156,36 @@ export default pluginManager =>
|
|
|
139
156
|
// filter out tracks that don't match the current assembly (check all
|
|
140
157
|
// assembly aliases) and display types
|
|
141
158
|
return (refseq ? [refseq] : []).concat([
|
|
142
|
-
...
|
|
143
|
-
.filter(
|
|
144
|
-
const trackConfAssemblies = readConfObject(
|
|
159
|
+
...tracks
|
|
160
|
+
.filter(c => {
|
|
161
|
+
const trackConfAssemblies = readConfObject(c, 'assemblyNames')
|
|
145
162
|
const { allAliases } = assembly
|
|
146
163
|
return hasAnyOverlap(allAliases, trackConfAssemblies)
|
|
147
164
|
})
|
|
148
|
-
.filter(
|
|
165
|
+
.filter(c => {
|
|
149
166
|
const { displayTypes } = pluginManager.getViewType(self.view.type)
|
|
150
|
-
const compatibleDisplays = displayTypes.map(
|
|
151
|
-
|
|
167
|
+
const compatibleDisplays = displayTypes.map(d => d.name)
|
|
168
|
+
const trackDisplays = c.displays.map(
|
|
169
|
+
(d: { type: string }) => d.type,
|
|
152
170
|
)
|
|
153
|
-
const trackDisplays = conf.displays.map(display => display.type)
|
|
154
171
|
return hasAnyOverlap(compatibleDisplays, trackDisplays)
|
|
155
172
|
}),
|
|
156
173
|
])
|
|
157
174
|
},
|
|
158
175
|
|
|
159
|
-
get assemblyNames() {
|
|
160
|
-
return self.view
|
|
176
|
+
get assemblyNames(): string[] {
|
|
177
|
+
return self.view?.assemblyNames || []
|
|
161
178
|
},
|
|
162
179
|
|
|
163
|
-
connectionTrackConfigurations(
|
|
180
|
+
connectionTrackConfigurations(
|
|
181
|
+
assemblyName: string,
|
|
182
|
+
connection: { tracks: AnyConfigurationModel[] },
|
|
183
|
+
) {
|
|
164
184
|
if (!self.view) {
|
|
165
185
|
return []
|
|
166
186
|
}
|
|
167
187
|
const trackConfigurations = connection.tracks
|
|
168
|
-
const
|
|
169
|
-
const { assemblyManager } = session
|
|
188
|
+
const { assemblyManager } = getSession(self)
|
|
170
189
|
const assembly = assemblyManager.get(assemblyName)
|
|
171
190
|
|
|
172
191
|
if (!(assembly && assembly.initialized)) {
|
|
@@ -175,49 +194,49 @@ export default pluginManager =>
|
|
|
175
194
|
|
|
176
195
|
// filter out tracks that don't match the current display types
|
|
177
196
|
return trackConfigurations
|
|
178
|
-
.filter(
|
|
179
|
-
const trackConfAssemblies = readConfObject(
|
|
197
|
+
.filter(c => {
|
|
198
|
+
const trackConfAssemblies = readConfObject(c, 'assemblyNames')
|
|
180
199
|
const { allAliases } = assembly
|
|
181
200
|
return hasAnyOverlap(allAliases, trackConfAssemblies)
|
|
182
201
|
})
|
|
183
|
-
.filter(
|
|
202
|
+
.filter(c => {
|
|
184
203
|
const { displayTypes } = pluginManager.getViewType(self.view.type)
|
|
185
|
-
const compatibleDisplays = displayTypes.map(
|
|
186
|
-
const trackDisplays =
|
|
204
|
+
const compatibleDisplays = displayTypes.map(d => d.name)
|
|
205
|
+
const trackDisplays = c.displays.map(
|
|
206
|
+
(d: { type: string }) => d.type,
|
|
207
|
+
)
|
|
187
208
|
return hasAnyOverlap(compatibleDisplays, trackDisplays)
|
|
188
209
|
})
|
|
189
210
|
},
|
|
190
|
-
|
|
191
|
-
|
|
211
|
+
}))
|
|
212
|
+
.views(self => ({
|
|
213
|
+
hierarchy(assemblyName: string) {
|
|
192
214
|
const hier = generateHierarchy(
|
|
193
|
-
|
|
215
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
216
|
+
self as any,
|
|
194
217
|
self.trackConfigurations(assemblyName),
|
|
195
218
|
self.collapsed,
|
|
196
219
|
)
|
|
197
220
|
|
|
198
221
|
const session = getSession(self)
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
'assemblyNames'
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
expanded: true,
|
|
218
|
-
},
|
|
219
|
-
}
|
|
220
|
-
})
|
|
222
|
+
const { connections, connectionInstances } = session
|
|
223
|
+
const conns =
|
|
224
|
+
connectionInstances
|
|
225
|
+
?.filter(c => {
|
|
226
|
+
const names = getConf(c, 'assemblyNames')
|
|
227
|
+
return names.length === 0 ? true : names.includes(assemblyName)
|
|
228
|
+
})
|
|
229
|
+
.map((conn, index) => {
|
|
230
|
+
const c = connections[index]
|
|
231
|
+
return {
|
|
232
|
+
id: c.connectionId,
|
|
233
|
+
name: readConfObject(c, 'name'),
|
|
234
|
+
children: this.connectionHierarchy(assemblyName, conn),
|
|
235
|
+
state: {
|
|
236
|
+
expanded: true,
|
|
237
|
+
},
|
|
238
|
+
}
|
|
239
|
+
}) || []
|
|
221
240
|
|
|
222
241
|
return {
|
|
223
242
|
name: 'Root',
|
|
@@ -229,33 +248,22 @@ export default pluginManager =>
|
|
|
229
248
|
}
|
|
230
249
|
},
|
|
231
250
|
|
|
232
|
-
connectionHierarchy(
|
|
251
|
+
connectionHierarchy(
|
|
252
|
+
assemblyName: string,
|
|
253
|
+
connection: { tracks: AnyConfigurationModel[] },
|
|
254
|
+
) {
|
|
233
255
|
return generateHierarchy(
|
|
234
|
-
|
|
256
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
257
|
+
self as any,
|
|
235
258
|
self.connectionTrackConfigurations(assemblyName, connection),
|
|
236
259
|
self.collapsed,
|
|
237
260
|
)
|
|
238
261
|
},
|
|
239
|
-
|
|
240
|
-
// This recursively gets tracks from lower paths
|
|
241
|
-
allTracksInCategoryPath(path, connection, assemblyName) {
|
|
242
|
-
let currentHier = connection
|
|
243
|
-
? self.connectionHierarchy(connection)
|
|
244
|
-
: self.hierarchy(assemblyName)
|
|
245
|
-
path.forEach(pathItem => {
|
|
246
|
-
currentHier = currentHier.get(pathItem) || new Map()
|
|
247
|
-
})
|
|
248
|
-
let tracks = {}
|
|
249
|
-
currentHier.forEach((contents, name) => {
|
|
250
|
-
if (contents.trackId) {
|
|
251
|
-
tracks[contents.trackId] = contents
|
|
252
|
-
} else {
|
|
253
|
-
tracks = Object.assign(
|
|
254
|
-
tracks,
|
|
255
|
-
self.allTracksInCategoryPath(path.concat([name])),
|
|
256
|
-
)
|
|
257
|
-
}
|
|
258
|
-
})
|
|
259
|
-
return tracks
|
|
260
|
-
},
|
|
261
262
|
}))
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export type HierarchicalTrackSelectorStateModel = ReturnType<
|
|
266
|
+
typeof stateTreeFactory
|
|
267
|
+
>
|
|
268
|
+
export type HierarchicalTrackSelectorModel =
|
|
269
|
+
Instance<HierarchicalTrackSelectorStateModel>
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React, { useState } from 'react'
|
|
2
2
|
import { observer } from 'mobx-react'
|
|
3
3
|
import { getRoot } from 'mobx-state-tree'
|
|
4
|
-
import
|
|
5
|
-
|
|
4
|
+
import { PluginDefinition } from '@jbrowse/core/PluginLoader'
|
|
6
5
|
import {
|
|
7
6
|
Button,
|
|
8
7
|
Collapse,
|
|
@@ -12,20 +11,18 @@ import {
|
|
|
12
11
|
DialogContent,
|
|
13
12
|
DialogContentText,
|
|
14
13
|
TextField,
|
|
15
|
-
|
|
16
|
-
} from '
|
|
14
|
+
} from '@mui/material'
|
|
15
|
+
import { makeStyles } from 'tss-react/mui'
|
|
17
16
|
|
|
18
17
|
// icons
|
|
19
|
-
import IconButton from '@material
|
|
20
|
-
import CloseIcon from '@
|
|
21
|
-
import ExpandMoreIcon from '@
|
|
22
|
-
|
|
23
|
-
import { PluginDefinition } from '@jbrowse/core/PluginLoader'
|
|
18
|
+
import IconButton from '@mui/material/IconButton'
|
|
19
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
20
|
+
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
|
|
24
21
|
|
|
25
22
|
// locals
|
|
26
23
|
import { PluginStoreModel } from '../model'
|
|
27
24
|
|
|
28
|
-
const useStyles = makeStyles(theme => ({
|
|
25
|
+
const useStyles = makeStyles()(theme => ({
|
|
29
26
|
closeButton: {
|
|
30
27
|
position: 'absolute',
|
|
31
28
|
right: theme.spacing(1),
|
|
@@ -56,7 +53,7 @@ function CustomPluginForm({
|
|
|
56
53
|
onClose(): void
|
|
57
54
|
model: PluginStoreModel
|
|
58
55
|
}) {
|
|
59
|
-
const classes = useStyles()
|
|
56
|
+
const { classes, cx } = useStyles()
|
|
60
57
|
const [umdPluginName, setUMDPluginName] = useState('')
|
|
61
58
|
const [umdPluginUrl, setUMDPluginUrl] = useState('')
|
|
62
59
|
const [esmPluginUrl, setESMPluginUrl] = useState('')
|
|
@@ -83,8 +80,8 @@ function CustomPluginForm({
|
|
|
83
80
|
setAdvancedOptionsOpen(!advancedOptionsOpen)
|
|
84
81
|
}
|
|
85
82
|
|
|
86
|
-
|
|
87
|
-
const { jbrowse } =
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
84
|
+
const { jbrowse } = getRoot<any>(model)
|
|
88
85
|
|
|
89
86
|
const ready = Boolean(
|
|
90
87
|
(umdPluginName && umdPluginUrl) || esmPluginUrl || cjsPluginUrl,
|
|
@@ -152,7 +149,7 @@ function CustomPluginForm({
|
|
|
152
149
|
/>
|
|
153
150
|
<DialogContentText onClick={handleOpenAdvancedOptions}>
|
|
154
151
|
<IconButton
|
|
155
|
-
className={
|
|
152
|
+
className={cx(classes.expand, {
|
|
156
153
|
[classes.expandOpen]: advancedOptionsOpen,
|
|
157
154
|
})}
|
|
158
155
|
aria-expanded={advancedOptionsOpen}
|
|
@@ -11,11 +11,11 @@ import {
|
|
|
11
11
|
ListItem,
|
|
12
12
|
Tooltip,
|
|
13
13
|
Typography,
|
|
14
|
-
|
|
15
|
-
} from '
|
|
14
|
+
} from '@mui/material'
|
|
15
|
+
import { makeStyles } from 'tss-react/mui'
|
|
16
16
|
|
|
17
|
-
import CloseIcon from '@
|
|
18
|
-
import LockIcon from '@
|
|
17
|
+
import CloseIcon from '@mui/icons-material/Close'
|
|
18
|
+
import LockIcon from '@mui/icons-material/Lock'
|
|
19
19
|
|
|
20
20
|
import PluginManager from '@jbrowse/core/PluginManager'
|
|
21
21
|
import { getSession } from '@jbrowse/core/util'
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
} from '@jbrowse/core/util/types'
|
|
26
26
|
import { PluginStoreModel } from '../model'
|
|
27
27
|
|
|
28
|
-
const useStyles = makeStyles(() => ({
|
|
28
|
+
const useStyles = makeStyles()(() => ({
|
|
29
29
|
closeDialog: {
|
|
30
30
|
position: 'absolute',
|
|
31
31
|
right: 0,
|
|
@@ -40,7 +40,7 @@ const useStyles = makeStyles(() => ({
|
|
|
40
40
|
}))
|
|
41
41
|
|
|
42
42
|
function LockedPlugin() {
|
|
43
|
-
const classes = useStyles()
|
|
43
|
+
const { classes } = useStyles()
|
|
44
44
|
return (
|
|
45
45
|
<Tooltip
|
|
46
46
|
className={classes.lockedPluginTooltip}
|
|
@@ -58,7 +58,7 @@ function PluginDialog({
|
|
|
58
58
|
plugin: string
|
|
59
59
|
onClose: (s?: string) => void
|
|
60
60
|
}) {
|
|
61
|
-
const classes = useStyles()
|
|
61
|
+
const { classes } = useStyles()
|
|
62
62
|
return (
|
|
63
63
|
<Dialog open onClose={() => onClose()}>
|
|
64
64
|
<DialogTitle>
|
|
@@ -123,7 +123,8 @@ function InstalledPlugin({
|
|
|
123
123
|
p => pluginManager.pluginMetadata[plugin.name].url === p.url,
|
|
124
124
|
)
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
127
|
+
const rootModel = getParent<any>(model, 3)
|
|
127
128
|
const { jbrowse, adminMode } = rootModel
|
|
128
129
|
|
|
129
130
|
return (
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import { observer } from 'mobx-react'
|
|
3
|
-
import { List, Typography } from '@material
|
|
3
|
+
import { List, Typography } from '@mui/material'
|
|
4
4
|
import PluginManager from '@jbrowse/core/PluginManager'
|
|
5
5
|
import { PluginStoreModel } from '../model'
|
|
6
6
|
import InstalledPlugin from './InstalledPlugin'
|
|
@@ -14,16 +14,16 @@ import {
|
|
|
14
14
|
Button,
|
|
15
15
|
Link,
|
|
16
16
|
Typography,
|
|
17
|
-
|
|
18
|
-
} from '
|
|
17
|
+
} from '@mui/material'
|
|
18
|
+
import { makeStyles } from 'tss-react/mui'
|
|
19
19
|
|
|
20
20
|
// icons
|
|
21
|
-
import PersonIcon from '@
|
|
22
|
-
import AddIcon from '@
|
|
23
|
-
import CheckIcon from '@
|
|
21
|
+
import PersonIcon from '@mui/icons-material/Person'
|
|
22
|
+
import AddIcon from '@mui/icons-material/Add'
|
|
23
|
+
import CheckIcon from '@mui/icons-material/Check'
|
|
24
24
|
import { PluginStoreModel } from '../model'
|
|
25
25
|
|
|
26
|
-
const useStyles = makeStyles(() => ({
|
|
26
|
+
const useStyles = makeStyles()(() => ({
|
|
27
27
|
card: {
|
|
28
28
|
margin: '1em',
|
|
29
29
|
},
|
|
@@ -50,18 +50,17 @@ function PluginCard({
|
|
|
50
50
|
model: PluginStoreModel
|
|
51
51
|
adminMode: boolean
|
|
52
52
|
}) {
|
|
53
|
-
const classes = useStyles()
|
|
53
|
+
const { classes } = useStyles()
|
|
54
54
|
const session = getSession(model)
|
|
55
55
|
const { pluginManager } = getEnv(model) as { pluginManager: PluginManager }
|
|
56
56
|
const isInstalled = Boolean(
|
|
57
|
-
pluginManager.runtimePluginDefinitions.find(
|
|
58
|
-
pluginDefinition => pluginDefinition.url === plugin.url,
|
|
59
|
-
),
|
|
57
|
+
pluginManager.runtimePluginDefinitions.find(def => def.url === plugin.url),
|
|
60
58
|
)
|
|
61
59
|
const [tempDisabled, setTempDisabled] = useState(false)
|
|
62
60
|
const disableButton = isInstalled || tempDisabled
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
|
+
const rootModel = getParent<any>(model, 3)
|
|
65
64
|
const { jbrowse } = rootModel
|
|
66
65
|
|
|
67
66
|
return (
|
|
@@ -5,21 +5,21 @@ import { getEnv } from 'mobx-state-tree'
|
|
|
5
5
|
import {
|
|
6
6
|
Accordion,
|
|
7
7
|
AccordionSummary,
|
|
8
|
-
TextField,
|
|
9
|
-
InputAdornment,
|
|
10
8
|
Button,
|
|
11
9
|
IconButton,
|
|
10
|
+
InputAdornment,
|
|
11
|
+
TextField,
|
|
12
12
|
Typography,
|
|
13
|
-
|
|
14
|
-
} from '
|
|
13
|
+
} from '@mui/material'
|
|
14
|
+
import { makeStyles } from 'tss-react/mui'
|
|
15
15
|
|
|
16
16
|
import { JBrowsePlugin } from '@jbrowse/core/util/types'
|
|
17
17
|
import { getSession, isElectron } from '@jbrowse/core/util'
|
|
18
18
|
|
|
19
19
|
// icons
|
|
20
|
-
import ExpandMoreIcon from '@
|
|
21
|
-
import ClearIcon from '@
|
|
22
|
-
import InfoOutlinedIcon from '@
|
|
20
|
+
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
|
|
21
|
+
import ClearIcon from '@mui/icons-material/Clear'
|
|
22
|
+
import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined'
|
|
23
23
|
|
|
24
24
|
// locals
|
|
25
25
|
import InstalledPluginsList from './InstalledPluginsList'
|
|
@@ -27,7 +27,7 @@ import PluginCard from './PluginCard'
|
|
|
27
27
|
import CustomPluginForm from './CustomPluginForm'
|
|
28
28
|
import { PluginStoreModel } from '../model'
|
|
29
29
|
|
|
30
|
-
const useStyles = makeStyles(theme => ({
|
|
30
|
+
const useStyles = makeStyles()(theme => ({
|
|
31
31
|
root: {
|
|
32
32
|
margin: theme.spacing(1),
|
|
33
33
|
},
|
|
@@ -51,7 +51,7 @@ const useStyles = makeStyles(theme => ({
|
|
|
51
51
|
}))
|
|
52
52
|
|
|
53
53
|
function PluginStoreWidget({ model }: { model: PluginStoreModel }) {
|
|
54
|
-
const classes = useStyles()
|
|
54
|
+
const { classes } = useStyles()
|
|
55
55
|
const [pluginArray, setPluginArray] = useState<JBrowsePlugin[]>()
|
|
56
56
|
const [error, setError] = useState<unknown>()
|
|
57
57
|
const [customPluginFormOpen, setCustomPluginFormOpen] = useState(false)
|