@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
|
@@ -122,9 +122,6 @@ const DefaultAddTrackWorkflow = (0, mobx_react_1.observer)(function ({ model, })
|
|
|
122
122
|
};
|
|
123
123
|
jobsManager.queueJob(newEntry);
|
|
124
124
|
}
|
|
125
|
-
else {
|
|
126
|
-
session.notify('Open a new view, or use the track selector in an existing view, to view this track', 'info');
|
|
127
|
-
}
|
|
128
125
|
model.clearData();
|
|
129
126
|
if ((0, util_1.isSessionModelWithWidgets)(session)) {
|
|
130
127
|
session.hideWidget(model);
|
|
@@ -134,10 +131,6 @@ const DefaultAddTrackWorkflow = (0, mobx_react_1.observer)(function ({ model, })
|
|
|
134
131
|
setTrackErrorMessage('Failed to add track.\nThe configuration of this file is not currently supported.');
|
|
135
132
|
}
|
|
136
133
|
}
|
|
137
|
-
function handleBack() {
|
|
138
|
-
setTrackErrorMessage(undefined);
|
|
139
|
-
setActiveStep(activeStep - 1);
|
|
140
|
-
}
|
|
141
134
|
function isNextDisabled() {
|
|
142
135
|
switch (activeStep) {
|
|
143
136
|
case 0:
|
|
@@ -154,7 +147,10 @@ const DefaultAddTrackWorkflow = (0, mobx_react_1.observer)(function ({ model, })
|
|
|
154
147
|
react_1.default.createElement(material_1.StepContent, null,
|
|
155
148
|
getStepContent(idx),
|
|
156
149
|
react_1.default.createElement("div", { className: classes.actionsContainer },
|
|
157
|
-
react_1.default.createElement(material_1.Button, { disabled: activeStep === 0, onClick:
|
|
150
|
+
react_1.default.createElement(material_1.Button, { disabled: activeStep === 0, onClick: () => {
|
|
151
|
+
setTrackErrorMessage(undefined);
|
|
152
|
+
setActiveStep(activeStep - 1);
|
|
153
|
+
}, className: classes.button }, "Back"),
|
|
158
154
|
react_1.default.createElement(material_1.Button, { disabled: isNextDisabled(), variant: "contained", color: "primary", onClick: handleNext, className: classes.button, "data-testid": "addTrackNextButton" }, activeStep === steps.length - 1 ? 'Add' : 'Next')),
|
|
159
155
|
trackErrorMessage ? (react_1.default.createElement("div", { className: classes.alertContainer },
|
|
160
156
|
react_1.default.createElement(material_1.Alert, { severity: "error" }, trackErrorMessage))) : null)))))));
|
|
@@ -5,9 +5,21 @@ interface IndexingAttr {
|
|
|
5
5
|
attributes: string[];
|
|
6
6
|
exclude: string[];
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* #stateModel AddTrackModel
|
|
10
|
+
*/
|
|
8
11
|
export default function f(pluginManager: PluginManager): import("mobx-state-tree").IModelType<{
|
|
12
|
+
/**
|
|
13
|
+
* #property
|
|
14
|
+
*/
|
|
9
15
|
id: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>, [undefined]>;
|
|
16
|
+
/**
|
|
17
|
+
* #property
|
|
18
|
+
*/
|
|
10
19
|
type: import("mobx-state-tree").ISimpleType<"AddTrackWidget">;
|
|
20
|
+
/**
|
|
21
|
+
* #property
|
|
22
|
+
*/
|
|
11
23
|
view: import("mobx-state-tree").IMaybe<import("mobx-state-tree").IReferenceType<import("mobx-state-tree").IAnyType>>;
|
|
12
24
|
}, {
|
|
13
25
|
trackSource: string;
|
|
@@ -20,30 +32,99 @@ export default function f(pluginManager: PluginManager): import("mobx-state-tree
|
|
|
20
32
|
textIndexTrack: boolean;
|
|
21
33
|
textIndexingConf: IndexingAttr | undefined;
|
|
22
34
|
} & {
|
|
35
|
+
/**
|
|
36
|
+
* #action
|
|
37
|
+
*/
|
|
23
38
|
setAdapterHint(obj: string): void;
|
|
39
|
+
/**
|
|
40
|
+
* #action
|
|
41
|
+
*/
|
|
24
42
|
setTrackSource(str: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* #action
|
|
45
|
+
*/
|
|
25
46
|
setTextIndexingConf(conf: IndexingAttr): void;
|
|
47
|
+
/**
|
|
48
|
+
* #action
|
|
49
|
+
*/
|
|
26
50
|
setTextIndexTrack(flag: boolean): void;
|
|
51
|
+
/**
|
|
52
|
+
* #action
|
|
53
|
+
*/
|
|
27
54
|
setTrackData(obj: FileLocation): void;
|
|
55
|
+
/**
|
|
56
|
+
* #action
|
|
57
|
+
*/
|
|
28
58
|
setIndexTrackData(obj: FileLocation): void;
|
|
59
|
+
/**
|
|
60
|
+
* #action
|
|
61
|
+
*/
|
|
29
62
|
setAssembly(str: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* #action
|
|
65
|
+
*/
|
|
30
66
|
setTrackName(str: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* #action
|
|
69
|
+
*/
|
|
31
70
|
setTrackType(str: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* #action
|
|
73
|
+
*/
|
|
32
74
|
clearData(): void;
|
|
33
75
|
} & {
|
|
76
|
+
/**
|
|
77
|
+
* #getter
|
|
78
|
+
*/
|
|
34
79
|
readonly trackAdapter: import("@jbrowse/core/util/tracks").AdapterConfig | undefined;
|
|
80
|
+
/**
|
|
81
|
+
* #getter
|
|
82
|
+
*/
|
|
35
83
|
readonly trackName: string;
|
|
84
|
+
/**
|
|
85
|
+
* #getter
|
|
86
|
+
*/
|
|
36
87
|
readonly isFtp: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* #getter
|
|
90
|
+
*/
|
|
37
91
|
readonly isRelativeTrackUrl: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* #getter
|
|
94
|
+
*/
|
|
38
95
|
readonly isRelativeIndexUrl: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* #getter
|
|
98
|
+
*/
|
|
39
99
|
readonly isRelativeUrl: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* #getter
|
|
102
|
+
*/
|
|
40
103
|
readonly trackHttp: any;
|
|
104
|
+
/**
|
|
105
|
+
* #getter
|
|
106
|
+
*/
|
|
41
107
|
readonly indexHttp: any;
|
|
108
|
+
/**
|
|
109
|
+
* #getter
|
|
110
|
+
*/
|
|
42
111
|
readonly wrongProtocol: any;
|
|
112
|
+
/**
|
|
113
|
+
* #getter
|
|
114
|
+
*/
|
|
43
115
|
readonly unsupported: boolean;
|
|
116
|
+
/**
|
|
117
|
+
* #getter
|
|
118
|
+
*/
|
|
44
119
|
readonly assembly: any;
|
|
120
|
+
/**
|
|
121
|
+
* #getter
|
|
122
|
+
*/
|
|
45
123
|
readonly trackType: string;
|
|
46
124
|
} & {
|
|
125
|
+
/**
|
|
126
|
+
* #getter
|
|
127
|
+
*/
|
|
47
128
|
readonly warningMessage: "" | "Warning: JBrowse cannot access files using the ftp protocol" | "Warning: one or more of your files do not provide the protocol e.g.\n https://, please provide an absolute URL unless you are sure a\n relative URL is intended." | "Warning: You entered a http:// resources but we cannot access HTTP\n resources from JBrowse when it is running on https. Please use an\n https URL for your track, or access the JBrowse app from the http\n protocol";
|
|
48
129
|
}, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
|
|
49
130
|
export type AddTrackStateModel = ReturnType<typeof f>;
|
|
@@ -12,11 +12,23 @@ function isAbsoluteUrl(url = '') {
|
|
|
12
12
|
return url.startsWith('/');
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* #stateModel AddTrackModel
|
|
17
|
+
*/
|
|
15
18
|
function f(pluginManager) {
|
|
16
19
|
return mobx_state_tree_1.types
|
|
17
20
|
.model('AddTrackModel', {
|
|
21
|
+
/**
|
|
22
|
+
* #property
|
|
23
|
+
*/
|
|
18
24
|
id: mst_1.ElementId,
|
|
25
|
+
/**
|
|
26
|
+
* #property
|
|
27
|
+
*/
|
|
19
28
|
type: mobx_state_tree_1.types.literal('AddTrackWidget'),
|
|
29
|
+
/**
|
|
30
|
+
* #property
|
|
31
|
+
*/
|
|
20
32
|
view: mobx_state_tree_1.types.safeReference(pluginManager.pluggableMstType('view', 'stateModel')),
|
|
21
33
|
})
|
|
22
34
|
.volatile(() => ({
|
|
@@ -32,33 +44,63 @@ function f(pluginManager) {
|
|
|
32
44
|
textIndexingConf: undefined,
|
|
33
45
|
}))
|
|
34
46
|
.actions(self => ({
|
|
47
|
+
/**
|
|
48
|
+
* #action
|
|
49
|
+
*/
|
|
35
50
|
setAdapterHint(obj) {
|
|
36
51
|
self.adapterHint = obj;
|
|
37
52
|
},
|
|
53
|
+
/**
|
|
54
|
+
* #action
|
|
55
|
+
*/
|
|
38
56
|
setTrackSource(str) {
|
|
39
57
|
self.trackSource = str;
|
|
40
58
|
},
|
|
59
|
+
/**
|
|
60
|
+
* #action
|
|
61
|
+
*/
|
|
41
62
|
setTextIndexingConf(conf) {
|
|
42
63
|
self.textIndexingConf = conf;
|
|
43
64
|
},
|
|
65
|
+
/**
|
|
66
|
+
* #action
|
|
67
|
+
*/
|
|
44
68
|
setTextIndexTrack(flag) {
|
|
45
69
|
self.textIndexTrack = flag;
|
|
46
70
|
},
|
|
71
|
+
/**
|
|
72
|
+
* #action
|
|
73
|
+
*/
|
|
47
74
|
setTrackData(obj) {
|
|
48
75
|
self.trackData = obj;
|
|
49
76
|
},
|
|
77
|
+
/**
|
|
78
|
+
* #action
|
|
79
|
+
*/
|
|
50
80
|
setIndexTrackData(obj) {
|
|
51
81
|
self.indexTrackData = obj;
|
|
52
82
|
},
|
|
83
|
+
/**
|
|
84
|
+
* #action
|
|
85
|
+
*/
|
|
53
86
|
setAssembly(str) {
|
|
54
87
|
self.altAssemblyName = str;
|
|
55
88
|
},
|
|
89
|
+
/**
|
|
90
|
+
* #action
|
|
91
|
+
*/
|
|
56
92
|
setTrackName(str) {
|
|
57
93
|
self.altTrackName = str;
|
|
58
94
|
},
|
|
95
|
+
/**
|
|
96
|
+
* #action
|
|
97
|
+
*/
|
|
59
98
|
setTrackType(str) {
|
|
60
99
|
self.altTrackType = str;
|
|
61
100
|
},
|
|
101
|
+
/**
|
|
102
|
+
* #action
|
|
103
|
+
*/
|
|
62
104
|
clearData() {
|
|
63
105
|
self.trackSource = '';
|
|
64
106
|
self.altTrackName = '';
|
|
@@ -72,16 +114,25 @@ function f(pluginManager) {
|
|
|
72
114
|
},
|
|
73
115
|
}))
|
|
74
116
|
.views(self => ({
|
|
117
|
+
/**
|
|
118
|
+
* #getter
|
|
119
|
+
*/
|
|
75
120
|
get trackAdapter() {
|
|
76
121
|
const { trackData, indexTrackData, adapterHint } = self;
|
|
77
122
|
return trackData
|
|
78
123
|
? (0, tracks_1.guessAdapter)(trackData, indexTrackData, adapterHint, self)
|
|
79
124
|
: undefined;
|
|
80
125
|
},
|
|
126
|
+
/**
|
|
127
|
+
* #getter
|
|
128
|
+
*/
|
|
81
129
|
get trackName() {
|
|
82
130
|
return (self.altTrackName ||
|
|
83
131
|
(self.trackData ? (0, tracks_1.getFileName)(self.trackData) : ''));
|
|
84
132
|
},
|
|
133
|
+
/**
|
|
134
|
+
* #getter
|
|
135
|
+
*/
|
|
85
136
|
get isFtp() {
|
|
86
137
|
var _a, _b;
|
|
87
138
|
const { trackData: track, indexTrackData: index } = self;
|
|
@@ -89,43 +140,70 @@ function f(pluginManager) {
|
|
|
89
140
|
// @ts-expect-error
|
|
90
141
|
(((_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://'))));
|
|
91
142
|
},
|
|
143
|
+
/**
|
|
144
|
+
* #getter
|
|
145
|
+
*/
|
|
92
146
|
get isRelativeTrackUrl() {
|
|
93
147
|
var _a;
|
|
94
148
|
// @ts-expect-error
|
|
95
149
|
const uri = (_a = self.trackData) === null || _a === void 0 ? void 0 : _a.uri;
|
|
96
150
|
return uri ? !isAbsoluteUrl(uri) : false;
|
|
97
151
|
},
|
|
152
|
+
/**
|
|
153
|
+
* #getter
|
|
154
|
+
*/
|
|
98
155
|
get isRelativeIndexUrl() {
|
|
99
156
|
var _a;
|
|
100
157
|
// @ts-expect-error
|
|
101
158
|
const uri = (_a = self.indexTrackData) === null || _a === void 0 ? void 0 : _a.uri;
|
|
102
159
|
return uri ? !isAbsoluteUrl(uri) : false;
|
|
103
160
|
},
|
|
161
|
+
/**
|
|
162
|
+
* #getter
|
|
163
|
+
*/
|
|
104
164
|
get isRelativeUrl() {
|
|
105
165
|
return this.isRelativeIndexUrl || this.isRelativeTrackUrl;
|
|
106
166
|
},
|
|
167
|
+
/**
|
|
168
|
+
* #getter
|
|
169
|
+
*/
|
|
107
170
|
get trackHttp() {
|
|
108
171
|
var _a, _b;
|
|
109
172
|
// @ts-expect-error
|
|
110
173
|
return (_b = (_a = self.trackData) === null || _a === void 0 ? void 0 : _a.uri) === null || _b === void 0 ? void 0 : _b.startsWith('http://');
|
|
111
174
|
},
|
|
175
|
+
/**
|
|
176
|
+
* #getter
|
|
177
|
+
*/
|
|
112
178
|
get indexHttp() {
|
|
113
179
|
var _a, _b;
|
|
114
180
|
// @ts-expect-error
|
|
115
181
|
return (_b = (_a = self.indexTrackData) === null || _a === void 0 ? void 0 : _a.uri) === null || _b === void 0 ? void 0 : _b.startsWith('http://');
|
|
116
182
|
},
|
|
183
|
+
/**
|
|
184
|
+
* #getter
|
|
185
|
+
*/
|
|
117
186
|
get wrongProtocol() {
|
|
118
187
|
return (window.location.protocol === 'https:' &&
|
|
119
188
|
(this.trackHttp || this.indexHttp));
|
|
120
189
|
},
|
|
190
|
+
/**
|
|
191
|
+
* #getter
|
|
192
|
+
*/
|
|
121
193
|
get unsupported() {
|
|
122
194
|
var _a;
|
|
123
195
|
return ((_a = this.trackAdapter) === null || _a === void 0 ? void 0 : _a.type) === tracks_1.UNSUPPORTED;
|
|
124
196
|
},
|
|
197
|
+
/**
|
|
198
|
+
* #getter
|
|
199
|
+
*/
|
|
125
200
|
get assembly() {
|
|
126
201
|
var _a;
|
|
127
202
|
return self.altAssemblyName || ((_a = self.view.assemblyNames) === null || _a === void 0 ? void 0 : _a[0]);
|
|
128
203
|
},
|
|
204
|
+
/**
|
|
205
|
+
* #getter
|
|
206
|
+
*/
|
|
129
207
|
get trackType() {
|
|
130
208
|
return (self.altTrackType ||
|
|
131
209
|
(this.trackAdapter
|
|
@@ -134,6 +212,9 @@ function f(pluginManager) {
|
|
|
134
212
|
},
|
|
135
213
|
}))
|
|
136
214
|
.views(self => ({
|
|
215
|
+
/**
|
|
216
|
+
* #getter
|
|
217
|
+
*/
|
|
137
218
|
get warningMessage() {
|
|
138
219
|
if (self.isFtp) {
|
|
139
220
|
return `Warning: JBrowse cannot access files using the ftp protocol`;
|
|
@@ -1,70 +1,28 @@
|
|
|
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
|
-
const mui_1 = require("tss-react/mui");
|
|
32
8
|
const mobx_react_1 = require("mobx-react");
|
|
33
|
-
const Menu_1 = __importDefault(require("@jbrowse/core/ui/Menu"));
|
|
34
9
|
const util_1 = require("@jbrowse/core/util");
|
|
35
10
|
// icons
|
|
36
11
|
const ShoppingCart_1 = __importDefault(require("@mui/icons-material/ShoppingCart"));
|
|
37
|
-
const
|
|
38
|
-
searchBox: {
|
|
39
|
-
margin: theme.spacing(2),
|
|
40
|
-
},
|
|
41
|
-
menuIcon: {
|
|
42
|
-
marginRight: theme.spacing(1),
|
|
43
|
-
marginBottom: 0,
|
|
44
|
-
},
|
|
45
|
-
}));
|
|
12
|
+
const CascadingMenuButton_1 = __importDefault(require("@jbrowse/core/ui/CascadingMenuButton"));
|
|
46
13
|
const ShoppingCart = (0, mobx_react_1.observer)(function ({ model, }) {
|
|
47
|
-
const { classes } = useStyles();
|
|
48
14
|
const { selection } = model;
|
|
49
15
|
const { pluginManager } = (0, util_1.getEnv)(model);
|
|
50
16
|
const session = (0, util_1.getSession)(model);
|
|
51
|
-
const [selectionEl, setSelectionEl] = (0, react_1.useState)();
|
|
52
17
|
const items = pluginManager.evaluateExtensionPoint('TrackSelector-multiTrackMenuItems', [], { session });
|
|
53
|
-
return (react_1.default.createElement(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
...items.map(item => ({
|
|
63
|
-
...item,
|
|
64
|
-
...('onClick' in item
|
|
65
|
-
? { onClick: () => item.onClick(model) }
|
|
66
|
-
: {}),
|
|
67
|
-
})),
|
|
68
|
-
] })));
|
|
18
|
+
return selection.length ? (react_1.default.createElement(CascadingMenuButton_1.default, { menuItems: [
|
|
19
|
+
{ label: 'Clear', onClick: () => model.clearSelection() },
|
|
20
|
+
...items.map(item => ({
|
|
21
|
+
...item,
|
|
22
|
+
...('onClick' in item ? { onClick: () => item.onClick(model) } : {}),
|
|
23
|
+
})),
|
|
24
|
+
] },
|
|
25
|
+
react_1.default.createElement(material_1.Badge, { badgeContent: selection.length, color: "primary" },
|
|
26
|
+
react_1.default.createElement(ShoppingCart_1.default, null)))) : null;
|
|
69
27
|
});
|
|
70
28
|
exports.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;
|
|
@@ -34,6 +34,7 @@ const Clear_1 = __importDefault(require("@mui/icons-material/Clear"));
|
|
|
34
34
|
const Minimize_1 = __importDefault(require("@mui/icons-material/Minimize"));
|
|
35
35
|
const Add_1 = __importDefault(require("@mui/icons-material/Add"));
|
|
36
36
|
const util_1 = require("@jbrowse/core/util");
|
|
37
|
+
const mobx_react_1 = require("mobx-react");
|
|
37
38
|
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
38
39
|
facet: {
|
|
39
40
|
margin: 0,
|
|
@@ -52,22 +53,22 @@ function ExpandButton({ visible, onClick, }) {
|
|
|
52
53
|
return (react_1.default.createElement(material_1.Tooltip, { title: "Minimize/expand this facet filter" },
|
|
53
54
|
react_1.default.createElement(material_1.IconButton, { onClick: () => onClick(), size: "small" }, visible ? react_1.default.createElement(Minimize_1.default, null) : react_1.default.createElement(Add_1.default, null))));
|
|
54
55
|
}
|
|
55
|
-
|
|
56
|
+
const FacetFilter = (0, mobx_react_1.observer)(function ({ column, vals, width, model, }) {
|
|
56
57
|
const { classes } = useStyles();
|
|
57
58
|
const [visible, setVisible] = (0, react_1.useState)(true);
|
|
59
|
+
const { faceted } = model;
|
|
60
|
+
const { filters } = faceted;
|
|
58
61
|
return (react_1.default.createElement(material_1.FormControl, { key: column.field, className: classes.facet, style: { width } },
|
|
59
62
|
react_1.default.createElement("div", { style: { display: 'flex' } },
|
|
60
63
|
react_1.default.createElement(material_1.Typography, null, column.field),
|
|
61
|
-
react_1.default.createElement(ClearButton, { onClick: () =>
|
|
64
|
+
react_1.default.createElement(ClearButton, { onClick: () => model.faceted.setFilter(column.field, []) }),
|
|
62
65
|
react_1.default.createElement(ExpandButton, { visible: visible, onClick: () => setVisible(!visible) })),
|
|
63
|
-
visible ? (react_1.default.createElement(material_1.Select, { multiple: true, native: true, className: classes.select, value: filters
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
.map(opt => opt.value),
|
|
70
|
-
});
|
|
66
|
+
visible ? (react_1.default.createElement(material_1.Select, { multiple: true, native: true, className: classes.select, value: filters.get(column.field) || [], onChange: event => {
|
|
67
|
+
faceted.setFilter(column.field,
|
|
68
|
+
// @ts-expect-error
|
|
69
|
+
[...event.target.options]
|
|
70
|
+
.filter(opt => opt.selected)
|
|
71
|
+
.map(opt => opt.value));
|
|
71
72
|
} }, vals
|
|
72
73
|
.sort((a, b) => a[0].localeCompare(b[0]))
|
|
73
74
|
.map(([name, count]) => (react_1.default.createElement("option", { key: name, value: name },
|
|
@@ -75,5 +76,5 @@ function FacetFilter({ column, vals, width, dispatch, filters, }) {
|
|
|
75
76
|
" (",
|
|
76
77
|
count,
|
|
77
78
|
")"))))) : null));
|
|
78
|
-
}
|
|
79
|
+
});
|
|
79
80
|
exports.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;
|
|
@@ -5,19 +5,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const react_1 = __importDefault(require("react"));
|
|
7
7
|
const FacetFilter_1 = __importDefault(require("./FacetFilter"));
|
|
8
|
-
|
|
8
|
+
const mobx_react_1 = require("mobx-react");
|
|
9
|
+
const FacetFilters = (0, mobx_react_1.observer)(function ({ rows, columns, width, model, }) {
|
|
9
10
|
var _a, _b;
|
|
11
|
+
const { faceted } = model;
|
|
12
|
+
const { filters } = faceted;
|
|
10
13
|
const facets = columns.slice(1);
|
|
11
14
|
const uniqs = new Map(facets.map(f => [f.field, new Map()]));
|
|
12
15
|
// this code "stages the facet filters" in order that the user has selected
|
|
13
16
|
// them, which relies on the js behavior that the order of the returned keys is
|
|
14
17
|
// related to the insertion order.
|
|
15
|
-
const filterKeys =
|
|
18
|
+
const filterKeys = faceted.filters.keys();
|
|
16
19
|
const facetKeys = facets.map(f => f.field);
|
|
17
20
|
const ret = new Set();
|
|
18
21
|
for (const entry of filterKeys) {
|
|
19
22
|
// give non-empty filters priority
|
|
20
|
-
if ((_a = filters
|
|
23
|
+
if ((_a = filters.get(entry)) === null || _a === void 0 ? void 0 : _a.length) {
|
|
21
24
|
ret.add(entry);
|
|
22
25
|
}
|
|
23
26
|
}
|
|
@@ -40,13 +43,13 @@ function FacetFilters({ rows, columns, dispatch, filters, width, }) {
|
|
|
40
43
|
}
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
|
-
const filter = ((_b = filters
|
|
46
|
+
const filter = ((_b = filters.get(facet)) === null || _b === void 0 ? void 0 : _b.length)
|
|
47
|
+
? new Set(filters.get(facet))
|
|
48
|
+
: undefined;
|
|
44
49
|
currentRows = currentRows.filter(row => {
|
|
45
50
|
return filter !== undefined ? filter.has(row[facet]) : true;
|
|
46
51
|
});
|
|
47
52
|
}
|
|
48
|
-
return (react_1.default.createElement("div", null, facets.map(column => {
|
|
49
|
-
|
|
50
|
-
})));
|
|
51
|
-
}
|
|
53
|
+
return (react_1.default.createElement("div", null, facets.map(column => (react_1.default.createElement(FacetFilter_1.default, { key: column.field, vals: [...uniqs.get(column.field)], column: column, width: width, model: model })))));
|
|
54
|
+
});
|
|
52
55
|
exports.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;
|
|
@@ -34,14 +34,16 @@ const Clear_1 = __importDefault(require("@mui/icons-material/Clear"));
|
|
|
34
34
|
const MoreVert_1 = __importDefault(require("@mui/icons-material/MoreVert"));
|
|
35
35
|
// locals
|
|
36
36
|
const ShoppingCart_1 = __importDefault(require("../ShoppingCart"));
|
|
37
|
-
function FacetedHeader({
|
|
37
|
+
function FacetedHeader({ model, }) {
|
|
38
|
+
const { faceted } = model;
|
|
38
39
|
const [anchorEl, setAnchorEl] = (0, react_1.useState)(null);
|
|
40
|
+
const { showOptions, showFilters, showSparse, useShoppingCart } = faceted;
|
|
39
41
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
40
42
|
react_1.default.createElement(material_1.Grid, { container: true, spacing: 4, alignItems: "center" },
|
|
41
43
|
react_1.default.createElement(material_1.Grid, { item: true },
|
|
42
|
-
react_1.default.createElement(material_1.TextField, { label: "Search...", value: filterText, onChange: event => setFilterText(event.target.value), InputProps: {
|
|
44
|
+
react_1.default.createElement(material_1.TextField, { label: "Search...", value: faceted.filterText, onChange: event => faceted.setFilterText(event.target.value), InputProps: {
|
|
43
45
|
endAdornment: (react_1.default.createElement(material_1.InputAdornment, { position: "end" },
|
|
44
|
-
react_1.default.createElement(material_1.IconButton, { onClick: () => setFilterText('') },
|
|
46
|
+
react_1.default.createElement(material_1.IconButton, { onClick: () => faceted.setFilterText('') },
|
|
45
47
|
react_1.default.createElement(Clear_1.default, null)))),
|
|
46
48
|
} })),
|
|
47
49
|
react_1.default.createElement(material_1.Grid, { item: true },
|
|
@@ -55,25 +57,25 @@ function FacetedHeader({ setFilterText, setUseShoppingCart, setShowSparse, setSh
|
|
|
55
57
|
}, menuItems: [
|
|
56
58
|
{
|
|
57
59
|
label: 'Add tracks to selection instead of turning them on/off',
|
|
58
|
-
onClick: () => setUseShoppingCart(!useShoppingCart),
|
|
60
|
+
onClick: () => faceted.setUseShoppingCart(!useShoppingCart),
|
|
59
61
|
type: 'checkbox',
|
|
60
62
|
checked: useShoppingCart,
|
|
61
63
|
},
|
|
62
64
|
{
|
|
63
65
|
label: 'Show sparse metadata columns',
|
|
64
|
-
onClick: () => setShowSparse(!showSparse),
|
|
66
|
+
onClick: () => faceted.setShowSparse(!showSparse),
|
|
65
67
|
checked: showSparse,
|
|
66
68
|
type: 'checkbox',
|
|
67
69
|
},
|
|
68
70
|
{
|
|
69
71
|
label: 'Show facet filters',
|
|
70
|
-
onClick: () => setShowFilters(!showFilters),
|
|
72
|
+
onClick: () => faceted.setShowFilters(!showFilters),
|
|
71
73
|
checked: showFilters,
|
|
72
74
|
type: 'checkbox',
|
|
73
75
|
},
|
|
74
76
|
{
|
|
75
77
|
label: 'Show extra table options',
|
|
76
|
-
onClick: () => setShowOptions(!showOptions),
|
|
78
|
+
onClick: () => faceted.setShowOptions(!showOptions),
|
|
77
79
|
checked: showOptions,
|
|
78
80
|
type: 'checkbox',
|
|
79
81
|
},
|