@jbrowse/plugin-data-management 1.7.11 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) 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.d.ts +2 -2
  12. package/dist/AddTrackWidget/components/AddTrackWidget.js +51 -246
  13. package/dist/AddTrackWidget/components/AddTrackWidget.js.map +1 -0
  14. package/dist/AddTrackWidget/components/ConfirmTrack.js +267 -385
  15. package/dist/AddTrackWidget/components/ConfirmTrack.js.map +1 -0
  16. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.d.ts +7 -0
  17. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +222 -0
  18. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js.map +1 -0
  19. package/dist/AddTrackWidget/components/TrackSourceSelect.js +28 -55
  20. package/dist/AddTrackWidget/components/TrackSourceSelect.js.map +1 -0
  21. package/dist/AddTrackWidget/index.js +10 -20
  22. package/dist/AddTrackWidget/index.js.map +1 -0
  23. package/dist/AddTrackWidget/model.js +150 -174
  24. package/dist/AddTrackWidget/model.js.map +1 -0
  25. package/dist/AssemblyManager/AssemblyAddForm.js +162 -282
  26. package/dist/AssemblyManager/AssemblyAddForm.js.map +1 -0
  27. package/dist/AssemblyManager/AssemblyEditor.js +12 -23
  28. package/dist/AssemblyManager/AssemblyEditor.js.map +1 -0
  29. package/dist/AssemblyManager/AssemblyManager.js +102 -132
  30. package/dist/AssemblyManager/AssemblyManager.js.map +1 -0
  31. package/dist/AssemblyManager/AssemblyTable.d.ts +1 -1
  32. package/dist/AssemblyManager/AssemblyTable.js +60 -84
  33. package/dist/AssemblyManager/AssemblyTable.js.map +1 -0
  34. package/dist/AssemblyManager/index.js +8 -14
  35. package/dist/AssemblyManager/index.js.map +1 -0
  36. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +49 -50
  37. package/dist/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +1 -0
  38. package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +28 -44
  39. package/dist/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +1 -0
  40. package/dist/HierarchicalTrackSelectorWidget/components/Header.d.ts +10 -0
  41. package/dist/HierarchicalTrackSelectorWidget/components/Header.js +209 -0
  42. package/dist/HierarchicalTrackSelectorWidget/components/Header.js.map +1 -0
  43. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +1 -0
  44. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +217 -649
  45. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -0
  46. package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +45 -74
  47. package/dist/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +1 -0
  48. package/dist/HierarchicalTrackSelectorWidget/components/Node.d.ts +29 -0
  49. package/dist/HierarchicalTrackSelectorWidget/components/Node.js +207 -0
  50. package/dist/HierarchicalTrackSelectorWidget/components/Node.js.map +1 -0
  51. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +57 -91
  52. package/dist/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +1 -0
  53. package/dist/HierarchicalTrackSelectorWidget/components/util.d.ts +3 -0
  54. package/dist/HierarchicalTrackSelectorWidget/components/util.js +11 -0
  55. package/dist/HierarchicalTrackSelectorWidget/components/util.js.map +1 -0
  56. package/dist/HierarchicalTrackSelectorWidget/configSchema.d.ts +2 -0
  57. package/dist/HierarchicalTrackSelectorWidget/configSchema.js +6 -0
  58. package/dist/HierarchicalTrackSelectorWidget/configSchema.js.map +1 -0
  59. package/dist/HierarchicalTrackSelectorWidget/index.d.ts +4 -2
  60. package/dist/HierarchicalTrackSelectorWidget/index.js +10 -20
  61. package/dist/HierarchicalTrackSelectorWidget/index.js.map +1 -0
  62. package/dist/HierarchicalTrackSelectorWidget/model.d.ts +13 -3
  63. package/dist/HierarchicalTrackSelectorWidget/model.js +250 -284
  64. package/dist/HierarchicalTrackSelectorWidget/model.js.map +1 -0
  65. package/dist/PluginStoreWidget/components/CustomPluginForm.js +140 -202
  66. package/dist/PluginStoreWidget/components/CustomPluginForm.js.map +1 -0
  67. package/dist/PluginStoreWidget/components/InstalledPlugin.js +112 -127
  68. package/dist/PluginStoreWidget/components/InstalledPlugin.js.map +1 -0
  69. package/dist/PluginStoreWidget/components/InstalledPluginsList.js +22 -45
  70. package/dist/PluginStoreWidget/components/InstalledPluginsList.js.map +1 -0
  71. package/dist/PluginStoreWidget/components/PluginCard.js +95 -110
  72. package/dist/PluginStoreWidget/components/PluginCard.js.map +1 -0
  73. package/dist/PluginStoreWidget/components/PluginStoreWidget.js +188 -227
  74. package/dist/PluginStoreWidget/components/PluginStoreWidget.js.map +1 -0
  75. package/dist/PluginStoreWidget/index.d.ts +0 -1
  76. package/dist/PluginStoreWidget/index.js +10 -28
  77. package/dist/PluginStoreWidget/index.js.map +1 -0
  78. package/dist/PluginStoreWidget/model.js +21 -26
  79. package/dist/PluginStoreWidget/model.js.map +1 -0
  80. package/dist/SetDefaultSession/SetDefaultSession.js +34 -58
  81. package/dist/SetDefaultSession/SetDefaultSession.js.map +1 -0
  82. package/dist/SetDefaultSession/index.js +8 -14
  83. package/dist/SetDefaultSession/index.js.map +1 -0
  84. package/dist/index.d.ts +4 -1
  85. package/dist/index.js +109 -147
  86. package/dist/index.js.map +1 -0
  87. package/dist/ucsc-trackhub/configSchema.js +18 -28
  88. package/dist/ucsc-trackhub/configSchema.js.map +1 -0
  89. package/dist/ucsc-trackhub/index.js +10 -22
  90. package/dist/ucsc-trackhub/index.js.map +1 -0
  91. package/dist/ucsc-trackhub/model.js +150 -128
  92. package/dist/ucsc-trackhub/model.js.map +1 -0
  93. package/dist/ucsc-trackhub/ucscAssemblies.js +3 -9
  94. package/dist/ucsc-trackhub/ucscAssemblies.js.map +1 -0
  95. package/dist/ucsc-trackhub/ucscTrackHub.js +458 -491
  96. package/dist/ucsc-trackhub/ucscTrackHub.js.map +1 -0
  97. package/esm/AddConnectionWidget/components/AddConnectionWidget.d.ts +9 -0
  98. package/esm/AddConnectionWidget/components/AddConnectionWidget.js +86 -0
  99. package/esm/AddConnectionWidget/components/AddConnectionWidget.js.map +1 -0
  100. package/esm/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -0
  101. package/esm/AddConnectionWidget/components/ConfigureConnection.js +11 -0
  102. package/esm/AddConnectionWidget/components/ConfigureConnection.js.map +1 -0
  103. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +8 -0
  104. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +24 -0
  105. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js.map +1 -0
  106. package/esm/AddConnectionWidget/index.d.ts +2 -0
  107. package/esm/AddConnectionWidget/index.js +4 -0
  108. package/esm/AddConnectionWidget/index.js.map +1 -0
  109. package/esm/AddConnectionWidget/model.d.ts +5 -0
  110. package/esm/AddConnectionWidget/model.js +7 -0
  111. package/esm/AddConnectionWidget/model.js.map +1 -0
  112. package/esm/AddTrackWidget/components/AddTrackWidget.d.ts +7 -0
  113. package/esm/AddTrackWidget/components/AddTrackWidget.js +26 -0
  114. package/esm/AddTrackWidget/components/AddTrackWidget.js.map +1 -0
  115. package/esm/AddTrackWidget/components/ConfirmTrack.d.ts +7 -0
  116. package/esm/AddTrackWidget/components/ConfirmTrack.js +246 -0
  117. package/esm/AddTrackWidget/components/ConfirmTrack.js.map +1 -0
  118. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.d.ts +7 -0
  119. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +134 -0
  120. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js.map +1 -0
  121. package/esm/AddTrackWidget/components/TrackSourceSelect.d.ts +7 -0
  122. package/esm/AddTrackWidget/components/TrackSourceSelect.js +27 -0
  123. package/esm/AddTrackWidget/components/TrackSourceSelect.js.map +1 -0
  124. package/esm/AddTrackWidget/index.d.ts +2 -0
  125. package/esm/AddTrackWidget/index.js +4 -0
  126. package/esm/AddTrackWidget/index.js.map +1 -0
  127. package/esm/AddTrackWidget/model.d.ts +51 -0
  128. package/esm/AddTrackWidget/model.js +154 -0
  129. package/esm/AddTrackWidget/model.js.map +1 -0
  130. package/esm/AssemblyManager/AssemblyAddForm.d.ts +6 -0
  131. package/esm/AssemblyManager/AssemblyAddForm.js +132 -0
  132. package/esm/AssemblyManager/AssemblyAddForm.js.map +1 -0
  133. package/esm/AssemblyManager/AssemblyEditor.d.ts +5 -0
  134. package/esm/AssemblyManager/AssemblyEditor.js +8 -0
  135. package/esm/AssemblyManager/AssemblyEditor.js.map +1 -0
  136. package/esm/AssemblyManager/AssemblyManager.d.ts +6 -0
  137. package/esm/AssemblyManager/AssemblyManager.js +69 -0
  138. package/esm/AssemblyManager/AssemblyManager.js.map +1 -0
  139. package/esm/AssemblyManager/AssemblyTable.d.ts +13 -0
  140. package/esm/AssemblyManager/AssemblyTable.js +62 -0
  141. package/esm/AssemblyManager/AssemblyTable.js.map +1 -0
  142. package/esm/AssemblyManager/index.d.ts +1 -0
  143. package/esm/AssemblyManager/index.js +2 -0
  144. package/esm/AssemblyManager/index.js.map +1 -0
  145. package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.d.ts +13 -0
  146. package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js +26 -0
  147. package/esm/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.js.map +1 -0
  148. package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.d.ts +13 -0
  149. package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js +24 -0
  150. package/esm/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.js.map +1 -0
  151. package/esm/HierarchicalTrackSelectorWidget/components/Header.d.ts +10 -0
  152. package/esm/HierarchicalTrackSelectorWidget/components/Header.js +149 -0
  153. package/esm/HierarchicalTrackSelectorWidget/components/Header.js.map +1 -0
  154. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.d.ts +11 -0
  155. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js +127 -0
  156. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.js.map +1 -0
  157. package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.d.ts +10 -0
  158. package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js +45 -0
  159. package/esm/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.js.map +1 -0
  160. package/esm/HierarchicalTrackSelectorWidget/components/Node.d.ts +29 -0
  161. package/esm/HierarchicalTrackSelectorWidget/components/Node.js +149 -0
  162. package/esm/HierarchicalTrackSelectorWidget/components/Node.js.map +1 -0
  163. package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.d.ts +11 -0
  164. package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js +57 -0
  165. package/esm/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.js.map +1 -0
  166. package/esm/HierarchicalTrackSelectorWidget/components/util.d.ts +3 -0
  167. package/esm/HierarchicalTrackSelectorWidget/components/util.js +5 -0
  168. package/esm/HierarchicalTrackSelectorWidget/components/util.js.map +1 -0
  169. package/esm/HierarchicalTrackSelectorWidget/configSchema.d.ts +2 -0
  170. package/esm/HierarchicalTrackSelectorWidget/configSchema.js +4 -0
  171. package/esm/HierarchicalTrackSelectorWidget/configSchema.js.map +1 -0
  172. package/esm/HierarchicalTrackSelectorWidget/index.d.ts +4 -0
  173. package/esm/HierarchicalTrackSelectorWidget/index.js +4 -0
  174. package/esm/HierarchicalTrackSelectorWidget/index.js.map +1 -0
  175. package/esm/HierarchicalTrackSelectorWidget/model.d.ts +69 -0
  176. package/esm/HierarchicalTrackSelectorWidget/model.js +204 -0
  177. package/esm/HierarchicalTrackSelectorWidget/model.js.map +1 -0
  178. package/esm/PluginStoreWidget/components/CustomPluginForm.d.ts +9 -0
  179. package/esm/PluginStoreWidget/components/CustomPluginForm.js +109 -0
  180. package/esm/PluginStoreWidget/components/CustomPluginForm.js.map +1 -0
  181. package/esm/PluginStoreWidget/components/InstalledPlugin.d.ts +11 -0
  182. package/esm/PluginStoreWidget/components/InstalledPlugin.js +77 -0
  183. package/esm/PluginStoreWidget/components/InstalledPlugin.js.map +1 -0
  184. package/esm/PluginStoreWidget/components/InstalledPluginsList.d.ts +9 -0
  185. package/esm/PluginStoreWidget/components/InstalledPluginsList.js +16 -0
  186. package/esm/PluginStoreWidget/components/InstalledPluginsList.js.map +1 -0
  187. package/esm/PluginStoreWidget/components/PluginCard.d.ts +10 -0
  188. package/esm/PluginStoreWidget/components/PluginCard.js +61 -0
  189. package/esm/PluginStoreWidget/components/PluginCard.js.map +1 -0
  190. package/esm/PluginStoreWidget/components/PluginStoreWidget.d.ts +7 -0
  191. package/esm/PluginStoreWidget/components/PluginStoreWidget.js +106 -0
  192. package/esm/PluginStoreWidget/components/PluginStoreWidget.js.map +1 -0
  193. package/esm/PluginStoreWidget/index.d.ts +2 -0
  194. package/esm/PluginStoreWidget/index.js +4 -0
  195. package/esm/PluginStoreWidget/index.js.map +1 -0
  196. package/esm/PluginStoreWidget/model.d.ts +13 -0
  197. package/esm/PluginStoreWidget/model.js +20 -0
  198. package/esm/PluginStoreWidget/model.js.map +1 -0
  199. package/esm/SetDefaultSession/SetDefaultSession.d.ts +6 -0
  200. package/esm/SetDefaultSession/SetDefaultSession.js +34 -0
  201. package/esm/SetDefaultSession/SetDefaultSession.js.map +1 -0
  202. package/esm/SetDefaultSession/index.d.ts +1 -0
  203. package/esm/SetDefaultSession/index.js +2 -0
  204. package/esm/SetDefaultSession/index.js.map +1 -0
  205. package/esm/index.d.ts +30 -0
  206. package/esm/index.js +70 -0
  207. package/esm/index.js.map +1 -0
  208. package/esm/ucsc-trackhub/configSchema.d.ts +2 -0
  209. package/esm/ucsc-trackhub/configSchema.js +18 -0
  210. package/esm/ucsc-trackhub/configSchema.js.map +1 -0
  211. package/esm/ucsc-trackhub/index.d.ts +2 -0
  212. package/esm/ucsc-trackhub/index.js +3 -0
  213. package/esm/ucsc-trackhub/index.js.map +1 -0
  214. package/esm/ucsc-trackhub/model.d.ts +15 -0
  215. package/esm/ucsc-trackhub/model.js +82 -0
  216. package/esm/ucsc-trackhub/model.js.map +1 -0
  217. package/esm/ucsc-trackhub/ucscAssemblies.d.ts +2 -0
  218. package/esm/ucsc-trackhub/ucscAssemblies.js +201 -0
  219. package/esm/ucsc-trackhub/ucscAssemblies.js.map +1 -0
  220. package/esm/ucsc-trackhub/ucscTrackHub.d.ts +6 -0
  221. package/esm/ucsc-trackhub/ucscTrackHub.js +348 -0
  222. package/esm/ucsc-trackhub/ucscTrackHub.js.map +1 -0
  223. package/package.json +21 -13
  224. package/src/AddConnectionWidget/components/AddConnectionWidget.js +14 -10
  225. package/src/AddConnectionWidget/components/ConnectionTypeSelect.tsx +2 -4
  226. package/src/AddConnectionWidget/components/__snapshots__/AddConnectionWidget.test.js.snap +63 -67
  227. package/src/AddTrackWidget/components/{AddTrackWidget.test.js → AddTrackWidget.test.tsx} +19 -34
  228. package/src/AddTrackWidget/components/AddTrackWidget.tsx +36 -200
  229. package/src/AddTrackWidget/components/ConfirmTrack.tsx +32 -32
  230. package/src/AddTrackWidget/components/DefaultAddTrackWorkflow.tsx +205 -0
  231. package/src/AddTrackWidget/components/TrackSourceSelect.tsx +9 -5
  232. package/src/AssemblyManager/AssemblyAddForm.tsx +5 -11
  233. package/src/AssemblyManager/AssemblyManager.tsx +8 -8
  234. package/src/AssemblyManager/AssemblyTable.tsx +10 -10
  235. package/src/HierarchicalTrackSelectorWidget/components/CloseConnectionDialog.tsx +1 -1
  236. package/src/HierarchicalTrackSelectorWidget/components/DeleteConnectionDialog.tsx +1 -1
  237. package/src/HierarchicalTrackSelectorWidget/components/Header.tsx +287 -0
  238. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +1 -1
  239. package/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.tsx +23 -440
  240. package/src/HierarchicalTrackSelectorWidget/components/ManageConnectionsDialog.tsx +6 -6
  241. package/src/HierarchicalTrackSelectorWidget/components/Node.tsx +284 -0
  242. package/src/HierarchicalTrackSelectorWidget/components/ToggleConnectionsDialog.tsx +7 -7
  243. package/src/HierarchicalTrackSelectorWidget/components/__snapshots__/HierarchicalTrackSelector.test.js.snap +122 -115
  244. package/src/HierarchicalTrackSelectorWidget/components/util.ts +11 -0
  245. package/src/HierarchicalTrackSelectorWidget/configSchema.ts +3 -0
  246. package/src/HierarchicalTrackSelectorWidget/index.ts +4 -6
  247. package/src/HierarchicalTrackSelectorWidget/model.ts +45 -41
  248. package/src/PluginStoreWidget/components/CustomPluginForm.tsx +11 -14
  249. package/src/PluginStoreWidget/components/InstalledPlugin.tsx +9 -8
  250. package/src/PluginStoreWidget/components/InstalledPluginsList.tsx +1 -1
  251. package/src/PluginStoreWidget/components/PluginCard.tsx +10 -11
  252. package/src/PluginStoreWidget/components/PluginStoreWidget.tsx +9 -9
  253. package/src/PluginStoreWidget/components/__snapshots__/PluginStoreWidget.test.js.snap +267 -217
  254. package/src/PluginStoreWidget/index.js +0 -1
  255. package/src/SetDefaultSession/SetDefaultSession.tsx +1 -1
  256. package/src/index.ts +4 -1
  257. package/dist/AddConnectionWidget/components/AddConnectionWidget.test.js +0 -279
  258. package/dist/AddTrackWidget/components/AddTrackWidget.test.js +0 -218
  259. package/dist/AddTrackWidget/index.test.js +0 -292
  260. package/dist/AssemblyManager/AssemblyManager.test.js +0 -113
  261. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.test.js +0 -191
  262. package/dist/HierarchicalTrackSelectorWidget/model.test.js +0 -28
  263. package/dist/PluginStoreWidget/components/PluginStoreWidget.test.js +0 -201
  264. package/dist/PluginStoreWidget/model.test.js +0 -17
  265. package/dist/SetDefaultSession/SetDefaultSession.test.js +0 -75
  266. package/dist/index.test.js +0 -56
  267. package/src/AddTrackWidget/components/__snapshots__/AddTrackWidget.test.js.snap +0 -350
@@ -1,243 +1,47 @@
1
- import React, {
2
- Suspense,
3
- lazy,
4
- useCallback,
5
- useMemo,
6
- useState,
7
- useRef,
8
- useEffect,
9
- } from 'react'
10
- import {
11
- Checkbox,
12
- Fab,
13
- FormControlLabel,
14
- IconButton,
15
- InputAdornment,
16
- Menu,
17
- MenuItem,
18
- TextField,
19
- Tooltip,
20
- Typography,
21
- makeStyles,
22
- } from '@material-ui/core'
23
-
1
+ import React, { useCallback, useMemo, useState, useRef, useEffect } from 'react'
2
+ import { Fab, Menu, MenuItem } from '@mui/material'
3
+ import { makeStyles } from 'tss-react/mui'
24
4
  // icons
25
- import ClearIcon from '@material-ui/icons/Clear'
26
- import AddIcon from '@material-ui/icons/Add'
27
- import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown'
28
- import ArrowRightIcon from '@material-ui/icons/ArrowRight'
29
- import MenuIcon from '@material-ui/icons/Menu'
30
- import MoreIcon from '@material-ui/icons/MoreHoriz'
31
- import { Cable } from '@jbrowse/core/ui/Icons'
32
-
5
+ import AddIcon from '@mui/icons-material/Add'
33
6
  // other
34
7
  import AutoSizer from 'react-virtualized-auto-sizer'
35
- import JBrowseMenu from '@jbrowse/core/ui/Menu'
36
8
  import {
37
9
  getSession,
38
10
  isSessionModelWithWidgets,
39
11
  isSessionModelWithConnections,
40
12
  isSessionWithAddTracks,
41
13
  } from '@jbrowse/core/util'
42
- import {
43
- AnyConfigurationModel,
44
- readConfObject,
45
- } from '@jbrowse/core/configuration'
46
14
  import { observer } from 'mobx-react'
47
15
  import { VariableSizeTree } from 'react-vtree'
48
16
 
49
17
  // locals
50
18
  import { TreeNode, HierarchicalTrackSelectorModel } from '../model'
19
+ import Header from './Header'
20
+ import Node from './Node'
51
21
 
52
- // lazy components
53
- const CloseConnectionDialog = lazy(() => import('./CloseConnectionDialog'))
54
- const DeleteConnectionDialog = lazy(() => import('./DeleteConnectionDialog'))
55
- const ManageConnectionsDialog = lazy(() => import('./ManageConnectionsDialog'))
56
- const ToggleConnectionsDialog = lazy(() => import('./ToggleConnectionsDialog'))
57
-
58
- const useStyles = makeStyles(theme => ({
59
- searchBox: {
60
- margin: theme.spacing(2),
61
- },
62
- menuIcon: {
63
- marginRight: theme.spacing(1),
64
- marginBottom: 0,
65
- },
22
+ const useStyles = makeStyles()(theme => ({
66
23
  fab: {
67
24
  position: 'absolute',
68
25
  bottom: theme.spacing(6),
69
26
  right: theme.spacing(6),
70
27
  },
71
- compactCheckbox: {
72
- padding: 0,
73
- },
74
-
75
- checkboxLabel: {
76
- marginRight: 0,
77
- '&:hover': {
78
- backgroundColor: '#eee',
79
- },
80
- },
81
-
82
- // this accordionBase element's small padding is used to give a margin to
83
- // accordionColor it a "margin" because the virtualized elements can't really
84
- // use margin in a conventional way (it doesn't affect layout)
85
- accordionBase: {
86
- display: 'flex',
87
- },
88
-
89
- accordionCard: {
90
- padding: 3,
91
- cursor: 'pointer',
92
- display: 'flex',
93
- },
94
-
95
- nestingLevelMarker: {
96
- position: 'absolute',
97
- borderLeft: '1.5px solid #555',
98
- },
99
- // accordionColor set's display:flex so that the child accordionText use
100
- // vertically centered text
101
- accordionColor: {
102
- background: theme.palette.tertiary?.main,
103
- color: theme.palette.tertiary?.contrastText,
104
- width: '100%',
105
- display: 'flex',
106
- paddingLeft: 5,
107
- },
108
-
109
- // margin:auto 0 to center text vertically
110
- accordionText: {
111
- margin: 'auto 0',
112
- },
113
28
  }))
114
29
 
115
- interface MoreInfoArgs {
116
- target: HTMLElement
117
- id: string
118
- conf: AnyConfigurationModel
119
- }
120
-
121
- // An individual node in the track selector. Note: manually sets cursor:
122
- // pointer improves usability for what can be clicked
123
- function Node(props: {
124
- data: {
125
- isLeaf: boolean
126
- nestingLevel: number
127
- checked: boolean
128
- id: string
129
- name: string
130
- onChange: Function
131
- toggleCollapse: (arg: string) => void
132
- conf: AnyConfigurationModel
133
- onMoreInfo: (arg: MoreInfoArgs) => void
134
- drawerPosition: unknown
135
- }
136
- isOpen: boolean
137
- style?: { height: number }
138
- setOpen: (arg: boolean) => void
139
- }) {
140
- const { data, isOpen, style, setOpen } = props
141
- const {
142
- isLeaf,
143
- nestingLevel,
144
- checked,
145
- id,
146
- name,
147
- onChange,
148
- toggleCollapse,
149
- conf,
150
- onMoreInfo,
151
- drawerPosition,
152
- } = data
153
-
154
- const classes = useStyles()
155
- const width = 10
156
- const marginLeft = nestingLevel * width + (isLeaf ? width : 0)
157
- const unsupported =
158
- name?.endsWith('(Unsupported)') || name?.endsWith('(Unknown)')
159
- const description = (conf && readConfObject(conf, ['description'])) || ''
160
-
161
- return (
162
- <div style={style} className={!isLeaf ? classes.accordionBase : undefined}>
163
- {new Array(nestingLevel).fill(0).map((_, idx) => (
164
- <div
165
- key={`mark-${idx}`}
166
- style={{ left: idx * width + 4, height: style?.height }}
167
- className={classes.nestingLevelMarker}
168
- />
169
- ))}
170
- <div
171
- className={!isLeaf ? classes.accordionCard : undefined}
172
- onClick={() => {
173
- toggleCollapse(id)
174
- setOpen(!isOpen)
175
- }}
176
- style={{
177
- marginLeft,
178
- whiteSpace: 'nowrap',
179
- width: '100%',
180
- }}
181
- >
182
- <div className={!isLeaf ? classes.accordionColor : undefined}>
183
- {!isLeaf ? (
184
- <div className={classes.accordionText}>
185
- <Typography>
186
- {isOpen ? <ArrowDropDownIcon /> : <ArrowRightIcon />}
187
- {name}
188
- </Typography>
189
- </div>
190
- ) : (
191
- <>
192
- <Tooltip
193
- title={description}
194
- placement={drawerPosition === 'left' ? 'right' : 'left'}
195
- >
196
- <FormControlLabel
197
- className={classes.checkboxLabel}
198
- control={
199
- <Checkbox
200
- className={classes.compactCheckbox}
201
- checked={checked}
202
- onChange={() => onChange(id)}
203
- color="primary"
204
- disabled={unsupported}
205
- inputProps={{
206
- // @ts-ignore
207
- 'data-testid': `htsTrackEntry-${id}`,
208
- }}
209
- />
210
- }
211
- label={name}
212
- />
213
- </Tooltip>
214
- <IconButton
215
- onClick={e => onMoreInfo({ target: e.currentTarget, id, conf })}
216
- color="secondary"
217
- data-testid={`htsTrackEntryMenu-${id}`}
218
- >
219
- <MoreIcon />
220
- </IconButton>
221
- </>
222
- )}
223
- </div>
224
- </div>
225
- </div>
226
- )
227
- }
228
-
229
30
  function getNodeData(
230
31
  node: TreeNode,
231
32
  nestingLevel: number,
232
33
  extra: Record<string, unknown>,
34
+ selection: Record<string, unknown>,
233
35
  ) {
234
36
  const isLeaf = !!node.conf
37
+ const selected = !!selection[node.id]
235
38
  return {
236
39
  data: {
237
40
  defaultHeight: isLeaf ? 22 : 40,
238
41
  isLeaf,
239
42
  isOpenByDefault: true,
240
43
  nestingLevel,
44
+ selected,
241
45
  ...node,
242
46
  ...extra,
243
47
  },
@@ -261,26 +65,30 @@ const HierarchicalTree = observer(
261
65
  tree: TreeNode
262
66
  model: HierarchicalTrackSelectorModel
263
67
  }) => {
264
- const { filterText, view } = model
68
+ const { filterText, selection, view } = model
265
69
  const treeRef = useRef<NodeData>(null)
266
- const [info, setMoreInfo] = useState<MoreInfoArgs>()
267
70
  const session = getSession(model)
268
71
  const { drawerPosition } = session
72
+ const obj = useMemo(
73
+ () => Object.fromEntries(selection.map(s => [s.trackId, s])),
74
+ [selection],
75
+ )
269
76
 
270
77
  const extra = useMemo(
271
78
  () => ({
272
79
  onChange: (trackId: string) => view.toggleTrack(trackId),
273
80
  toggleCollapse: (pathName: string) => model.toggleCategory(pathName),
274
- onMoreInfo: setMoreInfo,
81
+ tree,
82
+ model,
275
83
  drawerPosition,
276
84
  }),
277
- [view, model, drawerPosition],
85
+ [view, model, drawerPosition, tree],
278
86
  )
279
87
  const treeWalker = useCallback(
280
88
  function* treeWalker() {
281
89
  for (let i = 0; i < tree.children.length; i++) {
282
90
  const r = tree.children[i]
283
- yield getNodeData(r, 0, extra)
91
+ yield getNodeData(r, 0, extra, obj)
284
92
  }
285
93
 
286
94
  while (true) {
@@ -289,16 +97,13 @@ const HierarchicalTree = observer(
289
97
 
290
98
  for (let i = 0; i < parentMeta.node.children.length; i++) {
291
99
  const curr = parentMeta.node.children[i]
292
- yield getNodeData(curr, parentMeta.nestingLevel + 1, extra)
100
+ yield getNodeData(curr, parentMeta.nestingLevel + 1, extra, obj)
293
101
  }
294
102
  }
295
103
  },
296
- [tree, extra],
104
+ [tree, extra, obj],
297
105
  )
298
106
 
299
- const conf = info?.conf
300
- const menuItems = (conf && session.getTrackActionMenuItems?.(conf)) || []
301
-
302
107
  useEffect(() => {
303
108
  // @ts-ignore
304
109
  treeRef.current.recomputeTree({
@@ -313,16 +118,6 @@ const HierarchicalTree = observer(
313
118
  {/* @ts-ignore */}
314
119
  {Node}
315
120
  </VariableSizeTree>
316
- <JBrowseMenu
317
- anchorEl={info?.target}
318
- menuItems={menuItems}
319
- onMenuItemClick={(_event, callback) => {
320
- callback()
321
- setMoreInfo(undefined)
322
- }}
323
- open={Boolean(info)}
324
- onClose={() => setMoreInfo(undefined)}
325
- />
326
121
  </>
327
122
  )
328
123
  },
@@ -379,7 +174,7 @@ const HierarchicalTrackSelectorContainer = observer(
379
174
  toolbarHeight: number
380
175
  overrideDimensions?: { width: number; height: number }
381
176
  }) => {
382
- const classes = useStyles()
177
+ const { classes } = useStyles()
383
178
  const session = getSession(model)
384
179
  const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)
385
180
 
@@ -449,218 +244,6 @@ const HierarchicalTrackSelectorContainer = observer(
449
244
  },
450
245
  )
451
246
 
452
- const HierarchicalTrackSelectorHeader = observer(
453
- ({
454
- model,
455
- setHeaderHeight,
456
- setAssemblyIdx,
457
- assemblyIdx,
458
- }: {
459
- model: HierarchicalTrackSelectorModel
460
- setHeaderHeight: (n: number) => void
461
- setAssemblyIdx: (n: number) => void
462
- assemblyIdx: number
463
- }) => {
464
- const classes = useStyles()
465
- const session = getSession(model)
466
- const [connectionAnchorEl, setConnectionAnchorEl] =
467
- useState<HTMLButtonElement>()
468
- const [menuAnchorEl, setMenuAnchorEl] = useState<HTMLButtonElement>()
469
- const [modalInfo, setModalInfo] = useState<{
470
- connectionConf: AnyConfigurationModel
471
- safelyBreakConnection: Function
472
- dereferenceTypeCount: { [key: string]: number }
473
- name: string
474
- }>()
475
- const [deleteDialogDetails, setDeleteDialogDetails] = useState<{
476
- name: string
477
- connectionConf: AnyConfigurationModel
478
- }>()
479
- const [connectionManagerOpen, setConnectionManagerOpen] = useState(false)
480
- const [connectionToggleOpen, setConnectionToggleOpen] = useState(false)
481
- const { assemblyNames } = model
482
- const assemblyName = assemblyNames[assemblyIdx]
483
-
484
- function breakConnection(
485
- connectionConf: AnyConfigurationModel,
486
- deletingConnection?: boolean,
487
- ) {
488
- const name = readConfObject(connectionConf, 'name')
489
-
490
- // @ts-ignore
491
- const result = session.prepareToBreakConnection(connectionConf)
492
- if (result) {
493
- const [safelyBreakConnection, dereferenceTypeCount] = result
494
- if (Object.keys(dereferenceTypeCount).length > 0) {
495
- setModalInfo({
496
- connectionConf,
497
- safelyBreakConnection,
498
- dereferenceTypeCount,
499
- name,
500
- })
501
- } else {
502
- safelyBreakConnection()
503
- }
504
- }
505
- if (deletingConnection) {
506
- setDeleteDialogDetails({ name, connectionConf })
507
- }
508
- }
509
-
510
- const connectionMenuItems = [
511
- {
512
- label: 'Turn on/off connections...',
513
- onClick: () => setConnectionToggleOpen(true),
514
- },
515
- ]
516
-
517
- if (isSessionModelWithConnections(session)) {
518
- connectionMenuItems.unshift({
519
- label: 'Add connection',
520
- onClick: () => {
521
- if (isSessionModelWithWidgets(session)) {
522
- const widget = session.addWidget(
523
- 'AddConnectionWidget',
524
- 'addConnectionWidget',
525
- )
526
- session.showWidget(widget)
527
- }
528
- },
529
- })
530
-
531
- connectionMenuItems.push({
532
- label: 'Delete connections...',
533
- onClick: () => setConnectionManagerOpen(true),
534
- })
535
- }
536
-
537
- const assemblyMenuItems =
538
- assemblyNames.length > 1
539
- ? [
540
- {
541
- label: 'Select assembly...',
542
- subMenu: assemblyNames.map((name, idx) => ({
543
- label: name,
544
- onClick: () => setAssemblyIdx(idx),
545
- })),
546
- },
547
- ]
548
- : []
549
-
550
- const menuItems = [
551
- {
552
- label: 'Add track...',
553
- onClick: () => {
554
- if (isSessionModelWithWidgets(session)) {
555
- const widget = session.addWidget(
556
- 'AddTrackWidget',
557
- 'addTrackWidget',
558
- {
559
- view: model.view.id,
560
- },
561
- )
562
- session.showWidget(widget)
563
- }
564
- },
565
- },
566
-
567
- ...assemblyMenuItems,
568
- ]
569
-
570
- return (
571
- <div
572
- ref={ref => setHeaderHeight(ref?.getBoundingClientRect().height || 0)}
573
- data-testid="hierarchical_track_selector"
574
- >
575
- <div style={{ display: 'flex' }}>
576
- {isSessionWithAddTracks(session) && (
577
- <IconButton
578
- className={classes.menuIcon}
579
- onClick={event => setMenuAnchorEl(event.currentTarget)}
580
- >
581
- <MenuIcon />
582
- </IconButton>
583
- )}
584
-
585
- {session.makeConnection && (
586
- <IconButton
587
- className={classes.menuIcon}
588
- onClick={event => setConnectionAnchorEl(event.currentTarget)}
589
- >
590
- <Cable />
591
- </IconButton>
592
- )}
593
-
594
- <TextField
595
- className={classes.searchBox}
596
- label="Filter tracks"
597
- value={model.filterText}
598
- onChange={event => model.setFilterText(event.target.value)}
599
- fullWidth
600
- InputProps={{
601
- endAdornment: (
602
- <InputAdornment position="end">
603
- <IconButton color="secondary" onClick={model.clearFilterText}>
604
- <ClearIcon />
605
- </IconButton>
606
- </InputAdornment>
607
- ),
608
- }}
609
- />
610
- </div>
611
- <JBrowseMenu
612
- anchorEl={connectionAnchorEl}
613
- open={Boolean(connectionAnchorEl)}
614
- onMenuItemClick={(_, callback) => {
615
- callback()
616
- setConnectionAnchorEl(undefined)
617
- }}
618
- onClose={() => setConnectionAnchorEl(undefined)}
619
- menuItems={connectionMenuItems}
620
- />
621
- <JBrowseMenu
622
- anchorEl={menuAnchorEl}
623
- open={Boolean(menuAnchorEl)}
624
- onMenuItemClick={(_, callback) => {
625
- callback()
626
- setMenuAnchorEl(undefined)
627
- }}
628
- onClose={() => setMenuAnchorEl(undefined)}
629
- menuItems={menuItems}
630
- />
631
- <Suspense fallback={<div />}>
632
- {modalInfo ? (
633
- <CloseConnectionDialog
634
- modalInfo={modalInfo}
635
- setModalInfo={setModalInfo}
636
- />
637
- ) : deleteDialogDetails ? (
638
- <DeleteConnectionDialog
639
- handleClose={() => setDeleteDialogDetails(undefined)}
640
- deleteDialogDetails={deleteDialogDetails}
641
- session={session}
642
- />
643
- ) : null}
644
- {connectionManagerOpen ? (
645
- <ManageConnectionsDialog
646
- handleClose={() => setConnectionManagerOpen(false)}
647
- breakConnection={breakConnection}
648
- session={session}
649
- />
650
- ) : null}
651
- {connectionToggleOpen ? (
652
- <ToggleConnectionsDialog
653
- handleClose={() => setConnectionToggleOpen(false)}
654
- session={session}
655
- breakConnection={breakConnection}
656
- assemblyName={assemblyName}
657
- />
658
- ) : null}
659
- </Suspense>
660
- </div>
661
- )
662
- },
663
- )
664
247
  const HierarchicalTrackSelector = observer(
665
248
  ({
666
249
  model,
@@ -676,7 +259,7 @@ const HierarchicalTrackSelector = observer(
676
259
  const assemblyName = assemblyNames[assemblyIdx]
677
260
  return assemblyName ? (
678
261
  <>
679
- <HierarchicalTrackSelectorHeader
262
+ <Header
680
263
  model={model}
681
264
  setHeaderHeight={setHeaderHeight}
682
265
  setAssemblyIdx={setAssemblyIdx}
@@ -1,16 +1,16 @@
1
1
  import React from 'react'
2
2
  import {
3
+ Button,
3
4
  Dialog,
4
5
  DialogTitle,
5
6
  DialogContent,
6
7
  DialogActions,
7
- Button,
8
8
  IconButton,
9
9
  Tooltip,
10
10
  Typography,
11
- makeStyles,
12
- } from '@material-ui/core'
13
- import CloseIcon from '@material-ui/icons/Close'
11
+ } from '@mui/material'
12
+ import { makeStyles } from 'tss-react/mui'
13
+ import CloseIcon from '@mui/icons-material/Close'
14
14
  import { observer } from 'mobx-react'
15
15
  import {
16
16
  AnyConfigurationModel,
@@ -18,7 +18,7 @@ import {
18
18
  } from '@jbrowse/core/configuration'
19
19
  import { AbstractSessionModel } from '@jbrowse/core/util'
20
20
 
21
- const useStyles = makeStyles(theme => ({
21
+ const useStyles = makeStyles()(theme => ({
22
22
  closeButton: {
23
23
  position: 'absolute',
24
24
  right: theme.spacing(1),
@@ -41,7 +41,7 @@ function ManageConnectionsDlg({
41
41
  session: AbstractSessionModel
42
42
  breakConnection: (conf: AnyConfigurationModel, arg: boolean) => void
43
43
  }) {
44
- const classes = useStyles()
44
+ const { classes } = useStyles()
45
45
  const { adminMode, connections, sessionConnections } = session
46
46
  return (
47
47
  <Dialog open onClose={handleClose} maxWidth="lg">