@jbrowse/plugin-data-management 2.8.0 → 2.10.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.
- package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +4 -8
- package/dist/AddTrackWidget/model.d.ts +81 -0
- package/dist/AddTrackWidget/model.js +81 -0
- package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +1 -1
- package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +11 -53
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +5 -7
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +12 -11
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.d.ts +5 -7
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +11 -8
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +1 -11
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +9 -7
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +40 -135
- package/dist/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.d.ts +12 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.js +59 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.d.ts +6 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.js +45 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +71 -46
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +5 -34
- package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +8 -3
- package/dist/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.d.ts +6 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.js +42 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +7 -6
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +9 -28
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.d.ts +12 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.js +50 -0
- package/dist/HierarchicalTrackSelectorWidget/components/util.d.ts +3 -0
- package/dist/HierarchicalTrackSelectorWidget/components/util.js +5 -1
- package/dist/HierarchicalTrackSelectorWidget/facetedModel.d.ts +128 -0
- package/dist/HierarchicalTrackSelectorWidget/facetedModel.js +206 -0
- package/dist/HierarchicalTrackSelectorWidget/facetedUtil.d.ts +2 -0
- package/dist/HierarchicalTrackSelectorWidget/{components/faceted/util.js → facetedUtil.js} +5 -1
- package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +17 -5
- package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.js +27 -21
- package/dist/HierarchicalTrackSelectorWidget/model.d.ts +193 -15
- package/dist/HierarchicalTrackSelectorWidget/model.js +209 -22
- package/dist/ucsc-trackhub/doConnect.d.ts +1 -0
- package/dist/ucsc-trackhub/doConnect.js +131 -0
- package/dist/ucsc-trackhub/model.d.ts +19 -2
- package/dist/ucsc-trackhub/model.js +16 -71
- package/dist/ucsc-trackhub/ucscTrackHub.d.ts +161 -4
- package/dist/ucsc-trackhub/ucscTrackHub.js +49 -166
- package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +4 -8
- package/esm/AddTrackWidget/model.d.ts +81 -0
- package/esm/AddTrackWidget/model.js +81 -0
- package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +1 -1
- package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +12 -31
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +5 -7
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +13 -11
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.d.ts +5 -7
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +12 -8
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +1 -11
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +9 -7
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +41 -113
- package/esm/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.d.ts +12 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.js +31 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.d.ts +6 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.js +40 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +71 -46
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +6 -12
- package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +8 -3
- package/esm/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.d.ts +6 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.js +37 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +7 -6
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +8 -27
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.d.ts +12 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.js +45 -0
- package/esm/HierarchicalTrackSelectorWidget/components/util.d.ts +3 -0
- package/esm/HierarchicalTrackSelectorWidget/components/util.js +5 -1
- package/esm/HierarchicalTrackSelectorWidget/facetedModel.d.ts +128 -0
- package/esm/HierarchicalTrackSelectorWidget/facetedModel.js +202 -0
- package/esm/HierarchicalTrackSelectorWidget/facetedUtil.d.ts +2 -0
- package/esm/HierarchicalTrackSelectorWidget/{components/faceted/util.js → facetedUtil.js} +3 -0
- package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +17 -5
- package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.js +27 -21
- package/esm/HierarchicalTrackSelectorWidget/model.d.ts +193 -15
- package/esm/HierarchicalTrackSelectorWidget/model.js +211 -24
- package/esm/ucsc-trackhub/doConnect.d.ts +1 -0
- package/esm/ucsc-trackhub/doConnect.js +127 -0
- package/esm/ucsc-trackhub/model.d.ts +19 -2
- package/esm/ucsc-trackhub/model.js +17 -72
- package/esm/ucsc-trackhub/ucscTrackHub.d.ts +161 -4
- package/esm/ucsc-trackhub/ucscTrackHub.js +48 -141
- package/package.json +3 -4
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +0 -1
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +0 -1
|
@@ -1,154 +1,55 @@
|
|
|
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 =
|
|
30
|
-
const material_1 = require("@mui/material");
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
31
7
|
const mobx_1 = require("mobx");
|
|
32
8
|
const mobx_react_1 = require("mobx-react");
|
|
33
9
|
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
34
10
|
const x_data_grid_1 = require("@mui/x-data-grid");
|
|
35
11
|
// jbrowse
|
|
36
|
-
const tracks_1 = require("@jbrowse/core/util/tracks");
|
|
37
12
|
const ui_1 = require("@jbrowse/core/ui");
|
|
38
13
|
const SanitizedHTML_1 = __importDefault(require("@jbrowse/core/ui/SanitizedHTML"));
|
|
39
|
-
const Menu_1 = __importDefault(require("@jbrowse/core/ui/Menu"));
|
|
40
14
|
const ResizeBar_1 = __importDefault(require("@jbrowse/core/ui/ResizeBar"));
|
|
41
15
|
const util_1 = require("@jbrowse/core/util");
|
|
42
|
-
const configuration_1 = require("@jbrowse/core/configuration");
|
|
43
16
|
const useResizeBar_1 = require("@jbrowse/core/ui/useResizeBar");
|
|
44
17
|
const mui_1 = require("tss-react/mui");
|
|
45
|
-
// icons
|
|
46
|
-
const MoreHoriz_1 = __importDefault(require("@mui/icons-material/MoreHoriz"));
|
|
47
|
-
const util_2 = require("../../util");
|
|
48
18
|
const FacetedHeader_1 = __importDefault(require("./FacetedHeader"));
|
|
49
19
|
const FacetFilters_1 = __importDefault(require("./FacetFilters"));
|
|
50
|
-
const
|
|
51
|
-
const nonMetadataKeys = ['category', 'adapter', 'description'];
|
|
20
|
+
const TrackLabelMenu_1 = __importDefault(require("../tree/TrackLabelMenu"));
|
|
52
21
|
const useStyles = (0, mui_1.makeStyles)()({
|
|
53
22
|
cell: {
|
|
54
23
|
whiteSpace: 'nowrap',
|
|
55
24
|
overflow: 'hidden',
|
|
56
25
|
textOverflow: 'ellipsis',
|
|
57
26
|
},
|
|
27
|
+
resizeHandle: {
|
|
28
|
+
marginLeft: 5,
|
|
29
|
+
background: 'grey',
|
|
30
|
+
width: 5,
|
|
31
|
+
},
|
|
58
32
|
});
|
|
59
33
|
const frac = 0.75;
|
|
60
34
|
const FacetedSelector = (0, mobx_react_1.observer)(function FacetedSelector({ model, }) {
|
|
61
|
-
var _a
|
|
35
|
+
var _a;
|
|
62
36
|
const { classes } = useStyles();
|
|
63
|
-
const { view, selection } = model;
|
|
37
|
+
const { view, selection, faceted } = model;
|
|
38
|
+
const { rows, panelWidth, showFilters, useShoppingCart, showOptions, filteredRows, filteredNonMetadataKeys, filteredMetadataKeys, visible, widths, } = faceted;
|
|
64
39
|
const { pluginManager } = (0, util_1.getEnv)(model);
|
|
65
40
|
const { ref, scrollLeft } = (0, useResizeBar_1.useResizeBar)();
|
|
66
|
-
const [filterText, setFilterText] = (0, react_1.useState)('');
|
|
67
|
-
const [showOptions, setShowOptions] = (0, util_1.useLocalStorage)('facet-showTableOptions', false);
|
|
68
|
-
const [info, setInfo] = (0, react_1.useState)();
|
|
69
|
-
const [useShoppingCart, setUseShoppingCart] = (0, react_1.useState)(false);
|
|
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);
|
|
73
|
-
const session = (0, util_1.getSession)(model);
|
|
74
|
-
const filterDebounced = (0, util_1.useDebounce)(filterText, 400);
|
|
75
41
|
const tracks = view.tracks;
|
|
76
|
-
const [filters, dispatch] = (0, react_1.useReducer)((state, update) => ({ ...state, [update.key]: update.val }), {});
|
|
77
|
-
const rows = (0, react_1.useMemo)(() => {
|
|
78
|
-
// metadata is spread onto the object for easier access and sorting
|
|
79
|
-
// by the mui data grid (it's unable to sort by nested objects)
|
|
80
|
-
return model.trackConfigurations
|
|
81
|
-
.filter(conf => (0, util_2.matches)(filterDebounced, conf, session))
|
|
82
|
-
.map(track => {
|
|
83
|
-
var _a, _b;
|
|
84
|
-
const metadata = (0, configuration_1.readConfObject)(track, 'metadata');
|
|
85
|
-
return {
|
|
86
|
-
id: track.trackId,
|
|
87
|
-
conf: track,
|
|
88
|
-
name: (0, tracks_1.getTrackName)(track, session),
|
|
89
|
-
category: (_a = (0, configuration_1.readConfObject)(track, 'category')) === null || _a === void 0 ? void 0 : _a.join(', '),
|
|
90
|
-
adapter: (_b = (0, configuration_1.readConfObject)(track, 'adapter')) === null || _b === void 0 ? void 0 : _b.type,
|
|
91
|
-
description: (0, configuration_1.readConfObject)(track, 'description'),
|
|
92
|
-
metadata,
|
|
93
|
-
...metadata,
|
|
94
|
-
};
|
|
95
|
-
});
|
|
96
|
-
}, [model, filterDebounced, session]);
|
|
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
|
|
99
|
-
? true
|
|
100
|
-
: rows.map(r => r.metadata[f]).filter(f => !!f).length > 5), [showSparse, rows]);
|
|
101
|
-
const fields = (0, react_1.useMemo)(() => ['name', ...filteredNonMetadataKeys, ...filteredMetadataKeys], [filteredNonMetadataKeys, filteredMetadataKeys]);
|
|
102
|
-
const [widths, setWidths] = (0, react_1.useState)({
|
|
103
|
-
name: (0, util_1.measureGridWidth)(rows.map(r => r.name), { maxWidth: 500, stripHTML: true }) + 15,
|
|
104
|
-
...Object.fromEntries(filteredNonMetadataKeys.map(e => [
|
|
105
|
-
e,
|
|
106
|
-
(0, util_1.measureGridWidth)(rows.map(r => r[e]), { maxWidth: 400, stripHTML: true }),
|
|
107
|
-
])),
|
|
108
|
-
...Object.fromEntries(filteredMetadataKeys.map(e => [
|
|
109
|
-
e,
|
|
110
|
-
(0, util_1.measureGridWidth)(rows.map(r => r.metadata[e]), { maxWidth: 400, stripHTML: true }),
|
|
111
|
-
])),
|
|
112
|
-
});
|
|
113
|
-
const [visible, setVisible] = (0, react_1.useState)(Object.fromEntries(fields.map(c => [c, true])));
|
|
114
|
-
(0, react_1.useEffect)(() => {
|
|
115
|
-
setVisible(visible => ({
|
|
116
|
-
...Object.fromEntries(fields.map(c => [c, true])),
|
|
117
|
-
...visible,
|
|
118
|
-
}));
|
|
119
|
-
}, [fields]);
|
|
120
|
-
(0, react_1.useEffect)(() => {
|
|
121
|
-
setWidths(widths => ({
|
|
122
|
-
name: widths.name,
|
|
123
|
-
...Object.fromEntries(filteredNonMetadataKeys
|
|
124
|
-
.filter(f => visible[f])
|
|
125
|
-
.map(e => [
|
|
126
|
-
e,
|
|
127
|
-
(0, util_1.measureGridWidth)(rows.map(r => r[e]), { stripHTML: true, maxWidth: 400 }),
|
|
128
|
-
])),
|
|
129
|
-
...Object.fromEntries(filteredMetadataKeys
|
|
130
|
-
.filter(f => visible[f])
|
|
131
|
-
.map(e => [
|
|
132
|
-
e,
|
|
133
|
-
(0, util_1.measureGridWidth)(rows.map(r => r.metadata[e]), { stripHTML: true, maxWidth: 400 }),
|
|
134
|
-
])),
|
|
135
|
-
}));
|
|
136
|
-
}, [filteredMetadataKeys, visible, filteredNonMetadataKeys, showSparse, rows]);
|
|
137
42
|
const widthsDebounced = (0, util_1.useDebounce)(widths, 200);
|
|
138
43
|
const columns = [
|
|
139
44
|
{
|
|
140
45
|
field: 'name',
|
|
141
46
|
hideable: false,
|
|
142
47
|
renderCell: (params) => {
|
|
143
|
-
const { value,
|
|
48
|
+
const { value, row } = params;
|
|
49
|
+
const { id, conf } = row;
|
|
144
50
|
return (react_1.default.createElement("div", { className: classes.cell },
|
|
145
51
|
react_1.default.createElement(SanitizedHTML_1.default, { html: value }),
|
|
146
|
-
react_1.default.createElement(
|
|
147
|
-
target: e.currentTarget,
|
|
148
|
-
id: id,
|
|
149
|
-
conf: row.conf,
|
|
150
|
-
}) },
|
|
151
|
-
react_1.default.createElement(MoreHoriz_1.default, null))));
|
|
52
|
+
react_1.default.createElement(TrackLabelMenu_1.default, { id: id, conf: conf, trackId: id, model: model })));
|
|
152
53
|
},
|
|
153
54
|
width: (_a = widthsDebounced.name) !== null && _a !== void 0 ? _a : 100,
|
|
154
55
|
},
|
|
@@ -158,34 +59,30 @@ const FacetedSelector = (0, mobx_react_1.observer)(function FacetedSelector({ mo
|
|
|
158
59
|
field: e,
|
|
159
60
|
width: (_a = widthsDebounced[e]) !== null && _a !== void 0 ? _a : 100,
|
|
160
61
|
renderCell: (params) => {
|
|
161
|
-
const
|
|
162
|
-
return
|
|
62
|
+
const val = params.value;
|
|
63
|
+
return val ? react_1.default.createElement(SanitizedHTML_1.default, { className: classes.cell, html: val }) : '';
|
|
163
64
|
},
|
|
164
65
|
});
|
|
165
66
|
}),
|
|
166
67
|
...filteredMetadataKeys.map(e => {
|
|
167
68
|
var _a;
|
|
168
69
|
return ({
|
|
169
|
-
field: e
|
|
170
|
-
|
|
70
|
+
field: `metadata.${e}`,
|
|
71
|
+
headerName: ['name', ...filteredNonMetadataKeys].includes(e)
|
|
72
|
+
? `${e} (from metadata)`
|
|
73
|
+
: e,
|
|
74
|
+
width: (_a = widthsDebounced['metadata.' + e]) !== null && _a !== void 0 ? _a : 100,
|
|
75
|
+
valueGetter: (params) => params.row.metadata[e],
|
|
171
76
|
renderCell: (params) => {
|
|
172
|
-
const
|
|
173
|
-
return
|
|
77
|
+
const val = params.row.metadata[e];
|
|
78
|
+
return val ? react_1.default.createElement(SanitizedHTML_1.default, { className: classes.cell, html: val }) : '';
|
|
174
79
|
},
|
|
175
80
|
});
|
|
176
81
|
}),
|
|
177
82
|
];
|
|
178
83
|
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])));
|
|
183
84
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
184
|
-
|
|
185
|
-
callback();
|
|
186
|
-
setInfo(undefined);
|
|
187
|
-
}, open: !!info, onClose: () => setInfo(undefined) })) : null,
|
|
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 }),
|
|
85
|
+
react_1.default.createElement(FacetedHeader_1.default, { model: model }),
|
|
189
86
|
react_1.default.createElement("div", { ref: ref, style: {
|
|
190
87
|
display: 'flex',
|
|
191
88
|
overflow: 'hidden',
|
|
@@ -196,11 +93,11 @@ const FacetedSelector = (0, mobx_react_1.observer)(function FacetedSelector({ mo
|
|
|
196
93
|
height: window.innerHeight * frac,
|
|
197
94
|
width: window.innerWidth * frac - (showFilters ? panelWidth : 0),
|
|
198
95
|
} },
|
|
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) => [
|
|
96
|
+
react_1.default.createElement(ResizeBar_1.default, { checkbox: true, widths: Object.values(widths).map(f => f !== null && f !== void 0 ? f : 100), setWidths: newWidths => faceted.setWidths(Object.fromEntries(Object.entries(widths).map((entry, idx) => [
|
|
200
97
|
entry[0],
|
|
201
98
|
newWidths[idx],
|
|
202
99
|
]))), scrollLeft: scrollLeft }),
|
|
203
|
-
react_1.default.createElement(x_data_grid_1.DataGrid, { rows: filteredRows, columnVisibilityModel: visible, onColumnVisibilityModelChange:
|
|
100
|
+
react_1.default.createElement(x_data_grid_1.DataGrid, { rows: filteredRows, columnVisibilityModel: visible, onColumnVisibilityModelChange: n => faceted.setVisible(n), columnHeaderHeight: 35, checkboxSelection: true, disableRowSelectionOnClick: true, keepNonExistentRowsSelected: true, onRowSelectionModelChange: userSelectedIds => {
|
|
204
101
|
if (!useShoppingCart) {
|
|
205
102
|
const a1 = shownTrackIds;
|
|
206
103
|
const a2 = new Set(userSelectedIds);
|
|
@@ -209,27 +106,35 @@ const FacetedSelector = (0, mobx_react_1.observer)(function FacetedSelector({ mo
|
|
|
209
106
|
(0, mobx_1.transaction)(() => {
|
|
210
107
|
;
|
|
211
108
|
[...a1].filter(x => !a2.has(x)).map(t => view.hideTrack(t));
|
|
212
|
-
[...a2]
|
|
109
|
+
[...a2]
|
|
110
|
+
.filter(x => !a1.has(x))
|
|
111
|
+
.map(t => {
|
|
112
|
+
view.showTrack(t);
|
|
113
|
+
model.addToRecentlyUsed(t);
|
|
114
|
+
});
|
|
213
115
|
});
|
|
214
116
|
}
|
|
215
117
|
else {
|
|
216
118
|
const root = (0, mobx_state_tree_1.getRoot)(model);
|
|
217
119
|
const schema = pluginManager.pluggableConfigSchemaType('track');
|
|
218
|
-
|
|
219
|
-
model.setSelection(tracks);
|
|
120
|
+
model.setSelection(userSelectedIds.map(id => (0, mobx_state_tree_1.resolveIdentifier)(schema, root, id)));
|
|
220
121
|
}
|
|
221
122
|
}, rowSelectionModel: useShoppingCart
|
|
222
123
|
? selection.map(s => s.trackId)
|
|
223
124
|
: [...shownTrackIds], slots: { toolbar: showOptions ? x_data_grid_1.GridToolbar : null }, slotProps: {
|
|
224
|
-
toolbar: {
|
|
125
|
+
toolbar: {
|
|
126
|
+
printOptions: {
|
|
127
|
+
disableToolbarButton: true,
|
|
128
|
+
},
|
|
129
|
+
},
|
|
225
130
|
}, columns: columns, rowHeight: 25 })),
|
|
226
131
|
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),
|
|
132
|
+
react_1.default.createElement(ui_1.ResizeHandle, { vertical: true, onDrag: dist => faceted.setPanelWidth(panelWidth - dist), className: classes.resizeHandle }),
|
|
228
133
|
react_1.default.createElement("div", { style: {
|
|
229
134
|
width: panelWidth,
|
|
230
135
|
overflowY: 'auto',
|
|
231
136
|
overflowX: 'hidden',
|
|
232
137
|
} },
|
|
233
|
-
react_1.default.createElement(FacetFilters_1.default, { width: panelWidth - 10, rows: rows, columns: columns
|
|
138
|
+
react_1.default.createElement(FacetFilters_1.default, { model: model, width: panelWidth - 10, rows: rows, columns: columns })))) : null)));
|
|
234
139
|
});
|
|
235
140
|
exports.default = FacetedSelector;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AnyConfigurationModel } from '@jbrowse/core/configuration';
|
|
3
|
+
import { MenuItem } from '@jbrowse/core/ui/Menu';
|
|
4
|
+
import { HierarchicalTrackSelectorModel } from '../../model';
|
|
5
|
+
declare const DropdownTrackSelector: ({ model, tracks, extraMenuItems, children, onClick, }: {
|
|
6
|
+
model: HierarchicalTrackSelectorModel;
|
|
7
|
+
tracks: AnyConfigurationModel[];
|
|
8
|
+
extraMenuItems: MenuItem[];
|
|
9
|
+
onClick?: (() => void) | undefined;
|
|
10
|
+
children: React.ReactElement;
|
|
11
|
+
}) => React.JSX.Element | null;
|
|
12
|
+
export default DropdownTrackSelector;
|
|
@@ -0,0 +1,59 @@
|
|
|
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 mobx_react_1 = require("mobx-react");
|
|
31
|
+
const CascadingMenuButton_1 = __importDefault(require("@jbrowse/core/ui/CascadingMenuButton"));
|
|
32
|
+
const SanitizedHTML_1 = __importDefault(require("@jbrowse/core/ui/SanitizedHTML"));
|
|
33
|
+
const tracks_1 = require("@jbrowse/core/util/tracks");
|
|
34
|
+
const util_1 = require("@jbrowse/core/util");
|
|
35
|
+
const TrackLabelMenu_1 = __importDefault(require("./TrackLabelMenu"));
|
|
36
|
+
const DropdownTrackSelector = (0, mobx_react_1.observer)(function ({ model, tracks, extraMenuItems, children, onClick, }) {
|
|
37
|
+
const { view } = model;
|
|
38
|
+
const [open, setOpen] = (0, react_1.useState)(false);
|
|
39
|
+
const session = (0, util_1.getSession)(model);
|
|
40
|
+
return view ? (react_1.default.createElement(CascadingMenuButton_1.default, { closeAfterItemClick: false, onClick: onClick, menuItems: [
|
|
41
|
+
...tracks.map(t => ({
|
|
42
|
+
type: 'checkbox',
|
|
43
|
+
label: (react_1.default.createElement(react_1.default.Fragment, null,
|
|
44
|
+
react_1.default.createElement(SanitizedHTML_1.default, { html: (0, tracks_1.getTrackName)(t, session) }),
|
|
45
|
+
' ',
|
|
46
|
+
react_1.default.createElement(TrackLabelMenu_1.default, { id: t.trackId, trackId: t.trackId, model: model, conf: t, setOpen: setOpen, stopPropagation: true }))),
|
|
47
|
+
checked: view.tracks.some((f) => f.configuration === t),
|
|
48
|
+
onClick: () => {
|
|
49
|
+
if (!open) {
|
|
50
|
+
if (model.view.toggleTrack(t.trackId)) {
|
|
51
|
+
model.addToRecentlyUsed(t.trackId);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
})),
|
|
56
|
+
...extraMenuItems,
|
|
57
|
+
] }, children)) : null;
|
|
58
|
+
});
|
|
59
|
+
exports.default = DropdownTrackSelector;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
7
|
+
const material_1 = require("@mui/material");
|
|
8
|
+
const mobx_react_1 = require("mobx-react");
|
|
9
|
+
const mui_1 = require("tss-react/mui");
|
|
10
|
+
// icons
|
|
11
|
+
const Grade_1 = __importDefault(require("@mui/icons-material/Grade"));
|
|
12
|
+
const DropdownTrackSelector_1 = __importDefault(require("./DropdownTrackSelector"));
|
|
13
|
+
const useStyles = (0, mui_1.makeStyles)()({
|
|
14
|
+
smallBadge: {
|
|
15
|
+
height: 14,
|
|
16
|
+
},
|
|
17
|
+
margin: {
|
|
18
|
+
marginRight: 10,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
const FavoriteTracks = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
22
|
+
const { classes } = useStyles();
|
|
23
|
+
const { view, favoriteTracks } = model;
|
|
24
|
+
return view ? (react_1.default.createElement(DropdownTrackSelector_1.default, { onClick: () => model.setFavoritesCounter(0), tracks: favoriteTracks, model: model, extraMenuItems: favoriteTracks.length
|
|
25
|
+
? [
|
|
26
|
+
{ type: 'divider' },
|
|
27
|
+
{
|
|
28
|
+
label: 'Clear favorites',
|
|
29
|
+
onClick: () => model.clearFavorites(),
|
|
30
|
+
},
|
|
31
|
+
]
|
|
32
|
+
: [
|
|
33
|
+
{
|
|
34
|
+
label: 'No favorite tracks yet',
|
|
35
|
+
onClick: () => { },
|
|
36
|
+
},
|
|
37
|
+
] },
|
|
38
|
+
react_1.default.createElement(material_1.Tooltip, { title: "Favorite tracks" },
|
|
39
|
+
react_1.default.createElement(material_1.Badge, { classes: { badge: classes.smallBadge }, color: "secondary", anchorOrigin: {
|
|
40
|
+
vertical: 'bottom',
|
|
41
|
+
horizontal: 'right',
|
|
42
|
+
}, className: classes.margin, badgeContent: model.favoritesCounter },
|
|
43
|
+
react_1.default.createElement(Grade_1.default, null))))) : null;
|
|
44
|
+
});
|
|
45
|
+
exports.default = FavoriteTracks;
|
|
@@ -33,6 +33,8 @@ const configuration_1 = require("@jbrowse/core/configuration");
|
|
|
33
33
|
const CascadingMenuButton_1 = __importDefault(require("@jbrowse/core/ui/CascadingMenuButton"));
|
|
34
34
|
// icons
|
|
35
35
|
const Menu_1 = __importDefault(require("@mui/icons-material/Menu"));
|
|
36
|
+
// lazies
|
|
37
|
+
const FacetedDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../faceted/FacetedDialog'))));
|
|
36
38
|
// lazy components
|
|
37
39
|
const CloseConnectionDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../dialogs/CloseConnectionDialog'))));
|
|
38
40
|
const DeleteConnectionDlg = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../dialogs/DeleteConnectionDialog'))));
|
|
@@ -44,6 +46,7 @@ const HamburgerMenu = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
|
44
46
|
const [deleteDlgDetails, setDeleteDlgDetails] = (0, react_1.useState)();
|
|
45
47
|
const [connectionToggleOpen, setConnectionToggleOpen] = (0, react_1.useState)(false);
|
|
46
48
|
const [connectionManagerOpen, setConnectionManagerOpen] = (0, react_1.useState)(false);
|
|
49
|
+
const [facetedOpen, setFacetedOpen] = (0, react_1.useState)(false);
|
|
47
50
|
function breakConnection(connectionConf, deletingConnection) {
|
|
48
51
|
var _a;
|
|
49
52
|
const name = (0, configuration_1.readConfObject)(connectionConf, 'name');
|
|
@@ -68,6 +71,12 @@ const HamburgerMenu = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
|
68
71
|
}
|
|
69
72
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
70
73
|
react_1.default.createElement(CascadingMenuButton_1.default, { menuItems: [
|
|
74
|
+
{
|
|
75
|
+
label: 'Open faceted track selector',
|
|
76
|
+
onClick: () => {
|
|
77
|
+
setFacetedOpen(true);
|
|
78
|
+
},
|
|
79
|
+
},
|
|
71
80
|
...((0, util_1.isSessionWithAddTracks)(session)
|
|
72
81
|
? [
|
|
73
82
|
{
|
|
@@ -82,59 +91,74 @@ const HamburgerMenu = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
|
82
91
|
},
|
|
83
92
|
]
|
|
84
93
|
: []),
|
|
85
|
-
|
|
86
|
-
|
|
94
|
+
{
|
|
95
|
+
label: 'Connections...',
|
|
96
|
+
subMenu: [
|
|
97
|
+
...((0, util_1.isSessionModelWithConnections)(session)
|
|
98
|
+
? [
|
|
99
|
+
{
|
|
100
|
+
label: 'Turn on/off connections...',
|
|
101
|
+
onClick: () => setConnectionToggleOpen(true),
|
|
102
|
+
},
|
|
103
|
+
]
|
|
104
|
+
: []),
|
|
105
|
+
...((0, util_1.isSessionModelWithConnectionEditing)(session)
|
|
106
|
+
? [
|
|
107
|
+
{
|
|
108
|
+
label: 'Add connection...',
|
|
109
|
+
onClick: () => {
|
|
110
|
+
if ((0, util_1.isSessionModelWithWidgets)(session)) {
|
|
111
|
+
session.showWidget(session.addWidget('AddConnectionWidget', 'addConnectionWidget'));
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
label: 'Delete connections...',
|
|
117
|
+
onClick: () => setConnectionManagerOpen(true),
|
|
118
|
+
},
|
|
119
|
+
]
|
|
120
|
+
: []),
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
label: 'Sort...',
|
|
125
|
+
type: 'subMenu',
|
|
126
|
+
subMenu: [
|
|
87
127
|
{
|
|
88
|
-
label: '
|
|
89
|
-
|
|
128
|
+
label: 'Sort tracks by name',
|
|
129
|
+
type: 'checkbox',
|
|
130
|
+
checked: model.activeSortTrackNames,
|
|
131
|
+
onClick: () => model.setSortTrackNames(!model.activeSortTrackNames),
|
|
90
132
|
},
|
|
91
|
-
]
|
|
92
|
-
: []),
|
|
93
|
-
...((0, util_1.isSessionModelWithConnectionEditing)(session)
|
|
94
|
-
? [
|
|
95
133
|
{
|
|
96
|
-
label: '
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
},
|
|
134
|
+
label: 'Sort categories by name',
|
|
135
|
+
type: 'checkbox',
|
|
136
|
+
checked: model.activeSortCategories,
|
|
137
|
+
onClick: () => model.setSortCategories(!model.activeSortCategories),
|
|
102
138
|
},
|
|
103
|
-
|
|
104
|
-
label: 'Delete connections...',
|
|
105
|
-
onClick: () => setConnectionManagerOpen(true),
|
|
106
|
-
},
|
|
107
|
-
]
|
|
108
|
-
: []),
|
|
109
|
-
{ type: 'divider' },
|
|
110
|
-
{
|
|
111
|
-
label: 'Sort tracks by name',
|
|
112
|
-
type: 'checkbox',
|
|
113
|
-
checked: model.activeSortTrackNames,
|
|
114
|
-
onClick: () => model.setSortTrackNames(!model.activeSortTrackNames),
|
|
139
|
+
],
|
|
115
140
|
},
|
|
116
141
|
{
|
|
117
|
-
label: '
|
|
118
|
-
type: '
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
142
|
+
label: 'Collapse...',
|
|
143
|
+
type: 'subMenu',
|
|
144
|
+
subMenu: [
|
|
145
|
+
...(model.hasAnySubcategories
|
|
146
|
+
? [
|
|
147
|
+
{
|
|
148
|
+
label: 'Collapse subcategories',
|
|
149
|
+
onClick: () => model.collapseSubCategories(),
|
|
150
|
+
},
|
|
151
|
+
]
|
|
152
|
+
: []),
|
|
125
153
|
{
|
|
126
|
-
label: 'Collapse
|
|
127
|
-
onClick: () => model.
|
|
154
|
+
label: 'Collapse top-level categories',
|
|
155
|
+
onClick: () => model.collapseTopLevelCategories(),
|
|
128
156
|
},
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
label: 'Expand all categories',
|
|
137
|
-
onClick: () => model.expandAllCategories(),
|
|
157
|
+
{
|
|
158
|
+
label: 'Expand all categories',
|
|
159
|
+
onClick: () => model.expandAllCategories(),
|
|
160
|
+
},
|
|
161
|
+
],
|
|
138
162
|
},
|
|
139
163
|
] },
|
|
140
164
|
react_1.default.createElement(Menu_1.default, null)),
|
|
@@ -142,6 +166,7 @@ const HamburgerMenu = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
|
142
166
|
modalInfo ? (react_1.default.createElement(CloseConnectionDlg, { modalInfo: modalInfo, onClose: () => setModalInfo(undefined) })) : null,
|
|
143
167
|
deleteDlgDetails ? (react_1.default.createElement(DeleteConnectionDlg, { handleClose: () => setDeleteDlgDetails(undefined), deleteDialogDetails: deleteDlgDetails, session: session })) : null,
|
|
144
168
|
connectionManagerOpen ? (react_1.default.createElement(ManageConnectionsDlg, { handleClose: () => setConnectionManagerOpen(false), breakConnection: breakConnection, session: session })) : null,
|
|
145
|
-
connectionToggleOpen ? (react_1.default.createElement(ToggleConnectionsDlg, { handleClose: () => setConnectionToggleOpen(false), session: session, breakConnection: breakConnection })) : null
|
|
169
|
+
connectionToggleOpen ? (react_1.default.createElement(ToggleConnectionsDlg, { handleClose: () => setConnectionToggleOpen(false), session: session, breakConnection: breakConnection })) : null,
|
|
170
|
+
facetedOpen ? (react_1.default.createElement(FacetedDialog, { handleClose: () => setFacetedOpen(false), model: model })) : null)));
|
|
146
171
|
});
|
|
147
172
|
exports.default = HamburgerMenu;
|
|
@@ -1,32 +1,9 @@
|
|
|
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 =
|
|
6
|
+
const react_1 = __importDefault(require("react"));
|
|
30
7
|
const material_1 = require("@mui/material");
|
|
31
8
|
const mui_1 = require("tss-react/mui");
|
|
32
9
|
const mobx_react_1 = require("mobx-react");
|
|
@@ -34,16 +11,12 @@ const mobx_react_1 = require("mobx-react");
|
|
|
34
11
|
const Clear_1 = __importDefault(require("@mui/icons-material/Clear"));
|
|
35
12
|
const HamburgerMenu_1 = __importDefault(require("./HamburgerMenu"));
|
|
36
13
|
const ShoppingCart_1 = __importDefault(require("../ShoppingCart"));
|
|
37
|
-
|
|
38
|
-
const
|
|
14
|
+
const FavoriteTracks_1 = __importDefault(require("./FavoriteTracks"));
|
|
15
|
+
const RecentlyUsedTracks_1 = __importDefault(require("./RecentlyUsedTracks"));
|
|
39
16
|
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
40
17
|
searchBox: {
|
|
41
18
|
margin: theme.spacing(2),
|
|
42
19
|
},
|
|
43
|
-
menuIcon: {
|
|
44
|
-
marginRight: theme.spacing(1),
|
|
45
|
-
marginBottom: 0,
|
|
46
|
-
},
|
|
47
20
|
}));
|
|
48
21
|
const SearchTracksTextField = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
49
22
|
const { filterText } = model;
|
|
@@ -55,14 +28,12 @@ const SearchTracksTextField = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
|
55
28
|
} }));
|
|
56
29
|
});
|
|
57
30
|
const HierarchicalTrackSelectorHeader = (0, mobx_react_1.observer)(function ({ model, setHeaderHeight, }) {
|
|
58
|
-
const { classes } = useStyles();
|
|
59
|
-
const [facetedOpen, setFacetedOpen] = (0, react_1.useState)(false);
|
|
60
31
|
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" },
|
|
61
32
|
react_1.default.createElement("div", { style: { display: 'flex' } },
|
|
62
33
|
react_1.default.createElement(HamburgerMenu_1.default, { model: model }),
|
|
63
34
|
react_1.default.createElement(ShoppingCart_1.default, { model: model }),
|
|
64
35
|
react_1.default.createElement(SearchTracksTextField, { model: model }),
|
|
65
|
-
react_1.default.createElement(
|
|
66
|
-
|
|
36
|
+
react_1.default.createElement(RecentlyUsedTracks_1.default, { model: model }),
|
|
37
|
+
react_1.default.createElement(FavoriteTracks_1.default, { model: model }))));
|
|
67
38
|
});
|
|
68
39
|
exports.default = HierarchicalTrackSelectorHeader;
|