@jbrowse/plugin-data-management 2.6.3 → 2.7.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 (133) hide show
  1. package/dist/AddConnectionWidget/components/AddConnectionWidget.d.ts +2 -2
  2. package/dist/AddConnectionWidget/components/AddConnectionWidget.js +17 -8
  3. package/dist/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -2
  4. package/dist/AddConnectionWidget/components/ConfigureConnection.js +2 -1
  5. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +2 -2
  6. package/dist/AddConnectionWidget/components/ConnectionTypeSelect.js +5 -3
  7. package/dist/AddTrackWidget/components/AddTrackWidget.d.ts +3 -4
  8. package/dist/AddTrackWidget/components/AddTrackWidget.js +3 -3
  9. package/dist/AddTrackWidget/components/ConfirmTrack.d.ts +2 -2
  10. package/dist/AddTrackWidget/components/ConfirmTrack.js +3 -2
  11. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.d.ts +3 -4
  12. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +32 -27
  13. package/dist/AddTrackWidget/components/PasteConfigWorkflow.d.ts +3 -4
  14. package/dist/AddTrackWidget/components/PasteConfigWorkflow.js +10 -7
  15. package/dist/AddTrackWidget/components/TrackAdapterSelector.js +1 -1
  16. package/dist/AddTrackWidget/components/TrackSourceSelect.d.ts +3 -4
  17. package/dist/AddTrackWidget/components/TrackSourceSelect.js +3 -3
  18. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +2 -2
  19. package/dist/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +2 -1
  20. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +2 -2
  21. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +2 -1
  22. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.d.ts +3 -5
  23. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +2 -1
  24. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.d.ts +3 -4
  25. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +5 -8
  26. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.d.ts +3 -4
  27. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +3 -3
  28. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.d.ts +2 -3
  29. package/dist/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +2 -3
  30. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +13 -0
  31. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +79 -0
  32. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +31 -77
  33. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +3 -4
  34. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +3 -3
  35. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +5 -3
  36. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +10 -4
  37. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +2 -2
  38. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +50 -29
  39. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +2 -2
  40. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +4 -2
  41. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.d.ts +3 -4
  42. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +3 -3
  43. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +2 -2
  44. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +5 -6
  45. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +24 -49
  46. package/dist/HierarchicalTrackSelectorWidget/components/util.js +1 -2
  47. package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +16 -13
  48. package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.js +2 -2
  49. package/dist/HierarchicalTrackSelectorWidget/model.js +17 -12
  50. package/dist/PluginStoreWidget/components/AddCustomPluginDialog.d.ts +2 -2
  51. package/dist/PluginStoreWidget/components/AddCustomPluginDialog.js +2 -1
  52. package/dist/PluginStoreWidget/components/InstalledPlugin.d.ts +2 -2
  53. package/dist/PluginStoreWidget/components/InstalledPlugin.js +8 -4
  54. package/dist/PluginStoreWidget/components/InstalledPluginsList.d.ts +2 -2
  55. package/dist/PluginStoreWidget/components/InstalledPluginsList.js +2 -1
  56. package/dist/PluginStoreWidget/components/PluginCard.d.ts +2 -2
  57. package/dist/PluginStoreWidget/components/PluginCard.js +2 -1
  58. package/dist/PluginStoreWidget/components/PluginStoreWidget.d.ts +3 -4
  59. package/dist/PluginStoreWidget/components/PluginStoreWidget.js +3 -3
  60. package/dist/index.d.ts +1 -9
  61. package/dist/index.js +1 -4
  62. package/dist/ucsc-trackhub/model.js +2 -2
  63. package/esm/AddConnectionWidget/components/AddConnectionWidget.d.ts +2 -2
  64. package/esm/AddConnectionWidget/components/AddConnectionWidget.js +19 -10
  65. package/esm/AddConnectionWidget/components/ConfigureConnection.d.ts +2 -2
  66. package/esm/AddConnectionWidget/components/ConfigureConnection.js +2 -1
  67. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.d.ts +2 -2
  68. package/esm/AddConnectionWidget/components/ConnectionTypeSelect.js +5 -3
  69. package/esm/AddTrackWidget/components/AddTrackWidget.d.ts +3 -4
  70. package/esm/AddTrackWidget/components/AddTrackWidget.js +3 -3
  71. package/esm/AddTrackWidget/components/ConfirmTrack.d.ts +2 -2
  72. package/esm/AddTrackWidget/components/ConfirmTrack.js +4 -3
  73. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.d.ts +3 -4
  74. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +33 -28
  75. package/esm/AddTrackWidget/components/PasteConfigWorkflow.d.ts +3 -4
  76. package/esm/AddTrackWidget/components/PasteConfigWorkflow.js +11 -8
  77. package/esm/AddTrackWidget/components/TrackAdapterSelector.js +1 -1
  78. package/esm/AddTrackWidget/components/TrackSourceSelect.d.ts +3 -4
  79. package/esm/AddTrackWidget/components/TrackSourceSelect.js +3 -3
  80. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.d.ts +2 -2
  81. package/esm/HierarchicalTrackSelectorWidget/components/HierarchicalFab.js +2 -1
  82. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +2 -2
  83. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +2 -1
  84. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.d.ts +3 -5
  85. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/CloseConnectionDialog.js +2 -1
  86. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.d.ts +3 -4
  87. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/DeleteConnectionDialog.js +6 -9
  88. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.d.ts +3 -4
  89. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ManageConnectionsDialog.js +3 -3
  90. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.d.ts +2 -3
  91. package/esm/HierarchicalTrackSelectorWidget/components/dialogs/ToggleConnectionsDialog.js +3 -2
  92. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +13 -0
  93. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +50 -0
  94. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +31 -54
  95. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.d.ts +3 -4
  96. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedDialog.js +3 -3
  97. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +5 -3
  98. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +10 -4
  99. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.d.ts +2 -2
  100. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +50 -29
  101. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.d.ts +2 -2
  102. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +4 -2
  103. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.d.ts +3 -4
  104. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +3 -3
  105. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.d.ts +2 -2
  106. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +5 -6
  107. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +24 -26
  108. package/esm/HierarchicalTrackSelectorWidget/components/util.js +1 -2
  109. package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +16 -13
  110. package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.js +2 -2
  111. package/esm/HierarchicalTrackSelectorWidget/model.js +17 -12
  112. package/esm/PluginStoreWidget/components/AddCustomPluginDialog.d.ts +2 -2
  113. package/esm/PluginStoreWidget/components/AddCustomPluginDialog.js +2 -1
  114. package/esm/PluginStoreWidget/components/InstalledPlugin.d.ts +2 -2
  115. package/esm/PluginStoreWidget/components/InstalledPlugin.js +8 -4
  116. package/esm/PluginStoreWidget/components/InstalledPluginsList.d.ts +2 -2
  117. package/esm/PluginStoreWidget/components/InstalledPluginsList.js +2 -1
  118. package/esm/PluginStoreWidget/components/PluginCard.d.ts +2 -2
  119. package/esm/PluginStoreWidget/components/PluginCard.js +2 -1
  120. package/esm/PluginStoreWidget/components/PluginStoreWidget.d.ts +3 -4
  121. package/esm/PluginStoreWidget/components/PluginStoreWidget.js +3 -3
  122. package/esm/index.d.ts +1 -9
  123. package/esm/index.js +1 -3
  124. package/esm/ucsc-trackhub/model.js +2 -2
  125. package/package.json +5 -4
  126. package/dist/SetDefaultSession/SetDefaultSession.d.ts +0 -6
  127. package/dist/SetDefaultSession/SetDefaultSession.js +0 -38
  128. package/dist/SetDefaultSession/index.d.ts +0 -1
  129. package/dist/SetDefaultSession/index.js +0 -8
  130. package/esm/SetDefaultSession/SetDefaultSession.d.ts +0 -6
  131. package/esm/SetDefaultSession/SetDefaultSession.js +0 -33
  132. package/esm/SetDefaultSession/index.d.ts +0 -1
  133. package/esm/SetDefaultSession/index.js +0 -1
@@ -1,7 +1,7 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { Checkbox, FormControl, FormControlLabel, Link, TextField, Typography, } from '@mui/material';
3
3
  import { makeStyles } from 'tss-react/mui';
4
- import { supportedIndexingAdapters, getSession, isElectron, } from '@jbrowse/core/util';
4
+ import { isSupportedIndexingAdapter, getSession, isElectron, } from '@jbrowse/core/util';
5
5
  import { observer } from 'mobx-react';
6
6
  import { UNKNOWN } from '@jbrowse/core/util/tracks';
7
7
  import { AssemblySelector } from '@jbrowse/core/ui';
@@ -46,7 +46,7 @@ function UnknownAdapterPrompt({ model }) {
46
46
  "and add a feature request for this data type."),
47
47
  React.createElement(TrackAdapterSelector, { model: model })));
48
48
  }
49
- export default observer(function ConfirmTrack({ model, }) {
49
+ const ConfirmTrack = observer(function ConfirmTrack({ model, }) {
50
50
  const { classes } = useStyles();
51
51
  const [check, setCheck] = useState(true);
52
52
  const session = getSession(model);
@@ -74,7 +74,7 @@ export default observer(function ConfirmTrack({ model, }) {
74
74
  if (!(trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type)) {
75
75
  return React.createElement(Typography, null, "Could not recognize this data type.");
76
76
  }
77
- const supportedForIndexing = supportedIndexingAdapters(trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type);
77
+ const supportedForIndexing = isSupportedIndexingAdapter(trackAdapter === null || trackAdapter === void 0 ? void 0 : trackAdapter.type);
78
78
  return (React.createElement("div", null,
79
79
  trackAdapter ? (React.createElement(StatusMessage, { trackAdapter: trackAdapter, trackType: trackType })) : null,
80
80
  warningMessage ? (React.createElement(Typography, { style: { color: 'orange' } }, warningMessage)) : null,
@@ -95,3 +95,4 @@ export default observer(function ConfirmTrack({ model, }) {
95
95
  } }) }))),
96
96
  isElectron && check && supportedForIndexing ? (React.createElement(TextIndexingConfig, { model: model })) : null));
97
97
  });
98
+ export default ConfirmTrack;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { AddTrackModel } from '../model';
3
- declare function AddTrackWorkflow({ model }: {
3
+ declare const DefaultAddTrackWorkflow: ({ model, }: {
4
4
  model: AddTrackModel;
5
- }): React.JSX.Element;
6
- declare const _default: typeof AddTrackWorkflow;
7
- export default _default;
5
+ }) => React.JSX.Element;
6
+ export default DefaultAddTrackWorkflow;
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
2
2
  import { Alert, Button, Step, StepContent, StepLabel, Stepper, Typography, } from '@mui/material';
3
3
  import { makeStyles } from 'tss-react/mui';
4
4
  import { getRoot } from 'mobx-state-tree';
5
- import { getSession, isElectron, supportedIndexingAdapters, } from '@jbrowse/core/util';
5
+ import { getSession, isElectron, isSessionModelWithWidgets, isSessionWithAddTracks, isSupportedIndexingAdapter, } from '@jbrowse/core/util';
6
6
  import { getConf } from '@jbrowse/core/configuration';
7
7
  import { observer } from 'mobx-react';
8
8
  // locals
@@ -27,7 +27,7 @@ const useStyles = makeStyles()(theme => ({
27
27
  },
28
28
  }));
29
29
  const steps = ['Enter track data', 'Confirm track type'];
30
- function AddTrackWorkflow({ model }) {
30
+ const DefaultAddTrackWorkflow = observer(function ({ model, }) {
31
31
  const [activeStep, setActiveStep] = useState(0);
32
32
  const { classes } = useStyles();
33
33
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -46,6 +46,7 @@ function AddTrackWorkflow({ model }) {
46
46
  }
47
47
  }
48
48
  async function handleNext() {
49
+ var _a, _b;
49
50
  if (activeStep !== steps.length - 1) {
50
51
  setActiveStep(activeStep + 1);
51
52
  return;
@@ -55,6 +56,10 @@ function AddTrackWorkflow({ model }) {
55
56
  `${session.adminMode ? '' : '-sessionTrack'}`,
56
57
  ].join('');
57
58
  const assemblyInstance = session.assemblyManager.get(assembly);
59
+ if (!isSessionWithAddTracks(session)) {
60
+ setTrackErrorMessage('Unable to add tracks to this model');
61
+ return;
62
+ }
58
63
  if (assemblyInstance && trackAdapter && trackAdapter.type !== 'UNKNOWN') {
59
64
  session.addTrackConf({
60
65
  trackId,
@@ -66,36 +71,36 @@ function AddTrackWorkflow({ model }) {
66
71
  sequenceAdapter: getConf(assemblyInstance, ['sequence', 'adapter']),
67
72
  },
68
73
  });
69
- if (model.view) {
70
- model.view.showTrack(trackId);
71
- if (isElectron &&
72
- textIndexTrack &&
73
- supportedIndexingAdapters(trackAdapter.type)) {
74
- const attr = textIndexingConf || {
75
- attributes: ['Name', 'ID'],
76
- exclude: ['CDS', 'exon'],
77
- };
78
- const indexName = trackName + '-index';
79
- const newEntry = {
80
- indexingParams: {
81
- ...attr,
82
- assemblies: [assembly],
83
- tracks: [trackId],
84
- indexType: 'perTrack',
85
- name: indexName,
86
- timestamp: new Date().toISOString(),
87
- },
74
+ (_b = (_a = model.view).showTrack) === null || _b === void 0 ? void 0 : _b.call(_a, trackId);
75
+ if (isElectron &&
76
+ textIndexTrack &&
77
+ isSupportedIndexingAdapter(trackAdapter.type)) {
78
+ const attr = textIndexingConf || {
79
+ attributes: ['Name', 'ID'],
80
+ exclude: ['CDS', 'exon'],
81
+ };
82
+ const indexName = trackName + '-index';
83
+ const newEntry = {
84
+ indexingParams: {
85
+ ...attr,
86
+ assemblies: [assembly],
87
+ tracks: [trackId],
88
+ indexType: 'perTrack',
88
89
  name: indexName,
89
- cancelCallback: () => jobsManager.abortJob(),
90
- };
91
- jobsManager.queueJob(newEntry);
92
- }
90
+ timestamp: new Date().toISOString(),
91
+ },
92
+ name: indexName,
93
+ cancelCallback: () => jobsManager.abortJob(),
94
+ };
95
+ jobsManager.queueJob(newEntry);
93
96
  }
94
97
  else {
95
98
  session.notify('Open a new view, or use the track selector in an existing view, to view this track', 'info');
96
99
  }
97
100
  model.clearData();
98
- session.hideWidget(model);
101
+ if (isSessionModelWithWidgets(session)) {
102
+ session.hideWidget(model);
103
+ }
99
104
  }
100
105
  else {
101
106
  setTrackErrorMessage('Failed to add track.\nThe configuration of this file is not currently supported.');
@@ -125,5 +130,5 @@ function AddTrackWorkflow({ model }) {
125
130
  React.createElement(Button, { disabled: isNextDisabled(), variant: "contained", color: "primary", onClick: handleNext, className: classes.button, "data-testid": "addTrackNextButton" }, activeStep === steps.length - 1 ? 'Add' : 'Next')),
126
131
  trackErrorMessage ? (React.createElement("div", { className: classes.alertContainer },
127
132
  React.createElement(Alert, { severity: "error" }, trackErrorMessage))) : null)))))));
128
- }
129
- export default observer(AddTrackWorkflow);
133
+ });
134
+ export default DefaultAddTrackWorkflow;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { AddTrackModel } from '../model';
3
- declare function AddTrackWorkflow({ model }: {
3
+ declare const PasteConfigAddTrackWorkflow: ({ model, }: {
4
4
  model: AddTrackModel;
5
- }): React.JSX.Element;
6
- declare const _default: typeof AddTrackWorkflow;
7
- export default _default;
5
+ }) => React.JSX.Element;
6
+ export default PasteConfigAddTrackWorkflow;
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
2
2
  import { Button, TextField } from '@mui/material';
3
3
  import { ErrorMessage } from '@jbrowse/core/ui';
4
4
  import { makeStyles } from 'tss-react/mui';
5
- import { getSession } from '@jbrowse/core/util';
5
+ import { getSession, isSessionModelWithWidgets, isSessionWithAddTracks, } from '@jbrowse/core/util';
6
6
  import { observer } from 'mobx-react';
7
7
  const useStyles = makeStyles()({
8
8
  textbox: {
@@ -14,7 +14,7 @@ const useStyles = makeStyles()({
14
14
  display: 'block',
15
15
  },
16
16
  });
17
- function AddTrackWorkflow({ model }) {
17
+ const PasteConfigAddTrackWorkflow = observer(function ({ model, }) {
18
18
  const { classes } = useStyles();
19
19
  const [val, setVal] = useState('');
20
20
  const [error, setError] = useState();
@@ -27,15 +27,18 @@ function AddTrackWorkflow({ model }) {
27
27
  const session = getSession(model);
28
28
  const conf = JSON.parse(val);
29
29
  const confs = Array.isArray(conf) ? conf : [conf];
30
- confs.forEach(c => session.addTrackConf(c));
31
- confs.forEach(c => c.trackId);
32
- model.clearData();
33
- session.hideWidget(model);
30
+ if (isSessionWithAddTracks(session) &&
31
+ isSessionModelWithWidgets(session)) {
32
+ confs.forEach(c => session.addTrackConf(c));
33
+ confs.forEach(c => model.view.showTrack(c.trackId));
34
+ model.clearData();
35
+ session.hideWidget(model);
36
+ }
34
37
  }
35
38
  catch (e) {
36
39
  console.error(e);
37
40
  setError(e);
38
41
  }
39
42
  } }, "Submit")));
40
- }
41
- export default observer(AddTrackWorkflow);
43
+ });
44
+ export default PasteConfigAddTrackWorkflow;
@@ -36,7 +36,7 @@ const TrackAdapterSelector = observer(({ model }) => {
36
36
  // returning array avoids needing to use a react fragment which
37
37
  // Select/TextField sub-elements disagree with
38
38
  return [
39
- React.createElement(ListSubheader, null, key),
39
+ React.createElement(ListSubheader, { key: key }, key),
40
40
  val.map(elt => (React.createElement(MenuItem, { key: elt.name, value: elt.name }, elt.displayName))),
41
41
  ];
42
42
  })));
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { AddTrackModel } from '../model';
3
- declare function TrackSourceSelect({ model }: {
3
+ declare const TrackSourceSelect: ({ model, }: {
4
4
  model: AddTrackModel;
5
- }): React.JSX.Element;
6
- declare const _default: typeof TrackSourceSelect;
7
- export default _default;
5
+ }) => React.JSX.Element;
6
+ export default TrackSourceSelect;
@@ -12,12 +12,12 @@ const useStyles = makeStyles()(theme => ({
12
12
  height: theme.spacing(8),
13
13
  },
14
14
  }));
15
- function TrackSourceSelect({ model }) {
15
+ const TrackSourceSelect = observer(function ({ model, }) {
16
16
  const { classes } = useStyles();
17
17
  const rootModel = getRoot(model);
18
18
  return (React.createElement(Paper, { className: classes.paper },
19
19
  React.createElement(FileSelector, { name: "Main file", description: "", location: model.trackData, setLocation: model.setTrackData, setName: model.setTrackName, rootModel: rootModel }),
20
20
  React.createElement("div", { className: classes.spacer }),
21
21
  React.createElement(FileSelector, { name: "Index file", description: "(Optional) The URL of the index file is automatically inferred from the URL of the main file if it is not supplied.", location: model.indexTrackData, setLocation: model.setIndexTrackData, setName: model.setTrackName, rootModel: rootModel })));
22
- }
23
- export default observer(TrackSourceSelect);
22
+ });
23
+ export default TrackSourceSelect;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { HierarchicalTrackSelectorModel } from '../model';
3
- declare const _default: ({ model, }: {
3
+ declare const HierarchicalFab: ({ model, }: {
4
4
  model: HierarchicalTrackSelectorModel;
5
5
  }) => React.JSX.Element;
6
- export default _default;
6
+ export default HierarchicalFab;
@@ -12,7 +12,7 @@ const useStyles = makeStyles()(theme => ({
12
12
  right: theme.spacing(6),
13
13
  },
14
14
  }));
15
- export default observer(function HierarchicalFab({ model, }) {
15
+ const HierarchicalFab = observer(function ({ model, }) {
16
16
  const { classes } = useStyles();
17
17
  const session = getSession(model);
18
18
  const [anchorEl, setAnchorEl] = useState(null);
@@ -40,3 +40,4 @@ export default observer(function HierarchicalFab({ model, }) {
40
40
  }
41
41
  } }, "Add track")) : null))) : null));
42
42
  });
43
+ export default HierarchicalFab;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { HierarchicalTrackSelectorModel } from '../model';
3
- declare const _default: ({ model, }: {
3
+ declare const ShoppingCart: ({ model, }: {
4
4
  model: HierarchicalTrackSelectorModel;
5
5
  }) => React.JSX.Element;
6
- export default _default;
6
+ export default ShoppingCart;
@@ -15,7 +15,7 @@ const useStyles = makeStyles()(theme => ({
15
15
  marginBottom: 0,
16
16
  },
17
17
  }));
18
- export default observer(function ShoppingCart({ model, }) {
18
+ const ShoppingCart = observer(function ({ model, }) {
19
19
  const { classes } = useStyles();
20
20
  const { selection } = model;
21
21
  const { pluginManager } = getEnv(model);
@@ -39,3 +39,4 @@ export default observer(function ShoppingCart({ model, }) {
39
39
  })),
40
40
  ] })));
41
41
  });
42
+ export default ShoppingCart;
@@ -1,12 +1,10 @@
1
1
  import React from 'react';
2
- declare const _default: ({ modalInfo, onClose, }: {
2
+ declare const CloseConnectionDialog: ({ modalInfo, onClose, }: {
3
3
  modalInfo?: {
4
4
  name?: string | undefined;
5
- dereferenceTypeCount?: {
6
- [key: string]: number;
7
- } | undefined;
5
+ dereferenceTypeCount?: Record<string, number> | undefined;
8
6
  safelyBreakConnection?: (() => void) | undefined;
9
7
  } | undefined;
10
8
  onClose: () => void;
11
9
  }) => React.JSX.Element;
12
- export default _default;
10
+ export default CloseConnectionDialog;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { DialogContent, DialogContentText, Button, List, ListItem, DialogActions, } from '@mui/material';
3
3
  import { Dialog } from '@jbrowse/core/ui';
4
4
  import { observer } from 'mobx-react';
5
- export default observer(function CloseConnectionDialog({ modalInfo = {}, onClose, }) {
5
+ const CloseConnectionDialog = observer(function CloseConnectionDialog({ modalInfo = {}, onClose, }) {
6
6
  const { name, dereferenceTypeCount, safelyBreakConnection } = modalInfo;
7
7
  return (React.createElement(Dialog, { open: true, maxWidth: "lg", title: `Close connection "${name}"` },
8
8
  React.createElement(DialogContent, null,
@@ -19,3 +19,4 @@ export default observer(function CloseConnectionDialog({ modalInfo = {}, onClose
19
19
  }
20
20
  : () => { }, color: "primary" }, "OK"))));
21
21
  });
22
+ export default CloseConnectionDialog;
@@ -1,13 +1,12 @@
1
1
  import React from 'react';
2
2
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
3
3
  import { AbstractSessionModel } from '@jbrowse/core/util';
4
- declare function DeleteConnectionDialog({ deleteDialogDetails, session, handleClose, }: {
4
+ declare const DeleteConnectionDialog: ({ deleteDialogDetails, session, handleClose, }: {
5
5
  deleteDialogDetails: {
6
6
  name: string;
7
7
  connectionConf: AnyConfigurationModel;
8
8
  };
9
9
  session: AbstractSessionModel;
10
10
  handleClose: () => void;
11
- }): React.JSX.Element;
12
- declare const _default: typeof DeleteConnectionDialog;
13
- export default _default;
11
+ }) => React.JSX.Element;
12
+ export default DeleteConnectionDialog;
@@ -1,13 +1,10 @@
1
1
  import React from 'react';
2
- import { Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button, } from '@mui/material';
2
+ import { DialogContent, DialogContentText, DialogActions, Button, } from '@mui/material';
3
+ import { Dialog } from '@jbrowse/core/ui';
3
4
  import { observer } from 'mobx-react';
4
- function DeleteConnectionDialog({ deleteDialogDetails, session, handleClose, }) {
5
+ const DeleteConnectionDialog = observer(function DeleteConnectionDialog({ deleteDialogDetails, session, handleClose, }) {
5
6
  const { connectionConf, name } = deleteDialogDetails;
6
- return (React.createElement(Dialog, { open: true },
7
- React.createElement(DialogTitle, null,
8
- "Delete connection \"",
9
- name,
10
- "\""),
7
+ return (React.createElement(Dialog, { open: true, title: `Delete connection "${name}"` },
11
8
  React.createElement(DialogContent, null,
12
9
  React.createElement(DialogContentText, null, "Are you sure you want to delete this connection?")),
13
10
  React.createElement(DialogActions, null,
@@ -19,5 +16,5 @@ function DeleteConnectionDialog({ deleteDialogDetails, session, handleClose, })
19
16
  }
20
17
  handleClose();
21
18
  } }, "OK"))));
22
- }
23
- export default observer(DeleteConnectionDialog);
19
+ });
20
+ export default DeleteConnectionDialog;
@@ -1,10 +1,9 @@
1
1
  import React from 'react';
2
2
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
3
3
  import { AbstractSessionModel } from '@jbrowse/core/util';
4
- declare function ManageConnectionsDlg({ session, handleClose, breakConnection, }: {
4
+ declare const ManageConnectionsDialog: ({ session, handleClose, breakConnection, }: {
5
5
  handleClose: () => void;
6
6
  session: AbstractSessionModel;
7
7
  breakConnection: (conf: AnyConfigurationModel, arg: boolean) => void;
8
- }): React.JSX.Element;
9
- declare const _default: typeof ManageConnectionsDlg;
10
- export default _default;
8
+ }) => React.JSX.Element;
9
+ export default ManageConnectionsDialog;
@@ -12,7 +12,7 @@ const useStyles = makeStyles()(theme => ({
12
12
  width: 500,
13
13
  },
14
14
  }));
15
- function ManageConnectionsDlg({ session, handleClose, breakConnection, }) {
15
+ const ManageConnectionsDialog = observer(function ({ session, handleClose, breakConnection, }) {
16
16
  const { classes } = useStyles();
17
17
  const { adminMode, connections, sessionConnections } = session;
18
18
  return (React.createElement(Dialog, { open: true, onClose: handleClose, maxWidth: "lg", title: "Delete connections" },
@@ -31,5 +31,5 @@ function ManageConnectionsDlg({ session, handleClose, breakConnection, }) {
31
31
  !connections.length ? (React.createElement(Typography, null, "No connections found")) : null)),
32
32
  React.createElement(DialogActions, null,
33
33
  React.createElement(Button, { onClick: () => handleClose(), variant: "contained", color: "primary" }, "Close"))));
34
- }
35
- export default observer(ManageConnectionsDlg);
34
+ });
35
+ export default ManageConnectionsDialog;
@@ -1,10 +1,9 @@
1
1
  import React from 'react';
2
2
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
3
3
  import { AbstractSessionModel } from '@jbrowse/core/util';
4
- export declare function ellipses(slug: string): string;
5
- declare const _default: ({ session, handleClose, breakConnection, }: {
4
+ declare const ToggleConnectionDialog: ({ session, handleClose, breakConnection, }: {
6
5
  handleClose: () => void;
7
6
  session: AbstractSessionModel;
8
7
  breakConnection: (arg: AnyConfigurationModel) => void;
9
8
  }) => React.JSX.Element;
10
- export default _default;
9
+ export default ToggleConnectionDialog;
@@ -4,7 +4,7 @@ import { Dialog } from '@jbrowse/core/ui';
4
4
  import { makeStyles } from 'tss-react/mui';
5
5
  import { observer } from 'mobx-react';
6
6
  import { readConfObject, } from '@jbrowse/core/configuration';
7
- export function ellipses(slug) {
7
+ function ellipses(slug) {
8
8
  return slug.length > 20 ? `${slug.slice(0, 20)}...` : slug;
9
9
  }
10
10
  const useStyles = makeStyles()(theme => ({
@@ -38,7 +38,7 @@ const ConnectionList = observer(function ConnectionsList({ session, breakConnect
38
38
  return (React.createElement("div", { className: classes.connectionContainer }, !session.connections.length ? (React.createElement(Typography, null, "No connections found")) : (session.connections.map((conf, idx) => (React.createElement("div", { key: conf.name + '_' + idx },
39
39
  React.createElement(ConnectionRow, { conf: conf, session: session, breakConnection: breakConnection })))))));
40
40
  });
41
- export default observer(function ToggleConnectionDialog({ session, handleClose, breakConnection, }) {
41
+ const ToggleConnectionDialog = observer(function ({ session, handleClose, breakConnection, }) {
42
42
  return (React.createElement(Dialog, { open: true, onClose: handleClose, maxWidth: "lg", title: "Turn on/off connections" },
43
43
  React.createElement(DialogContent, null,
44
44
  React.createElement(Typography, null, "Use the checkbox to turn on/off connections"),
@@ -46,3 +46,4 @@ export default observer(function ToggleConnectionDialog({ session, handleClose,
46
46
  React.createElement(DialogActions, null,
47
47
  React.createElement(Button, { onClick: () => handleClose(), variant: "contained", color: "primary" }, "Close"))));
48
48
  });
49
+ export default ToggleConnectionDialog;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export default function FacetFilter({ column, vals, width, dispatch, filters, }: {
3
+ column: {
4
+ field: string;
5
+ };
6
+ vals: [string, number][];
7
+ width: number;
8
+ dispatch: (arg: {
9
+ key: string;
10
+ val: string[];
11
+ }) => void;
12
+ filters: Record<string, string[]>;
13
+ }): React.JSX.Element;
@@ -0,0 +1,50 @@
1
+ import React, { useState } from 'react';
2
+ import { Typography, FormControl, Select, IconButton, Tooltip, } from '@mui/material';
3
+ import { makeStyles } from 'tss-react/mui';
4
+ // icon
5
+ import ClearIcon from '@mui/icons-material/Clear';
6
+ import MinimizeIcon from '@mui/icons-material/Minimize';
7
+ import AddIcon from '@mui/icons-material/Add';
8
+ import { coarseStripHTML } from '@jbrowse/core/util';
9
+ const useStyles = makeStyles()(theme => ({
10
+ facet: {
11
+ margin: 0,
12
+ marginLeft: theme.spacing(2),
13
+ },
14
+ select: {
15
+ marginBottom: theme.spacing(2),
16
+ },
17
+ }));
18
+ function ClearButton({ onClick }) {
19
+ return (React.createElement(Tooltip, { title: "Clear selection on this facet filter" },
20
+ React.createElement(IconButton, { onClick: () => onClick(), size: "small" },
21
+ React.createElement(ClearIcon, null))));
22
+ }
23
+ function ExpandButton({ visible, onClick, }) {
24
+ return (React.createElement(Tooltip, { title: "Minimize/expand this facet filter" },
25
+ React.createElement(IconButton, { onClick: () => onClick(), size: "small" }, visible ? React.createElement(MinimizeIcon, null) : React.createElement(AddIcon, null))));
26
+ }
27
+ export default function FacetFilter({ column, vals, width, dispatch, filters, }) {
28
+ const { classes } = useStyles();
29
+ const [visible, setVisible] = useState(true);
30
+ return (React.createElement(FormControl, { key: column.field, className: classes.facet, style: { width } },
31
+ React.createElement("div", { style: { display: 'flex' } },
32
+ React.createElement(Typography, null, column.field),
33
+ React.createElement(ClearButton, { onClick: () => dispatch({ key: column.field, val: [] }) }),
34
+ React.createElement(ExpandButton, { visible: visible, onClick: () => setVisible(!visible) })),
35
+ visible ? (React.createElement(Select, { multiple: true, native: true, className: classes.select, value: filters[column.field], onChange: event => {
36
+ dispatch({
37
+ key: column.field,
38
+ // @ts-expect-error
39
+ val: [...event.target.options]
40
+ .filter(opt => opt.selected)
41
+ .map(opt => opt.value),
42
+ });
43
+ } }, vals
44
+ .sort((a, b) => a[0].localeCompare(b[0]))
45
+ .map(([name, count]) => (React.createElement("option", { key: name, value: name },
46
+ coarseStripHTML(name),
47
+ " (",
48
+ count,
49
+ ")"))))) : null));
50
+ }
@@ -1,58 +1,29 @@
1
- import React, { useState } from 'react';
2
- import { Typography, FormControl, Select, IconButton, Tooltip, } from '@mui/material';
3
- import { makeStyles } from 'tss-react/mui';
4
- // icon
5
- import ClearIcon from '@mui/icons-material/Clear';
6
- import MinimizeIcon from '@mui/icons-material/Minimize';
7
- import AddIcon from '@mui/icons-material/Add';
8
- const useStyles = makeStyles()(theme => ({
9
- facet: {
10
- margin: 0,
11
- marginLeft: theme.spacing(2),
12
- },
13
- select: {
14
- marginBottom: theme.spacing(2),
15
- },
16
- }));
17
- function FacetFilter({ column, vals, width, dispatch, filters, }) {
18
- const { classes } = useStyles();
19
- const [visible, setVisible] = useState(true);
20
- return (React.createElement(FormControl, { key: column.field, className: classes.facet, style: { width } },
21
- React.createElement("div", { style: { display: 'flex' } },
22
- React.createElement(Typography, null, column.field),
23
- React.createElement(Tooltip, { title: "Clear selection on this facet filter" },
24
- React.createElement(IconButton, { onClick: () => {
25
- dispatch({ key: column.field, val: [] });
26
- }, size: "small" },
27
- React.createElement(ClearIcon, null))),
28
- React.createElement(Tooltip, { title: "Minimize/expand this facet filter" },
29
- React.createElement(IconButton, { onClick: () => setVisible(!visible), size: "small" }, visible ? React.createElement(MinimizeIcon, null) : React.createElement(AddIcon, null)))),
30
- visible ? (React.createElement(Select, { multiple: true, native: true, className: classes.select, value: filters[column.field], onChange: event => {
31
- // @ts-expect-error
32
- const { options } = event.target;
33
- const val = [];
34
- const len = options.length;
35
- for (let i = 0; i < len; i++) {
36
- if (options[i].selected) {
37
- val.push(options[i].value);
38
- }
39
- }
40
- dispatch({ key: column.field, val });
41
- } }, vals
42
- .sort((a, b) => a[0].localeCompare(b[0]))
43
- .map(([name, count]) => (React.createElement("option", { key: name, value: name },
44
- name,
45
- " (",
46
- count,
47
- ")"))))) : null));
48
- }
1
+ import React from 'react';
2
+ import FacetFilter from './FacetFilter';
49
3
  export default function FacetFilters({ rows, columns, dispatch, filters, width, }) {
4
+ var _a, _b;
50
5
  const facets = columns.slice(1);
51
- const uniqs = facets.map(() => new Map());
52
- for (const row of rows) {
53
- for (const [index, column] of facets.entries()) {
54
- const elt = uniqs[index];
55
- const key = `${row[column.field] || ''}`;
6
+ const uniqs = new Map(facets.map(f => [f.field, new Map()]));
7
+ // this code "stages the facet filters" in order that the user has selected
8
+ // them, which relies on the js behavior that the order of the returned keys is
9
+ // related to the insertion order.
10
+ const filterKeys = Object.keys(filters);
11
+ const facetKeys = facets.map(f => f.field);
12
+ const ret = new Set();
13
+ for (const entry of filterKeys) {
14
+ // give non-empty filters priority
15
+ if ((_a = filters[entry]) === null || _a === void 0 ? void 0 : _a.length) {
16
+ ret.add(entry);
17
+ }
18
+ }
19
+ for (const entry of facetKeys) {
20
+ ret.add(entry);
21
+ }
22
+ let currentRows = rows;
23
+ for (const facet of ret) {
24
+ const elt = uniqs.get(facet);
25
+ for (const row of currentRows) {
26
+ const key = `${row[facet] || ''}`;
56
27
  const val = elt.get(key);
57
28
  // we don't allow filtering on empty yet
58
29
  if (key) {
@@ -64,6 +35,12 @@ export default function FacetFilters({ rows, columns, dispatch, filters, width,
64
35
  }
65
36
  }
66
37
  }
38
+ const filter = ((_b = filters[facet]) === null || _b === void 0 ? void 0 : _b.length) ? new Set(filters[facet]) : undefined;
39
+ currentRows = currentRows.filter(row => {
40
+ return filter !== undefined ? filter.has(row[facet]) : true;
41
+ });
67
42
  }
68
- return (React.createElement("div", null, facets.map((column, index) => (React.createElement(FacetFilter, { key: column.field, vals: [...uniqs[index]], column: column, width: width, dispatch: dispatch, filters: filters })))));
43
+ return (React.createElement("div", null, facets.map(column => {
44
+ return (React.createElement(FacetFilter, { key: column.field, vals: [...uniqs.get(column.field)], column: column, width: width, dispatch: dispatch, filters: filters }));
45
+ })));
69
46
  }
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
2
  import { HierarchicalTrackSelectorModel } from '../../model';
3
- declare function FacetedDlg(props: {
3
+ declare const FacetedTrackSelectorDialog: (props: {
4
4
  handleClose: () => void;
5
5
  model: HierarchicalTrackSelectorModel;
6
- }): React.JSX.Element;
7
- declare const _default: typeof FacetedDlg;
8
- export default _default;
6
+ }) => React.JSX.Element;
7
+ export default FacetedTrackSelectorDialog;
@@ -3,10 +3,10 @@ import { DialogContent } from '@mui/material';
3
3
  import { Dialog } from '@jbrowse/core/ui';
4
4
  import { observer } from 'mobx-react';
5
5
  import FacetedSelector from './FacetedSelector';
6
- function FacetedDlg(props) {
6
+ const FacetedTrackSelectorDialog = observer(function (props) {
7
7
  const { handleClose } = props;
8
8
  return (React.createElement(Dialog, { open: true, onClose: handleClose, maxWidth: "xl", title: "Faceted track selector" },
9
9
  React.createElement(DialogContent, null,
10
10
  React.createElement(FacetedSelector, { ...props }))));
11
- }
12
- export default observer(FacetedDlg);
11
+ });
12
+ export default FacetedTrackSelectorDialog;