@haniffalab/cherita-react 1.4.1-dev.2025-08-13.6fc43290 → 1.4.1-dev.2025-08-18.6fbf7a74
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/cjs/components/dotplot/Dotplot.js +12 -16
- package/dist/cjs/components/heatmap/Heatmap.js +11 -16
- package/dist/cjs/components/matrixplot/Matrixplot.js +11 -16
- package/dist/cjs/components/obs-list/ObsItem.js +14 -14
- package/dist/cjs/components/obs-list/ObsList.js +24 -23
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +25 -31
- package/dist/cjs/components/scatterplot/Scatterplot.js +35 -29
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +9 -3
- package/dist/cjs/components/var-list/VarList.js +16 -14
- package/dist/cjs/components/violin/Violin.js +21 -25
- package/dist/cjs/context/DatasetContext.js +4 -4
- package/dist/cjs/context/SettingsContext.js +175 -40
- package/dist/cjs/utils/Filter.js +15 -10
- package/dist/cjs/utils/Resolver.js +188 -0
- package/dist/cjs/utils/zarrData.js +16 -17
- package/dist/esm/components/dotplot/Dotplot.js +12 -16
- package/dist/esm/components/heatmap/Heatmap.js +11 -16
- package/dist/esm/components/matrixplot/Matrixplot.js +11 -16
- package/dist/esm/components/obs-list/ObsItem.js +14 -14
- package/dist/esm/components/obs-list/ObsList.js +24 -23
- package/dist/esm/components/pseudospatial/Pseudospatial.js +25 -31
- package/dist/esm/components/scatterplot/Scatterplot.js +35 -29
- package/dist/esm/components/scatterplot/ScatterplotControls.js +9 -3
- package/dist/esm/components/var-list/VarList.js +16 -14
- package/dist/esm/components/violin/Violin.js +21 -25
- package/dist/esm/context/DatasetContext.js +4 -4
- package/dist/esm/context/SettingsContext.js +176 -41
- package/dist/esm/utils/Filter.js +15 -10
- package/dist/esm/utils/Resolver.js +176 -0
- package/dist/esm/utils/zarrData.js +16 -17
- package/package.json +2 -2
|
@@ -24,6 +24,7 @@ var _colorHelper = require("../../helpers/color-helper");
|
|
|
24
24
|
var _mapHelper = require("../../helpers/map-helper");
|
|
25
25
|
var _Legend = require("../../utils/Legend");
|
|
26
26
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
27
|
+
var _Resolver = require("../../utils/Resolver");
|
|
27
28
|
var _string = require("../../utils/string");
|
|
28
29
|
var _zarrData = require("../../utils/zarrData");
|
|
29
30
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -43,7 +44,7 @@ const INITIAL_VIEW_STATE = {
|
|
|
43
44
|
bearing: 0
|
|
44
45
|
};
|
|
45
46
|
function Scatterplot(_ref) {
|
|
46
|
-
var
|
|
47
|
+
var _features$features2, _obsmData$serverError, _labelObsData$serverE, _settings$selectedVar, _data$positions;
|
|
47
48
|
let {
|
|
48
49
|
radius = null,
|
|
49
50
|
setShowObs,
|
|
@@ -74,6 +75,8 @@ function Scatterplot(_ref) {
|
|
|
74
75
|
values: []
|
|
75
76
|
});
|
|
76
77
|
const [coordsError, setCoordsError] = (0, _react.useState)(null);
|
|
78
|
+
const [dataError, setDataError] = (0, _react.useState)(null);
|
|
79
|
+
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
77
80
|
|
|
78
81
|
// EditableGeoJsonLayer
|
|
79
82
|
const [mode, setMode] = (0, _react.useState)(() => _editModes.ViewMode);
|
|
@@ -107,9 +110,21 @@ function Scatterplot(_ref) {
|
|
|
107
110
|
setData(d => {
|
|
108
111
|
let values = d.values;
|
|
109
112
|
if (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR) {
|
|
110
|
-
|
|
113
|
+
if (!xData.serverError) {
|
|
114
|
+
values = xData.data;
|
|
115
|
+
setDataError(null);
|
|
116
|
+
} else {
|
|
117
|
+
values = [];
|
|
118
|
+
setDataError(xData.serverError);
|
|
119
|
+
}
|
|
111
120
|
} else if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
|
|
112
|
-
|
|
121
|
+
if (!obsData.serverError) {
|
|
122
|
+
values = obsData.data;
|
|
123
|
+
setDataError(null);
|
|
124
|
+
} else {
|
|
125
|
+
values = [];
|
|
126
|
+
setDataError(obsData.serverError);
|
|
127
|
+
}
|
|
113
128
|
}
|
|
114
129
|
if (!obsmData.serverError && obsmData.data) {
|
|
115
130
|
if (obsmData.data[0].length !== 2) {
|
|
@@ -182,8 +197,7 @@ function Scatterplot(_ref) {
|
|
|
182
197
|
getOriginalIndex,
|
|
183
198
|
sortedIndexMap
|
|
184
199
|
} = (0, _react.useMemo)(() => {
|
|
185
|
-
|
|
186
|
-
if ((settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR || settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === _constants.OBS_TYPES.CONTINUOUS) && data.positions && data.values && data.positions.length === data.values.length) {
|
|
200
|
+
if ((settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR || settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === _constants.OBS_TYPES.CONTINUOUS) && data.positions && data.values && data.positions.length === data.values.length) {
|
|
187
201
|
const sortedIndices = _lodash.default.map(data.values, (_v, i) => i).sort((a, b) => data.values[a] - data.values[b]);
|
|
188
202
|
const sortedIndexMap = new Map(_lodash.default.map(sortedIndices, (originalIndex, sortedIndex) => [originalIndex, sortedIndex]));
|
|
189
203
|
return {
|
|
@@ -200,24 +214,17 @@ function Scatterplot(_ref) {
|
|
|
200
214
|
// return original index
|
|
201
215
|
sortedIndexMap: identitySortedIndexMap // return original index
|
|
202
216
|
};
|
|
203
|
-
}, [data, identityGetOriginalIndex, identitySortedIndexMap,
|
|
217
|
+
}, [data, identityGetOriginalIndex, identitySortedIndexMap, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type, settings.colorEncoding]);
|
|
204
218
|
const sortedObsIndices = (0, _react.useMemo)(() => {
|
|
205
219
|
return obsIndices ? new Set(Array.from(obsIndices, i => sortedIndexMap.get(i))) : obsIndices;
|
|
206
220
|
}, [obsIndices, sortedIndexMap]);
|
|
207
221
|
const isCategorical = (0, _react.useMemo)(() => {
|
|
208
222
|
if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
|
|
209
|
-
|
|
210
|
-
return ((_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.type) === _constants.OBS_TYPES.CATEGORICAL || ((_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.type) === _constants.OBS_TYPES.BOOLEAN;
|
|
223
|
+
return (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === _constants.OBS_TYPES.CATEGORICAL || (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === _constants.OBS_TYPES.BOOLEAN;
|
|
211
224
|
} else {
|
|
212
225
|
return false;
|
|
213
226
|
}
|
|
214
|
-
}, [settings.colorEncoding,
|
|
215
|
-
(0, _react.useEffect)(() => {
|
|
216
|
-
dispatch({
|
|
217
|
-
type: "set.controls.valueRange",
|
|
218
|
-
valueRange: [valueMin, valueMax]
|
|
219
|
-
});
|
|
220
|
-
}, [dispatch, valueMax, valueMin]);
|
|
227
|
+
}, [settings.colorEncoding, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type]);
|
|
221
228
|
const {
|
|
222
229
|
min,
|
|
223
230
|
max
|
|
@@ -226,7 +233,6 @@ function Scatterplot(_ref) {
|
|
|
226
233
|
max: settings.controls.range[1] * (valueMax - valueMin) + valueMin
|
|
227
234
|
};
|
|
228
235
|
const getFillColor = (0, _react.useCallback)((_d, _ref2) => {
|
|
229
|
-
var _settings$selectedObs6, _settings$selectedObs7;
|
|
230
236
|
let {
|
|
231
237
|
index
|
|
232
238
|
} = _ref2;
|
|
@@ -235,10 +241,10 @@ function Scatterplot(_ref) {
|
|
|
235
241
|
value: (sortedData.values[index] - min) / (max - min),
|
|
236
242
|
categorical: isCategorical,
|
|
237
243
|
grayOut: grayOut
|
|
238
|
-
}, useUnsColors && settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS &&
|
|
239
|
-
colorscale:
|
|
244
|
+
}, useUnsColors && settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && selectedObs !== null && selectedObs !== void 0 && selectedObs.colors ? {
|
|
245
|
+
colorscale: selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.colors
|
|
240
246
|
} : {})) || [0, 0, 0, 100];
|
|
241
|
-
}, [isPending, sortedObsIndices, getColor, sortedData.values, min, max, isCategorical, useUnsColors, settings.colorEncoding,
|
|
247
|
+
}, [isPending, sortedObsIndices, getColor, sortedData.values, min, max, isCategorical, useUnsColors, settings.colorEncoding, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.colors]);
|
|
242
248
|
|
|
243
249
|
// @TODO: add support for pseudospatial hover to reflect in radius
|
|
244
250
|
const getRadius = (0, _react.useCallback)((_d, _ref3) => {
|
|
@@ -336,11 +342,9 @@ function Scatterplot(_ref) {
|
|
|
336
342
|
} = _ref5;
|
|
337
343
|
if (!object || (object === null || object === void 0 ? void 0 : object.type) === "Feature") return;
|
|
338
344
|
const text = [];
|
|
339
|
-
if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS &&
|
|
340
|
-
name: settings.selectedObs.name
|
|
341
|
-
})) {
|
|
345
|
+
if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && selectedObs && !_lodash.default.includes(settings.labelObs, selectedObs.name)) {
|
|
342
346
|
var _data$values;
|
|
343
|
-
text.push(getLabel(
|
|
347
|
+
text.push(getLabel(selectedObs, (_data$values = data.values) === null || _data$values === void 0 ? void 0 : _data$values[getOriginalIndex(index)]));
|
|
344
348
|
}
|
|
345
349
|
if (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && settings.selectedVar) {
|
|
346
350
|
var _data$values2;
|
|
@@ -348,7 +352,7 @@ function Scatterplot(_ref) {
|
|
|
348
352
|
}
|
|
349
353
|
if (settings.labelObs.length) {
|
|
350
354
|
text.push(..._lodash.default.map(labelObsData.data, (v, k) => {
|
|
351
|
-
const labelObs =
|
|
355
|
+
const labelObs = settings.data.obs[k];
|
|
352
356
|
return getLabel(labelObs, v[getOriginalIndex(index)]);
|
|
353
357
|
}));
|
|
354
358
|
}
|
|
@@ -366,7 +370,7 @@ function Scatterplot(_ref) {
|
|
|
366
370
|
}
|
|
367
371
|
};
|
|
368
372
|
};
|
|
369
|
-
const error = settings.selectedObsm && ((_obsmData$serverError = obsmData.serverError) === null || _obsmData$serverError === void 0 ? void 0 : _obsmData$serverError.length) ||
|
|
373
|
+
const error = settings.selectedObsm && ((_obsmData$serverError = obsmData.serverError) === null || _obsmData$serverError === void 0 ? void 0 : _obsmData$serverError.length) || dataError || settings.labelObs.length && ((_labelObsData$serverE = labelObsData.serverError) === null || _labelObsData$serverE === void 0 ? void 0 : _labelObsData$serverE.length) || coordsError;
|
|
370
374
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
371
375
|
className: "cherita-container-scatterplot"
|
|
372
376
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -415,13 +419,15 @@ function Scatterplot(_ref) {
|
|
|
415
419
|
className: "cherita-toolbox-footer"
|
|
416
420
|
}, !!error && !isRendering && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
|
|
417
421
|
variant: "danger"
|
|
418
|
-
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
422
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert.Heading, null, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
419
423
|
icon: _freeSolidSvgIcons.faTriangleExclamation
|
|
420
|
-
}), "\xA0Error loading data"), /*#__PURE__*/_react.default.createElement(
|
|
421
|
-
|
|
424
|
+
}), "\xA0Error loading data"), /*#__PURE__*/_react.default.createElement("p", {
|
|
425
|
+
className: "mb-0"
|
|
426
|
+
}, error.message)), /*#__PURE__*/_react.default.createElement(_Toolbox.Toolbox, {
|
|
427
|
+
mode: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? (_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name : settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.name : null,
|
|
422
428
|
obsLength: parseInt((_data$positions = data.positions) === null || _data$positions === void 0 ? void 0 : _data$positions.length),
|
|
423
429
|
slicedLength: parseInt(slicedLength)
|
|
424
|
-
})), /*#__PURE__*/_react.default.createElement(_Legend.Legend, {
|
|
430
|
+
})), !error && /*#__PURE__*/_react.default.createElement(_Legend.Legend, {
|
|
425
431
|
isCategorical: isCategorical,
|
|
426
432
|
min: min,
|
|
427
433
|
max: max
|
|
@@ -8,17 +8,23 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
8
8
|
var _material = require("@mui/material");
|
|
9
9
|
var _reactBootstrap = require("react-bootstrap");
|
|
10
10
|
var _constants = require("../../constants/constants");
|
|
11
|
+
var _FilterContext = require("../../context/FilterContext");
|
|
11
12
|
var _SettingsContext = require("../../context/SettingsContext");
|
|
13
|
+
var _Resolver = require("../../utils/Resolver");
|
|
12
14
|
var _Controls = require("../controls/Controls");
|
|
13
15
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
14
16
|
const ScatterplotControls = () => {
|
|
15
|
-
var _settings$selectedObs;
|
|
16
17
|
const settings = (0, _SettingsContext.useSettings)();
|
|
17
18
|
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
18
19
|
const [sliderValue, setSliderValue] = _react.default.useState(settings.controls.range || [0, 1]);
|
|
19
|
-
const
|
|
20
|
+
const {
|
|
21
|
+
valueMin,
|
|
22
|
+
valueMax
|
|
23
|
+
} = (0, _FilterContext.useFilteredData)();
|
|
24
|
+
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
25
|
+
const isCategorical = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === _constants.OBS_TYPES.CATEGORICAL : false;
|
|
20
26
|
const valueLabelFormat = value => {
|
|
21
|
-
return (value * (
|
|
27
|
+
return (value * (valueMax - valueMin) + valueMin).toFixed(2);
|
|
22
28
|
};
|
|
23
29
|
const marks = [{
|
|
24
30
|
value: 0,
|
|
@@ -20,6 +20,7 @@ var _FilterContext = require("../../context/FilterContext");
|
|
|
20
20
|
var _SettingsContext = require("../../context/SettingsContext");
|
|
21
21
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
22
22
|
var _requests = require("../../utils/requests");
|
|
23
|
+
var _Resolver = require("../../utils/Resolver");
|
|
23
24
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
24
25
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
25
26
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -38,7 +39,7 @@ const useVarMean = function (varKeys) {
|
|
|
38
39
|
url: dataset.url,
|
|
39
40
|
varKeys: _lodash.default.map(varKeys, v => v.isSet ? {
|
|
40
41
|
name: v.name,
|
|
41
|
-
indices: v.vars.map(
|
|
42
|
+
indices: v.vars.map(vv => vv.index)
|
|
42
43
|
} : v.index),
|
|
43
44
|
obsIndices: obsIndices,
|
|
44
45
|
varNamesCol: dataset.varNamesCol
|
|
@@ -48,7 +49,7 @@ const useVarMean = function (varKeys) {
|
|
|
48
49
|
return _objectSpread(_objectSpread({}, p), {}, {
|
|
49
50
|
varKeys: _lodash.default.map(varKeys, v => v.isSet ? {
|
|
50
51
|
name: v.name,
|
|
51
|
-
indices: v.vars.map(
|
|
52
|
+
indices: v.vars.map(vv => vv.index)
|
|
52
53
|
} : v.index),
|
|
53
54
|
obsIndices: obsIndices
|
|
54
55
|
});
|
|
@@ -67,42 +68,43 @@ const sortMeans = (i, means) => {
|
|
|
67
68
|
};
|
|
68
69
|
exports.sortMeans = sortMeans;
|
|
69
70
|
function VarNamesList(_ref) {
|
|
70
|
-
var _settings$selectedVar, _settings$selectedVar2;
|
|
71
71
|
let {
|
|
72
72
|
mode = _constants.SELECTION_MODES.SINGLE,
|
|
73
73
|
displayName = "genes"
|
|
74
74
|
} = _ref;
|
|
75
75
|
const settings = (0, _SettingsContext.useSettings)();
|
|
76
76
|
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
77
|
-
const
|
|
77
|
+
const selectedVar = (0, _Resolver.useSelectedVar)();
|
|
78
|
+
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
79
|
+
const settingsVars = (0, _Resolver.useSettingsVars)();
|
|
80
|
+
const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? (selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.matrix_index) || (selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name) : selectedMultiVar.map(i => i.matrix_index || i.name));
|
|
78
81
|
const [sortedVars, setSortedVars] = (0, _react.useState)([]);
|
|
79
82
|
(0, _react.useEffect)(() => {
|
|
80
83
|
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
81
|
-
|
|
82
|
-
setActive(((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.matrix_index) || ((_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.name));
|
|
84
|
+
setActive((selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.matrix_index) || (selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name));
|
|
83
85
|
}
|
|
84
|
-
}, [mode,
|
|
86
|
+
}, [mode, selectedVar]);
|
|
85
87
|
(0, _react.useEffect)(() => {
|
|
86
88
|
if (mode === _constants.SELECTION_MODES.MULTIPLE) {
|
|
87
|
-
setActive(
|
|
89
|
+
setActive(selectedMultiVar.map(i => i.matrix_index || i.name));
|
|
88
90
|
}
|
|
89
|
-
}, [mode,
|
|
90
|
-
const varMeans = useVarMean(
|
|
91
|
+
}, [mode, selectedMultiVar]);
|
|
92
|
+
const varMeans = useVarMean(settingsVars, settings.varSort.var.sort === _constants.VAR_SORT.MATRIX);
|
|
91
93
|
|
|
92
94
|
// @TODO: deferr sortedVars ?
|
|
93
95
|
(0, _react.useEffect)(() => {
|
|
94
96
|
if (settings.varSort.var.sort === _constants.VAR_SORT.MATRIX) {
|
|
95
97
|
if (!varMeans.isPending && !varMeans.serverError && varMeans.fetchedData) {
|
|
96
|
-
setSortedVars(_lodash.default.orderBy(
|
|
98
|
+
setSortedVars(_lodash.default.orderBy(settingsVars, o => {
|
|
97
99
|
return sortMeans(o, varMeans.fetchedData);
|
|
98
100
|
}, settings.varSort.var.sortOrder));
|
|
99
101
|
}
|
|
100
102
|
} else if (settings.varSort.var.sort === _constants.VAR_SORT.NAME) {
|
|
101
|
-
setSortedVars(_lodash.default.orderBy(
|
|
103
|
+
setSortedVars(_lodash.default.orderBy(settingsVars, "name", settings.varSort.var.sortOrder));
|
|
102
104
|
} else {
|
|
103
|
-
setSortedVars(
|
|
105
|
+
setSortedVars(settingsVars);
|
|
104
106
|
}
|
|
105
|
-
}, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData,
|
|
107
|
+
}, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settingsVars]);
|
|
106
108
|
const makeListItem = item => {
|
|
107
109
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
108
110
|
key: item.matrix_index
|
|
@@ -16,6 +16,7 @@ var _FilterContext = require("../../context/FilterContext");
|
|
|
16
16
|
var _SettingsContext = require("../../context/SettingsContext");
|
|
17
17
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
18
18
|
var _requests = require("../../utils/requests");
|
|
19
|
+
var _Resolver = require("../../utils/Resolver");
|
|
19
20
|
var _Toolbar = require("../toolbar/Toolbar");
|
|
20
21
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
22
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -25,7 +26,6 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
|
25
26
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
26
27
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
27
28
|
function Violin(_ref) {
|
|
28
|
-
var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
|
|
29
29
|
let {
|
|
30
30
|
mode = _constants.VIOLIN_MODES.MULTIKEY,
|
|
31
31
|
showObsBtn = false,
|
|
@@ -45,6 +45,9 @@ function Violin(_ref) {
|
|
|
45
45
|
const [data, setData] = (0, _react.useState)([]);
|
|
46
46
|
const [layout, setLayout] = (0, _react.useState)({});
|
|
47
47
|
const [hasSelections, setHasSelections] = (0, _react.useState)(false);
|
|
48
|
+
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
49
|
+
const selectedVar = (0, _Resolver.useSelectedVar)();
|
|
50
|
+
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
48
51
|
const [params, setParams] = (0, _react.useState)(_objectSpread({
|
|
49
52
|
url: dataset.url,
|
|
50
53
|
mode: mode,
|
|
@@ -52,22 +55,19 @@ function Violin(_ref) {
|
|
|
52
55
|
varNamesCol: dataset.varNamesCol
|
|
53
56
|
}, {
|
|
54
57
|
[_constants.VIOLIN_MODES.MULTIKEY]: {
|
|
55
|
-
varKeys:
|
|
58
|
+
varKeys: selectedMultiVar.map(i => i.isSet ? {
|
|
56
59
|
name: i.name,
|
|
57
60
|
indices: i.vars.map(v => v.index)
|
|
58
61
|
} : i.index),
|
|
59
62
|
obsKeys: [] // @TODO: implement
|
|
60
63
|
},
|
|
61
64
|
[_constants.VIOLIN_MODES.GROUPBY]: {
|
|
62
|
-
varKey:
|
|
63
|
-
name:
|
|
64
|
-
indices:
|
|
65
|
-
} :
|
|
66
|
-
obsCol:
|
|
67
|
-
obsValues: !(
|
|
68
|
-
var _settings$selectedObs4;
|
|
69
|
-
return (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.codesMap[c];
|
|
70
|
-
}),
|
|
65
|
+
varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
|
|
66
|
+
name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
|
|
67
|
+
indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
|
|
68
|
+
} : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index,
|
|
69
|
+
obsCol: selectedObs,
|
|
70
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
|
|
71
71
|
obsIndices: isSliced ? [...(obsIndices || [])] : null
|
|
72
72
|
}
|
|
73
73
|
}[mode]));
|
|
@@ -75,7 +75,7 @@ function Violin(_ref) {
|
|
|
75
75
|
|
|
76
76
|
(0, _react.useEffect)(() => {
|
|
77
77
|
if (mode === _constants.VIOLIN_MODES.MULTIKEY) {
|
|
78
|
-
if (
|
|
78
|
+
if (selectedMultiVar.length) {
|
|
79
79
|
setHasSelections(true);
|
|
80
80
|
} else {
|
|
81
81
|
setHasSelections(false);
|
|
@@ -84,7 +84,7 @@ function Violin(_ref) {
|
|
|
84
84
|
return _objectSpread(_objectSpread({}, p), {}, {
|
|
85
85
|
url: dataset.url,
|
|
86
86
|
mode: mode,
|
|
87
|
-
varKeys:
|
|
87
|
+
varKeys: selectedMultiVar.map(i => i.isSet ? {
|
|
88
88
|
name: i.name,
|
|
89
89
|
indices: i.vars.map(v => v.index)
|
|
90
90
|
} : i.index),
|
|
@@ -93,32 +93,28 @@ function Violin(_ref) {
|
|
|
93
93
|
});
|
|
94
94
|
});
|
|
95
95
|
} else if (mode === _constants.VIOLIN_MODES.GROUPBY) {
|
|
96
|
-
if (
|
|
96
|
+
if (selectedObs && selectedVar) {
|
|
97
97
|
setHasSelections(true);
|
|
98
98
|
} else {
|
|
99
99
|
setHasSelections(false);
|
|
100
100
|
}
|
|
101
101
|
setParams(p => {
|
|
102
|
-
var _settings$selectedVar5, _settings$selectedVar6, _settings$selectedVar7, _settings$selectedVar8, _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
|
|
103
102
|
return _objectSpread(_objectSpread({}, p), {}, {
|
|
104
103
|
url: dataset.url,
|
|
105
104
|
mode: mode,
|
|
106
|
-
varKey:
|
|
107
|
-
name:
|
|
108
|
-
indices:
|
|
109
|
-
} :
|
|
110
|
-
obsCol:
|
|
111
|
-
obsValues: !(
|
|
112
|
-
var _settings$selectedObs8;
|
|
113
|
-
return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
|
|
114
|
-
}),
|
|
105
|
+
varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
|
|
106
|
+
name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
|
|
107
|
+
indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
|
|
108
|
+
} : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index,
|
|
109
|
+
obsCol: selectedObs,
|
|
110
|
+
obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _lodash.default.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
|
|
115
111
|
obsIndices: isSliced ? [...(obsIndices || [])] : null,
|
|
116
112
|
scale: settings.controls.scale.violinplot,
|
|
117
113
|
varNamesCol: dataset.varNamesCol
|
|
118
114
|
});
|
|
119
115
|
});
|
|
120
116
|
}
|
|
121
|
-
}, [settings.controls.scale.violinplot,
|
|
117
|
+
}, [settings.controls.scale.violinplot, selectedMultiVar, selectedObs, selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
|
|
122
118
|
const {
|
|
123
119
|
fetchedData,
|
|
124
120
|
isPending,
|
|
@@ -60,7 +60,7 @@ const persistOptions = {
|
|
|
60
60
|
return false;
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
|
-
buster: "1.4.1-dev.2025-08-
|
|
63
|
+
buster: "1.4.1-dev.2025-08-18.6fbf7a74" || "0.0.0"
|
|
64
64
|
// @TODO: add maxAge and api version numbers as buster
|
|
65
65
|
};
|
|
66
66
|
const initialDataset = {
|
|
@@ -84,13 +84,13 @@ function DatasetProvider(_ref2) {
|
|
|
84
84
|
}, dataset_params));
|
|
85
85
|
return /*#__PURE__*/_react.default.createElement(DatasetContext.Provider, {
|
|
86
86
|
value: dataset
|
|
87
|
+
}, /*#__PURE__*/_react.default.createElement(_reactQueryPersistClient.PersistQueryClientProvider, {
|
|
88
|
+
client: queryClient,
|
|
89
|
+
persistOptions: persistOptions
|
|
87
90
|
}, /*#__PURE__*/_react.default.createElement(_SettingsContext.SettingsProvider, {
|
|
88
91
|
dataset_url: dataset.url,
|
|
89
92
|
defaultSettings: dataset.defaultSettings,
|
|
90
93
|
canOverrideSettings: dataset.canOverrideSettings
|
|
91
|
-
}, /*#__PURE__*/_react.default.createElement(_reactQueryPersistClient.PersistQueryClientProvider, {
|
|
92
|
-
client: queryClient,
|
|
93
|
-
persistOptions: persistOptions
|
|
94
94
|
}, /*#__PURE__*/_react.default.createElement(_FilterContext.FilterProvider, null, /*#__PURE__*/_react.default.createElement(_ZarrDataContext.ZarrDataProvider, null, children)))));
|
|
95
95
|
}
|
|
96
96
|
function useDataset() {
|