@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.
Files changed (85) hide show
  1. package/dist/AddTrackWidget/components/DefaultAddTrackWorkflow.js +4 -8
  2. package/dist/AddTrackWidget/model.d.ts +81 -0
  3. package/dist/AddTrackWidget/model.js +81 -0
  4. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +1 -1
  5. package/dist/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +11 -53
  6. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +5 -7
  7. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +12 -11
  8. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.d.ts +5 -7
  9. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +11 -8
  10. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +1 -11
  11. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +9 -7
  12. package/dist/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +40 -135
  13. package/dist/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.d.ts +12 -0
  14. package/dist/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.js +59 -0
  15. package/dist/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.d.ts +6 -0
  16. package/dist/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.js +45 -0
  17. package/dist/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +71 -46
  18. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +5 -34
  19. package/dist/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +8 -3
  20. package/dist/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.d.ts +6 -0
  21. package/dist/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.js +42 -0
  22. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +7 -6
  23. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +9 -28
  24. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.d.ts +12 -0
  25. package/dist/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.js +50 -0
  26. package/dist/HierarchicalTrackSelectorWidget/components/util.d.ts +3 -0
  27. package/dist/HierarchicalTrackSelectorWidget/components/util.js +5 -1
  28. package/dist/HierarchicalTrackSelectorWidget/facetedModel.d.ts +128 -0
  29. package/dist/HierarchicalTrackSelectorWidget/facetedModel.js +206 -0
  30. package/dist/HierarchicalTrackSelectorWidget/facetedUtil.d.ts +2 -0
  31. package/dist/HierarchicalTrackSelectorWidget/{components/faceted/util.js → facetedUtil.js} +5 -1
  32. package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +17 -5
  33. package/dist/HierarchicalTrackSelectorWidget/generateHierarchy.js +27 -21
  34. package/dist/HierarchicalTrackSelectorWidget/model.d.ts +193 -15
  35. package/dist/HierarchicalTrackSelectorWidget/model.js +209 -22
  36. package/dist/ucsc-trackhub/doConnect.d.ts +1 -0
  37. package/dist/ucsc-trackhub/doConnect.js +131 -0
  38. package/dist/ucsc-trackhub/model.d.ts +19 -2
  39. package/dist/ucsc-trackhub/model.js +16 -71
  40. package/dist/ucsc-trackhub/ucscTrackHub.d.ts +161 -4
  41. package/dist/ucsc-trackhub/ucscTrackHub.js +49 -166
  42. package/esm/AddTrackWidget/components/DefaultAddTrackWorkflow.js +4 -8
  43. package/esm/AddTrackWidget/model.d.ts +81 -0
  44. package/esm/AddTrackWidget/model.js +81 -0
  45. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.d.ts +1 -1
  46. package/esm/HierarchicalTrackSelectorWidget/components/ShoppingCart.js +12 -31
  47. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.d.ts +5 -7
  48. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilter.js +13 -11
  49. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.d.ts +5 -7
  50. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetFilters.js +12 -8
  51. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.d.ts +1 -11
  52. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedHeader.js +9 -7
  53. package/esm/HierarchicalTrackSelectorWidget/components/faceted/FacetedSelector.js +41 -113
  54. package/esm/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.d.ts +12 -0
  55. package/esm/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.js +31 -0
  56. package/esm/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.d.ts +6 -0
  57. package/esm/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.js +40 -0
  58. package/esm/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.js +71 -46
  59. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.js +6 -12
  60. package/esm/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.js +8 -3
  61. package/esm/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.d.ts +6 -0
  62. package/esm/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.js +37 -0
  63. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.js +7 -6
  64. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.js +8 -27
  65. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.d.ts +12 -0
  66. package/esm/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.js +45 -0
  67. package/esm/HierarchicalTrackSelectorWidget/components/util.d.ts +3 -0
  68. package/esm/HierarchicalTrackSelectorWidget/components/util.js +5 -1
  69. package/esm/HierarchicalTrackSelectorWidget/facetedModel.d.ts +128 -0
  70. package/esm/HierarchicalTrackSelectorWidget/facetedModel.js +202 -0
  71. package/esm/HierarchicalTrackSelectorWidget/facetedUtil.d.ts +2 -0
  72. package/esm/HierarchicalTrackSelectorWidget/{components/faceted/util.js → facetedUtil.js} +3 -0
  73. package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.d.ts +17 -5
  74. package/esm/HierarchicalTrackSelectorWidget/generateHierarchy.js +27 -21
  75. package/esm/HierarchicalTrackSelectorWidget/model.d.ts +193 -15
  76. package/esm/HierarchicalTrackSelectorWidget/model.js +211 -24
  77. package/esm/ucsc-trackhub/doConnect.d.ts +1 -0
  78. package/esm/ucsc-trackhub/doConnect.js +127 -0
  79. package/esm/ucsc-trackhub/model.d.ts +19 -2
  80. package/esm/ucsc-trackhub/model.js +17 -72
  81. package/esm/ucsc-trackhub/ucscTrackHub.d.ts +161 -4
  82. package/esm/ucsc-trackhub/ucscTrackHub.js +48 -141
  83. package/package.json +3 -4
  84. package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +0 -1
  85. 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`;
@@ -2,5 +2,5 @@ import React from 'react';
2
2
  import { HierarchicalTrackSelectorModel } from '../model';
3
3
  declare const ShoppingCart: ({ model, }: {
4
4
  model: HierarchicalTrackSelectorModel;
5
- }) => React.JSX.Element;
5
+ }) => React.JSX.Element | null;
6
6
  export default ShoppingCart;
@@ -1,42 +1,23 @@
1
- import React, { useState } from 'react';
2
- import { Badge, IconButton } from '@mui/material';
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
- const useStyles = makeStyles()(theme => ({
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(React.Fragment, null,
26
- selection.length ? (React.createElement(IconButton, { className: classes.menuIcon, onClick: event => setSelectionEl(event.currentTarget) },
27
- React.createElement(Badge, { badgeContent: selection.length, color: "primary" },
28
- React.createElement(ShoppingCartIcon, null)))) : null,
29
- React.createElement(JBrowseMenu, { anchorEl: selectionEl, open: Boolean(selectionEl), onMenuItemClick: (_, callback) => {
30
- callback();
31
- setSelectionEl(undefined);
32
- }, onClose: () => setSelectionEl(undefined), menuItems: [
33
- { label: 'Clear', onClick: () => model.clearSelection() },
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
- export default function FacetFilter({ column, vals, width, dispatch, filters, }: {
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
- dispatch: (arg: {
9
- key: string;
10
- val: string[];
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
- export default function FacetFilter({ column, vals, width, dispatch, filters, }) {
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: () => dispatch({ key: column.field, val: [] }) }),
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[column.field], onChange: event => {
36
- dispatch({
37
- key: column.field,
38
- // @ts-expect-error
39
- val: [...event.target.options]
40
- .filter(opt => opt.selected)
41
- .map(opt => opt.value),
42
- });
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
- export default function FacetFilters({ rows, columns, dispatch, filters, width, }: {
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
- }): React.JSX.Element;
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
- export default function FacetFilters({ rows, columns, dispatch, filters, width, }) {
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 = Object.keys(filters);
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[entry]) === null || _a === void 0 ? void 0 : _a.length) {
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[facet]) === null || _b === void 0 ? void 0 : _b.length) ? new Set(filters[facet]) : undefined;
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
- return (React.createElement(FacetFilter, { key: column.field, vals: [...uniqs.get(column.field)], column: column, width: width, dispatch: dispatch, filters: filters }));
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({ setFilterText, setUseShoppingCart, setShowSparse, setShowFilters, setShowOptions, showOptions, showSparse, showFilters, useShoppingCart, filterText, model, }: {
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({ setFilterText, setUseShoppingCart, setShowSparse, setShowFilters, setShowOptions, showOptions, showSparse, showFilters, useShoppingCart, filterText, model, }) {
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
  },