@jbrowse/plugin-data-management 2.7.2 → 2.9.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/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 +57 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.d.ts +6 -0
- package/dist/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.js +42 -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 +196 -17
- package/dist/HierarchicalTrackSelectorWidget/model.js +178 -23
- 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/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 +29 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.d.ts +6 -0
- package/esm/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.js +37 -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 +196 -17
- package/esm/HierarchicalTrackSelectorWidget/model.js +180 -25
- 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 -3
- package/dist/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +0 -1
- package/esm/HierarchicalTrackSelectorWidget/components/faceted/util.d.ts +0 -1
|
@@ -40,7 +40,7 @@ function sortConfs(confs, sortNames, sortCategories) {
|
|
|
40
40
|
}
|
|
41
41
|
return ret.map(a => a[0]);
|
|
42
42
|
}
|
|
43
|
-
function generateHierarchy({ model, trackConfs, extra, }) {
|
|
43
|
+
function generateHierarchy({ model, trackConfs, extra, noCategories, menuItems, }) {
|
|
44
44
|
const hierarchy = { children: [] };
|
|
45
45
|
const { collapsed, filterText, activeSortTrackNames, activeSortCategories, view, } = model;
|
|
46
46
|
if (!view) {
|
|
@@ -59,25 +59,29 @@ function generateHierarchy({ model, trackConfs, extra, }) {
|
|
|
59
59
|
categories.unshift(' Session tracks');
|
|
60
60
|
}
|
|
61
61
|
let currLevel = hierarchy;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
62
|
+
if (!noCategories) {
|
|
63
|
+
// find existing category to put track into or create it
|
|
64
|
+
for (let i = 0; i < categories.length; i++) {
|
|
65
|
+
const category = categories[i];
|
|
66
|
+
const ret = currLevel.children.find(c => c.name === category);
|
|
67
|
+
const id = [extra, categories.slice(0, i + 1).join(',')]
|
|
68
|
+
.filter(f => !!f)
|
|
69
|
+
.join('-');
|
|
70
|
+
if (!ret) {
|
|
71
|
+
const n = {
|
|
72
|
+
children: [],
|
|
73
|
+
name: category,
|
|
74
|
+
id,
|
|
75
|
+
isOpenByDefault: !collapsed.get(id),
|
|
76
|
+
menuItems,
|
|
77
|
+
type: 'category',
|
|
78
|
+
};
|
|
79
|
+
currLevel.children.push(n);
|
|
80
|
+
currLevel = n;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
currLevel = ret;
|
|
84
|
+
}
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
87
|
// uses splice to try to put all leaf nodes above "category nodes" if you
|
|
@@ -86,11 +90,13 @@ function generateHierarchy({ model, trackConfs, extra, }) {
|
|
|
86
90
|
const r = currLevel.children.findIndex(elt => elt.children.length);
|
|
87
91
|
const idx = r === -1 ? currLevel.children.length : r;
|
|
88
92
|
currLevel.children.splice(idx, 0, {
|
|
89
|
-
id: conf.trackId,
|
|
93
|
+
id: [extra, conf.trackId].filter(f => !!f).join(','),
|
|
94
|
+
trackId: conf.trackId,
|
|
90
95
|
name: (0, tracks_1.getTrackName)(conf, session),
|
|
91
96
|
conf,
|
|
92
97
|
checked: viewTracks.some(f => f.configuration === conf),
|
|
93
98
|
children: [],
|
|
99
|
+
type: 'track',
|
|
94
100
|
});
|
|
95
101
|
}
|
|
96
102
|
return hierarchy.children;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Instance } from 'mobx-state-tree';
|
|
2
2
|
import { AnyConfigurationModel } from '@jbrowse/core/configuration';
|
|
3
3
|
import PluginManager from '@jbrowse/core/PluginManager';
|
|
4
|
-
|
|
4
|
+
type MaybeAnyConfigurationModel = AnyConfigurationModel | undefined;
|
|
5
5
|
/**
|
|
6
6
|
* #stateModel HierarchicalTrackSelectorWidget
|
|
7
7
|
*/
|
|
@@ -34,6 +34,90 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
34
34
|
* #property
|
|
35
35
|
*/
|
|
36
36
|
view: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
|
|
37
|
+
/**
|
|
38
|
+
* #property
|
|
39
|
+
* this is removed in postProcessSnapshot, so is generally only loaded
|
|
40
|
+
* from localstorage
|
|
41
|
+
*/
|
|
42
|
+
favorites: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").ISimpleType<string>>, [undefined]>;
|
|
43
|
+
/**
|
|
44
|
+
* #property
|
|
45
|
+
* this is removed in postProcessSnapshot, so is generally only loaded
|
|
46
|
+
* from localstorage
|
|
47
|
+
*/
|
|
48
|
+
recentlyUsed: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IArrayType<import("mobx-state-tree").ISimpleType<string>>, [undefined]>;
|
|
49
|
+
/**
|
|
50
|
+
* #property
|
|
51
|
+
*/
|
|
52
|
+
faceted: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IModelType<{
|
|
53
|
+
filterText: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
54
|
+
showSparse: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
55
|
+
showFilters: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
56
|
+
showOptions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
57
|
+
panelWidth: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
|
|
58
|
+
}, {
|
|
59
|
+
/**
|
|
60
|
+
* #property
|
|
61
|
+
*/
|
|
62
|
+
visible: Record<string, boolean>;
|
|
63
|
+
widths: Record<string, number | undefined>;
|
|
64
|
+
useShoppingCart: boolean;
|
|
65
|
+
filters: import("mobx").ObservableMap<string, string[]>;
|
|
66
|
+
} & {
|
|
67
|
+
setFilter(key: string, value: string[]): void;
|
|
68
|
+
setPanelWidth(width: number): void;
|
|
69
|
+
setUseShoppingCart(f: boolean): void;
|
|
70
|
+
setFilterText(str: string): void;
|
|
71
|
+
setShowSparse(f: boolean): void;
|
|
72
|
+
setShowOptions(f: boolean): void;
|
|
73
|
+
setShowFilters(f: boolean): void;
|
|
74
|
+
} & {
|
|
75
|
+
readonly allTrackConfigurations: ({
|
|
76
|
+
[x: string]: any;
|
|
77
|
+
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
78
|
+
setSubschema(slotName: string, data: unknown): any;
|
|
79
|
+
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
|
|
80
|
+
} & {
|
|
81
|
+
readonly rows: {
|
|
82
|
+
readonly id: string;
|
|
83
|
+
readonly conf: {
|
|
84
|
+
[x: string]: any;
|
|
85
|
+
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
86
|
+
setSubschema(slotName: string, data: unknown): any;
|
|
87
|
+
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
|
|
88
|
+
readonly name: string;
|
|
89
|
+
readonly category: string; /**
|
|
90
|
+
* #action
|
|
91
|
+
*/
|
|
92
|
+
readonly adapter: string;
|
|
93
|
+
readonly description: string;
|
|
94
|
+
readonly metadata: any;
|
|
95
|
+
}[];
|
|
96
|
+
} & {
|
|
97
|
+
readonly filteredNonMetadataKeys: string[] | readonly ["category", "adapter", "description"];
|
|
98
|
+
readonly metadataKeys: string[];
|
|
99
|
+
readonly filteredMetadataKeys: string[];
|
|
100
|
+
readonly fields: string[];
|
|
101
|
+
readonly filteredRows: {
|
|
102
|
+
readonly id: string;
|
|
103
|
+
readonly conf: {
|
|
104
|
+
[x: string]: any;
|
|
105
|
+
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
106
|
+
setSubschema(slotName: string, data: unknown): any;
|
|
107
|
+
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>;
|
|
108
|
+
readonly name: string;
|
|
109
|
+
readonly category: string; /**
|
|
110
|
+
* #action
|
|
111
|
+
*/
|
|
112
|
+
readonly adapter: string;
|
|
113
|
+
readonly description: string;
|
|
114
|
+
readonly metadata: any;
|
|
115
|
+
}[];
|
|
116
|
+
} & {
|
|
117
|
+
setVisible(args: Record<string, boolean>): void;
|
|
118
|
+
setWidths(args: Record<string, number | undefined>): void;
|
|
119
|
+
afterAttach(): void;
|
|
120
|
+
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>, [undefined]>;
|
|
37
121
|
}, {
|
|
38
122
|
selection: ({
|
|
39
123
|
[x: string]: any;
|
|
@@ -41,6 +125,25 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
41
125
|
setSubschema(slotName: string, data: unknown): any;
|
|
42
126
|
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
|
|
43
127
|
filterText: string;
|
|
128
|
+
recentlyUsedCounter: number;
|
|
129
|
+
favoritesCounter: number;
|
|
130
|
+
} & {
|
|
131
|
+
/**
|
|
132
|
+
* #getter
|
|
133
|
+
*/
|
|
134
|
+
readonly selectionSet: Set<{
|
|
135
|
+
[x: string]: any;
|
|
136
|
+
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
137
|
+
setSubschema(slotName: string, data: unknown): any;
|
|
138
|
+
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>>;
|
|
139
|
+
/**
|
|
140
|
+
* #getter
|
|
141
|
+
*/
|
|
142
|
+
readonly favoritesSet: Set<string>;
|
|
143
|
+
/**
|
|
144
|
+
* #getter
|
|
145
|
+
*/
|
|
146
|
+
readonly recentlyUsedSet: Set<string>;
|
|
44
147
|
} & {
|
|
45
148
|
/**
|
|
46
149
|
* #action
|
|
@@ -66,6 +169,34 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
66
169
|
* #action
|
|
67
170
|
*/
|
|
68
171
|
clearSelection(): void;
|
|
172
|
+
/**
|
|
173
|
+
* #action
|
|
174
|
+
*/
|
|
175
|
+
addToFavorites(trackId: string): void;
|
|
176
|
+
/**
|
|
177
|
+
* #action
|
|
178
|
+
*/
|
|
179
|
+
removeFromFavorites(trackId: string): void;
|
|
180
|
+
/**
|
|
181
|
+
* #action
|
|
182
|
+
*/
|
|
183
|
+
clearFavorites(): void;
|
|
184
|
+
/**
|
|
185
|
+
* #action
|
|
186
|
+
*/
|
|
187
|
+
setRecentlyUsedCounter(val: number): void;
|
|
188
|
+
/**
|
|
189
|
+
* #action
|
|
190
|
+
*/
|
|
191
|
+
setFavoritesCounter(val: number): void;
|
|
192
|
+
/**
|
|
193
|
+
* #action
|
|
194
|
+
*/
|
|
195
|
+
addToRecentlyUsed(id: string): void;
|
|
196
|
+
/**
|
|
197
|
+
* #action
|
|
198
|
+
*/
|
|
199
|
+
clearRecentlyUsed(): void;
|
|
69
200
|
/**
|
|
70
201
|
* #action
|
|
71
202
|
*/
|
|
@@ -94,7 +225,19 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
94
225
|
/**
|
|
95
226
|
* #method
|
|
96
227
|
*/
|
|
97
|
-
|
|
228
|
+
isSelected(track: AnyConfigurationModel): boolean;
|
|
229
|
+
/**
|
|
230
|
+
* #method
|
|
231
|
+
*/
|
|
232
|
+
isFavorite(trackId: string): boolean;
|
|
233
|
+
/**
|
|
234
|
+
* #method
|
|
235
|
+
*/
|
|
236
|
+
isRecentlyUsed(trackId: string): boolean;
|
|
237
|
+
/**
|
|
238
|
+
* #method
|
|
239
|
+
*/
|
|
240
|
+
getRefSeqTrackConf(assemblyName: string): MaybeAnyConfigurationModel;
|
|
98
241
|
} & {
|
|
99
242
|
/**
|
|
100
243
|
* #getter
|
|
@@ -110,34 +253,42 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
110
253
|
*/
|
|
111
254
|
readonly activeSortCategories: any;
|
|
112
255
|
/**
|
|
113
|
-
* #
|
|
114
|
-
* filter out tracks that don't match the current display types
|
|
256
|
+
* #getter
|
|
257
|
+
* filter out tracks that don't match the current assembly/display types
|
|
115
258
|
*/
|
|
116
|
-
|
|
117
|
-
tracks: AnyConfigurationModel[];
|
|
118
|
-
}): ({
|
|
259
|
+
readonly configAndSessionTrackConfigurations: ({
|
|
119
260
|
[x: string]: any;
|
|
120
261
|
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
121
262
|
setSubschema(slotName: string, data: unknown): any;
|
|
122
263
|
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
|
|
264
|
+
readonly allTrackConfigurations: ({
|
|
265
|
+
[x: string]: any;
|
|
266
|
+
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
267
|
+
setSubschema(slotName: string, data: unknown): any;
|
|
268
|
+
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
|
|
269
|
+
} & {
|
|
123
270
|
/**
|
|
124
271
|
* #getter
|
|
125
|
-
*
|
|
272
|
+
* filters out tracks that are not in the favorites group
|
|
126
273
|
*/
|
|
127
|
-
readonly
|
|
274
|
+
readonly favoriteTracks: ({
|
|
128
275
|
[x: string]: any;
|
|
129
276
|
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
130
277
|
setSubschema(slotName: string, data: unknown): any;
|
|
131
278
|
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
|
|
132
|
-
} & {
|
|
133
279
|
/**
|
|
134
|
-
* #
|
|
280
|
+
* #getter
|
|
281
|
+
* filters out tracks that are not in the recently used group
|
|
135
282
|
*/
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
283
|
+
readonly recentlyUsedTracks: ({
|
|
284
|
+
[x: string]: any;
|
|
285
|
+
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
286
|
+
setSubschema(slotName: string, data: unknown): any;
|
|
287
|
+
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
|
|
140
288
|
} & {
|
|
289
|
+
/**
|
|
290
|
+
* #getter
|
|
291
|
+
*/
|
|
141
292
|
readonly allTracks: {
|
|
142
293
|
group: any;
|
|
143
294
|
tracks: ({
|
|
@@ -145,6 +296,8 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
145
296
|
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
146
297
|
setSubschema(slotName: string, data: unknown): any;
|
|
147
298
|
} & import("mobx-state-tree").IStateTreeNode<import("@jbrowse/core/configuration").AnyConfigurationSchemaType>)[];
|
|
299
|
+
noCategories: boolean;
|
|
300
|
+
menuItems: never[];
|
|
148
301
|
}[];
|
|
149
302
|
} & {
|
|
150
303
|
/**
|
|
@@ -153,10 +306,15 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
153
306
|
readonly hierarchy: {
|
|
154
307
|
name: string;
|
|
155
308
|
id: string;
|
|
309
|
+
isOpenByDefault: boolean;
|
|
310
|
+
type: "category";
|
|
156
311
|
children: {
|
|
157
312
|
name: any;
|
|
158
313
|
id: any;
|
|
159
|
-
|
|
314
|
+
type: "category";
|
|
315
|
+
isOpenByDefault: boolean;
|
|
316
|
+
menuItems: never[];
|
|
317
|
+
children: import("./generateHierarchy").TreeNode[];
|
|
160
318
|
}[];
|
|
161
319
|
};
|
|
162
320
|
} & {
|
|
@@ -171,7 +329,28 @@ export default function stateTreeFactory(pluginManager: PluginManager): import("
|
|
|
171
329
|
} & {
|
|
172
330
|
afterCreate(): void;
|
|
173
331
|
} & {
|
|
332
|
+
/**
|
|
333
|
+
* #getter
|
|
334
|
+
*/
|
|
174
335
|
readonly hasAnySubcategories: boolean;
|
|
175
|
-
}
|
|
336
|
+
} & {
|
|
337
|
+
afterAttach(): void;
|
|
338
|
+
}, import("mobx-state-tree")._NotCustomized, {
|
|
339
|
+
type: "HierarchicalTrackSelectorWidget";
|
|
340
|
+
view: import("mobx-state-tree").ReferenceIdentifier | undefined;
|
|
341
|
+
id: string;
|
|
342
|
+
collapsed: import("mobx").IKeyValueMap<boolean>;
|
|
343
|
+
initialized: boolean | undefined;
|
|
344
|
+
sortTrackNames: boolean | undefined;
|
|
345
|
+
sortCategories: boolean | undefined;
|
|
346
|
+
faceted: import("mobx-state-tree").ModelSnapshotType<{
|
|
347
|
+
filterText: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
348
|
+
showSparse: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
349
|
+
showFilters: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
350
|
+
showOptions: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>, [undefined]>;
|
|
351
|
+
panelWidth: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<number>, [undefined]>;
|
|
352
|
+
}>;
|
|
353
|
+
}>;
|
|
176
354
|
export type HierarchicalTrackSelectorStateModel = ReturnType<typeof stateTreeFactory>;
|
|
177
355
|
export type HierarchicalTrackSelectorModel = Instance<HierarchicalTrackSelectorStateModel>;
|
|
356
|
+
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
4
|
+
const mobx_1 = require("mobx");
|
|
4
5
|
const configuration_1 = require("@jbrowse/core/configuration");
|
|
5
6
|
const util_1 = require("@jbrowse/core/util");
|
|
6
7
|
const mst_1 = require("@jbrowse/core/util/types/mst");
|
|
@@ -8,6 +9,24 @@ const mst_1 = require("@jbrowse/core/util/types/mst");
|
|
|
8
9
|
const filterTracks_1 = require("./filterTracks");
|
|
9
10
|
const generateHierarchy_1 = require("./generateHierarchy");
|
|
10
11
|
const util_2 = require("./util");
|
|
12
|
+
const facetedModel_1 = require("./facetedModel");
|
|
13
|
+
// for settings that are config dependent
|
|
14
|
+
function postNoConfigF() {
|
|
15
|
+
return typeof window !== undefined
|
|
16
|
+
? [window.location.host, window.location.pathname].join('-')
|
|
17
|
+
: 'empty';
|
|
18
|
+
}
|
|
19
|
+
// for settings that are not config dependent
|
|
20
|
+
function postF() {
|
|
21
|
+
return typeof window !== undefined
|
|
22
|
+
? [
|
|
23
|
+
postNoConfigF(),
|
|
24
|
+
new URLSearchParams(window.location.search).get('config'),
|
|
25
|
+
].join('-')
|
|
26
|
+
: 'empty';
|
|
27
|
+
}
|
|
28
|
+
const lsKeyFavoritesF = () => `favoriteTracks-${postF()}}`;
|
|
29
|
+
const lsKeyRecentlyUsedF = () => `recentlyUsedTracks-${postF()}}`;
|
|
11
30
|
/**
|
|
12
31
|
* #stateModel HierarchicalTrackSelectorWidget
|
|
13
32
|
*/
|
|
@@ -42,10 +61,48 @@ function stateTreeFactory(pluginManager) {
|
|
|
42
61
|
* #property
|
|
43
62
|
*/
|
|
44
63
|
view: mobx_state_tree_1.types.safeReference(pluginManager.pluggableMstType('view', 'stateModel')),
|
|
64
|
+
/**
|
|
65
|
+
* #property
|
|
66
|
+
* this is removed in postProcessSnapshot, so is generally only loaded
|
|
67
|
+
* from localstorage
|
|
68
|
+
*/
|
|
69
|
+
favorites: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.string), () => JSON.parse((0, util_1.localStorageGetItem)(lsKeyFavoritesF()) || '[]')),
|
|
70
|
+
/**
|
|
71
|
+
* #property
|
|
72
|
+
* this is removed in postProcessSnapshot, so is generally only loaded
|
|
73
|
+
* from localstorage
|
|
74
|
+
*/
|
|
75
|
+
recentlyUsed: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.string), () => JSON.parse((0, util_1.localStorageGetItem)(lsKeyRecentlyUsedF()) || '[]')),
|
|
76
|
+
/**
|
|
77
|
+
* #property
|
|
78
|
+
*/
|
|
79
|
+
faceted: mobx_state_tree_1.types.optional((0, facetedModel_1.facetedStateTreeF)(), {}),
|
|
45
80
|
})
|
|
46
81
|
.volatile(() => ({
|
|
47
82
|
selection: [],
|
|
48
83
|
filterText: '',
|
|
84
|
+
recentlyUsedCounter: 0,
|
|
85
|
+
favoritesCounter: 0,
|
|
86
|
+
}))
|
|
87
|
+
.views(self => ({
|
|
88
|
+
/**
|
|
89
|
+
* #getter
|
|
90
|
+
*/
|
|
91
|
+
get selectionSet() {
|
|
92
|
+
return new Set(self.selection);
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* #getter
|
|
96
|
+
*/
|
|
97
|
+
get favoritesSet() {
|
|
98
|
+
return new Set(self.favorites);
|
|
99
|
+
},
|
|
100
|
+
/**
|
|
101
|
+
* #getter
|
|
102
|
+
*/
|
|
103
|
+
get recentlyUsedSet() {
|
|
104
|
+
return new Set(self.recentlyUsed);
|
|
105
|
+
},
|
|
49
106
|
}))
|
|
50
107
|
.actions(self => ({
|
|
51
108
|
/**
|
|
@@ -76,7 +133,8 @@ function stateTreeFactory(pluginManager) {
|
|
|
76
133
|
* #action
|
|
77
134
|
*/
|
|
78
135
|
removeFromSelection(elt) {
|
|
79
|
-
|
|
136
|
+
const s = new Set(elt);
|
|
137
|
+
self.selection = self.selection.filter(f => !s.has(f));
|
|
80
138
|
},
|
|
81
139
|
/**
|
|
82
140
|
* #action
|
|
@@ -84,6 +142,55 @@ function stateTreeFactory(pluginManager) {
|
|
|
84
142
|
clearSelection() {
|
|
85
143
|
self.selection = [];
|
|
86
144
|
},
|
|
145
|
+
/**
|
|
146
|
+
* #action
|
|
147
|
+
*/
|
|
148
|
+
addToFavorites(trackId) {
|
|
149
|
+
self.favoritesCounter += 1;
|
|
150
|
+
self.favorites.push(trackId);
|
|
151
|
+
},
|
|
152
|
+
/**
|
|
153
|
+
* #action
|
|
154
|
+
*/
|
|
155
|
+
removeFromFavorites(trackId) {
|
|
156
|
+
self.favorites.remove(trackId);
|
|
157
|
+
},
|
|
158
|
+
/**
|
|
159
|
+
* #action
|
|
160
|
+
*/
|
|
161
|
+
clearFavorites() {
|
|
162
|
+
self.favorites.clear();
|
|
163
|
+
},
|
|
164
|
+
/**
|
|
165
|
+
* #action
|
|
166
|
+
*/
|
|
167
|
+
setRecentlyUsedCounter(val) {
|
|
168
|
+
self.recentlyUsedCounter = val;
|
|
169
|
+
},
|
|
170
|
+
/**
|
|
171
|
+
* #action
|
|
172
|
+
*/
|
|
173
|
+
setFavoritesCounter(val) {
|
|
174
|
+
self.favoritesCounter = val;
|
|
175
|
+
},
|
|
176
|
+
/**
|
|
177
|
+
* #action
|
|
178
|
+
*/
|
|
179
|
+
addToRecentlyUsed(id) {
|
|
180
|
+
self.recentlyUsedCounter += 1;
|
|
181
|
+
if (!self.recentlyUsed.includes(id)) {
|
|
182
|
+
if (self.recentlyUsed.length >= 10) {
|
|
183
|
+
self.recentlyUsed.shift();
|
|
184
|
+
}
|
|
185
|
+
self.recentlyUsed.push(id);
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
/**
|
|
189
|
+
* #action
|
|
190
|
+
*/
|
|
191
|
+
clearRecentlyUsed() {
|
|
192
|
+
self.recentlyUsed.clear();
|
|
193
|
+
},
|
|
87
194
|
/**
|
|
88
195
|
* #action
|
|
89
196
|
*/
|
|
@@ -122,6 +229,24 @@ function stateTreeFactory(pluginManager) {
|
|
|
122
229
|
},
|
|
123
230
|
}))
|
|
124
231
|
.views(self => ({
|
|
232
|
+
/**
|
|
233
|
+
* #method
|
|
234
|
+
*/
|
|
235
|
+
isSelected(track) {
|
|
236
|
+
return self.selectionSet.has(track);
|
|
237
|
+
},
|
|
238
|
+
/**
|
|
239
|
+
* #method
|
|
240
|
+
*/
|
|
241
|
+
isFavorite(trackId) {
|
|
242
|
+
return self.favoritesSet.has(trackId);
|
|
243
|
+
},
|
|
244
|
+
/**
|
|
245
|
+
* #method
|
|
246
|
+
*/
|
|
247
|
+
isRecentlyUsed(trackId) {
|
|
248
|
+
return self.recentlyUsedSet.has(trackId);
|
|
249
|
+
},
|
|
125
250
|
/**
|
|
126
251
|
* #method
|
|
127
252
|
*/
|
|
@@ -165,47 +290,58 @@ function stateTreeFactory(pluginManager) {
|
|
|
165
290
|
var _a;
|
|
166
291
|
return ((_a = self.sortCategories) !== null && _a !== void 0 ? _a : (0, configuration_1.getConf)((0, util_1.getSession)(self), ['hierarchical', 'sort', 'categories']));
|
|
167
292
|
},
|
|
168
|
-
/**
|
|
169
|
-
* #method
|
|
170
|
-
* filter out tracks that don't match the current display types
|
|
171
|
-
*/
|
|
172
|
-
connectionTrackConfigurations(connection) {
|
|
173
|
-
return (0, filterTracks_1.filterTracks)(connection.tracks, self);
|
|
174
|
-
},
|
|
175
293
|
/**
|
|
176
294
|
* #getter
|
|
177
295
|
* filter out tracks that don't match the current assembly/display types
|
|
178
296
|
*/
|
|
179
|
-
get
|
|
297
|
+
get configAndSessionTrackConfigurations() {
|
|
180
298
|
return [
|
|
181
299
|
...self.assemblyNames.map(a => self.getRefSeqTrackConf(a)),
|
|
182
300
|
...(0, filterTracks_1.filterTracks)((0, util_1.getSession)(self).tracks, self),
|
|
183
301
|
].filter(util_1.notEmpty);
|
|
184
302
|
},
|
|
303
|
+
get allTrackConfigurations() {
|
|
304
|
+
const { connectionInstances = [] } = (0, util_1.getSession)(self);
|
|
305
|
+
return [
|
|
306
|
+
...this.configAndSessionTrackConfigurations,
|
|
307
|
+
...connectionInstances === null || connectionInstances === void 0 ? void 0 : connectionInstances.flatMap(c => c.tracks),
|
|
308
|
+
];
|
|
309
|
+
},
|
|
185
310
|
}))
|
|
186
311
|
.views(self => ({
|
|
187
312
|
/**
|
|
188
|
-
* #
|
|
313
|
+
* #getter
|
|
314
|
+
* filters out tracks that are not in the favorites group
|
|
315
|
+
*/
|
|
316
|
+
get favoriteTracks() {
|
|
317
|
+
return self.allTrackConfigurations.filter(t => self.favoritesSet.has(t.trackId));
|
|
318
|
+
},
|
|
319
|
+
/**
|
|
320
|
+
* #getter
|
|
321
|
+
* filters out tracks that are not in the recently used group
|
|
189
322
|
*/
|
|
190
|
-
|
|
191
|
-
return (
|
|
192
|
-
model: self,
|
|
193
|
-
trackConfs: self.connectionTrackConfigurations(connection),
|
|
194
|
-
extra: connection.name,
|
|
195
|
-
});
|
|
323
|
+
get recentlyUsedTracks() {
|
|
324
|
+
return self.allTrackConfigurations.filter(t => self.recentlyUsedSet.has(t.trackId));
|
|
196
325
|
},
|
|
197
326
|
}))
|
|
198
327
|
.views(self => ({
|
|
328
|
+
/**
|
|
329
|
+
* #getter
|
|
330
|
+
*/
|
|
199
331
|
get allTracks() {
|
|
200
332
|
const { connectionInstances = [] } = (0, util_1.getSession)(self);
|
|
201
333
|
return [
|
|
202
334
|
{
|
|
203
335
|
group: 'Tracks',
|
|
204
|
-
tracks: self.
|
|
336
|
+
tracks: self.configAndSessionTrackConfigurations,
|
|
337
|
+
noCategories: false,
|
|
338
|
+
menuItems: [],
|
|
205
339
|
},
|
|
206
340
|
...connectionInstances.flatMap(c => ({
|
|
207
341
|
group: (0, configuration_1.getConf)(c, 'name'),
|
|
208
342
|
tracks: c.tracks,
|
|
343
|
+
noCategories: false,
|
|
344
|
+
menuItems: [],
|
|
209
345
|
})),
|
|
210
346
|
];
|
|
211
347
|
},
|
|
@@ -218,17 +354,21 @@ function stateTreeFactory(pluginManager) {
|
|
|
218
354
|
return {
|
|
219
355
|
name: 'Root',
|
|
220
356
|
id: 'Root',
|
|
221
|
-
|
|
222
|
-
|
|
357
|
+
isOpenByDefault: true,
|
|
358
|
+
type: 'category',
|
|
359
|
+
children: self.allTracks.map(s => ({
|
|
223
360
|
name: s.group,
|
|
224
361
|
id: s.group,
|
|
362
|
+
type: 'category',
|
|
363
|
+
isOpenByDefault: !self.collapsed.get(s.group),
|
|
364
|
+
menuItems: s.menuItems,
|
|
225
365
|
children: (0, generateHierarchy_1.generateHierarchy)({
|
|
226
366
|
model: self,
|
|
227
367
|
trackConfs: s.tracks,
|
|
368
|
+
extra: s.group,
|
|
369
|
+
noCategories: s.noCategories,
|
|
228
370
|
}),
|
|
229
|
-
}))
|
|
230
|
-
// always keep the Tracks entry at idx 0
|
|
231
|
-
.filter((f, idx) => idx === 0 || !!f.children.length),
|
|
371
|
+
})),
|
|
232
372
|
};
|
|
233
373
|
},
|
|
234
374
|
}))
|
|
@@ -288,9 +428,24 @@ function stateTreeFactory(pluginManager) {
|
|
|
288
428
|
},
|
|
289
429
|
}))
|
|
290
430
|
.views(self => ({
|
|
431
|
+
/**
|
|
432
|
+
* #getter
|
|
433
|
+
*/
|
|
291
434
|
get hasAnySubcategories() {
|
|
292
435
|
return self.allTracks.some(group => group.tracks.some(t => { var _a; return ((_a = (0, configuration_1.readConfObject)(t, 'category')) === null || _a === void 0 ? void 0 : _a.length) > 1; }));
|
|
293
436
|
},
|
|
294
|
-
}))
|
|
437
|
+
}))
|
|
438
|
+
.actions(self => ({
|
|
439
|
+
afterAttach() {
|
|
440
|
+
(0, mobx_state_tree_1.addDisposer)(self, (0, mobx_1.autorun)(() => {
|
|
441
|
+
(0, util_1.localStorageSetItem)(lsKeyFavoritesF(), JSON.stringify(self.favorites));
|
|
442
|
+
(0, util_1.localStorageSetItem)(lsKeyRecentlyUsedF(), JSON.stringify(self.recentlyUsed));
|
|
443
|
+
}));
|
|
444
|
+
},
|
|
445
|
+
}))
|
|
446
|
+
.postProcessSnapshot(snap => {
|
|
447
|
+
const { favorites: _, recentlyUsed: __, ...rest } = snap;
|
|
448
|
+
return rest;
|
|
449
|
+
});
|
|
295
450
|
}
|
|
296
451
|
exports.default = stateTreeFactory;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function doConnect(self: any): Promise<void>;
|