@vitessce/vit-s 3.6.7 → 3.6.8
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/index.js +1383 -881
- package/dist-tsc/TitleInfo.d.ts.map +1 -1
- package/dist-tsc/TitleInfo.js +28 -7
- package/dist-tsc/VitS.d.ts.map +1 -1
- package/dist-tsc/VitS.js +11 -2
- package/dist-tsc/data-hook-utils.d.ts +6 -12
- package/dist-tsc/data-hook-utils.d.ts.map +1 -1
- package/dist-tsc/data-hook-utils.js +11 -38
- package/dist-tsc/data-hooks-multilevel-utils.d.ts +51 -5
- package/dist-tsc/data-hooks-multilevel-utils.d.ts.map +1 -1
- package/dist-tsc/data-hooks-multilevel-utils.js +68 -42
- package/dist-tsc/data-hooks-multilevel.d.ts +63 -7
- package/dist-tsc/data-hooks-multilevel.d.ts.map +1 -1
- package/dist-tsc/data-hooks-multilevel.js +70 -14
- package/dist-tsc/data-hooks.d.ts +275 -34
- package/dist-tsc/data-hooks.d.ts.map +1 -1
- package/dist-tsc/data-hooks.js +282 -53
- package/dist-tsc/hooks.js +1 -1
- package/package.json +12 -11
- package/src/TitleInfo.js +64 -3
- package/src/VitS.js +11 -1
- package/src/data-hook-utils.js +10 -44
- package/src/data-hooks-multilevel-utils.js +66 -48
- package/src/data-hooks-multilevel.js +70 -14
- package/src/data-hooks.js +285 -57
- package/src/hooks.js +1 -1
package/dist-tsc/data-hooks.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useState, useEffect, useMemo } from 'react';
|
|
2
2
|
import { CoordinationType, DataType, STATUS } from '@vitessce/constants-internal';
|
|
3
3
|
import { useQuery, useQueries } from '@tanstack/react-query';
|
|
4
|
-
import { LoaderNotFoundError, } from '@vitessce/
|
|
5
|
-
import { useMultiCoordinationValues, useComplexCoordination,
|
|
6
|
-
import {
|
|
4
|
+
import { LoaderNotFoundError, } from '@vitessce/error';
|
|
5
|
+
import { useMultiCoordinationValues, useComplexCoordination, getMatchingLoader, } from './state/hooks.js';
|
|
6
|
+
import { useDataType, useDataTypeMulti, } from './data-hook-utils.js';
|
|
7
7
|
/**
|
|
8
8
|
* Get the dataset description string.
|
|
9
9
|
* @param {object} loaders The object mapping
|
|
@@ -46,52 +46,190 @@ export function useDescription(loaders, dataset) {
|
|
|
46
46
|
* @param {object} initialCoordinationValues Object where
|
|
47
47
|
* keys are coordination type names with the prefix 'initialize',
|
|
48
48
|
* values are initialization preferences as boolean values.
|
|
49
|
-
* @returns {array} [
|
|
50
|
-
* cells is an object and cellsCount is the
|
|
51
|
-
* number of items in the cells object.
|
|
49
|
+
* @returns {array} [data, status, urls, error]
|
|
52
50
|
*/
|
|
53
51
|
export function useObsEmbeddingData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
54
52
|
return useDataType(DataType.OBS_EMBEDDING, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
55
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Wrapper around useDataType.
|
|
56
|
+
* @param {object} loaders
|
|
57
|
+
* @param {string} dataset
|
|
58
|
+
* @param {boolean} isRequired
|
|
59
|
+
* @param {object} coordinationSetters
|
|
60
|
+
* @param {object} initialCoordinationValues
|
|
61
|
+
* @param {object} matchOn
|
|
62
|
+
* @returns {array} [data, status, urls, error]
|
|
63
|
+
*/
|
|
56
64
|
export function useObsSpotsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
57
65
|
return useDataType(DataType.OBS_SPOTS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
58
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Wrapper around useDataType.
|
|
69
|
+
* @param {object} loaders
|
|
70
|
+
* @param {string} dataset
|
|
71
|
+
* @param {boolean} isRequired
|
|
72
|
+
* @param {object} coordinationSetters
|
|
73
|
+
* @param {object} initialCoordinationValues
|
|
74
|
+
* @param {object} matchOn
|
|
75
|
+
* @returns {array} [data, status, urls, error]
|
|
76
|
+
*/
|
|
59
77
|
export function useObsPointsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
60
78
|
return useDataType(DataType.OBS_POINTS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
61
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Wrapper around useDataType.
|
|
82
|
+
* @param {object} loaders
|
|
83
|
+
* @param {string} dataset
|
|
84
|
+
* @param {boolean} isRequired
|
|
85
|
+
* @param {object} coordinationSetters
|
|
86
|
+
* @param {object} initialCoordinationValues
|
|
87
|
+
* @param {object} matchOn
|
|
88
|
+
* @returns {array} [data, status, urls, error]
|
|
89
|
+
*/
|
|
62
90
|
export function useObsLocationsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
63
91
|
return useDataType(DataType.OBS_LOCATIONS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
64
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Wrapper around useDataType.
|
|
95
|
+
* @param {object} loaders
|
|
96
|
+
* @param {string} dataset
|
|
97
|
+
* @param {boolean} isRequired
|
|
98
|
+
* @param {object} coordinationSetters
|
|
99
|
+
* @param {object} initialCoordinationValues
|
|
100
|
+
* @param {object} matchOn
|
|
101
|
+
* @returns {array} [data, status, urls, error]
|
|
102
|
+
*/
|
|
65
103
|
export function useObsLabelsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
66
104
|
return useDataType(DataType.OBS_LABELS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
67
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Wrapper around useDataType.
|
|
108
|
+
* @param {object} loaders
|
|
109
|
+
* @param {string} dataset
|
|
110
|
+
* @param {boolean} isRequired
|
|
111
|
+
* @param {object} coordinationSetters
|
|
112
|
+
* @param {object} initialCoordinationValues
|
|
113
|
+
* @param {object} matchOn
|
|
114
|
+
* @returns {array} [data, status, urls, error]
|
|
115
|
+
*/
|
|
68
116
|
export function useObsSegmentationsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
69
117
|
return useDataType(DataType.OBS_SEGMENTATIONS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
70
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Wrapper around useDataType.
|
|
121
|
+
* @param {object} loaders
|
|
122
|
+
* @param {string} dataset
|
|
123
|
+
* @param {boolean} isRequired
|
|
124
|
+
* @param {object} coordinationSetters
|
|
125
|
+
* @param {object} initialCoordinationValues
|
|
126
|
+
* @param {object} matchOn
|
|
127
|
+
* @returns {array} [data, status, urls, error]
|
|
128
|
+
*/
|
|
71
129
|
export function useObsSetsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
72
130
|
return useDataType(DataType.OBS_SETS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
73
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Wrapper around useDataType.
|
|
134
|
+
* @param {object} loaders
|
|
135
|
+
* @param {string} dataset
|
|
136
|
+
* @param {boolean} isRequired
|
|
137
|
+
* @param {object} coordinationSetters
|
|
138
|
+
* @param {object} initialCoordinationValues
|
|
139
|
+
* @param {object} matchOn
|
|
140
|
+
* @returns {array} [data, status, urls, error]
|
|
141
|
+
*/
|
|
74
142
|
export function useSampleSetsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
75
143
|
return useDataType(DataType.SAMPLE_SETS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
76
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Wrapper around useDataType.
|
|
147
|
+
* @param {object} loaders
|
|
148
|
+
* @param {string} dataset
|
|
149
|
+
* @param {boolean} isRequired
|
|
150
|
+
* @param {object} coordinationSetters
|
|
151
|
+
* @param {object} initialCoordinationValues
|
|
152
|
+
* @param {object} matchOn
|
|
153
|
+
* @returns {array} [data, status, urls, error]
|
|
154
|
+
*/
|
|
77
155
|
export function useSampleEdgesData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
78
156
|
return useDataType(DataType.SAMPLE_EDGES, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
79
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Wrapper around useDataType.
|
|
160
|
+
* @param {object} loaders
|
|
161
|
+
* @param {string} dataset
|
|
162
|
+
* @param {boolean} isRequired
|
|
163
|
+
* @param {object} coordinationSetters
|
|
164
|
+
* @param {object} initialCoordinationValues
|
|
165
|
+
* @param {object} matchOn
|
|
166
|
+
* @returns {array} [data, status, urls, error]
|
|
167
|
+
*/
|
|
80
168
|
export function useObsFeatureMatrixData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
81
169
|
return useDataType(DataType.OBS_FEATURE_MATRIX, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
82
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Wrapper around useDataType.
|
|
173
|
+
* @param {object} loaders
|
|
174
|
+
* @param {string} dataset
|
|
175
|
+
* @param {boolean} isRequired
|
|
176
|
+
* @param {object} coordinationSetters
|
|
177
|
+
* @param {object} initialCoordinationValues
|
|
178
|
+
* @param {object} matchOn
|
|
179
|
+
* @returns {array} [data, status, urls, error]
|
|
180
|
+
*/
|
|
83
181
|
export function useFeatureLabelsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
84
182
|
return useDataType(DataType.FEATURE_LABELS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
85
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Wrapper around useDataType.
|
|
186
|
+
* @param {object} loaders
|
|
187
|
+
* @param {string} dataset
|
|
188
|
+
* @param {boolean} isRequired
|
|
189
|
+
* @param {object} coordinationSetters
|
|
190
|
+
* @param {object} initialCoordinationValues
|
|
191
|
+
* @param {object} matchOn
|
|
192
|
+
* @returns {array} [data, status, urls, error]
|
|
193
|
+
*/
|
|
86
194
|
export function useImageData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
87
195
|
return useDataType(DataType.IMAGE, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
88
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Wrapper around useDataType.
|
|
199
|
+
* @param {object} loaders
|
|
200
|
+
* @param {string} dataset
|
|
201
|
+
* @param {boolean} isRequired
|
|
202
|
+
* @param {object} coordinationSetters
|
|
203
|
+
* @param {object} initialCoordinationValues
|
|
204
|
+
* @param {object} matchOn
|
|
205
|
+
* @returns {array} [data, status, urls, error]
|
|
206
|
+
*/
|
|
89
207
|
export function useGenomicProfilesData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
90
208
|
return useDataType(DataType.GENOMIC_PROFILES, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
91
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Wrapper around useDataType.
|
|
212
|
+
* @param {object} loaders
|
|
213
|
+
* @param {string} dataset
|
|
214
|
+
* @param {boolean} isRequired
|
|
215
|
+
* @param {object} coordinationSetters
|
|
216
|
+
* @param {object} initialCoordinationValues
|
|
217
|
+
* @param {object} matchOn
|
|
218
|
+
* @returns {array} [data, status, urls, error]
|
|
219
|
+
*/
|
|
92
220
|
export function useNeighborhoodsData(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
93
221
|
return useDataType(DataType.NEIGHBORHOODS, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
94
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Wrapper around useDataType.
|
|
225
|
+
* @param {object} loaders
|
|
226
|
+
* @param {string} dataset
|
|
227
|
+
* @param {boolean} isRequired
|
|
228
|
+
* @param {object} coordinationSetters
|
|
229
|
+
* @param {object} initialCoordinationValues
|
|
230
|
+
* @param {object} matchOn
|
|
231
|
+
* @returns {array} [data, status, urls, error]
|
|
232
|
+
*/
|
|
95
233
|
export function useComparisonMetadata(loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn) {
|
|
96
234
|
return useDataType(DataType.COMPARISON_METADATA, loaders, dataset, isRequired, coordinationSetters, initialCoordinationValues, matchOn);
|
|
97
235
|
}
|
|
@@ -106,11 +244,12 @@ export function useComparisonMetadata(loaders, dataset, isRequired, coordination
|
|
|
106
244
|
* @param {boolean} isRequired Should a warning be thrown if
|
|
107
245
|
* loading is unsuccessful?
|
|
108
246
|
* @param {boolean} selection A list of gene names to get expression data for.
|
|
109
|
-
* @
|
|
247
|
+
* @param {object} matchOn Coordination values used to obtain a matching loader.
|
|
248
|
+
* @returns {array} [geneData, geneName, status, errors]
|
|
249
|
+
* where geneData is an array [Uint8Array, ..., Uint8Array]
|
|
110
250
|
* for however many genes are in the selection.
|
|
111
251
|
*/
|
|
112
252
|
export function useFeatureSelection(loaders, dataset, isRequired, selection, matchOn) {
|
|
113
|
-
const setWarning = useSetWarning();
|
|
114
253
|
const featureQueries = useQueries({
|
|
115
254
|
queries: selection?.map(featureId => ({
|
|
116
255
|
structuralSharing: false,
|
|
@@ -147,7 +286,7 @@ export function useFeatureSelection(loaders, dataset, isRequired, selection, mat
|
|
|
147
286
|
}
|
|
148
287
|
// No loader was found.
|
|
149
288
|
if (isRequired) {
|
|
150
|
-
throw new LoaderNotFoundError(
|
|
289
|
+
throw new LoaderNotFoundError(`Loader not found for parameters: ${dataset}, ${DataType.OBS_FEATURE_MATRIX}, ${JSON.stringify(matchOn)}`);
|
|
151
290
|
}
|
|
152
291
|
else {
|
|
153
292
|
return { data: null, dataKey: null };
|
|
@@ -158,6 +297,7 @@ export function useFeatureSelection(loaders, dataset, isRequired, selection, mat
|
|
|
158
297
|
});
|
|
159
298
|
const anyLoading = featureQueries.some(q => q.isFetching);
|
|
160
299
|
const anyError = featureQueries.some(q => q.isError);
|
|
300
|
+
const errors = anyError ? featureQueries.filter(q => q.isError).map(q => q.error) : [];
|
|
161
301
|
// eslint-disable-next-line no-nested-ternary
|
|
162
302
|
const dataStatus = anyLoading
|
|
163
303
|
? STATUS.LOADING
|
|
@@ -165,17 +305,7 @@ export function useFeatureSelection(loaders, dataset, isRequired, selection, mat
|
|
|
165
305
|
const isSuccess = dataStatus === STATUS.SUCCESS;
|
|
166
306
|
const geneData = useMemo(() => (isSuccess ? featureQueries.map(q => q.data?.data || null) : null), [isSuccess, selection, dataset]);
|
|
167
307
|
const loadedGeneName = useMemo(() => (isSuccess ? featureQueries.map(q => q.data?.dataKey || null) : null), [isSuccess, selection, dataset]);
|
|
168
|
-
|
|
169
|
-
featureQueries
|
|
170
|
-
.map(q => q.error)
|
|
171
|
-
.filter(e => Boolean(e))
|
|
172
|
-
.forEach((error) => {
|
|
173
|
-
warn(error, setWarning);
|
|
174
|
-
});
|
|
175
|
-
// Deliberate dependency omissions: use indirect dependencies for efficiency.
|
|
176
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
177
|
-
}, [anyError, setWarning]);
|
|
178
|
-
return [geneData, loadedGeneName, dataStatus];
|
|
308
|
+
return [geneData, loadedGeneName, dataStatus, errors];
|
|
179
309
|
}
|
|
180
310
|
/**
|
|
181
311
|
* Utility hook function which can be used to define
|
|
@@ -191,11 +321,12 @@ export function useFeatureSelection(loaders, dataset, isRequired, selection, mat
|
|
|
191
321
|
* @param {object} matchOn Coordination values used to obtain a matching loader.
|
|
192
322
|
* @param {object} volcanoOptions Options to pass to the loadMulti function of the loader.
|
|
193
323
|
* @param {string} dataType A data type.
|
|
194
|
-
* @returns {array} [{ df, metadata }
|
|
195
|
-
*
|
|
324
|
+
* @returns {array} [{ df, metadata }, status, urls, error]
|
|
325
|
+
* Array of dataframes and their metadata, where
|
|
326
|
+
* df is an object in which each column is stored
|
|
327
|
+
* as an array like { col1: arr1, col2: arr2 }.
|
|
196
328
|
*/
|
|
197
329
|
export function useComparativeDataType(loaders, dataset, isRequired, matchOn, volcanoOptions, dataType) {
|
|
198
|
-
const setWarning = useSetWarning();
|
|
199
330
|
const placeholderObject = useMemo(() => ({}), []);
|
|
200
331
|
const statsQuery = useQuery({
|
|
201
332
|
// TODO: only enable once `loaders` is available?
|
|
@@ -235,7 +366,7 @@ export function useComparativeDataType(loaders, dataset, isRequired, matchOn, vo
|
|
|
235
366
|
// No loader was found.
|
|
236
367
|
if (isRequired) {
|
|
237
368
|
// Status: error
|
|
238
|
-
throw new LoaderNotFoundError(
|
|
369
|
+
throw new LoaderNotFoundError(`Loader not found for parameters: ${dataset}, ${dataType}, ${JSON.stringify(matchOn)}`);
|
|
239
370
|
}
|
|
240
371
|
else {
|
|
241
372
|
// Status: success
|
|
@@ -248,19 +379,41 @@ export function useComparativeDataType(loaders, dataset, isRequired, matchOn, vo
|
|
|
248
379
|
const loadedData = data?.data || placeholderObject;
|
|
249
380
|
const dataStatus = isFetching ? STATUS.LOADING : status;
|
|
250
381
|
const urls = data?.urls;
|
|
251
|
-
|
|
252
|
-
if (error) {
|
|
253
|
-
setWarning(error.message);
|
|
254
|
-
}
|
|
255
|
-
}, [error, setWarning]);
|
|
256
|
-
return [loadedData, dataStatus, urls];
|
|
382
|
+
return [loadedData, dataStatus, urls, error];
|
|
257
383
|
}
|
|
384
|
+
/**
|
|
385
|
+
* Wrapper around useComparativeDataType.
|
|
386
|
+
* @param {object} loaders
|
|
387
|
+
* @param {string} dataset
|
|
388
|
+
* @param {boolean} isRequired
|
|
389
|
+
* @param {object} matchOn
|
|
390
|
+
* @param {object} volcanoOptions
|
|
391
|
+
* @returns {array} [data, status, urls, error].
|
|
392
|
+
*/
|
|
258
393
|
export function useFeatureStatsData(loaders, dataset, isRequired, matchOn, volcanoOptions) {
|
|
259
394
|
return useComparativeDataType(loaders, dataset, isRequired, matchOn, volcanoOptions, DataType.FEATURE_STATS);
|
|
260
395
|
}
|
|
396
|
+
/**
|
|
397
|
+
* Wrapper around useComparativeDataType.
|
|
398
|
+
* @param {object} loaders
|
|
399
|
+
* @param {string} dataset
|
|
400
|
+
* @param {boolean} isRequired
|
|
401
|
+
* @param {object} matchOn
|
|
402
|
+
* @param {object} volcanoOptions
|
|
403
|
+
* @returns {array} [data, status, urls, error].
|
|
404
|
+
*/
|
|
261
405
|
export function useFeatureSetStatsData(loaders, dataset, isRequired, matchOn, volcanoOptions) {
|
|
262
406
|
return useComparativeDataType(loaders, dataset, isRequired, matchOn, volcanoOptions, DataType.FEATURE_SET_STATS);
|
|
263
407
|
}
|
|
408
|
+
/**
|
|
409
|
+
* Wrapper around useComparativeDataType.
|
|
410
|
+
* @param {object} loaders
|
|
411
|
+
* @param {string} dataset
|
|
412
|
+
* @param {boolean} isRequired
|
|
413
|
+
* @param {object} matchOn
|
|
414
|
+
* @param {object} volcanoOptions
|
|
415
|
+
* @returns {array} [data, status, urls, error].
|
|
416
|
+
*/
|
|
264
417
|
export function useObsSetStatsData(loaders, dataset, isRequired, matchOn, volcanoOptions) {
|
|
265
418
|
return useComparativeDataType(loaders, dataset, isRequired, matchOn, volcanoOptions, DataType.OBS_SET_STATS);
|
|
266
419
|
}
|
|
@@ -276,10 +429,11 @@ export function useObsSetStatsData(loaders, dataset, isRequired, matchOn, volcan
|
|
|
276
429
|
* used to identify which loader to use.
|
|
277
430
|
* @param {boolean} isRequired Should a warning be thrown if
|
|
278
431
|
* loading is unsuccessful?
|
|
279
|
-
* @
|
|
432
|
+
* @param {object} matchOn Coordination values used to obtain a matching loader.
|
|
433
|
+
* @returns {object} [attrs, status, urls, error]
|
|
434
|
+
* where attrs is { rows, cols } object containing cell and gene names.
|
|
280
435
|
*/
|
|
281
436
|
export function useObsFeatureMatrixIndices(loaders, dataset, isRequired, matchOn) {
|
|
282
|
-
const setWarning = useSetWarning();
|
|
283
437
|
const placeholderObject = useMemo(() => ({}), []);
|
|
284
438
|
const indicesQuery = useQuery({
|
|
285
439
|
// TODO: only enable once `loaders` is available?
|
|
@@ -327,7 +481,7 @@ export function useObsFeatureMatrixIndices(loaders, dataset, isRequired, matchOn
|
|
|
327
481
|
// No loader was found.
|
|
328
482
|
if (isRequired) {
|
|
329
483
|
// Status: error
|
|
330
|
-
throw new LoaderNotFoundError(
|
|
484
|
+
throw new LoaderNotFoundError(`Loader not found for parameters: ${dataset}, ${DataType.OBS_FEATURE_MATRIX}, ${JSON.stringify(matchOn)}`);
|
|
331
485
|
}
|
|
332
486
|
else {
|
|
333
487
|
// Status: success
|
|
@@ -340,13 +494,18 @@ export function useObsFeatureMatrixIndices(loaders, dataset, isRequired, matchOn
|
|
|
340
494
|
const loadedData = data?.data || placeholderObject;
|
|
341
495
|
const dataStatus = isFetching ? STATUS.LOADING : status;
|
|
342
496
|
const urls = data?.urls;
|
|
343
|
-
|
|
344
|
-
if (error) {
|
|
345
|
-
setWarning(error.message);
|
|
346
|
-
}
|
|
347
|
-
}, [error, setWarning]);
|
|
348
|
-
return [loadedData, dataStatus, urls];
|
|
497
|
+
return [loadedData, dataStatus, urls, error];
|
|
349
498
|
}
|
|
499
|
+
/**
|
|
500
|
+
* Wrapper around useDataTypeMulti.
|
|
501
|
+
* @param {object} coordinationScopes
|
|
502
|
+
* @param {object} coordinationScopesBy
|
|
503
|
+
* @param {object} loaders
|
|
504
|
+
* @param {string} dataset
|
|
505
|
+
* @param {function} mergeCoordination
|
|
506
|
+
* @param {string} viewUid
|
|
507
|
+
* @returns {array} [data, status, urls, errors]
|
|
508
|
+
*/
|
|
350
509
|
export function useMultiObsPoints(coordinationScopes, coordinationScopesBy, loaders, dataset, mergeCoordination, viewUid) {
|
|
351
510
|
const obsTypeCoordination = useComplexCoordination([
|
|
352
511
|
CoordinationType.OBS_TYPE,
|
|
@@ -356,9 +515,19 @@ export function useMultiObsPoints(coordinationScopes, coordinationScopesBy, load
|
|
|
356
515
|
// use coordinationScopes and coordinationScopesBy which are
|
|
357
516
|
// indirect dependencies here.
|
|
358
517
|
[coordinationScopes, coordinationScopesBy]);
|
|
359
|
-
const [obsPointsData, obsPointsDataStatus, obsPointsUrls] = useDataTypeMulti(DataType.OBS_POINTS, loaders, dataset, false, {}, {}, matchOnObj, mergeCoordination, viewUid);
|
|
360
|
-
return [obsPointsData, obsPointsDataStatus, obsPointsUrls];
|
|
518
|
+
const [obsPointsData, obsPointsDataStatus, obsPointsUrls, obsPointsErrors] = useDataTypeMulti(DataType.OBS_POINTS, loaders, dataset, false, {}, {}, matchOnObj, mergeCoordination, viewUid);
|
|
519
|
+
return [obsPointsData, obsPointsDataStatus, obsPointsUrls, obsPointsErrors];
|
|
361
520
|
}
|
|
521
|
+
/**
|
|
522
|
+
* Wrapper around useDataTypeMulti.
|
|
523
|
+
* @param {object} coordinationScopes
|
|
524
|
+
* @param {object} coordinationScopesBy
|
|
525
|
+
* @param {object} loaders
|
|
526
|
+
* @param {string} dataset
|
|
527
|
+
* @param {function} mergeCoordination
|
|
528
|
+
* @param {string} viewUid
|
|
529
|
+
* @returns {array} [data, status, urls, errors]
|
|
530
|
+
*/
|
|
362
531
|
export function useMultiObsSpots(coordinationScopes, coordinationScopesBy, loaders, dataset, mergeCoordination, viewUid) {
|
|
363
532
|
const obsTypeCoordination = useComplexCoordination([
|
|
364
533
|
CoordinationType.OBS_TYPE,
|
|
@@ -368,9 +537,19 @@ export function useMultiObsSpots(coordinationScopes, coordinationScopesBy, loade
|
|
|
368
537
|
// use coordinationScopes and coordinationScopesBy which are
|
|
369
538
|
// indirect dependencies here.
|
|
370
539
|
[coordinationScopes, coordinationScopesBy]);
|
|
371
|
-
const [obsSpotsData, obsSpotsDataStatus, obsSpotsUrls] = useDataTypeMulti(DataType.OBS_SPOTS, loaders, dataset, false, {}, {}, matchOnObj, mergeCoordination, viewUid);
|
|
372
|
-
return [obsSpotsData, obsSpotsDataStatus, obsSpotsUrls];
|
|
540
|
+
const [obsSpotsData, obsSpotsDataStatus, obsSpotsUrls, obsSpotsErrors] = useDataTypeMulti(DataType.OBS_SPOTS, loaders, dataset, false, {}, {}, matchOnObj, mergeCoordination, viewUid);
|
|
541
|
+
return [obsSpotsData, obsSpotsDataStatus, obsSpotsUrls, obsSpotsErrors];
|
|
373
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Wrapper around useDataTypeMulti.
|
|
545
|
+
* @param {object} coordinationScopes
|
|
546
|
+
* @param {object} coordinationScopesBy
|
|
547
|
+
* @param {object} loaders
|
|
548
|
+
* @param {string} dataset
|
|
549
|
+
* @param {function} mergeCoordination
|
|
550
|
+
* @param {string} viewUid
|
|
551
|
+
* @returns {array} [data, status, urls, errors]
|
|
552
|
+
*/
|
|
374
553
|
export function useSpotMultiObsSets(coordinationScopes, coordinationScopesBy, loaders, dataset) {
|
|
375
554
|
const obsTypeCoordination = useComplexCoordination([
|
|
376
555
|
CoordinationType.OBS_TYPE,
|
|
@@ -380,9 +559,19 @@ export function useSpotMultiObsSets(coordinationScopes, coordinationScopesBy, lo
|
|
|
380
559
|
// use coordinationScopes and coordinationScopesBy which are
|
|
381
560
|
// indirect dependencies here.
|
|
382
561
|
[coordinationScopes, coordinationScopesBy]);
|
|
383
|
-
const [obsSetsData, obsSetsDataStatus, obsSetsUrls] = useDataTypeMulti(DataType.OBS_SETS, loaders, dataset, false, {}, {}, matchOnObj);
|
|
384
|
-
return [obsSetsData, obsSetsDataStatus, obsSetsUrls];
|
|
562
|
+
const [obsSetsData, obsSetsDataStatus, obsSetsUrls, obsSetsErrors] = useDataTypeMulti(DataType.OBS_SETS, loaders, dataset, false, {}, {}, matchOnObj);
|
|
563
|
+
return [obsSetsData, obsSetsDataStatus, obsSetsUrls, obsSetsErrors];
|
|
385
564
|
}
|
|
565
|
+
/**
|
|
566
|
+
* Wrapper around useDataTypeMulti.
|
|
567
|
+
* @param {object} coordinationScopes
|
|
568
|
+
* @param {object} coordinationScopesBy
|
|
569
|
+
* @param {object} loaders
|
|
570
|
+
* @param {string} dataset
|
|
571
|
+
* @param {function} mergeCoordination
|
|
572
|
+
* @param {string} viewUid
|
|
573
|
+
* @returns {array} [data, status, urls, errors]
|
|
574
|
+
*/
|
|
386
575
|
export function useSpotMultiFeatureLabels(coordinationScopes, coordinationScopesBy, loaders, dataset) {
|
|
387
576
|
const featureTypeCoordination = useComplexCoordination([
|
|
388
577
|
CoordinationType.FEATURE_TYPE,
|
|
@@ -392,18 +581,43 @@ export function useSpotMultiFeatureLabels(coordinationScopes, coordinationScopes
|
|
|
392
581
|
// use coordinationScopes and coordinationScopesBy which are
|
|
393
582
|
// indirect dependencies here.
|
|
394
583
|
[coordinationScopes, coordinationScopesBy]);
|
|
395
|
-
const [featureLabelsData, featureLabelsStatus, featureLabelsUrls] = useDataTypeMulti(DataType.FEATURE_LABELS, loaders, dataset, false, {}, {}, matchOnObj);
|
|
396
|
-
return [
|
|
584
|
+
const [featureLabelsData, featureLabelsStatus, featureLabelsUrls, featureLabelsErrors,] = useDataTypeMulti(DataType.FEATURE_LABELS, loaders, dataset, false, {}, {}, matchOnObj);
|
|
585
|
+
return [
|
|
586
|
+
featureLabelsData,
|
|
587
|
+
featureLabelsStatus,
|
|
588
|
+
featureLabelsUrls,
|
|
589
|
+
featureLabelsErrors,
|
|
590
|
+
];
|
|
397
591
|
}
|
|
592
|
+
/**
|
|
593
|
+
* Wrapper around useDataTypeMulti.
|
|
594
|
+
* @param {object} coordinationScopes
|
|
595
|
+
* @param {object} coordinationScopesBy
|
|
596
|
+
* @param {object} loaders
|
|
597
|
+
* @param {string} dataset
|
|
598
|
+
* @param {function} mergeCoordination
|
|
599
|
+
* @param {string} viewUid
|
|
600
|
+
* @returns {array} [labelsTypes, data, status, urls, errors]
|
|
601
|
+
*/
|
|
398
602
|
export function useMultiObsLabels(coordinationScopes, obsType, loaders, dataset) {
|
|
399
603
|
const obsLabelsTypes = useMultiCoordinationValues(CoordinationType.OBS_LABELS_TYPE, coordinationScopes);
|
|
400
604
|
const obsLabelsMatchOnObj = useMemo(() => Object.fromEntries(Object.entries(obsLabelsTypes).map(([scope, obsLabelsType]) => ([
|
|
401
605
|
scope,
|
|
402
606
|
{ obsLabelsType, obsType },
|
|
403
607
|
]))), [obsLabelsTypes, obsType]);
|
|
404
|
-
const [obsLabelsData, obsLabelsDataStatus, obsLabelsUrls] = useDataTypeMulti(DataType.OBS_LABELS, loaders, dataset, false, {}, {}, obsLabelsMatchOnObj);
|
|
405
|
-
return [obsLabelsTypes, obsLabelsData, obsLabelsDataStatus, obsLabelsUrls];
|
|
608
|
+
const [obsLabelsData, obsLabelsDataStatus, obsLabelsUrls, obsLabelsErrors] = useDataTypeMulti(DataType.OBS_LABELS, loaders, dataset, false, {}, {}, obsLabelsMatchOnObj);
|
|
609
|
+
return [obsLabelsTypes, obsLabelsData, obsLabelsDataStatus, obsLabelsUrls, obsLabelsErrors];
|
|
406
610
|
}
|
|
611
|
+
/**
|
|
612
|
+
* Wrapper around useDataTypeMulti.
|
|
613
|
+
* @param {object} coordinationScopes
|
|
614
|
+
* @param {object} coordinationScopesBy
|
|
615
|
+
* @param {object} loaders
|
|
616
|
+
* @param {string} dataset
|
|
617
|
+
* @param {function} mergeCoordination
|
|
618
|
+
* @param {string} viewUid
|
|
619
|
+
* @returns {array} [data, status, urls, errors]
|
|
620
|
+
*/
|
|
407
621
|
export function useMultiObsSegmentations(coordinationScopes, coordinationScopesBy, loaders, dataset, mergeCoordination, viewUid) {
|
|
408
622
|
const imageCoordination = useComplexCoordination([
|
|
409
623
|
CoordinationType.FILE_UID,
|
|
@@ -413,9 +627,24 @@ export function useMultiObsSegmentations(coordinationScopes, coordinationScopesB
|
|
|
413
627
|
// use coordinationScopes and coordinationScopesBy which are
|
|
414
628
|
// indirect dependencies here.
|
|
415
629
|
[coordinationScopes, coordinationScopesBy]);
|
|
416
|
-
const [obsSegmentationsData, obsSegmentationsDataStatus, obsSegmentationsUrls,] = useDataTypeMulti(DataType.OBS_SEGMENTATIONS, loaders, dataset, false, {}, {}, matchOnObj, mergeCoordination, viewUid);
|
|
417
|
-
return [
|
|
630
|
+
const [obsSegmentationsData, obsSegmentationsDataStatus, obsSegmentationsUrls, obsSegmentationsErrors,] = useDataTypeMulti(DataType.OBS_SEGMENTATIONS, loaders, dataset, false, {}, {}, matchOnObj, mergeCoordination, viewUid);
|
|
631
|
+
return [
|
|
632
|
+
obsSegmentationsData,
|
|
633
|
+
obsSegmentationsDataStatus,
|
|
634
|
+
obsSegmentationsUrls,
|
|
635
|
+
obsSegmentationsErrors,
|
|
636
|
+
];
|
|
418
637
|
}
|
|
638
|
+
/**
|
|
639
|
+
* Wrapper around useDataTypeMulti.
|
|
640
|
+
* @param {object} coordinationScopes
|
|
641
|
+
* @param {object} coordinationScopesBy
|
|
642
|
+
* @param {object} loaders
|
|
643
|
+
* @param {string} dataset
|
|
644
|
+
* @param {function} mergeCoordination
|
|
645
|
+
* @param {string} viewUid
|
|
646
|
+
* @returns {array} [data, status, urls, errors]
|
|
647
|
+
*/
|
|
419
648
|
export function useMultiImages(coordinationScopes, coordinationScopesBy, loaders, dataset, mergeCoordination, viewUid) {
|
|
420
649
|
// TODO: delegate the generation of matchOnObj to a different hoook and pass as a parameter?
|
|
421
650
|
// (in all of the useMulti data hooks)?
|
|
@@ -427,6 +656,6 @@ export function useMultiImages(coordinationScopes, coordinationScopesBy, loaders
|
|
|
427
656
|
// use coordinationScopes and coordinationScopesBy which are
|
|
428
657
|
// indirect dependencies here.
|
|
429
658
|
[coordinationScopes, coordinationScopesBy]);
|
|
430
|
-
const [imageData, imageDataStatus, imageUrls] = useDataTypeMulti(DataType.IMAGE, loaders, dataset, false, {}, {}, matchOnObj, mergeCoordination, viewUid);
|
|
431
|
-
return [imageData, imageDataStatus, imageUrls];
|
|
659
|
+
const [imageData, imageDataStatus, imageUrls, imageErrors] = useDataTypeMulti(DataType.IMAGE, loaders, dataset, false, {}, {}, matchOnObj, mergeCoordination, viewUid);
|
|
660
|
+
return [imageData, imageDataStatus, imageUrls, imageErrors];
|
|
432
661
|
}
|
package/dist-tsc/hooks.js
CHANGED
|
@@ -306,7 +306,7 @@ export function useExpandedFeatureLabelsMap(featureType, featureLabelsMap, optio
|
|
|
306
306
|
...(stripCuriePrefixes
|
|
307
307
|
? Array.from(fetchedMapping).map(([k, v]) => ([k.split(':')[1], v.split(':')[1]]))
|
|
308
308
|
: fetchedMapping),
|
|
309
|
-
...(featureLabelsMap || []),
|
|
309
|
+
...Array.from(featureLabelsMap?.entries() || []),
|
|
310
310
|
]);
|
|
311
311
|
}, [fetchedMapping, featureLabelsMap, stripCuriePrefixes]);
|
|
312
312
|
// If not enabled, return success
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitessce/vit-s",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.8",
|
|
4
4
|
"author": "HIDIVE Lab at HMS",
|
|
5
5
|
"homepage": "http://vitessce.io",
|
|
6
6
|
"repository": {
|
|
@@ -28,15 +28,16 @@
|
|
|
28
28
|
"zustand": "^5.0.4",
|
|
29
29
|
"react-aria": "^3.28.0",
|
|
30
30
|
"react-error-boundary": "^5.0.0",
|
|
31
|
-
"@vitessce/styles": "3.6.
|
|
32
|
-
"@vitessce/abstract": "3.6.
|
|
33
|
-
"@vitessce/constants-internal": "3.6.
|
|
34
|
-
"@vitessce/plugins": "3.6.
|
|
35
|
-
"@vitessce/schemas": "3.6.
|
|
36
|
-
"@vitessce/
|
|
37
|
-
"@vitessce/
|
|
38
|
-
"@vitessce/
|
|
39
|
-
"@vitessce/
|
|
31
|
+
"@vitessce/styles": "3.6.8",
|
|
32
|
+
"@vitessce/abstract": "3.6.8",
|
|
33
|
+
"@vitessce/constants-internal": "3.6.8",
|
|
34
|
+
"@vitessce/plugins": "3.6.8",
|
|
35
|
+
"@vitessce/schemas": "3.6.8",
|
|
36
|
+
"@vitessce/error": "3.6.8",
|
|
37
|
+
"@vitessce/utils": "3.6.8",
|
|
38
|
+
"@vitessce/sets-utils": "3.6.8",
|
|
39
|
+
"@vitessce/config": "3.6.8",
|
|
40
|
+
"@vitessce/globals": "3.6.8"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@testing-library/jest-dom": "^6.6.3",
|
|
@@ -45,7 +46,7 @@
|
|
|
45
46
|
"react-dom": "^18.0.0",
|
|
46
47
|
"vite": "^6.3.5",
|
|
47
48
|
"vitest": "^3.1.4",
|
|
48
|
-
"@vitessce/types": "3.6.
|
|
49
|
+
"@vitessce/types": "3.6.8"
|
|
49
50
|
},
|
|
50
51
|
"peerDependencies": {
|
|
51
52
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|