@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
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const react_1 = __importStar(require("react"));
30
+ const material_1 = require("@mui/material");
31
+ const mui_1 = require("tss-react/mui");
32
+ // icon
33
+ const Clear_1 = __importDefault(require("@mui/icons-material/Clear"));
34
+ const Minimize_1 = __importDefault(require("@mui/icons-material/Minimize"));
35
+ const Add_1 = __importDefault(require("@mui/icons-material/Add"));
36
+ const util_1 = require("@jbrowse/core/util");
37
+ const useStyles = (0, mui_1.makeStyles)()(theme => ({
38
+ facet: {
39
+ margin: 0,
40
+ marginLeft: theme.spacing(2),
41
+ },
42
+ select: {
43
+ marginBottom: theme.spacing(2),
44
+ },
45
+ }));
46
+ function ClearButton({ onClick }) {
47
+ return (react_1.default.createElement(material_1.Tooltip, { title: "Clear selection on this facet filter" },
48
+ react_1.default.createElement(material_1.IconButton, { onClick: () => onClick(), size: "small" },
49
+ react_1.default.createElement(Clear_1.default, null))));
50
+ }
51
+ function ExpandButton({ visible, onClick, }) {
52
+ return (react_1.default.createElement(material_1.Tooltip, { title: "Minimize/expand this facet filter" },
53
+ react_1.default.createElement(material_1.IconButton, { onClick: () => onClick(), size: "small" }, visible ? react_1.default.createElement(Minimize_1.default, null) : react_1.default.createElement(Add_1.default, null))));
54
+ }
55
+ function FacetFilter({ column, vals, width, dispatch, filters, }) {
56
+ const { classes } = useStyles();
57
+ const [visible, setVisible] = (0, react_1.useState)(true);
58
+ return (react_1.default.createElement(material_1.FormControl, { key: column.field, className: classes.facet, style: { width } },
59
+ react_1.default.createElement("div", { style: { display: 'flex' } },
60
+ react_1.default.createElement(material_1.Typography, null, column.field),
61
+ react_1.default.createElement(ClearButton, { onClick: () => dispatch({ key: column.field, val: [] }) }),
62
+ react_1.default.createElement(ExpandButton, { visible: visible, onClick: () => setVisible(!visible) })),
63
+ visible ? (react_1.default.createElement(material_1.Select, { multiple: true, native: true, className: classes.select, value: filters[column.field], onChange: event => {
64
+ dispatch({
65
+ key: column.field,
66
+ // @ts-expect-error
67
+ val: [...event.target.options]
68
+ .filter(opt => opt.selected)
69
+ .map(opt => opt.value),
70
+ });
71
+ } }, vals
72
+ .sort((a, b) => a[0].localeCompare(b[0]))
73
+ .map(([name, count]) => (react_1.default.createElement("option", { key: name, value: name },
74
+ (0, util_1.coarseStripHTML)(name),
75
+ " (",
76
+ count,
77
+ ")"))))) : null));
78
+ }
79
+ exports.default = FacetFilter;
@@ -1,86 +1,34 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
- const react_1 = __importStar(require("react"));
30
- const material_1 = require("@mui/material");
31
- const mui_1 = require("tss-react/mui");
32
- // icon
33
- const Clear_1 = __importDefault(require("@mui/icons-material/Clear"));
34
- const Minimize_1 = __importDefault(require("@mui/icons-material/Minimize"));
35
- const Add_1 = __importDefault(require("@mui/icons-material/Add"));
36
- const useStyles = (0, mui_1.makeStyles)()(theme => ({
37
- facet: {
38
- margin: 0,
39
- marginLeft: theme.spacing(2),
40
- },
41
- select: {
42
- marginBottom: theme.spacing(2),
43
- },
44
- }));
45
- function FacetFilter({ column, vals, width, dispatch, filters, }) {
46
- const { classes } = useStyles();
47
- const [visible, setVisible] = (0, react_1.useState)(true);
48
- return (react_1.default.createElement(material_1.FormControl, { key: column.field, className: classes.facet, style: { width } },
49
- react_1.default.createElement("div", { style: { display: 'flex' } },
50
- react_1.default.createElement(material_1.Typography, null, column.field),
51
- react_1.default.createElement(material_1.Tooltip, { title: "Clear selection on this facet filter" },
52
- react_1.default.createElement(material_1.IconButton, { onClick: () => {
53
- dispatch({ key: column.field, val: [] });
54
- }, size: "small" },
55
- react_1.default.createElement(Clear_1.default, null))),
56
- react_1.default.createElement(material_1.Tooltip, { title: "Minimize/expand this facet filter" },
57
- react_1.default.createElement(material_1.IconButton, { onClick: () => setVisible(!visible), size: "small" }, visible ? react_1.default.createElement(Minimize_1.default, null) : react_1.default.createElement(Add_1.default, null)))),
58
- visible ? (react_1.default.createElement(material_1.Select, { multiple: true, native: true, className: classes.select, value: filters[column.field], onChange: event => {
59
- // @ts-expect-error
60
- const { options } = event.target;
61
- const val = [];
62
- const len = options.length;
63
- for (let i = 0; i < len; i++) {
64
- if (options[i].selected) {
65
- val.push(options[i].value);
66
- }
67
- }
68
- dispatch({ key: column.field, val });
69
- } }, vals
70
- .sort((a, b) => a[0].localeCompare(b[0]))
71
- .map(([name, count]) => (react_1.default.createElement("option", { key: name, value: name },
72
- name,
73
- " (",
74
- count,
75
- ")"))))) : null));
76
- }
6
+ const react_1 = __importDefault(require("react"));
7
+ const FacetFilter_1 = __importDefault(require("./FacetFilter"));
77
8
  function FacetFilters({ rows, columns, dispatch, filters, width, }) {
9
+ var _a, _b;
78
10
  const facets = columns.slice(1);
79
- const uniqs = facets.map(() => new Map());
80
- for (const row of rows) {
81
- for (const [index, column] of facets.entries()) {
82
- const elt = uniqs[index];
83
- const key = `${row[column.field] || ''}`;
11
+ const uniqs = new Map(facets.map(f => [f.field, new Map()]));
12
+ // this code "stages the facet filters" in order that the user has selected
13
+ // them, which relies on the js behavior that the order of the returned keys is
14
+ // related to the insertion order.
15
+ const filterKeys = Object.keys(filters);
16
+ const facetKeys = facets.map(f => f.field);
17
+ const ret = new Set();
18
+ for (const entry of filterKeys) {
19
+ // give non-empty filters priority
20
+ if ((_a = filters[entry]) === null || _a === void 0 ? void 0 : _a.length) {
21
+ ret.add(entry);
22
+ }
23
+ }
24
+ for (const entry of facetKeys) {
25
+ ret.add(entry);
26
+ }
27
+ let currentRows = rows;
28
+ for (const facet of ret) {
29
+ const elt = uniqs.get(facet);
30
+ for (const row of currentRows) {
31
+ const key = `${row[facet] || ''}`;
84
32
  const val = elt.get(key);
85
33
  // we don't allow filtering on empty yet
86
34
  if (key) {
@@ -92,7 +40,13 @@ function FacetFilters({ rows, columns, dispatch, filters, width, }) {
92
40
  }
93
41
  }
94
42
  }
43
+ const filter = ((_b = filters[facet]) === null || _b === void 0 ? void 0 : _b.length) ? new Set(filters[facet]) : undefined;
44
+ currentRows = currentRows.filter(row => {
45
+ return filter !== undefined ? filter.has(row[facet]) : true;
46
+ });
95
47
  }
96
- return (react_1.default.createElement("div", null, facets.map((column, index) => (react_1.default.createElement(FacetFilter, { key: column.field, vals: [...uniqs[index]], column: column, width: width, dispatch: dispatch, filters: filters })))));
48
+ return (react_1.default.createElement("div", null, facets.map(column => {
49
+ return (react_1.default.createElement(FacetFilter_1.default, { key: column.field, vals: [...uniqs.get(column.field)], column: column, width: width, dispatch: dispatch, filters: filters }));
50
+ })));
97
51
  }
98
52
  exports.default = FacetFilters;
@@ -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;
@@ -8,10 +8,10 @@ const material_1 = require("@mui/material");
8
8
  const ui_1 = require("@jbrowse/core/ui");
9
9
  const mobx_react_1 = require("mobx-react");
10
10
  const FacetedSelector_1 = __importDefault(require("./FacetedSelector"));
11
- function FacetedDlg(props) {
11
+ const FacetedTrackSelectorDialog = (0, mobx_react_1.observer)(function (props) {
12
12
  const { handleClose } = props;
13
13
  return (react_1.default.createElement(ui_1.Dialog, { open: true, onClose: handleClose, maxWidth: "xl", title: "Faceted track selector" },
14
14
  react_1.default.createElement(material_1.DialogContent, null,
15
15
  react_1.default.createElement(FacetedSelector_1.default, { ...props }))));
16
- }
17
- exports.default = (0, mobx_react_1.observer)(FacetedDlg);
16
+ });
17
+ exports.default = FacetedTrackSelectorDialog;
@@ -1,13 +1,15 @@
1
1
  import React from 'react';
2
2
  import { HierarchicalTrackSelectorModel } from '../../model';
3
- export default function FacetedHeader({ setFilterText, setUseShoppingCart, setHideSparse, setShowOptions, showOptions, hideSparse, useShoppingCart, filterText, model, }: {
3
+ export default function FacetedHeader({ setFilterText, setUseShoppingCart, setShowSparse, setShowFilters, setShowOptions, showOptions, showSparse, showFilters, useShoppingCart, filterText, model, }: {
4
4
  setFilterText: (arg: string) => void;
5
5
  setUseShoppingCart: (arg: boolean) => void;
6
- setHideSparse: (arg: boolean) => void;
6
+ setShowSparse: (arg: boolean) => void;
7
+ setShowFilters: (arg: boolean) => void;
7
8
  setShowOptions: (arg: boolean) => void;
8
9
  filterText: string;
9
10
  showOptions: boolean;
10
11
  useShoppingCart: boolean;
11
- hideSparse: boolean;
12
+ showSparse: boolean;
13
+ showFilters: boolean;
12
14
  model: HierarchicalTrackSelectorModel;
13
15
  }): React.JSX.Element;
@@ -34,7 +34,7 @@ const Clear_1 = __importDefault(require("@mui/icons-material/Clear"));
34
34
  const MoreVert_1 = __importDefault(require("@mui/icons-material/MoreVert"));
35
35
  // locals
36
36
  const ShoppingCart_1 = __importDefault(require("../ShoppingCart"));
37
- function FacetedHeader({ setFilterText, setUseShoppingCart, setHideSparse, setShowOptions, showOptions, hideSparse, useShoppingCart, filterText, model, }) {
37
+ function FacetedHeader({ setFilterText, setUseShoppingCart, setShowSparse, setShowFilters, setShowOptions, showOptions, showSparse, showFilters, useShoppingCart, filterText, model, }) {
38
38
  const [anchorEl, setAnchorEl] = (0, react_1.useState)(null);
39
39
  return (react_1.default.createElement(react_1.default.Fragment, null,
40
40
  react_1.default.createElement(material_1.Grid, { container: true, spacing: 4, alignItems: "center" },
@@ -60,9 +60,15 @@ function FacetedHeader({ setFilterText, setUseShoppingCart, setHideSparse, setSh
60
60
  checked: useShoppingCart,
61
61
  },
62
62
  {
63
- label: 'Hide sparse metadata columns',
64
- onClick: () => setHideSparse(!hideSparse),
65
- checked: hideSparse,
63
+ label: 'Show sparse metadata columns',
64
+ onClick: () => setShowSparse(!showSparse),
65
+ checked: showSparse,
66
+ type: 'checkbox',
67
+ },
68
+ {
69
+ label: 'Show facet filters',
70
+ onClick: () => setShowFilters(!showFilters),
71
+ checked: showFilters,
66
72
  type: 'checkbox',
67
73
  },
68
74
  {
@@ -6,7 +6,7 @@ export interface InfoArgs {
6
6
  id: string;
7
7
  conf: AnyConfigurationModel;
8
8
  }
9
- declare const _default: ({ model, }: {
9
+ declare const FacetedSelector: ({ model, }: {
10
10
  model: HierarchicalTrackSelectorModel;
11
11
  }) => React.JSX.Element;
12
- export default _default;
12
+ export default FacetedSelector;
@@ -37,9 +37,11 @@ const tracks_1 = require("@jbrowse/core/util/tracks");
37
37
  const ui_1 = require("@jbrowse/core/ui");
38
38
  const SanitizedHTML_1 = __importDefault(require("@jbrowse/core/ui/SanitizedHTML"));
39
39
  const Menu_1 = __importDefault(require("@jbrowse/core/ui/Menu"));
40
- const ResizeBar_1 = __importStar(require("@jbrowse/core/ui/ResizeBar"));
40
+ const ResizeBar_1 = __importDefault(require("@jbrowse/core/ui/ResizeBar"));
41
41
  const util_1 = require("@jbrowse/core/util");
42
42
  const configuration_1 = require("@jbrowse/core/configuration");
43
+ const useResizeBar_1 = require("@jbrowse/core/ui/useResizeBar");
44
+ const mui_1 = require("tss-react/mui");
43
45
  // icons
44
46
  const MoreHoriz_1 = __importDefault(require("@mui/icons-material/MoreHoriz"));
45
47
  const util_2 = require("../../util");
@@ -47,24 +49,31 @@ const FacetedHeader_1 = __importDefault(require("./FacetedHeader"));
47
49
  const FacetFilters_1 = __importDefault(require("./FacetFilters"));
48
50
  const util_3 = require("./util");
49
51
  const nonMetadataKeys = ['category', 'adapter', 'description'];
52
+ const useStyles = (0, mui_1.makeStyles)()({
53
+ cell: {
54
+ whiteSpace: 'nowrap',
55
+ overflow: 'hidden',
56
+ textOverflow: 'ellipsis',
57
+ },
58
+ });
50
59
  const frac = 0.75;
51
- exports.default = (0, mobx_react_1.observer)(function FacetedSelector({ model, }) {
60
+ const FacetedSelector = (0, mobx_react_1.observer)(function FacetedSelector({ model, }) {
52
61
  var _a, _b;
62
+ const { classes } = useStyles();
53
63
  const { view, selection } = model;
54
64
  const { pluginManager } = (0, util_1.getEnv)(model);
55
- const { ref, scrollLeft } = (0, ResizeBar_1.useResizeBar)();
65
+ const { ref, scrollLeft } = (0, useResizeBar_1.useResizeBar)();
56
66
  const [filterText, setFilterText] = (0, react_1.useState)('');
57
- const [showOptions, setShowOptions] = (0, react_1.useState)(false);
67
+ const [showOptions, setShowOptions] = (0, util_1.useLocalStorage)('facet-showTableOptions', false);
58
68
  const [info, setInfo] = (0, react_1.useState)();
59
69
  const [useShoppingCart, setUseShoppingCart] = (0, react_1.useState)(false);
60
- const [hideSparse, setHideSparse] = (0, react_1.useState)(true);
61
- const [panelWidth, setPanelWidth] = (0, react_1.useState)(400);
70
+ const [showSparse, setShowSparse] = (0, util_1.useLocalStorage)('facet-showSparse', false);
71
+ const [showFilters, setShowFilters] = (0, util_1.useLocalStorage)('facet-showFilters', true);
72
+ const [panelWidth, setPanelWidth] = (0, util_1.useLocalStorage)('facet-panelWidth', 400);
62
73
  const session = (0, util_1.getSession)(model);
63
74
  const filterDebounced = (0, util_1.useDebounce)(filterText, 400);
64
75
  const tracks = view.tracks;
65
- const [filters, dispatch] = (0, react_1.useReducer)((state, update) => {
66
- return { ...state, [update.key]: update.val };
67
- }, {});
76
+ const [filters, dispatch] = (0, react_1.useReducer)((state, update) => ({ ...state, [update.key]: update.val }), {});
68
77
  const rows = (0, react_1.useMemo)(() => {
69
78
  // metadata is spread onto the object for easier access and sorting
70
79
  // by the mui data grid (it's unable to sort by nested objects)
@@ -85,10 +94,10 @@ exports.default = (0, mobx_react_1.observer)(function FacetedSelector({ model, }
85
94
  };
86
95
  });
87
96
  }, [model, filterDebounced, session]);
88
- const filteredNonMetadataKeys = (0, react_1.useMemo)(() => nonMetadataKeys.filter(f => !hideSparse ? true : rows.map(r => r[f]).filter(f => !!f).length > 5), [hideSparse, rows]);
89
- const filteredMetadataKeys = (0, react_1.useMemo)(() => [...new Set(rows.flatMap(row => (0, util_3.getRootKeys)(row.metadata)))].filter(f => !hideSparse
97
+ const filteredNonMetadataKeys = (0, react_1.useMemo)(() => nonMetadataKeys.filter(f => showSparse ? true : rows.map(r => r[f]).filter(f => !!f).length > 5), [showSparse, rows]);
98
+ const filteredMetadataKeys = (0, react_1.useMemo)(() => [...new Set(rows.flatMap(row => (0, util_3.getRootKeys)(row.metadata)))].filter(f => showSparse
90
99
  ? true
91
- : rows.map(r => r.metadata[f]).filter(f => !!f).length > 5), [hideSparse, rows]);
100
+ : rows.map(r => r.metadata[f]).filter(f => !!f).length > 5), [showSparse, rows]);
92
101
  const fields = (0, react_1.useMemo)(() => ['name', ...filteredNonMetadataKeys, ...filteredMetadataKeys], [filteredNonMetadataKeys, filteredMetadataKeys]);
93
102
  const [widths, setWidths] = (0, react_1.useState)({
94
103
  name: (0, util_1.measureGridWidth)(rows.map(r => r.name), { maxWidth: 500, stripHTML: true }) + 15,
@@ -124,15 +133,15 @@ exports.default = (0, mobx_react_1.observer)(function FacetedSelector({ model, }
124
133
  (0, util_1.measureGridWidth)(rows.map(r => r.metadata[e]), { stripHTML: true, maxWidth: 400 }),
125
134
  ])),
126
135
  }));
127
- }, [filteredMetadataKeys, visible, filteredNonMetadataKeys, hideSparse, rows]);
128
- const widthsDebounced = (0, util_1.useDebounce)(widths, 400);
136
+ }, [filteredMetadataKeys, visible, filteredNonMetadataKeys, showSparse, rows]);
137
+ const widthsDebounced = (0, util_1.useDebounce)(widths, 200);
129
138
  const columns = [
130
139
  {
131
140
  field: 'name',
132
141
  hideable: false,
133
142
  renderCell: (params) => {
134
143
  const { value, id, row } = params;
135
- return (react_1.default.createElement(react_1.default.Fragment, null,
144
+ return (react_1.default.createElement("div", { className: classes.cell },
136
145
  react_1.default.createElement(SanitizedHTML_1.default, { html: value }),
137
146
  react_1.default.createElement(material_1.IconButton, { onClick: e => setInfo({
138
147
  target: e.currentTarget,
@@ -150,7 +159,7 @@ exports.default = (0, mobx_react_1.observer)(function FacetedSelector({ model, }
150
159
  width: (_a = widthsDebounced[e]) !== null && _a !== void 0 ? _a : 100,
151
160
  renderCell: (params) => {
152
161
  const { value } = params;
153
- return value ? react_1.default.createElement(SanitizedHTML_1.default, { html: value }) : '';
162
+ return (react_1.default.createElement("div", { className: classes.cell }, value ? react_1.default.createElement(SanitizedHTML_1.default, { html: value }) : ''));
154
163
  },
155
164
  });
156
165
  }),
@@ -161,19 +170,22 @@ exports.default = (0, mobx_react_1.observer)(function FacetedSelector({ model, }
161
170
  width: (_a = widthsDebounced[e]) !== null && _a !== void 0 ? _a : 100,
162
171
  renderCell: (params) => {
163
172
  const { value } = params;
164
- return value ? react_1.default.createElement(SanitizedHTML_1.default, { html: value }) : '';
173
+ return (react_1.default.createElement("div", { className: classes.cell }, value ? react_1.default.createElement(SanitizedHTML_1.default, { html: value }) : ''));
165
174
  },
166
175
  });
167
176
  }),
168
177
  ];
169
- const shownTrackIds = tracks.map(t => t.configuration.trackId);
170
- const arrFilters = Object.entries(filters).filter(f => f[1].length > 0);
178
+ const shownTrackIds = new Set(tracks.map(t => t.configuration.trackId));
179
+ const arrFilters = Object.entries(filters)
180
+ .filter(f => f[1].length > 0)
181
+ .map(([key, val]) => [key, new Set(val)]);
182
+ const filteredRows = rows.filter(row => arrFilters.every(([key, val]) => val.has(row[key])));
171
183
  return (react_1.default.createElement(react_1.default.Fragment, null,
172
184
  info ? (react_1.default.createElement(Menu_1.default, { anchorEl: info === null || info === void 0 ? void 0 : info.target, menuItems: ((_b = session.getTrackActionMenuItems) === null || _b === void 0 ? void 0 : _b.call(session, info.conf)) || [], onMenuItemClick: (_event, callback) => {
173
185
  callback();
174
186
  setInfo(undefined);
175
187
  }, open: !!info, onClose: () => setInfo(undefined) })) : null,
176
- react_1.default.createElement(FacetedHeader_1.default, { setHideSparse: setHideSparse, setShowOptions: setShowOptions, setFilterText: setFilterText, setUseShoppingCart: setUseShoppingCart, hideSparse: hideSparse, showOptions: showOptions, filterText: filterText, useShoppingCart: useShoppingCart, model: model }),
188
+ react_1.default.createElement(FacetedHeader_1.default, { setShowSparse: setShowSparse, setShowFilters: setShowFilters, setShowOptions: setShowOptions, setFilterText: setFilterText, setUseShoppingCart: setUseShoppingCart, showFilters: showFilters, showSparse: showSparse, showOptions: showOptions, filterText: filterText, useShoppingCart: useShoppingCart, model: model }),
177
189
  react_1.default.createElement("div", { ref: ref, style: {
178
190
  display: 'flex',
179
191
  overflow: 'hidden',
@@ -182,21 +194,22 @@ exports.default = (0, mobx_react_1.observer)(function FacetedSelector({ model, }
182
194
  } },
183
195
  react_1.default.createElement("div", { style: {
184
196
  height: window.innerHeight * frac,
185
- width: window.innerWidth * frac - panelWidth,
197
+ width: window.innerWidth * frac - (showFilters ? panelWidth : 0),
186
198
  } },
187
199
  react_1.default.createElement(ResizeBar_1.default, { checkbox: true, widths: Object.values(widths).map(f => f !== null && f !== void 0 ? f : 100), setWidths: newWidths => setWidths(Object.fromEntries(Object.entries(widths).map((entry, idx) => [
188
200
  entry[0],
189
201
  newWidths[idx],
190
202
  ]))), scrollLeft: scrollLeft }),
191
- react_1.default.createElement(x_data_grid_1.DataGrid, { rows: rows.filter(row => arrFilters.every(([key, val]) => val.includes(row[key]))), columnVisibilityModel: visible, onColumnVisibilityModelChange: newModel => setVisible(newModel), columnHeaderHeight: 35, checkboxSelection: true, disableRowSelectionOnClick: true, keepNonExistentRowsSelected: true, onRowSelectionModelChange: userSelectedIds => {
203
+ react_1.default.createElement(x_data_grid_1.DataGrid, { rows: filteredRows, columnVisibilityModel: visible, onColumnVisibilityModelChange: newModel => setVisible(newModel), columnHeaderHeight: 35, checkboxSelection: true, disableRowSelectionOnClick: true, keepNonExistentRowsSelected: true, onRowSelectionModelChange: userSelectedIds => {
192
204
  if (!useShoppingCart) {
193
205
  const a1 = shownTrackIds;
194
- const a2 = userSelectedIds;
206
+ const a2 = new Set(userSelectedIds);
195
207
  // synchronize the user selection with the view
196
208
  // see share https://stackoverflow.com/a/33034768/2129219
197
209
  (0, mobx_1.transaction)(() => {
198
- a1.filter(x => !a2.includes(x)).map(t => view.hideTrack(t));
199
- a2.filter(x => !a1.includes(x)).map(t => view.showTrack(t));
210
+ ;
211
+ [...a1].filter(x => !a2.has(x)).map(t => view.hideTrack(t));
212
+ [...a2].filter(x => !a1.has(x)).map(t => view.showTrack(t));
200
213
  });
201
214
  }
202
215
  else {
@@ -205,10 +218,18 @@ exports.default = (0, mobx_react_1.observer)(function FacetedSelector({ model, }
205
218
  const tracks = userSelectedIds.map(id => (0, mobx_state_tree_1.resolveIdentifier)(schema, root, id));
206
219
  model.setSelection(tracks);
207
220
  }
208
- }, rowSelectionModel: useShoppingCart ? selection.map(s => s.trackId) : shownTrackIds, slots: { toolbar: showOptions ? x_data_grid_1.GridToolbar : null }, slotProps: {
221
+ }, rowSelectionModel: useShoppingCart
222
+ ? selection.map(s => s.trackId)
223
+ : [...shownTrackIds], slots: { toolbar: showOptions ? x_data_grid_1.GridToolbar : null }, slotProps: {
209
224
  toolbar: { printOptions: { disableToolbarButton: true } },
210
225
  }, columns: columns, rowHeight: 25 })),
211
- react_1.default.createElement(ui_1.ResizeHandle, { vertical: true, onDrag: dist => setPanelWidth(panelWidth - dist), style: { background: 'grey', width: 5 } }),
212
- react_1.default.createElement("div", { style: { width: panelWidth, overflowY: 'auto', overflowX: 'hidden' } },
213
- react_1.default.createElement(FacetFilters_1.default, { width: panelWidth - 10, rows: rows, columns: columns, dispatch: dispatch, filters: filters })))));
226
+ showFilters ? (react_1.default.createElement(react_1.default.Fragment, null,
227
+ react_1.default.createElement(ui_1.ResizeHandle, { vertical: true, onDrag: dist => setPanelWidth(panelWidth - dist), style: { marginLeft: 5, background: 'grey', width: 5 } }),
228
+ react_1.default.createElement("div", { style: {
229
+ width: panelWidth,
230
+ overflowY: 'auto',
231
+ overflowX: 'hidden',
232
+ } },
233
+ react_1.default.createElement(FacetFilters_1.default, { width: panelWidth - 10, rows: rows, columns: columns, dispatch: dispatch, filters: filters })))) : null)));
214
234
  });
235
+ exports.default = FacetedSelector;
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { HierarchicalTrackSelectorModel } from '../../model';
3
- declare const _default: ({ model, }: {
3
+ declare const HamburgerMenu: ({ model, }: {
4
4
  model: HierarchicalTrackSelectorModel;
5
5
  }) => React.JSX.Element;
6
- export default _default;
6
+ export default HamburgerMenu;
@@ -38,15 +38,16 @@ const CloseConnectionDlg = (0, react_1.lazy)(() => Promise.resolve().then(() =>
38
38
  const DeleteConnectionDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../dialogs/DeleteConnectionDialog'))));
39
39
  const ManageConnectionsDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../dialogs/ManageConnectionsDialog'))));
40
40
  const ToggleConnectionsDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../dialogs/ToggleConnectionsDialog'))));
41
- exports.default = (0, mobx_react_1.observer)(function HamburgerMenu({ model, }) {
41
+ const HamburgerMenu = (0, mobx_react_1.observer)(function ({ model, }) {
42
42
  const session = (0, util_1.getSession)(model);
43
43
  const [modalInfo, setModalInfo] = (0, react_1.useState)();
44
44
  const [deleteDlgDetails, setDeleteDlgDetails] = (0, react_1.useState)();
45
45
  const [connectionToggleOpen, setConnectionToggleOpen] = (0, react_1.useState)(false);
46
46
  const [connectionManagerOpen, setConnectionManagerOpen] = (0, react_1.useState)(false);
47
47
  function breakConnection(connectionConf, deletingConnection) {
48
+ var _a;
48
49
  const name = (0, configuration_1.readConfObject)(connectionConf, 'name');
49
- const result = session.prepareToBreakConnection(connectionConf);
50
+ const result = (_a = session.prepareToBreakConnection) === null || _a === void 0 ? void 0 : _a.call(session, connectionConf);
50
51
  if (result) {
51
52
  const [safelyBreakConnection, dereferenceTypeCount] = result;
52
53
  if (Object.keys(dereferenceTypeCount).length > 0) {
@@ -143,3 +144,4 @@ exports.default = (0, mobx_react_1.observer)(function HamburgerMenu({ model, })
143
144
  connectionManagerOpen ? (react_1.default.createElement(ManageConnectionsDlg, { handleClose: () => setConnectionManagerOpen(false), breakConnection: breakConnection, session: session })) : null,
144
145
  connectionToggleOpen ? (react_1.default.createElement(ToggleConnectionsDlg, { handleClose: () => setConnectionToggleOpen(false), session: session, breakConnection: breakConnection })) : null)));
145
146
  });
147
+ exports.default = HamburgerMenu;
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
2
  import { HierarchicalTrackSelectorModel } from '../../model';
3
- declare function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, }: {
3
+ declare const HierarchicalTrackSelectorHeader: ({ model, setHeaderHeight, }: {
4
4
  model: HierarchicalTrackSelectorModel;
5
5
  setHeaderHeight: (n: number) => void;
6
- }): React.JSX.Element;
7
- declare const _default: typeof HierarchicalTrackSelectorHeader;
8
- export default _default;
6
+ }) => React.JSX.Element;
7
+ export default HierarchicalTrackSelectorHeader;
@@ -54,7 +54,7 @@ const SearchTracksTextField = (0, mobx_react_1.observer)(function ({ model, }) {
54
54
  react_1.default.createElement(Clear_1.default, null)))),
55
55
  } }));
56
56
  });
57
- function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, }) {
57
+ const HierarchicalTrackSelectorHeader = (0, mobx_react_1.observer)(function ({ model, setHeaderHeight, }) {
58
58
  const { classes } = useStyles();
59
59
  const [facetedOpen, setFacetedOpen] = (0, react_1.useState)(false);
60
60
  return (react_1.default.createElement("div", { ref: ref => setHeaderHeight((ref === null || ref === void 0 ? void 0 : ref.getBoundingClientRect().height) || 0), "data-testid": "hierarchical_track_selector" },
@@ -64,5 +64,5 @@ function HierarchicalTrackSelectorHeader({ model, setHeaderHeight, }) {
64
64
  react_1.default.createElement(SearchTracksTextField, { model: model }),
65
65
  react_1.default.createElement(material_1.Button, { className: classes.menuIcon, onClick: () => setFacetedOpen(true) }, "Open faceted selector")),
66
66
  react_1.default.createElement(react_1.Suspense, { fallback: react_1.default.createElement("div", null) }, facetedOpen ? (react_1.default.createElement(FacetedDialog, { handleClose: () => setFacetedOpen(false), model: model })) : null)));
67
- }
68
- exports.default = (0, mobx_react_1.observer)(HierarchicalTrackSelectorHeader);
67
+ });
68
+ exports.default = HierarchicalTrackSelectorHeader;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { TreeNode } from '../../generateHierarchy';
3
3
  import { HierarchicalTrackSelectorModel } from '../../model';
4
- declare const _default: ({ height, tree, model, }: {
4
+ declare const HierarchicalTree: ({ height, tree, model, }: {
5
5
  height: number;
6
6
  tree: TreeNode;
7
7
  model: HierarchicalTrackSelectorModel;
8
8
  }) => React.JSX.Element;
9
- export default _default;
9
+ export default HierarchicalTree;
@@ -51,7 +51,7 @@ function getNodeData(node, nestingLevel, extra, selection) {
51
51
  // this is the main tree component for the hierarchical track selector in note:
52
52
  // in jbrowse-web the toolbar is position="sticky" which means the autosizer
53
53
  // includes the height of the toolbar, so we subtract the given offsets
54
- exports.default = (0, mobx_react_1.observer)(function HierarchicalTree({ height, tree, model, }) {
54
+ const HierarchicalTree = (0, mobx_react_1.observer)(function HierarchicalTree({ height, tree, model, }) {
55
55
  const { filterText, selection, view } = model;
56
56
  const treeRef = (0, react_1.useRef)(null);
57
57
  const session = (0, util_1.getSession)(model);
@@ -65,15 +65,13 @@ exports.default = (0, mobx_react_1.observer)(function HierarchicalTree({ height,
65
65
  drawerPosition,
66
66
  }), [view, model, drawerPosition, tree]);
67
67
  const treeWalker = (0, react_1.useCallback)(function* treeWalker() {
68
- for (let i = 0; i < tree.children.length; i++) {
69
- const r = tree.children[i];
70
- yield getNodeData(r, 0, extra, obj);
68
+ for (const child of tree.children) {
69
+ yield getNodeData(child, 0, extra, obj);
71
70
  }
72
71
  while (true) {
73
72
  // @ts-expect-error
74
73
  const parentMeta = yield;
75
- for (let i = 0; i < parentMeta.node.children.length; i++) {
76
- const curr = parentMeta.node.children[i];
74
+ for (const curr of parentMeta.node.children) {
77
75
  yield getNodeData(curr, parentMeta.nestingLevel + 1, extra, obj);
78
76
  }
79
77
  }
@@ -88,3 +86,4 @@ exports.default = (0, mobx_react_1.observer)(function HierarchicalTree({ height,
88
86
  return (react_1.default.createElement(react_1.default.Fragment, null,
89
87
  react_1.default.createElement(react_vtree_1.VariableSizeTree, { ref: treeRef, treeWalker: treeWalker, height: height }, TrackListNode_1.default)));
90
88
  });
89
+ exports.default = HierarchicalTree;