@haniffalab/cherita-react 0.2.0-dev.2024-09-26.1ea62883 → 0.2.0-dev.2024-10-16.42ace931
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/components/dotplot/Dotplot.js +2 -10
- package/dist/components/full-page/FullPage.js +133 -0
- package/dist/components/heatmap/Heatmap.js +2 -10
- package/dist/components/matrixplot/Matrixplot.js +2 -10
- package/dist/components/obs-list/ObsItem.js +11 -13
- package/dist/components/obs-list/ObsList.js +3 -6
- package/dist/components/obs-list/ObsToolbar.js +2 -3
- package/dist/components/obsm-list/ObsmList.js +1 -1
- package/dist/components/{Offcanvas → offcanvas}/index.js +0 -19
- package/dist/components/scatterplot/Legend.js +1 -2
- package/dist/components/scatterplot/Scatterplot.js +28 -40
- package/dist/components/scatterplot/ScatterplotControls.js +1 -2
- package/dist/components/scatterplot/SpatialControls.js +2 -3
- package/dist/components/search-bar/SearchResults.js +4 -4
- package/dist/components/var-list/VarItem.js +5 -7
- package/dist/components/var-list/VarList.js +9 -14
- package/dist/components/var-list/VarSet.js +9 -1
- package/dist/components/violin/Violin.js +11 -19
- package/dist/context/DatasetContext.js +2 -3
- package/dist/css/cherita.css +12139 -0
- package/dist/css/cherita.css.map +1 -0
- package/dist/helpers/color-helper.js +3 -3
- package/dist/helpers/zarr-helper.js +1 -1
- package/dist/index.js +12 -11
- package/dist/utils/LoadingIndicators.js +1 -1
- package/dist/utils/VirtualizedList.js +3 -4
- package/dist/utils/errors.js +1 -1
- package/package.json +18 -5
- package/src/scss/cherita.scss +358 -0
- package/dist/App.scss +0 -259
|
@@ -48,7 +48,6 @@ const meanData = (_i, data) => {
|
|
|
48
48
|
});
|
|
49
49
|
};
|
|
50
50
|
function Scatterplot(_ref) {
|
|
51
|
-
var _dataset$selectedVar, _dataset$selectedVar2, _dataset$selectedVar3, _dataset$selectedObs, _dataset$selectedObs2, _dataset$selectedObs7, _dataset$selectedObs11, _dataset$selectedObs12, _dataset$selectedObs13, _dataset$selectedObs15, _features$features2, _obsmData$serverError, _xData$serverError, _obsData$serverError, _labelObsData$serverE, _obsmData$data;
|
|
52
51
|
let {
|
|
53
52
|
radius = 30
|
|
54
53
|
} = _ref;
|
|
@@ -79,11 +78,11 @@ function Scatterplot(_ref) {
|
|
|
79
78
|
url: dataset.url,
|
|
80
79
|
path: "obsm/" + dataset.selectedObsm
|
|
81
80
|
});
|
|
82
|
-
const [xParams, setXParams] = (0, _react.useState)(!dataset.selectedVar ? [] : !
|
|
81
|
+
const [xParams, setXParams] = (0, _react.useState)(!dataset.selectedVar ? [] : !dataset.selectedVar?.isSet ? [{
|
|
83
82
|
url: dataset.url,
|
|
84
83
|
path: "X",
|
|
85
|
-
s: [null,
|
|
86
|
-
}] : _lodash.default.map(
|
|
84
|
+
s: [null, dataset.selectedVar?.matrix_index]
|
|
85
|
+
}] : _lodash.default.map(dataset.selectedVar?.vars, v => {
|
|
87
86
|
return {
|
|
88
87
|
url: dataset.url,
|
|
89
88
|
path: "X",
|
|
@@ -92,7 +91,7 @@ function Scatterplot(_ref) {
|
|
|
92
91
|
}));
|
|
93
92
|
const [obsParams, setObsParams] = (0, _react.useState)({
|
|
94
93
|
url: dataset.url,
|
|
95
|
-
path: "obs/" +
|
|
94
|
+
path: "obs/" + dataset.selectedObs?.name + (dataset.selectedObs?.type === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : "")
|
|
96
95
|
});
|
|
97
96
|
const [labelObsParams, setLabelObsParams] = (0, _react.useState)([]);
|
|
98
97
|
const obsmData = (0, _zarrHelper.useZarr)(obsmParams, null, _zarrHelper.GET_OPTIONS);
|
|
@@ -108,12 +107,11 @@ function Scatterplot(_ref) {
|
|
|
108
107
|
});
|
|
109
108
|
}, [dataset.selectedObsm]);
|
|
110
109
|
(0, _react.useEffect)(() => {
|
|
111
|
-
|
|
112
|
-
setXParams(!dataset.selectedVar ? [] : !((_dataset$selectedVar4 = dataset.selectedVar) !== null && _dataset$selectedVar4 !== void 0 && _dataset$selectedVar4.isSet) ? [{
|
|
110
|
+
setXParams(!dataset.selectedVar ? [] : !dataset.selectedVar?.isSet ? [{
|
|
113
111
|
url: dataset.url,
|
|
114
112
|
path: "X",
|
|
115
|
-
s: [null,
|
|
116
|
-
}] : _lodash.default.map(
|
|
113
|
+
s: [null, dataset.selectedVar?.matrix_index]
|
|
114
|
+
}] : _lodash.default.map(dataset.selectedVar?.vars, v => {
|
|
117
115
|
return {
|
|
118
116
|
url: dataset.url,
|
|
119
117
|
path: "X",
|
|
@@ -123,10 +121,9 @@ function Scatterplot(_ref) {
|
|
|
123
121
|
}, [dataset.selectedVar, dataset.url]);
|
|
124
122
|
(0, _react.useEffect)(() => {
|
|
125
123
|
setObsParams(p => {
|
|
126
|
-
var _dataset$selectedObs3, _dataset$selectedObs4;
|
|
127
124
|
return {
|
|
128
125
|
...p,
|
|
129
|
-
path: "obs/" +
|
|
126
|
+
path: "obs/" + dataset.selectedObs?.name + (dataset.selectedObs?.type === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : "")
|
|
130
127
|
};
|
|
131
128
|
});
|
|
132
129
|
}, [dataset.selectedObs]);
|
|
@@ -158,7 +155,6 @@ function Scatterplot(_ref) {
|
|
|
158
155
|
|
|
159
156
|
(0, _react.useEffect)(() => {
|
|
160
157
|
if (!obsmData.isPending && !obsmData.serverError) {
|
|
161
|
-
var _deckRef$current, _deckRef$current2;
|
|
162
158
|
setIsRendering(true);
|
|
163
159
|
setData(d => {
|
|
164
160
|
return {
|
|
@@ -172,8 +168,8 @@ function Scatterplot(_ref) {
|
|
|
172
168
|
longitude,
|
|
173
169
|
zoom
|
|
174
170
|
} = mapHelper.fitBounds(obsmData.data, {
|
|
175
|
-
width: deckRef
|
|
176
|
-
height: deckRef
|
|
171
|
+
width: deckRef?.current?.deck?.width,
|
|
172
|
+
height: deckRef?.current?.deck?.height
|
|
177
173
|
});
|
|
178
174
|
setViewState(v => {
|
|
179
175
|
return {
|
|
@@ -194,14 +190,13 @@ function Scatterplot(_ref) {
|
|
|
194
190
|
}
|
|
195
191
|
}, [dataset.selectedObsm, obsmData.data, obsmData.isPending, obsmData.serverError]);
|
|
196
192
|
const getBounds = (0, _react.useCallback)(() => {
|
|
197
|
-
var _deckRef$current3, _deckRef$current4;
|
|
198
193
|
const {
|
|
199
194
|
latitude,
|
|
200
195
|
longitude,
|
|
201
196
|
zoom
|
|
202
197
|
} = new _mapHelper.MapHelper().fitBounds(data.positions, {
|
|
203
|
-
width: deckRef
|
|
204
|
-
height: deckRef
|
|
198
|
+
width: deckRef?.current?.deck?.width,
|
|
199
|
+
height: deckRef?.current?.deck?.height
|
|
205
200
|
});
|
|
206
201
|
return {
|
|
207
202
|
latitude,
|
|
@@ -268,12 +263,11 @@ function Scatterplot(_ref) {
|
|
|
268
263
|
}, [dataset.colorEncoding, obsData.data, obsData.isPending, obsData.serverError, dataset.sliceBy.obs]);
|
|
269
264
|
const isCategorical = (0, _react.useMemo)(() => {
|
|
270
265
|
if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
|
|
271
|
-
|
|
272
|
-
return ((_dataset$selectedObs5 = dataset.selectedObs) === null || _dataset$selectedObs5 === void 0 ? void 0 : _dataset$selectedObs5.type) === _constants.OBS_TYPES.CATEGORICAL || ((_dataset$selectedObs6 = dataset.selectedObs) === null || _dataset$selectedObs6 === void 0 ? void 0 : _dataset$selectedObs6.type) === _constants.OBS_TYPES.BOOLEAN;
|
|
266
|
+
return dataset.selectedObs?.type === _constants.OBS_TYPES.CATEGORICAL || dataset.selectedObs?.type === _constants.OBS_TYPES.BOOLEAN;
|
|
273
267
|
} else {
|
|
274
268
|
return false;
|
|
275
269
|
}
|
|
276
|
-
}, [dataset.colorEncoding,
|
|
270
|
+
}, [dataset.colorEncoding, dataset.selectedObs?.type]);
|
|
277
271
|
const isInBins = (v, binEdges, indices) => {
|
|
278
272
|
const lastEdge = _lodash.default.last(binEdges);
|
|
279
273
|
const allButLastEdges = _lodash.default.initial(binEdges);
|
|
@@ -284,12 +278,10 @@ function Scatterplot(_ref) {
|
|
|
284
278
|
return _lodash.default.some(ranges, range => _lodash.default.inRange(v, ...range));
|
|
285
279
|
};
|
|
286
280
|
const isInSlice = (0, _react.useCallback)((index, values, positions) => {
|
|
287
|
-
var _dataset$selectedObs9, _dataset$selectedObs10;
|
|
288
281
|
let inSlice = true;
|
|
289
282
|
if (isCategorical && values) {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
} else if ((dataset.sliceBy.obs || dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_dataset$selectedObs9 = dataset.selectedObs) === null || _dataset$selectedObs9 === void 0 ? void 0 : _dataset$selectedObs9.type) === _constants.OBS_TYPES.CONTINUOUS) && !!((_dataset$selectedObs10 = dataset.selectedObs) !== null && _dataset$selectedObs10 !== void 0 && _dataset$selectedObs10.omit.length) && values) {
|
|
283
|
+
inSlice &= !_lodash.default.includes(dataset.selectedObs?.omit, values[index]);
|
|
284
|
+
} else if ((dataset.sliceBy.obs || dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs?.type === _constants.OBS_TYPES.CONTINUOUS) && !!dataset.selectedObs?.omit.length && values) {
|
|
293
285
|
if (dataset.selectedObs.type === _constants.OBS_TYPES.CATEGORICAL) {
|
|
294
286
|
inSlice &= !_lodash.default.includes(dataset.selectedObs.omit, values[index]);
|
|
295
287
|
} else if (dataset.selectedObs.type === _constants.OBS_TYPES.CONTINUOUS) {
|
|
@@ -301,12 +293,12 @@ function Scatterplot(_ref) {
|
|
|
301
293
|
}
|
|
302
294
|
}
|
|
303
295
|
if (dataset.sliceBy.polygons && positions) {
|
|
304
|
-
inSlice &= _lodash.default.some(features
|
|
296
|
+
inSlice &= _lodash.default.some(features?.features, (_f, i) => {
|
|
305
297
|
return (0, _turf.booleanPointInPolygon)((0, _turf.point)([positions[index][0], positions[index][1]]), features.features[i]);
|
|
306
298
|
});
|
|
307
299
|
}
|
|
308
300
|
return inSlice;
|
|
309
|
-
}, [dataset.colorEncoding,
|
|
301
|
+
}, [dataset.colorEncoding, dataset.selectedObs?.bins?.binEdges, dataset.selectedObs?.omit, dataset.selectedObs?.type, dataset.sliceBy.obs, dataset.sliceBy.polygons, features.features, isCategorical]);
|
|
310
302
|
const {
|
|
311
303
|
filteredIndices,
|
|
312
304
|
valueMin,
|
|
@@ -334,8 +326,7 @@ function Scatterplot(_ref) {
|
|
|
334
326
|
slicedLength: filtered.length
|
|
335
327
|
};
|
|
336
328
|
} else if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
|
|
337
|
-
|
|
338
|
-
const isContinuous = ((_dataset$selectedObs14 = dataset.selectedObs) === null || _dataset$selectedObs14 === void 0 ? void 0 : _dataset$selectedObs14.type) === _constants.OBS_TYPES.CONTINUOUS;
|
|
329
|
+
const isContinuous = dataset.selectedObs?.type === _constants.OBS_TYPES.CONTINUOUS;
|
|
339
330
|
const {
|
|
340
331
|
filtered,
|
|
341
332
|
filteredIndices
|
|
@@ -363,7 +354,7 @@ function Scatterplot(_ref) {
|
|
|
363
354
|
slicedLength: data.values.length
|
|
364
355
|
};
|
|
365
356
|
}
|
|
366
|
-
}, [data.positions, data.sliceValues, data.values, dataset.colorEncoding,
|
|
357
|
+
}, [data.positions, data.sliceValues, data.values, dataset.colorEncoding, dataset.selectedObs?.type, isInSlice]);
|
|
367
358
|
(0, _react.useEffect)(() => {
|
|
368
359
|
filterDispatch({
|
|
369
360
|
type: "set.obs.indices",
|
|
@@ -441,13 +432,12 @@ function Scatterplot(_ref) {
|
|
|
441
432
|
const layers = (0, _react.useDeferredValue)(mode === _editModes.ViewMode ? memoizedLayers.reverse() : memoizedLayers); // draw scatterplot on top of polygons when in ViewMode
|
|
442
433
|
|
|
443
434
|
(0, _react.useEffect)(() => {
|
|
444
|
-
|
|
445
|
-
if (!(features !== null && features !== void 0 && (_features$features = features.features) !== null && _features$features !== void 0 && _features$features.length)) {
|
|
435
|
+
if (!features?.features?.length) {
|
|
446
436
|
dispatch({
|
|
447
437
|
type: "disable.slice.polygons"
|
|
448
438
|
});
|
|
449
439
|
}
|
|
450
|
-
}, [dispatch, features
|
|
440
|
+
}, [dispatch, features?.features?.length]);
|
|
451
441
|
function onLayerClick(info) {
|
|
452
442
|
if (mode !== _editModes.ViewMode) {
|
|
453
443
|
// don't change selection while editing
|
|
@@ -458,9 +448,9 @@ function Scatterplot(_ref) {
|
|
|
458
448
|
const getLabel = function (o, v) {
|
|
459
449
|
let isVar = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
460
450
|
if (isVar || o.type === _constants.OBS_TYPES.CONTINUOUS) {
|
|
461
|
-
return
|
|
451
|
+
return `${o.name}: ${(0, _string.prettyNumerical)(parseFloat(v))}`;
|
|
462
452
|
} else {
|
|
463
|
-
return
|
|
453
|
+
return `${o.name}: ${o.codesMap[v]}`;
|
|
464
454
|
}
|
|
465
455
|
};
|
|
466
456
|
const getTooltip = _ref4 => {
|
|
@@ -473,12 +463,10 @@ function Scatterplot(_ref) {
|
|
|
473
463
|
if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs && !_lodash.default.some(dataset.labelObs, {
|
|
474
464
|
name: dataset.selectedObs.name
|
|
475
465
|
})) {
|
|
476
|
-
|
|
477
|
-
text.push(getLabel(dataset.selectedObs, (_obsData$data = obsData.data) === null || _obsData$data === void 0 ? void 0 : _obsData$data[index]));
|
|
466
|
+
text.push(getLabel(dataset.selectedObs, obsData.data?.[index]));
|
|
478
467
|
}
|
|
479
468
|
if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && dataset.selectedVar) {
|
|
480
|
-
|
|
481
|
-
text.push(getLabel(dataset.selectedVar, (_xData$data = xData.data) === null || _xData$data === void 0 ? void 0 : _xData$data[index], true));
|
|
469
|
+
text.push(getLabel(dataset.selectedVar, xData.data?.[index], true));
|
|
482
470
|
}
|
|
483
471
|
if (dataset.labelObs.length) {
|
|
484
472
|
text.push(..._lodash.default.map(labelObsData.data, (v, k) => {
|
|
@@ -492,7 +480,7 @@ function Scatterplot(_ref) {
|
|
|
492
480
|
};
|
|
493
481
|
};
|
|
494
482
|
const isPending = (isRendering || xData.isPending || obsmData.isPending) && !obsmData.isPending;
|
|
495
|
-
const error = dataset.selectedObsm &&
|
|
483
|
+
const error = dataset.selectedObsm && obsmData.serverError?.length || dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && xData.serverError?.length || dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && obsData.serverError?.length || dataset.labelObs.lengh && labelObsData.serverError?.length;
|
|
496
484
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
497
485
|
className: "cherita-scatterplot",
|
|
498
486
|
children: [obsmData.isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {
|
|
@@ -543,7 +531,7 @@ function Scatterplot(_ref) {
|
|
|
543
531
|
}), "\xA0Error loading data"]
|
|
544
532
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbox.Toolbox, {
|
|
545
533
|
mode: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? dataset.selectedVar.name : dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? dataset.selectedObs.name : null,
|
|
546
|
-
obsLength: parseInt(
|
|
534
|
+
obsLength: parseInt(obsmData.data?.length),
|
|
547
535
|
slicedLength: parseInt(slicedLength)
|
|
548
536
|
})]
|
|
549
537
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Legend.Legend, {
|
|
@@ -16,11 +16,10 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
16
16
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
17
17
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
18
18
|
const ScatterplotControls = () => {
|
|
19
|
-
var _dataset$selectedObs;
|
|
20
19
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
21
20
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
22
21
|
const [sliderValue, setSliderValue] = _react.default.useState(dataset.controls.range || [0, 1]);
|
|
23
|
-
const isCategorical = dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS ?
|
|
22
|
+
const isCategorical = dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? dataset.selectedObs?.type === _constants.OBS_TYPES.CATEGORICAL : false;
|
|
24
23
|
const colormapList = _lodash.default.keys(_colorscales.COLORSCALES).map(key => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
25
24
|
active: dataset.controls.colorScale === key,
|
|
26
25
|
onClick: () => {
|
|
@@ -15,13 +15,12 @@ var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
|
|
|
15
15
|
var _DropdownButton = _interopRequireDefault(require("react-bootstrap/DropdownButton"));
|
|
16
16
|
var _ScatterplotControls = require("./ScatterplotControls");
|
|
17
17
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
18
|
-
var
|
|
18
|
+
var _offcanvas = require("../offcanvas");
|
|
19
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
20
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
22
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
23
23
|
function SpatialControls(_ref) {
|
|
24
|
-
var _features$features;
|
|
25
24
|
let {
|
|
26
25
|
mode,
|
|
27
26
|
setMode,
|
|
@@ -163,7 +162,7 @@ function SpatialControls(_ref) {
|
|
|
163
162
|
icon: _freeSolidSvgIcons.faSliders
|
|
164
163
|
})
|
|
165
164
|
})]
|
|
166
|
-
}), !!
|
|
165
|
+
}), !!features?.features?.length && polygonControls, /*#__PURE__*/(0, _jsxRuntime.jsx)(_offcanvas.OffcanvasControls, {
|
|
167
166
|
show: showControls,
|
|
168
167
|
handleClose: handleCloseControls,
|
|
169
168
|
Controls: _ScatterplotControls.ScatterplotControls
|
|
@@ -58,7 +58,7 @@ function VarSearchResults(_ref) {
|
|
|
58
58
|
}
|
|
59
59
|
}, [fetchedData, isPending, serverError, setShowSuggestions]);
|
|
60
60
|
const suggestionsList = (0, _react.useMemo)(() => {
|
|
61
|
-
return deferredData
|
|
61
|
+
return deferredData?.map(item => {
|
|
62
62
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
63
63
|
as: "button",
|
|
64
64
|
disabled: isStale,
|
|
@@ -80,7 +80,7 @@ function VarSearchResults(_ref) {
|
|
|
80
80
|
maxHeight: "25vh",
|
|
81
81
|
overflowY: "scroll"
|
|
82
82
|
},
|
|
83
|
-
children: deferredData
|
|
83
|
+
children: deferredData?.length ? suggestionsList : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
84
84
|
as: "button",
|
|
85
85
|
disabled: true,
|
|
86
86
|
children: !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data"
|
|
@@ -130,7 +130,7 @@ function DiseasesSearchResults(_ref2) {
|
|
|
130
130
|
}
|
|
131
131
|
}, [fetchedData, isPending, serverError, setShowSuggestions]);
|
|
132
132
|
const suggestionsList = (0, _react.useMemo)(() => {
|
|
133
|
-
return deferredData
|
|
133
|
+
return deferredData?.map(item => {
|
|
134
134
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
135
135
|
as: "button",
|
|
136
136
|
disabled: isStale,
|
|
@@ -156,7 +156,7 @@ function DiseasesSearchResults(_ref2) {
|
|
|
156
156
|
maxHeight: "25vh",
|
|
157
157
|
overflowY: "scroll"
|
|
158
158
|
},
|
|
159
|
-
children: deferredData
|
|
159
|
+
children: deferredData?.length ? suggestionsList : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
160
160
|
as: "button",
|
|
161
161
|
disabled: true,
|
|
162
162
|
children: !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data"
|
|
@@ -25,7 +25,6 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
25
25
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
26
26
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
27
27
|
function VarHistogram(_ref) {
|
|
28
|
-
var _fetchedData$bin_edge;
|
|
29
28
|
let {
|
|
30
29
|
item
|
|
31
30
|
} = _ref;
|
|
@@ -73,11 +72,11 @@ function VarHistogram(_ref) {
|
|
|
73
72
|
let {
|
|
74
73
|
dataIndex
|
|
75
74
|
} = _ref2;
|
|
76
|
-
return
|
|
75
|
+
return `${(0, _string.prettyNumerical)(fetchedData.hist[dataIndex])}`;
|
|
77
76
|
},
|
|
78
77
|
xAxis: {
|
|
79
|
-
data: _lodash.default.range(
|
|
80
|
-
valueFormatter: v =>
|
|
78
|
+
data: _lodash.default.range(fetchedData.bin_edges?.length) || null,
|
|
79
|
+
valueFormatter: v => `Bin [${(0, _string.prettyNumerical)(fetchedData.bin_edges[v][0])}, ${(0, _string.prettyNumerical)(fetchedData.bin_edges[v][1])}${v === fetchedData.bin_edges.length - 1 ? "]" : ")"}`
|
|
81
80
|
},
|
|
82
81
|
slotProps: {
|
|
83
82
|
popper: {
|
|
@@ -89,7 +88,6 @@ function VarHistogram(_ref) {
|
|
|
89
88
|
});
|
|
90
89
|
}
|
|
91
90
|
function VarDiseaseInfoItem(item) {
|
|
92
|
-
var _item$metadata;
|
|
93
91
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
|
|
94
92
|
className: "feature-disease-info",
|
|
95
93
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
@@ -108,7 +106,7 @@ function VarDiseaseInfoItem(item) {
|
|
|
108
106
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
109
107
|
children: item.organs.map(o => o.name).join(", ")
|
|
110
108
|
})]
|
|
111
|
-
}), !!
|
|
109
|
+
}), !!item.metadata?.length && item.metadata.map(m => {
|
|
112
110
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
|
|
113
111
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
114
112
|
children: m.key
|
|
@@ -164,7 +162,7 @@ function SingleSelectionItem(_ref4) {
|
|
|
164
162
|
const hasDiseaseInfo = !isPending && !serverError && !!fetchedData.length;
|
|
165
163
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
166
164
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
167
|
-
className:
|
|
165
|
+
className: `d-flex justify-content-between ${hasDiseaseInfo ? "cursor-pointer" : ""}`,
|
|
168
166
|
onClick: () => {
|
|
169
167
|
setOpenInfo(o => !o);
|
|
170
168
|
},
|
|
@@ -18,7 +18,6 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
18
18
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
19
19
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
20
20
|
function DiseaseVarList(_ref) {
|
|
21
|
-
var _dataset$selectedDise, _dataset$selectedDise3;
|
|
22
21
|
let {
|
|
23
22
|
makeListItem
|
|
24
23
|
} = _ref;
|
|
@@ -29,15 +28,14 @@ function DiseaseVarList(_ref) {
|
|
|
29
28
|
const [params, setParams] = (0, _react.useState)({
|
|
30
29
|
url: dataset.url,
|
|
31
30
|
col: dataset.varNamesCol,
|
|
32
|
-
diseaseId:
|
|
31
|
+
diseaseId: dataset.selectedDisease?.id,
|
|
33
32
|
diseaseDatasets: dataset.diseaseDatasets
|
|
34
33
|
});
|
|
35
34
|
(0, _react.useEffect)(() => {
|
|
36
35
|
setParams(p => {
|
|
37
|
-
var _dataset$selectedDise2;
|
|
38
36
|
return {
|
|
39
37
|
...p,
|
|
40
|
-
diseaseId:
|
|
38
|
+
diseaseId: dataset.selectedDisease?.id
|
|
41
39
|
};
|
|
42
40
|
});
|
|
43
41
|
}, [dataset.selectedDisease]);
|
|
@@ -75,7 +73,7 @@ function DiseaseVarList(_ref) {
|
|
|
75
73
|
children: "clear"
|
|
76
74
|
})]
|
|
77
75
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
78
|
-
children:
|
|
76
|
+
children: dataset.selectedDisease?.name
|
|
79
77
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
|
|
80
78
|
children: diseaseVarList
|
|
81
79
|
})]
|
|
@@ -83,7 +81,6 @@ function DiseaseVarList(_ref) {
|
|
|
83
81
|
});
|
|
84
82
|
}
|
|
85
83
|
function VarNamesList(_ref2) {
|
|
86
|
-
var _dataset$selectedVar, _dataset$selectedVar2, _dataset$selectedVar6, _dataset$selectedVar7;
|
|
87
84
|
let {
|
|
88
85
|
mode = _constants.SELECTION_MODES.SINGLE,
|
|
89
86
|
displayName = "genes",
|
|
@@ -92,10 +89,9 @@ function VarNamesList(_ref2) {
|
|
|
92
89
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
93
90
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
94
91
|
const [varButtons, setVarButtons] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? dataset.selectedVar ? _lodash.default.unionWith([dataset.selectedVar], dataset.varSets, _lodash.default.isEqual) : [...dataset.varSets] : [...dataset.selectedMultiVar, ...dataset.varSets]);
|
|
95
|
-
const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ?
|
|
92
|
+
const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? dataset.selectedVar?.matrix_index || dataset.selectedVar?.name : dataset.selectedMultiVar.map(i => i.matrix_index || i.name));
|
|
96
93
|
(0, _react.useEffect)(() => {
|
|
97
94
|
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
98
|
-
var _dataset$selectedVar3, _dataset$selectedVar4;
|
|
99
95
|
setVarButtons(v => {
|
|
100
96
|
if (dataset.selectedVar) {
|
|
101
97
|
return _lodash.default.unionWith(v, [dataset.selectedVar], _lodash.default.isEqual);
|
|
@@ -103,7 +99,7 @@ function VarNamesList(_ref2) {
|
|
|
103
99
|
return v;
|
|
104
100
|
}
|
|
105
101
|
});
|
|
106
|
-
setActive(
|
|
102
|
+
setActive(dataset.selectedVar?.matrix_index || dataset.selectedVar?.name);
|
|
107
103
|
}
|
|
108
104
|
}, [mode, dataset.selectedVar]);
|
|
109
105
|
(0, _react.useEffect)(() => {
|
|
@@ -129,8 +125,7 @@ function VarNamesList(_ref2) {
|
|
|
129
125
|
return [...updated, ...newSets];
|
|
130
126
|
});
|
|
131
127
|
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
132
|
-
|
|
133
|
-
if ((_dataset$selectedVar5 = dataset.selectedVar) !== null && _dataset$selectedVar5 !== void 0 && _dataset$selectedVar5.isSet) {
|
|
128
|
+
if (dataset.selectedVar?.isSet) {
|
|
134
129
|
const selectedSet = dataset.varSets.find(s => s.name === dataset.selectedVar.name);
|
|
135
130
|
dispatch({
|
|
136
131
|
type: "select.var",
|
|
@@ -143,7 +138,7 @@ function VarNamesList(_ref2) {
|
|
|
143
138
|
vars: dataset.varSets
|
|
144
139
|
});
|
|
145
140
|
}
|
|
146
|
-
}, [mode, dataset.varSets,
|
|
141
|
+
}, [mode, dataset.varSets, dataset.selectedVar?.isSet, dataset.selectedVar?.name, dispatch]);
|
|
147
142
|
const makeListItem = function (item) {
|
|
148
143
|
let isDiseaseGene = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
149
144
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
|
|
@@ -174,13 +169,13 @@ function VarNamesList(_ref2) {
|
|
|
174
169
|
});
|
|
175
170
|
const newSetName = () => {
|
|
176
171
|
let n = 1;
|
|
177
|
-
let setName =
|
|
172
|
+
let setName = `Set ${n}`;
|
|
178
173
|
const setNameExists = name => {
|
|
179
174
|
return dataset.varSets.some(set => set.name === name);
|
|
180
175
|
};
|
|
181
176
|
while (setNameExists(setName)) {
|
|
182
177
|
n++;
|
|
183
|
-
setName =
|
|
178
|
+
setName = `Set ${n}`;
|
|
184
179
|
}
|
|
185
180
|
return setName;
|
|
186
181
|
};
|
|
@@ -61,7 +61,15 @@ function SingleSelectionSet(_ref) {
|
|
|
61
61
|
children: set.name
|
|
62
62
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
63
63
|
className: "d-flex align-items-center gap-1",
|
|
64
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
64
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
|
|
65
|
+
placement: "top",
|
|
66
|
+
overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Tooltip, {
|
|
67
|
+
children: "This set represents the mean value of its features"
|
|
68
|
+
}),
|
|
69
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
|
|
70
|
+
icon: _freeSolidSvgIcons.faCircleInfo
|
|
71
|
+
})
|
|
72
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.List, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
|
|
65
73
|
type: "button",
|
|
66
74
|
variant: isActive ? "primary" : "outline-primary",
|
|
67
75
|
className: "m-0 p-0 px-1",
|
|
@@ -19,7 +19,6 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
19
19
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
20
20
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
21
|
function Violin(_ref) {
|
|
22
|
-
var _dataset$selectedVar, _dataset$selectedVar2, _dataset$selectedVar3, _dataset$selectedVar4, _dataset$selectedObs, _dataset$selectedObs2, _dataset$selectedObs3;
|
|
23
22
|
let {
|
|
24
23
|
mode = _constants.VIOLIN_MODES.MULTIKEY
|
|
25
24
|
} = _ref;
|
|
@@ -42,15 +41,12 @@ function Violin(_ref) {
|
|
|
42
41
|
obsKeys: [] // @TODO: implement
|
|
43
42
|
},
|
|
44
43
|
[_constants.VIOLIN_MODES.GROUPBY]: {
|
|
45
|
-
varKey:
|
|
46
|
-
name:
|
|
47
|
-
indices:
|
|
48
|
-
} :
|
|
44
|
+
varKey: dataset.selectedVar?.isSet ? {
|
|
45
|
+
name: dataset.selectedVar?.name,
|
|
46
|
+
indices: dataset.selectedVar?.vars.map(v => v.index)
|
|
47
|
+
} : dataset.selectedVar?.index,
|
|
49
48
|
obsCol: dataset.selectedObs,
|
|
50
|
-
obsValues: !
|
|
51
|
-
var _dataset$selectedObs4;
|
|
52
|
-
return (_dataset$selectedObs4 = dataset.selectedObs) === null || _dataset$selectedObs4 === void 0 ? void 0 : _dataset$selectedObs4.codesMap[c];
|
|
53
|
-
})
|
|
49
|
+
obsValues: !dataset.selectedObs?.omit.length ? null : _lodash.default.difference(_lodash.default.values(dataset.selectedObs?.codes), dataset.selectedObs?.omit).map(c => dataset.selectedObs?.codesMap[c])
|
|
54
50
|
}
|
|
55
51
|
}[mode]
|
|
56
52
|
});
|
|
@@ -83,20 +79,16 @@ function Violin(_ref) {
|
|
|
83
79
|
setHasSelections(false);
|
|
84
80
|
}
|
|
85
81
|
setParams(p => {
|
|
86
|
-
var _dataset$selectedVar5, _dataset$selectedVar6, _dataset$selectedVar7, _dataset$selectedVar8, _dataset$selectedObs5, _dataset$selectedObs6, _dataset$selectedObs7;
|
|
87
82
|
return {
|
|
88
83
|
...p,
|
|
89
84
|
url: dataset.url,
|
|
90
85
|
mode: mode,
|
|
91
|
-
varKey:
|
|
92
|
-
name:
|
|
93
|
-
indices:
|
|
94
|
-
} :
|
|
86
|
+
varKey: dataset.selectedVar?.isSet ? {
|
|
87
|
+
name: dataset.selectedVar?.name,
|
|
88
|
+
indices: dataset.selectedVar?.vars.map(v => v.index)
|
|
89
|
+
} : dataset.selectedVar?.index,
|
|
95
90
|
obsCol: dataset.selectedObs,
|
|
96
|
-
obsValues: !
|
|
97
|
-
var _dataset$selectedObs8;
|
|
98
|
-
return (_dataset$selectedObs8 = dataset.selectedObs) === null || _dataset$selectedObs8 === void 0 ? void 0 : _dataset$selectedObs8.codesMap[c];
|
|
99
|
-
}),
|
|
91
|
+
obsValues: !dataset.selectedObs?.omit.length ? null : _lodash.default.difference(_lodash.default.values(dataset.selectedObs?.codes), dataset.selectedObs?.omit).map(c => dataset.selectedObs?.codesMap[c]),
|
|
100
92
|
scale: dataset.controls.scale.violinplot.value,
|
|
101
93
|
varNamesCol: dataset.varNamesCol
|
|
102
94
|
};
|
|
@@ -128,7 +120,7 @@ function Violin(_ref) {
|
|
|
128
120
|
maxWidth: "100%",
|
|
129
121
|
maxHeight: "100%"
|
|
130
122
|
}
|
|
131
|
-
}),
|
|
123
|
+
}), fetchedData?.resampled && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Alert, {
|
|
132
124
|
variant: "warning",
|
|
133
125
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("b", {
|
|
134
126
|
children: "Warning:"
|
|
@@ -45,7 +45,7 @@ const persistOptions = {
|
|
|
45
45
|
state
|
|
46
46
|
} = _ref;
|
|
47
47
|
if (state.status === "success") {
|
|
48
|
-
return persistKeys.includes(queryKey
|
|
48
|
+
return persistKeys.includes(queryKey?.[0]);
|
|
49
49
|
}
|
|
50
50
|
return false;
|
|
51
51
|
}
|
|
@@ -142,13 +142,12 @@ function datasetReducer(dataset, action) {
|
|
|
142
142
|
switch (action.type) {
|
|
143
143
|
case "select.obs":
|
|
144
144
|
{
|
|
145
|
-
var _action$obs;
|
|
146
145
|
return {
|
|
147
146
|
...dataset,
|
|
148
147
|
selectedObs: action.obs,
|
|
149
148
|
controls: {
|
|
150
149
|
...dataset.controls,
|
|
151
|
-
range:
|
|
150
|
+
range: action.obs?.type === _constants.OBS_TYPES.CATEGORICAL ? [0, 1] : dataset.controls.range
|
|
152
151
|
},
|
|
153
152
|
colorEncoding: dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && !action.obs ? null : dataset.colorEncoding,
|
|
154
153
|
sliceBy: {
|