@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
|
@@ -10,11 +10,23 @@ function isAbsoluteUrl(url = '') {
|
|
|
10
10
|
return url.startsWith('/');
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* #stateModel AddTrackModel
|
|
15
|
+
*/
|
|
13
16
|
export default function f(pluginManager) {
|
|
14
17
|
return types
|
|
15
18
|
.model('AddTrackModel', {
|
|
19
|
+
/**
|
|
20
|
+
* #property
|
|
21
|
+
*/
|
|
16
22
|
id: ElementId,
|
|
23
|
+
/**
|
|
24
|
+
* #property
|
|
25
|
+
*/
|
|
17
26
|
type: types.literal('AddTrackWidget'),
|
|
27
|
+
/**
|
|
28
|
+
* #property
|
|
29
|
+
*/
|
|
18
30
|
view: types.safeReference(pluginManager.pluggableMstType('view', 'stateModel')),
|
|
19
31
|
})
|
|
20
32
|
.volatile(() => ({
|
|
@@ -30,33 +42,63 @@ export default function f(pluginManager) {
|
|
|
30
42
|
textIndexingConf: undefined,
|
|
31
43
|
}))
|
|
32
44
|
.actions(self => ({
|
|
45
|
+
/**
|
|
46
|
+
* #action
|
|
47
|
+
*/
|
|
33
48
|
setAdapterHint(obj) {
|
|
34
49
|
self.adapterHint = obj;
|
|
35
50
|
},
|
|
51
|
+
/**
|
|
52
|
+
* #action
|
|
53
|
+
*/
|
|
36
54
|
setTrackSource(str) {
|
|
37
55
|
self.trackSource = str;
|
|
38
56
|
},
|
|
57
|
+
/**
|
|
58
|
+
* #action
|
|
59
|
+
*/
|
|
39
60
|
setTextIndexingConf(conf) {
|
|
40
61
|
self.textIndexingConf = conf;
|
|
41
62
|
},
|
|
63
|
+
/**
|
|
64
|
+
* #action
|
|
65
|
+
*/
|
|
42
66
|
setTextIndexTrack(flag) {
|
|
43
67
|
self.textIndexTrack = flag;
|
|
44
68
|
},
|
|
69
|
+
/**
|
|
70
|
+
* #action
|
|
71
|
+
*/
|
|
45
72
|
setTrackData(obj) {
|
|
46
73
|
self.trackData = obj;
|
|
47
74
|
},
|
|
75
|
+
/**
|
|
76
|
+
* #action
|
|
77
|
+
*/
|
|
48
78
|
setIndexTrackData(obj) {
|
|
49
79
|
self.indexTrackData = obj;
|
|
50
80
|
},
|
|
81
|
+
/**
|
|
82
|
+
* #action
|
|
83
|
+
*/
|
|
51
84
|
setAssembly(str) {
|
|
52
85
|
self.altAssemblyName = str;
|
|
53
86
|
},
|
|
87
|
+
/**
|
|
88
|
+
* #action
|
|
89
|
+
*/
|
|
54
90
|
setTrackName(str) {
|
|
55
91
|
self.altTrackName = str;
|
|
56
92
|
},
|
|
93
|
+
/**
|
|
94
|
+
* #action
|
|
95
|
+
*/
|
|
57
96
|
setTrackType(str) {
|
|
58
97
|
self.altTrackType = str;
|
|
59
98
|
},
|
|
99
|
+
/**
|
|
100
|
+
* #action
|
|
101
|
+
*/
|
|
60
102
|
clearData() {
|
|
61
103
|
self.trackSource = '';
|
|
62
104
|
self.altTrackName = '';
|
|
@@ -70,16 +112,25 @@ export default function f(pluginManager) {
|
|
|
70
112
|
},
|
|
71
113
|
}))
|
|
72
114
|
.views(self => ({
|
|
115
|
+
/**
|
|
116
|
+
* #getter
|
|
117
|
+
*/
|
|
73
118
|
get trackAdapter() {
|
|
74
119
|
const { trackData, indexTrackData, adapterHint } = self;
|
|
75
120
|
return trackData
|
|
76
121
|
? guessAdapter(trackData, indexTrackData, adapterHint, self)
|
|
77
122
|
: undefined;
|
|
78
123
|
},
|
|
124
|
+
/**
|
|
125
|
+
* #getter
|
|
126
|
+
*/
|
|
79
127
|
get trackName() {
|
|
80
128
|
return (self.altTrackName ||
|
|
81
129
|
(self.trackData ? getFileName(self.trackData) : ''));
|
|
82
130
|
},
|
|
131
|
+
/**
|
|
132
|
+
* #getter
|
|
133
|
+
*/
|
|
83
134
|
get isFtp() {
|
|
84
135
|
var _a, _b;
|
|
85
136
|
const { trackData: track, indexTrackData: index } = self;
|
|
@@ -87,43 +138,70 @@ export default function f(pluginManager) {
|
|
|
87
138
|
// @ts-expect-error
|
|
88
139
|
(((_a = index === null || index === void 0 ? void 0 : index.uri) === null || _a === void 0 ? void 0 : _a.startsWith('ftp://')) || ((_b = track === null || track === void 0 ? void 0 : track.uri) === null || _b === void 0 ? void 0 : _b.startsWith('ftp://'))));
|
|
89
140
|
},
|
|
141
|
+
/**
|
|
142
|
+
* #getter
|
|
143
|
+
*/
|
|
90
144
|
get isRelativeTrackUrl() {
|
|
91
145
|
var _a;
|
|
92
146
|
// @ts-expect-error
|
|
93
147
|
const uri = (_a = self.trackData) === null || _a === void 0 ? void 0 : _a.uri;
|
|
94
148
|
return uri ? !isAbsoluteUrl(uri) : false;
|
|
95
149
|
},
|
|
150
|
+
/**
|
|
151
|
+
* #getter
|
|
152
|
+
*/
|
|
96
153
|
get isRelativeIndexUrl() {
|
|
97
154
|
var _a;
|
|
98
155
|
// @ts-expect-error
|
|
99
156
|
const uri = (_a = self.indexTrackData) === null || _a === void 0 ? void 0 : _a.uri;
|
|
100
157
|
return uri ? !isAbsoluteUrl(uri) : false;
|
|
101
158
|
},
|
|
159
|
+
/**
|
|
160
|
+
* #getter
|
|
161
|
+
*/
|
|
102
162
|
get isRelativeUrl() {
|
|
103
163
|
return this.isRelativeIndexUrl || this.isRelativeTrackUrl;
|
|
104
164
|
},
|
|
165
|
+
/**
|
|
166
|
+
* #getter
|
|
167
|
+
*/
|
|
105
168
|
get trackHttp() {
|
|
106
169
|
var _a, _b;
|
|
107
170
|
// @ts-expect-error
|
|
108
171
|
return (_b = (_a = self.trackData) === null || _a === void 0 ? void 0 : _a.uri) === null || _b === void 0 ? void 0 : _b.startsWith('http://');
|
|
109
172
|
},
|
|
173
|
+
/**
|
|
174
|
+
* #getter
|
|
175
|
+
*/
|
|
110
176
|
get indexHttp() {
|
|
111
177
|
var _a, _b;
|
|
112
178
|
// @ts-expect-error
|
|
113
179
|
return (_b = (_a = self.indexTrackData) === null || _a === void 0 ? void 0 : _a.uri) === null || _b === void 0 ? void 0 : _b.startsWith('http://');
|
|
114
180
|
},
|
|
181
|
+
/**
|
|
182
|
+
* #getter
|
|
183
|
+
*/
|
|
115
184
|
get wrongProtocol() {
|
|
116
185
|
return (window.location.protocol === 'https:' &&
|
|
117
186
|
(this.trackHttp || this.indexHttp));
|
|
118
187
|
},
|
|
188
|
+
/**
|
|
189
|
+
* #getter
|
|
190
|
+
*/
|
|
119
191
|
get unsupported() {
|
|
120
192
|
var _a;
|
|
121
193
|
return ((_a = this.trackAdapter) === null || _a === void 0 ? void 0 : _a.type) === UNSUPPORTED;
|
|
122
194
|
},
|
|
195
|
+
/**
|
|
196
|
+
* #getter
|
|
197
|
+
*/
|
|
123
198
|
get assembly() {
|
|
124
199
|
var _a;
|
|
125
200
|
return self.altAssemblyName || ((_a = self.view.assemblyNames) === null || _a === void 0 ? void 0 : _a[0]);
|
|
126
201
|
},
|
|
202
|
+
/**
|
|
203
|
+
* #getter
|
|
204
|
+
*/
|
|
127
205
|
get trackType() {
|
|
128
206
|
return (self.altTrackType ||
|
|
129
207
|
(this.trackAdapter
|
|
@@ -132,6 +210,9 @@ export default function f(pluginManager) {
|
|
|
132
210
|
},
|
|
133
211
|
}))
|
|
134
212
|
.views(self => ({
|
|
213
|
+
/**
|
|
214
|
+
* #getter
|
|
215
|
+
*/
|
|
135
216
|
get warningMessage() {
|
|
136
217
|
if (self.isFtp) {
|
|
137
218
|
return `Warning: JBrowse cannot access files using the ftp protocol`;
|
|
@@ -1,42 +1,23 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import { Badge
|
|
3
|
-
import { makeStyles } from 'tss-react/mui';
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Badge } from '@mui/material';
|
|
4
3
|
import { observer } from 'mobx-react';
|
|
5
|
-
import JBrowseMenu from '@jbrowse/core/ui/Menu';
|
|
6
4
|
import { getSession, getEnv } from '@jbrowse/core/util';
|
|
7
5
|
// icons
|
|
8
6
|
import ShoppingCartIcon from '@mui/icons-material/ShoppingCart';
|
|
9
|
-
|
|
10
|
-
searchBox: {
|
|
11
|
-
margin: theme.spacing(2),
|
|
12
|
-
},
|
|
13
|
-
menuIcon: {
|
|
14
|
-
marginRight: theme.spacing(1),
|
|
15
|
-
marginBottom: 0,
|
|
16
|
-
},
|
|
17
|
-
}));
|
|
7
|
+
import CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton';
|
|
18
8
|
const ShoppingCart = observer(function ({ model, }) {
|
|
19
|
-
const { classes } = useStyles();
|
|
20
9
|
const { selection } = model;
|
|
21
10
|
const { pluginManager } = getEnv(model);
|
|
22
11
|
const session = getSession(model);
|
|
23
|
-
const [selectionEl, setSelectionEl] = useState();
|
|
24
12
|
const items = pluginManager.evaluateExtensionPoint('TrackSelector-multiTrackMenuItems', [], { session });
|
|
25
|
-
return (React.createElement(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
...items.map(item => ({
|
|
35
|
-
...item,
|
|
36
|
-
...('onClick' in item
|
|
37
|
-
? { onClick: () => item.onClick(model) }
|
|
38
|
-
: {}),
|
|
39
|
-
})),
|
|
40
|
-
] })));
|
|
13
|
+
return selection.length ? (React.createElement(CascadingMenuButton, { menuItems: [
|
|
14
|
+
{ label: 'Clear', onClick: () => model.clearSelection() },
|
|
15
|
+
...items.map(item => ({
|
|
16
|
+
...item,
|
|
17
|
+
...('onClick' in item ? { onClick: () => item.onClick(model) } : {}),
|
|
18
|
+
})),
|
|
19
|
+
] },
|
|
20
|
+
React.createElement(Badge, { badgeContent: selection.length, color: "primary" },
|
|
21
|
+
React.createElement(ShoppingCartIcon, null)))) : null;
|
|
41
22
|
});
|
|
42
23
|
export default ShoppingCart;
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
2
|
+
import { HierarchicalTrackSelectorModel } from '../../model';
|
|
3
|
+
declare const FacetFilter: ({ column, vals, width, model, }: {
|
|
3
4
|
column: {
|
|
4
5
|
field: string;
|
|
5
6
|
};
|
|
6
7
|
vals: [string, number][];
|
|
7
8
|
width: number;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}) => void;
|
|
12
|
-
filters: Record<string, string[]>;
|
|
13
|
-
}): React.JSX.Element;
|
|
9
|
+
model: HierarchicalTrackSelectorModel;
|
|
10
|
+
}) => React.JSX.Element;
|
|
11
|
+
export default FacetFilter;
|
|
@@ -6,6 +6,7 @@ import ClearIcon from '@mui/icons-material/Clear';
|
|
|
6
6
|
import MinimizeIcon from '@mui/icons-material/Minimize';
|
|
7
7
|
import AddIcon from '@mui/icons-material/Add';
|
|
8
8
|
import { coarseStripHTML } from '@jbrowse/core/util';
|
|
9
|
+
import { observer } from 'mobx-react';
|
|
9
10
|
const useStyles = makeStyles()(theme => ({
|
|
10
11
|
facet: {
|
|
11
12
|
margin: 0,
|
|
@@ -24,22 +25,22 @@ function ExpandButton({ visible, onClick, }) {
|
|
|
24
25
|
return (React.createElement(Tooltip, { title: "Minimize/expand this facet filter" },
|
|
25
26
|
React.createElement(IconButton, { onClick: () => onClick(), size: "small" }, visible ? React.createElement(MinimizeIcon, null) : React.createElement(AddIcon, null))));
|
|
26
27
|
}
|
|
27
|
-
|
|
28
|
+
const FacetFilter = observer(function ({ column, vals, width, model, }) {
|
|
28
29
|
const { classes } = useStyles();
|
|
29
30
|
const [visible, setVisible] = useState(true);
|
|
31
|
+
const { faceted } = model;
|
|
32
|
+
const { filters } = faceted;
|
|
30
33
|
return (React.createElement(FormControl, { key: column.field, className: classes.facet, style: { width } },
|
|
31
34
|
React.createElement("div", { style: { display: 'flex' } },
|
|
32
35
|
React.createElement(Typography, null, column.field),
|
|
33
|
-
React.createElement(ClearButton, { onClick: () =>
|
|
36
|
+
React.createElement(ClearButton, { onClick: () => model.faceted.setFilter(column.field, []) }),
|
|
34
37
|
React.createElement(ExpandButton, { visible: visible, onClick: () => setVisible(!visible) })),
|
|
35
|
-
visible ? (React.createElement(Select, { multiple: true, native: true, className: classes.select, value: filters
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
.map(opt => opt.value),
|
|
42
|
-
});
|
|
38
|
+
visible ? (React.createElement(Select, { multiple: true, native: true, className: classes.select, value: filters.get(column.field) || [], onChange: event => {
|
|
39
|
+
faceted.setFilter(column.field,
|
|
40
|
+
// @ts-expect-error
|
|
41
|
+
[...event.target.options]
|
|
42
|
+
.filter(opt => opt.selected)
|
|
43
|
+
.map(opt => opt.value));
|
|
43
44
|
} }, vals
|
|
44
45
|
.sort((a, b) => a[0].localeCompare(b[0]))
|
|
45
46
|
.map(([name, count]) => (React.createElement("option", { key: name, value: name },
|
|
@@ -47,4 +48,5 @@ export default function FacetFilter({ column, vals, width, dispatch, filters, })
|
|
|
47
48
|
" (",
|
|
48
49
|
count,
|
|
49
50
|
")"))))) : null));
|
|
50
|
-
}
|
|
51
|
+
});
|
|
52
|
+
export default FacetFilter;
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
2
|
+
import { HierarchicalTrackSelectorModel } from '../../model';
|
|
3
|
+
declare const FacetFilters: ({ rows, columns, width, model, }: {
|
|
3
4
|
rows: Record<string, unknown>[];
|
|
4
|
-
filters: Record<string, string[]>;
|
|
5
5
|
columns: {
|
|
6
6
|
field: string;
|
|
7
7
|
}[];
|
|
8
|
-
dispatch: (arg: {
|
|
9
|
-
key: string;
|
|
10
|
-
val: string[];
|
|
11
|
-
}) => void;
|
|
12
8
|
width: number;
|
|
13
|
-
|
|
9
|
+
model: HierarchicalTrackSelectorModel;
|
|
10
|
+
}) => React.JSX.Element;
|
|
11
|
+
export default FacetFilters;
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import FacetFilter from './FacetFilter';
|
|
3
|
-
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
const FacetFilters = observer(function ({ rows, columns, width, model, }) {
|
|
4
5
|
var _a, _b;
|
|
6
|
+
const { faceted } = model;
|
|
7
|
+
const { filters } = faceted;
|
|
5
8
|
const facets = columns.slice(1);
|
|
6
9
|
const uniqs = new Map(facets.map(f => [f.field, new Map()]));
|
|
7
10
|
// this code "stages the facet filters" in order that the user has selected
|
|
8
11
|
// them, which relies on the js behavior that the order of the returned keys is
|
|
9
12
|
// related to the insertion order.
|
|
10
|
-
const filterKeys =
|
|
13
|
+
const filterKeys = faceted.filters.keys();
|
|
11
14
|
const facetKeys = facets.map(f => f.field);
|
|
12
15
|
const ret = new Set();
|
|
13
16
|
for (const entry of filterKeys) {
|
|
14
17
|
// give non-empty filters priority
|
|
15
|
-
if ((_a = filters
|
|
18
|
+
if ((_a = filters.get(entry)) === null || _a === void 0 ? void 0 : _a.length) {
|
|
16
19
|
ret.add(entry);
|
|
17
20
|
}
|
|
18
21
|
}
|
|
@@ -35,12 +38,13 @@ export default function FacetFilters({ rows, columns, dispatch, filters, width,
|
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
|
-
const filter = ((_b = filters
|
|
41
|
+
const filter = ((_b = filters.get(facet)) === null || _b === void 0 ? void 0 : _b.length)
|
|
42
|
+
? new Set(filters.get(facet))
|
|
43
|
+
: undefined;
|
|
39
44
|
currentRows = currentRows.filter(row => {
|
|
40
45
|
return filter !== undefined ? filter.has(row[facet]) : true;
|
|
41
46
|
});
|
|
42
47
|
}
|
|
43
|
-
return (React.createElement("div", null, facets.map(column => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
48
|
+
return (React.createElement("div", null, facets.map(column => (React.createElement(FacetFilter, { key: column.field, vals: [...uniqs.get(column.field)], column: column, width: width, model: model })))));
|
|
49
|
+
});
|
|
50
|
+
export default FacetFilters;
|
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { HierarchicalTrackSelectorModel } from '../../model';
|
|
3
|
-
export default function FacetedHeader({
|
|
4
|
-
setFilterText: (arg: string) => void;
|
|
5
|
-
setUseShoppingCart: (arg: boolean) => void;
|
|
6
|
-
setShowSparse: (arg: boolean) => void;
|
|
7
|
-
setShowFilters: (arg: boolean) => void;
|
|
8
|
-
setShowOptions: (arg: boolean) => void;
|
|
9
|
-
filterText: string;
|
|
10
|
-
showOptions: boolean;
|
|
11
|
-
useShoppingCart: boolean;
|
|
12
|
-
showSparse: boolean;
|
|
13
|
-
showFilters: boolean;
|
|
3
|
+
export default function FacetedHeader({ model, }: {
|
|
14
4
|
model: HierarchicalTrackSelectorModel;
|
|
15
5
|
}): React.JSX.Element;
|
|
@@ -6,14 +6,16 @@ import ClearIcon from '@mui/icons-material/Clear';
|
|
|
6
6
|
import MoreVert from '@mui/icons-material/MoreVert';
|
|
7
7
|
// locals
|
|
8
8
|
import ShoppingCart from '../ShoppingCart';
|
|
9
|
-
export default function FacetedHeader({
|
|
9
|
+
export default function FacetedHeader({ model, }) {
|
|
10
|
+
const { faceted } = model;
|
|
10
11
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
12
|
+
const { showOptions, showFilters, showSparse, useShoppingCart } = faceted;
|
|
11
13
|
return (React.createElement(React.Fragment, null,
|
|
12
14
|
React.createElement(Grid, { container: true, spacing: 4, alignItems: "center" },
|
|
13
15
|
React.createElement(Grid, { item: true },
|
|
14
|
-
React.createElement(TextField, { label: "Search...", value: filterText, onChange: event => setFilterText(event.target.value), InputProps: {
|
|
16
|
+
React.createElement(TextField, { label: "Search...", value: faceted.filterText, onChange: event => faceted.setFilterText(event.target.value), InputProps: {
|
|
15
17
|
endAdornment: (React.createElement(InputAdornment, { position: "end" },
|
|
16
|
-
React.createElement(IconButton, { onClick: () => setFilterText('') },
|
|
18
|
+
React.createElement(IconButton, { onClick: () => faceted.setFilterText('') },
|
|
17
19
|
React.createElement(ClearIcon, null)))),
|
|
18
20
|
} })),
|
|
19
21
|
React.createElement(Grid, { item: true },
|
|
@@ -27,25 +29,25 @@ export default function FacetedHeader({ setFilterText, setUseShoppingCart, setSh
|
|
|
27
29
|
}, menuItems: [
|
|
28
30
|
{
|
|
29
31
|
label: 'Add tracks to selection instead of turning them on/off',
|
|
30
|
-
onClick: () => setUseShoppingCart(!useShoppingCart),
|
|
32
|
+
onClick: () => faceted.setUseShoppingCart(!useShoppingCart),
|
|
31
33
|
type: 'checkbox',
|
|
32
34
|
checked: useShoppingCart,
|
|
33
35
|
},
|
|
34
36
|
{
|
|
35
37
|
label: 'Show sparse metadata columns',
|
|
36
|
-
onClick: () => setShowSparse(!showSparse),
|
|
38
|
+
onClick: () => faceted.setShowSparse(!showSparse),
|
|
37
39
|
checked: showSparse,
|
|
38
40
|
type: 'checkbox',
|
|
39
41
|
},
|
|
40
42
|
{
|
|
41
43
|
label: 'Show facet filters',
|
|
42
|
-
onClick: () => setShowFilters(!showFilters),
|
|
44
|
+
onClick: () => faceted.setShowFilters(!showFilters),
|
|
43
45
|
checked: showFilters,
|
|
44
46
|
type: 'checkbox',
|
|
45
47
|
},
|
|
46
48
|
{
|
|
47
49
|
label: 'Show extra table options',
|
|
48
|
-
onClick: () => setShowOptions(!showOptions),
|
|
50
|
+
onClick: () => faceted.setShowOptions(!showOptions),
|
|
49
51
|
checked: showOptions,
|
|
50
52
|
type: 'checkbox',
|
|
51
53
|
},
|