@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.
Files changed (233) hide show
  1. package/dist/AddConnectionWidget/components/AddConnectionWidget.js +115 -162
  2. package/dist/AddConnectionWidget/components/AddConnectionWidget.js.map +1 -0
  3. package/dist/AddConnectionWidget/components/ConfigureConnection.js +33 -32
  4. package/dist/AddConnectionWidget/components/ConfigureConnection.js.map +1 -0
  5. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +48 -64
  6. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js.map +1 -0
  7. package/dist/AddConnectionWidget/index.js +10 -20
  8. package/dist/AddConnectionWidget/index.js.map +1 -0
  9. package/dist/AddConnectionWidget/model.js +7 -15
  10. package/dist/AddConnectionWidget/model.js.map +1 -0
  11. package/dist/AddTrackWidget/components/AddTrackWidget.js +206 -230
  12. package/dist/AddTrackWidget/components/AddTrackWidget.js.map +1 -0
  13. package/dist/AddTrackWidget/components/ConfirmTrack.js +268 -385
  14. package/dist/AddTrackWidget/components/ConfirmTrack.js.map +1 -0
  15. package/dist/AddTrackWidget/components/TrackSourceSelect.js +28 -55
  16. package/dist/AddTrackWidget/components/TrackSourceSelect.js.map +1 -0
  17. package/dist/AddTrackWidget/index.js +10 -20
  18. package/dist/AddTrackWidget/index.js.map +1 -0
  19. package/dist/AddTrackWidget/model.js +150 -174
  20. package/dist/AddTrackWidget/model.js.map +1 -0
  21. package/dist/AssemblyManager/AssemblyAddForm.js +162 -282
  22. package/dist/AssemblyManager/AssemblyAddForm.js.map +1 -0
  23. package/dist/AssemblyManager/AssemblyEditor.js +12 -23
  24. package/dist/AssemblyManager/AssemblyEditor.js.map +1 -0
  25. package/dist/AssemblyManager/AssemblyManager.js +102 -132
  26. package/dist/AssemblyManager/AssemblyManager.js.map +1 -0
  27. package/dist/AssemblyManager/AssemblyTable.d.ts +1 -1
  28. package/dist/AssemblyManager/AssemblyTable.js +60 -84
  29. package/dist/AssemblyManager/AssemblyTable.js.map +1 -0
  30. package/dist/AssemblyManager/index.js +8 -14
  31. package/dist/AssemblyManager/index.js.map +1 -0
  32. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.d.ts +7 -1
  33. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +49 -53
  34. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +1 -0
  35. package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.d.ts +1 -1
  36. package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +28 -44
  37. package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +1 -0
  38. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +10 -5
  39. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +423 -630
  40. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -0
  41. package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.d.ts +2 -1
  42. package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +45 -74
  43. package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +1 -0
  44. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.d.ts +2 -1
  45. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +57 -92
  46. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +1 -0
  47. package/dist/HierarchicalTrackSelectorWidget/index.d.ts +2 -2
  48. package/dist/HierarchicalTrackSelectorWidget/index.js +10 -20
  49. package/dist/HierarchicalTrackSelectorWidget/index.js.map +1 -0
  50. package/dist/HierarchicalTrackSelectorWidget/model.d.ts +40 -16
  51. package/dist/HierarchicalTrackSelectorWidget/model.js +247 -293
  52. package/dist/HierarchicalTrackSelectorWidget/model.js.map +1 -0
  53. package/dist/PluginStoreWidget/components/CustomPluginForm.js +140 -202
  54. package/dist/PluginStoreWidget/components/CustomPluginForm.js.map +1 -0
  55. package/dist/PluginStoreWidget/components/InstalledPlugin.js +112 -127
  56. package/dist/PluginStoreWidget/components/InstalledPlugin.js.map +1 -0
  57. package/dist/PluginStoreWidget/components/InstalledPluginsList.js +22 -45
  58. package/dist/PluginStoreWidget/components/InstalledPluginsList.js.map +1 -0
  59. package/dist/PluginStoreWidget/components/PluginCard.js +95 -110
  60. package/dist/PluginStoreWidget/components/PluginCard.js.map +1 -0
  61. package/dist/PluginStoreWidget/components/PluginStoreWidget.js +188 -227
  62. package/dist/PluginStoreWidget/components/PluginStoreWidget.js.map +1 -0
  63. package/dist/PluginStoreWidget/index.d.ts +0 -1
  64. package/dist/PluginStoreWidget/index.js +10 -28
  65. package/dist/PluginStoreWidget/index.js.map +1 -0
  66. package/dist/PluginStoreWidget/model.js +21 -26
  67. package/dist/PluginStoreWidget/model.js.map +1 -0
  68. package/dist/SetDefaultSession/SetDefaultSession.js +34 -58
  69. package/dist/SetDefaultSession/SetDefaultSession.js.map +1 -0
  70. package/dist/SetDefaultSession/index.js +8 -14
  71. package/dist/SetDefaultSession/index.js.map +1 -0
  72. package/dist/index.js +109 -147
  73. package/dist/index.js.map +1 -0
  74. package/dist/ucsc-trackhub/configSchema.js +18 -28
  75. package/dist/ucsc-trackhub/configSchema.js.map +1 -0
  76. package/dist/ucsc-trackhub/index.js +10 -22
  77. package/dist/ucsc-trackhub/index.js.map +1 -0
  78. package/dist/ucsc-trackhub/model.js +150 -128
  79. package/dist/ucsc-trackhub/model.js.map +1 -0
  80. package/dist/ucsc-trackhub/ucscAssemblies.js +3 -9
  81. package/dist/ucsc-trackhub/ucscAssemblies.js.map +1 -0
  82. package/dist/ucsc-trackhub/ucscTrackHub.js +458 -491
  83. package/dist/ucsc-trackhub/ucscTrackHub.js.map +1 -0
  84. package/esm/AddConnectionWidget/components/AddConnectionWidget.d.ts +9 -0
  85. package/esm/AddConnectionWidget/components/AddConnectionWidget.js +86 -0
  86. package/esm/AddConnectionWidget/components/AddConnectionWidget.js.map +1 -0
  87. package/esm/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -0
  88. package/esm/AddConnectionWidget/components/ConfigureConnection.js +11 -0
  89. package/esm/AddConnectionWidget/components/ConfigureConnection.js.map +1 -0
  90. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +8 -0
  91. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +24 -0
  92. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js.map +1 -0
  93. package/esm/AddConnectionWidget/index.d.ts +2 -0
  94. package/esm/AddConnectionWidget/index.js +4 -0
  95. package/esm/AddConnectionWidget/index.js.map +1 -0
  96. package/esm/AddConnectionWidget/model.d.ts +5 -0
  97. package/esm/AddConnectionWidget/model.js +7 -0
  98. package/esm/AddConnectionWidget/model.js.map +1 -0
  99. package/esm/AddTrackWidget/components/AddTrackWidget.d.ts +7 -0
  100. package/esm/AddTrackWidget/components/AddTrackWidget.js +139 -0
  101. package/esm/AddTrackWidget/components/AddTrackWidget.js.map +1 -0
  102. package/esm/AddTrackWidget/components/ConfirmTrack.d.ts +7 -0
  103. package/esm/AddTrackWidget/components/ConfirmTrack.js +247 -0
  104. package/esm/AddTrackWidget/components/ConfirmTrack.js.map +1 -0
  105. package/esm/AddTrackWidget/components/TrackSourceSelect.d.ts +7 -0
  106. package/esm/AddTrackWidget/components/TrackSourceSelect.js +27 -0
  107. package/esm/AddTrackWidget/components/TrackSourceSelect.js.map +1 -0
  108. package/esm/AddTrackWidget/index.d.ts +2 -0
  109. package/esm/AddTrackWidget/index.js +4 -0
  110. package/esm/AddTrackWidget/index.js.map +1 -0
  111. package/esm/AddTrackWidget/model.d.ts +51 -0
  112. package/esm/AddTrackWidget/model.js +154 -0
  113. package/esm/AddTrackWidget/model.js.map +1 -0
  114. package/esm/AssemblyManager/AssemblyAddForm.d.ts +6 -0
  115. package/esm/AssemblyManager/AssemblyAddForm.js +132 -0
  116. package/esm/AssemblyManager/AssemblyAddForm.js.map +1 -0
  117. package/esm/AssemblyManager/AssemblyEditor.d.ts +5 -0
  118. package/esm/AssemblyManager/AssemblyEditor.js +8 -0
  119. package/esm/AssemblyManager/AssemblyEditor.js.map +1 -0
  120. package/esm/AssemblyManager/AssemblyManager.d.ts +6 -0
  121. package/esm/AssemblyManager/AssemblyManager.js +69 -0
  122. package/esm/AssemblyManager/AssemblyManager.js.map +1 -0
  123. package/esm/AssemblyManager/AssemblyTable.d.ts +13 -0
  124. package/esm/AssemblyManager/AssemblyTable.js +62 -0
  125. package/esm/AssemblyManager/AssemblyTable.js.map +1 -0
  126. package/esm/AssemblyManager/index.d.ts +1 -0
  127. package/esm/AssemblyManager/index.js +2 -0
  128. package/esm/AssemblyManager/index.js.map +1 -0
  129. package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.d.ts +13 -0
  130. package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +26 -0
  131. package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +1 -0
  132. package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.d.ts +13 -0
  133. package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +24 -0
  134. package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +1 -0
  135. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +11 -0
  136. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +326 -0
  137. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -0
  138. package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.d.ts +10 -0
  139. package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +45 -0
  140. package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +1 -0
  141. package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.d.ts +11 -0
  142. package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +57 -0
  143. package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +1 -0
  144. package/esm/HierarchicalTrackSelectorWidget/index.d.ts +2 -0
  145. package/esm/HierarchicalTrackSelectorWidget/index.js +4 -0
  146. package/esm/HierarchicalTrackSelectorWidget/index.js.map +1 -0
  147. package/esm/HierarchicalTrackSelectorWidget/model.d.ts +61 -0
  148. package/esm/HierarchicalTrackSelectorWidget/model.js +200 -0
  149. package/esm/HierarchicalTrackSelectorWidget/model.js.map +1 -0
  150. package/esm/PluginStoreWidget/components/CustomPluginForm.d.ts +9 -0
  151. package/esm/PluginStoreWidget/components/CustomPluginForm.js +109 -0
  152. package/esm/PluginStoreWidget/components/CustomPluginForm.js.map +1 -0
  153. package/esm/PluginStoreWidget/components/InstalledPlugin.d.ts +11 -0
  154. package/esm/PluginStoreWidget/components/InstalledPlugin.js +77 -0
  155. package/esm/PluginStoreWidget/components/InstalledPlugin.js.map +1 -0
  156. package/esm/PluginStoreWidget/components/InstalledPluginsList.d.ts +9 -0
  157. package/esm/PluginStoreWidget/components/InstalledPluginsList.js +16 -0
  158. package/esm/PluginStoreWidget/components/InstalledPluginsList.js.map +1 -0
  159. package/esm/PluginStoreWidget/components/PluginCard.d.ts +10 -0
  160. package/esm/PluginStoreWidget/components/PluginCard.js +61 -0
  161. package/esm/PluginStoreWidget/components/PluginCard.js.map +1 -0
  162. package/esm/PluginStoreWidget/components/PluginStoreWidget.d.ts +7 -0
  163. package/esm/PluginStoreWidget/components/PluginStoreWidget.js +106 -0
  164. package/esm/PluginStoreWidget/components/PluginStoreWidget.js.map +1 -0
  165. package/esm/PluginStoreWidget/index.d.ts +2 -0
  166. package/esm/PluginStoreWidget/index.js +4 -0
  167. package/esm/PluginStoreWidget/index.js.map +1 -0
  168. package/esm/PluginStoreWidget/model.d.ts +13 -0
  169. package/esm/PluginStoreWidget/model.js +20 -0
  170. package/esm/PluginStoreWidget/model.js.map +1 -0
  171. package/esm/SetDefaultSession/SetDefaultSession.d.ts +6 -0
  172. package/esm/SetDefaultSession/SetDefaultSession.js +34 -0
  173. package/esm/SetDefaultSession/SetDefaultSession.js.map +1 -0
  174. package/esm/SetDefaultSession/index.d.ts +1 -0
  175. package/esm/SetDefaultSession/index.js +2 -0
  176. package/esm/SetDefaultSession/index.js.map +1 -0
  177. package/esm/index.d.ts +27 -0
  178. package/esm/index.js +70 -0
  179. package/esm/index.js.map +1 -0
  180. package/esm/ucsc-trackhub/configSchema.d.ts +2 -0
  181. package/esm/ucsc-trackhub/configSchema.js +18 -0
  182. package/esm/ucsc-trackhub/configSchema.js.map +1 -0
  183. package/esm/ucsc-trackhub/index.d.ts +2 -0
  184. package/esm/ucsc-trackhub/index.js +3 -0
  185. package/esm/ucsc-trackhub/index.js.map +1 -0
  186. package/esm/ucsc-trackhub/model.d.ts +15 -0
  187. package/esm/ucsc-trackhub/model.js +82 -0
  188. package/esm/ucsc-trackhub/model.js.map +1 -0
  189. package/esm/ucsc-trackhub/ucscAssemblies.d.ts +2 -0
  190. package/esm/ucsc-trackhub/ucscAssemblies.js +201 -0
  191. package/esm/ucsc-trackhub/ucscAssemblies.js.map +1 -0
  192. package/esm/ucsc-trackhub/ucscTrackHub.d.ts +6 -0
  193. package/esm/ucsc-trackhub/ucscTrackHub.js +348 -0
  194. package/esm/ucsc-trackhub/ucscTrackHub.js.map +1 -0
  195. package/package.json +21 -13
  196. package/src/AddConnectionWidget/components/AddConnectionWidget.js +14 -10
  197. package/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx +2 -4
  198. package/src/AddConnectionWidget/components/__snapshots__/AddConnectionWidget.test.js.snap +63 -67
  199. package/src/AddTrackWidget/components/AddTrackWidget.test.js +4 -4
  200. package/src/AddTrackWidget/components/AddTrackWidget.tsx +5 -5
  201. package/src/AddTrackWidget/components/ConfirmTrack.tsx +22 -22
  202. package/src/AddTrackWidget/components/TrackSourceSelect.tsx +9 -5
  203. package/src/AddTrackWidget/components/__snapshots__/AddTrackWidget.test.js.snap +76 -95
  204. package/src/AssemblyManager/AssemblyAddForm.tsx +5 -11
  205. package/src/AssemblyManager/AssemblyManager.tsx +8 -8
  206. package/src/AssemblyManager/AssemblyTable.tsx +10 -10
  207. package/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx +8 -12
  208. package/src/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.tsx +2 -2
  209. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +1 -1
  210. package/src/HierarchicalTrackSelectorWidget/components/{HierarchicalTrackSelector.js → HierarchicalTrackSelector.tsx} +262 -148
  211. package/src/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.tsx +11 -8
  212. package/src/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.tsx +31 -33
  213. package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.js.snap +122 -115
  214. package/src/HierarchicalTrackSelectorWidget/{index.js → index.ts} +0 -0
  215. package/src/HierarchicalTrackSelectorWidget/{model.js → model.ts} +113 -105
  216. package/src/PluginStoreWidget/components/CustomPluginForm.tsx +11 -14
  217. package/src/PluginStoreWidget/components/InstalledPlugin.tsx +9 -8
  218. package/src/PluginStoreWidget/components/InstalledPluginsList.tsx +1 -1
  219. package/src/PluginStoreWidget/components/PluginCard.tsx +10 -11
  220. package/src/PluginStoreWidget/components/PluginStoreWidget.tsx +9 -9
  221. package/src/PluginStoreWidget/components/__snapshots__/PluginStoreWidget.test.js.snap +267 -217
  222. package/src/PluginStoreWidget/index.js +0 -1
  223. package/src/SetDefaultSession/SetDefaultSession.tsx +1 -1
  224. package/dist/AddConnectionWidget/components/AddConnectionWidget.test.js +0 -279
  225. package/dist/AddTrackWidget/components/AddTrackWidget.test.js +0 -218
  226. package/dist/AddTrackWidget/index.test.js +0 -292
  227. package/dist/AssemblyManager/AssemblyManager.test.js +0 -113
  228. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +0 -191
  229. package/dist/HierarchicalTrackSelectorWidget/model.test.js +0 -28
  230. package/dist/PluginStoreWidget/components/PluginStoreWidget.test.js +0 -201
  231. package/dist/PluginStoreWidget/model.test.js +0 -17
  232. package/dist/SetDefaultSession/SetDefaultSession.test.js +0 -75
  233. package/dist/index.test.js +0 -56
@@ -1,22 +1,28 @@
1
- import { types, getParent } from 'mobx-state-tree'
2
- import { readConfObject } from '@jbrowse/core/configuration'
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
- const hasAnyOverlap = (a1 = [], a2 = []) =>
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 name = getTrackName(config)
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
- !!name.toLowerCase().includes(filterLower) ||
15
- categories.filter(cat => !!cat.toLowerCase().includes(filterLower)).length
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 function generateHierarchy(model, trackConfigurations, collapsed) {
30
- const hierarchy = { children: [] }
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(trackConf => passesFilter(filterText, trackConf))
35
- .forEach(trackConf => {
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(trackConf, 'category') || [])]
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 (trackConf.trackId.endsWith('sessionTrack')) {
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: trackConf.trackId,
73
- name: getTrackName(trackConf),
74
- conf: trackConf,
75
- checked: !!view.tracks.find(f => f.configuration === trackConf),
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
- for (const display of trackConf.displays) {
117
- if (
118
- viewType.displayTypes.find(
119
- displayType => displayType.name === display.type,
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
- trackConfigurations(assemblyName) {
144
+ }))
145
+ .views(self => ({
146
+ trackConfigurations(assemblyName: string) {
129
147
  if (!self.view) {
130
148
  return []
131
149
  }
132
- const session = getSession(self)
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
- ...trackConfigurations
143
- .filter(conf => {
144
- const trackConfAssemblies = readConfObject(conf, 'assemblyNames')
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(conf => {
165
+ .filter(c => {
149
166
  const { displayTypes } = pluginManager.getViewType(self.view.type)
150
- const compatibleDisplays = displayTypes.map(
151
- display => display.name,
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 ? self.view.assemblyNames : []
176
+ get assemblyNames(): string[] {
177
+ return self.view?.assemblyNames || []
161
178
  },
162
179
 
163
- connectionTrackConfigurations(assemblyName, connection) {
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 session = getSession(self)
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(conf => {
179
- const trackConfAssemblies = readConfObject(conf, 'assemblyNames')
197
+ .filter(c => {
198
+ const trackConfAssemblies = readConfObject(c, 'assemblyNames')
180
199
  const { allAliases } = assembly
181
200
  return hasAnyOverlap(allAliases, trackConfAssemblies)
182
201
  })
183
- .filter(conf => {
202
+ .filter(c => {
184
203
  const { displayTypes } = pluginManager.getViewType(self.view.type)
185
- const compatibleDisplays = displayTypes.map(display => display.name)
186
- const trackDisplays = conf.displays.map(display => display.type)
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
- hierarchy(assemblyName) {
211
+ }))
212
+ .views(self => ({
213
+ hierarchy(assemblyName: string) {
192
214
  const hier = generateHierarchy(
193
- self,
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 conns = session.connectionInstances
200
- .filter(conn => {
201
- const configAssemblyNames = readConfObject(
202
- conn.configuration,
203
- 'assemblyNames',
204
- )
205
- if (configAssemblyNames.length === 0) {
206
- return true
207
- }
208
- return configAssemblyNames.includes(assemblyName)
209
- })
210
- .map((conn, index) => {
211
- const c = session.connections[index]
212
- return {
213
- id: c.connectionId,
214
- name: readConfObject(c, 'name'),
215
- children: this.connectionHierarchy(assemblyName, conn),
216
- state: {
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(assemblyName, connection) {
251
+ connectionHierarchy(
252
+ assemblyName: string,
253
+ connection: { tracks: AnyConfigurationModel[] },
254
+ ) {
233
255
  return generateHierarchy(
234
- self,
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 clsx from 'clsx'
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
- makeStyles,
16
- } from '@material-ui/core'
14
+ } from '@mui/material'
15
+ import { makeStyles } from 'tss-react/mui'
17
16
 
18
17
  // icons
19
- import IconButton from '@material-ui/core/IconButton'
20
- import CloseIcon from '@material-ui/icons/Close'
21
- import ExpandMoreIcon from '@material-ui/icons/ExpandMore'
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
- const rootModel = getRoot(model)
87
- const { jbrowse } = rootModel
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={clsx(classes.expand, {
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
- makeStyles,
15
- } from '@material-ui/core'
14
+ } from '@mui/material'
15
+ import { makeStyles } from 'tss-react/mui'
16
16
 
17
- import CloseIcon from '@material-ui/icons/Close'
18
- import LockIcon from '@material-ui/icons/Lock'
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
- const rootModel = getParent(model, 3)
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-ui/core'
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
- makeStyles,
18
- } from '@material-ui/core'
17
+ } from '@mui/material'
18
+ import { makeStyles } from 'tss-react/mui'
19
19
 
20
20
  // icons
21
- import PersonIcon from '@material-ui/icons/Person'
22
- import AddIcon from '@material-ui/icons/Add'
23
- import CheckIcon from '@material-ui/icons/Check'
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
- const rootModel = getParent(model, 3)
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
- makeStyles,
14
- } from '@material-ui/core'
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 '@material-ui/icons/ExpandMore'
21
- import ClearIcon from '@material-ui/icons/Clear'
22
- import InfoOutlinedIcon from '@material-ui/icons/InfoOutlined'
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)