@haniffalab/cherita-react 1.4.1-dev.2025-08-13.6fc43290 → 1.4.1-dev.2025-08-13.8f63c242

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.
Files changed (31) hide show
  1. package/dist/cjs/components/dotplot/Dotplot.js +12 -16
  2. package/dist/cjs/components/heatmap/Heatmap.js +11 -16
  3. package/dist/cjs/components/matrixplot/Matrixplot.js +11 -16
  4. package/dist/cjs/components/obs-list/ObsItem.js +14 -14
  5. package/dist/cjs/components/obs-list/ObsList.js +24 -23
  6. package/dist/cjs/components/pseudospatial/Pseudospatial.js +25 -31
  7. package/dist/cjs/components/scatterplot/Scatterplot.js +14 -23
  8. package/dist/cjs/components/scatterplot/ScatterplotControls.js +9 -3
  9. package/dist/cjs/components/var-list/VarList.js +16 -14
  10. package/dist/cjs/components/violin/Violin.js +21 -25
  11. package/dist/cjs/context/DatasetContext.js +4 -4
  12. package/dist/cjs/context/SettingsContext.js +175 -40
  13. package/dist/cjs/utils/Filter.js +15 -10
  14. package/dist/cjs/utils/Resolver.js +188 -0
  15. package/dist/cjs/utils/zarrData.js +16 -17
  16. package/dist/esm/components/dotplot/Dotplot.js +12 -16
  17. package/dist/esm/components/heatmap/Heatmap.js +11 -16
  18. package/dist/esm/components/matrixplot/Matrixplot.js +11 -16
  19. package/dist/esm/components/obs-list/ObsItem.js +14 -14
  20. package/dist/esm/components/obs-list/ObsList.js +24 -23
  21. package/dist/esm/components/pseudospatial/Pseudospatial.js +25 -31
  22. package/dist/esm/components/scatterplot/Scatterplot.js +14 -23
  23. package/dist/esm/components/scatterplot/ScatterplotControls.js +9 -3
  24. package/dist/esm/components/var-list/VarList.js +16 -14
  25. package/dist/esm/components/violin/Violin.js +21 -25
  26. package/dist/esm/context/DatasetContext.js +4 -4
  27. package/dist/esm/context/SettingsContext.js +176 -41
  28. package/dist/esm/utils/Filter.js +15 -10
  29. package/dist/esm/utils/Resolver.js +176 -0
  30. package/dist/esm/utils/zarrData.js +16 -17
  31. package/package.json +2 -2
@@ -23,6 +23,7 @@ import { rgbToHex, useColor } from "../../helpers/color-helper";
23
23
  import { MapHelper } from "../../helpers/map-helper";
24
24
  import { Legend } from "../../utils/Legend";
25
25
  import { LoadingLinear, LoadingSpinner } from "../../utils/LoadingIndicators";
26
+ import { useSelectedObs } from "../../utils/Resolver";
26
27
  import { formatNumerical } from "../../utils/string";
27
28
  import { useLabelObsData } from "../../utils/zarrData";
28
29
  window.deck.log.level = 1;
@@ -35,7 +36,7 @@ const INITIAL_VIEW_STATE = {
35
36
  bearing: 0
36
37
  };
37
38
  export function Scatterplot(_ref) {
38
- var _settings$selectedObs2, _settings$selectedObs5, _settings$selectedObs8, _features$features2, _obsmData$serverError, _xData$serverError, _obsData$serverError, _labelObsData$serverE, _settings$selectedVar, _settings$selectedObs9, _data$positions;
39
+ var _features$features2, _obsmData$serverError, _xData$serverError, _obsData$serverError, _labelObsData$serverE, _settings$selectedVar, _data$positions;
39
40
  let {
40
41
  radius = null,
41
42
  setShowObs,
@@ -66,6 +67,7 @@ export function Scatterplot(_ref) {
66
67
  values: []
67
68
  });
68
69
  const [coordsError, setCoordsError] = useState(null);
70
+ const selectedObs = useSelectedObs();
69
71
 
70
72
  // EditableGeoJsonLayer
71
73
  const [mode, setMode] = useState(() => ViewMode);
@@ -174,8 +176,7 @@ export function Scatterplot(_ref) {
174
176
  getOriginalIndex,
175
177
  sortedIndexMap
176
178
  } = useMemo(() => {
177
- var _settings$selectedObs;
178
- if ((settings.colorEncoding === COLOR_ENCODINGS.VAR || settings.colorEncoding === COLOR_ENCODINGS.OBS && ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === OBS_TYPES.CONTINUOUS) && data.positions && data.values && data.positions.length === data.values.length) {
179
+ if ((settings.colorEncoding === COLOR_ENCODINGS.VAR || settings.colorEncoding === COLOR_ENCODINGS.OBS && (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === OBS_TYPES.CONTINUOUS) && data.positions && data.values && data.positions.length === data.values.length) {
179
180
  const sortedIndices = _.map(data.values, (_v, i) => i).sort((a, b) => data.values[a] - data.values[b]);
180
181
  const sortedIndexMap = new Map(_.map(sortedIndices, (originalIndex, sortedIndex) => [originalIndex, sortedIndex]));
181
182
  return {
@@ -192,24 +193,17 @@ export function Scatterplot(_ref) {
192
193
  // return original index
193
194
  sortedIndexMap: identitySortedIndexMap // return original index
194
195
  };
195
- }, [data, identityGetOriginalIndex, identitySortedIndexMap, settings.colorEncoding, (_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.type]);
196
+ }, [data, identityGetOriginalIndex, identitySortedIndexMap, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type, settings.colorEncoding]);
196
197
  const sortedObsIndices = useMemo(() => {
197
198
  return obsIndices ? new Set(Array.from(obsIndices, i => sortedIndexMap.get(i))) : obsIndices;
198
199
  }, [obsIndices, sortedIndexMap]);
199
200
  const isCategorical = useMemo(() => {
200
201
  if (settings.colorEncoding === COLOR_ENCODINGS.OBS) {
201
- var _settings$selectedObs3, _settings$selectedObs4;
202
- return ((_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.type) === OBS_TYPES.CATEGORICAL || ((_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.type) === OBS_TYPES.BOOLEAN;
202
+ return (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === OBS_TYPES.CATEGORICAL || (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === OBS_TYPES.BOOLEAN;
203
203
  } else {
204
204
  return false;
205
205
  }
206
- }, [settings.colorEncoding, (_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.type]);
207
- useEffect(() => {
208
- dispatch({
209
- type: "set.controls.valueRange",
210
- valueRange: [valueMin, valueMax]
211
- });
212
- }, [dispatch, valueMax, valueMin]);
206
+ }, [settings.colorEncoding, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type]);
213
207
  const {
214
208
  min,
215
209
  max
@@ -218,7 +212,6 @@ export function Scatterplot(_ref) {
218
212
  max: settings.controls.range[1] * (valueMax - valueMin) + valueMin
219
213
  };
220
214
  const getFillColor = useCallback((_d, _ref2) => {
221
- var _settings$selectedObs6, _settings$selectedObs7;
222
215
  let {
223
216
  index
224
217
  } = _ref2;
@@ -227,10 +220,10 @@ export function Scatterplot(_ref) {
227
220
  value: (sortedData.values[index] - min) / (max - min),
228
221
  categorical: isCategorical,
229
222
  grayOut: grayOut
230
- }, useUnsColors && settings.colorEncoding === COLOR_ENCODINGS.OBS && (_settings$selectedObs6 = settings.selectedObs) !== null && _settings$selectedObs6 !== void 0 && _settings$selectedObs6.colors ? {
231
- colorscale: (_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.colors
223
+ }, useUnsColors && settings.colorEncoding === COLOR_ENCODINGS.OBS && selectedObs !== null && selectedObs !== void 0 && selectedObs.colors ? {
224
+ colorscale: selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.colors
232
225
  } : {})) || [0, 0, 0, 100];
233
- }, [isPending, sortedObsIndices, getColor, sortedData.values, min, max, isCategorical, useUnsColors, settings.colorEncoding, (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.colors]);
226
+ }, [isPending, sortedObsIndices, getColor, sortedData.values, min, max, isCategorical, useUnsColors, settings.colorEncoding, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.colors]);
234
227
 
235
228
  // @TODO: add support for pseudospatial hover to reflect in radius
236
229
  const getRadius = useCallback((_d, _ref3) => {
@@ -328,11 +321,9 @@ export function Scatterplot(_ref) {
328
321
  } = _ref5;
329
322
  if (!object || (object === null || object === void 0 ? void 0 : object.type) === "Feature") return;
330
323
  const text = [];
331
- if (settings.colorEncoding === COLOR_ENCODINGS.OBS && settings.selectedObs && !_.some(settings.labelObs, {
332
- name: settings.selectedObs.name
333
- })) {
324
+ if (settings.colorEncoding === COLOR_ENCODINGS.OBS && selectedObs && !_.includes(settings.labelObs, selectedObs.name)) {
334
325
  var _data$values;
335
- text.push(getLabel(settings.selectedObs, (_data$values = data.values) === null || _data$values === void 0 ? void 0 : _data$values[getOriginalIndex(index)]));
326
+ text.push(getLabel(selectedObs, (_data$values = data.values) === null || _data$values === void 0 ? void 0 : _data$values[getOriginalIndex(index)]));
336
327
  }
337
328
  if (settings.colorEncoding === COLOR_ENCODINGS.VAR && settings.selectedVar) {
338
329
  var _data$values2;
@@ -340,7 +331,7 @@ export function Scatterplot(_ref) {
340
331
  }
341
332
  if (settings.labelObs.length) {
342
333
  text.push(..._.map(labelObsData.data, (v, k) => {
343
- const labelObs = _.find(settings.labelObs, o => o.name === k);
334
+ const labelObs = settings.data.obs[k];
344
335
  return getLabel(labelObs, v[getOriginalIndex(index)]);
345
336
  }));
346
337
  }
@@ -410,7 +401,7 @@ export function Scatterplot(_ref) {
410
401
  }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
411
402
  icon: faTriangleExclamation
412
403
  }), "\xA0Error loading data"), /*#__PURE__*/React.createElement(Toolbox, {
413
- mode: settings.colorEncoding === COLOR_ENCODINGS.VAR ? (_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name : settings.colorEncoding === COLOR_ENCODINGS.OBS ? (_settings$selectedObs9 = settings.selectedObs) === null || _settings$selectedObs9 === void 0 ? void 0 : _settings$selectedObs9.name : null,
404
+ mode: settings.colorEncoding === COLOR_ENCODINGS.VAR ? (_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name : settings.colorEncoding === COLOR_ENCODINGS.OBS ? selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.name : null,
414
405
  obsLength: parseInt((_data$positions = data.positions) === null || _data$positions === void 0 ? void 0 : _data$positions.length),
415
406
  slicedLength: parseInt(slicedLength)
416
407
  })), /*#__PURE__*/React.createElement(Legend, {
@@ -2,16 +2,22 @@ import React, { useEffect } from "react";
2
2
  import { Box, Slider, Typography } from "@mui/material";
3
3
  import { Form } from "react-bootstrap";
4
4
  import { COLOR_ENCODINGS, OBS_TYPES } from "../../constants/constants";
5
+ import { useFilteredData } from "../../context/FilterContext";
5
6
  import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
7
+ import { useSelectedObs } from "../../utils/Resolver";
6
8
  import { ColorscaleSelect } from "../controls/Controls";
7
9
  export const ScatterplotControls = () => {
8
- var _settings$selectedObs;
9
10
  const settings = useSettings();
10
11
  const dispatch = useSettingsDispatch();
11
12
  const [sliderValue, setSliderValue] = React.useState(settings.controls.range || [0, 1]);
12
- const isCategorical = settings.colorEncoding === COLOR_ENCODINGS.OBS ? ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === OBS_TYPES.CATEGORICAL : false;
13
+ const {
14
+ valueMin,
15
+ valueMax
16
+ } = useFilteredData();
17
+ const selectedObs = useSelectedObs();
18
+ const isCategorical = settings.colorEncoding === COLOR_ENCODINGS.OBS ? (selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.type) === OBS_TYPES.CATEGORICAL : false;
13
19
  const valueLabelFormat = value => {
14
- return (value * (settings.controls.valueRange[1] - settings.controls.valueRange[0]) + settings.controls.valueRange[0]).toFixed(2);
20
+ return (value * (valueMax - valueMin) + valueMin).toFixed(2);
15
21
  };
16
22
  const marks = [{
17
23
  value: 0,
@@ -18,6 +18,7 @@ import { useFilteredData } from "../../context/FilterContext";
18
18
  import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
19
19
  import { LoadingSpinner } from "../../utils/LoadingIndicators";
20
20
  import { useFetch } from "../../utils/requests";
21
+ import { useSelectedMultiVar, useSelectedVar, useSettingsVars } from "../../utils/Resolver";
21
22
  export const useVarMean = function (varKeys) {
22
23
  let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
23
24
  const ENDPOINT = "matrix/mean";
@@ -29,7 +30,7 @@ export const useVarMean = function (varKeys) {
29
30
  url: dataset.url,
30
31
  varKeys: _.map(varKeys, v => v.isSet ? {
31
32
  name: v.name,
32
- indices: v.vars.map(v => v.index)
33
+ indices: v.vars.map(vv => vv.index)
33
34
  } : v.index),
34
35
  obsIndices: obsIndices,
35
36
  varNamesCol: dataset.varNamesCol
@@ -39,7 +40,7 @@ export const useVarMean = function (varKeys) {
39
40
  return _objectSpread(_objectSpread({}, p), {}, {
40
41
  varKeys: _.map(varKeys, v => v.isSet ? {
41
42
  name: v.name,
42
- indices: v.vars.map(v => v.index)
43
+ indices: v.vars.map(vv => vv.index)
43
44
  } : v.index),
44
45
  obsIndices: obsIndices
45
46
  });
@@ -56,42 +57,43 @@ export const sortMeans = (i, means) => {
56
57
  return means[i.name] || _.min(_.values(means)) - 1;
57
58
  };
58
59
  export function VarNamesList(_ref) {
59
- var _settings$selectedVar, _settings$selectedVar2;
60
60
  let {
61
61
  mode = SELECTION_MODES.SINGLE,
62
62
  displayName = "genes"
63
63
  } = _ref;
64
64
  const settings = useSettings();
65
65
  const dispatch = useSettingsDispatch();
66
- const [active, setActive] = useState(mode === SELECTION_MODES.SINGLE ? ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.matrix_index) || ((_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name) : settings.selectedMultiVar.map(i => i.matrix_index || i.name));
66
+ const selectedVar = useSelectedVar();
67
+ const selectedMultiVar = useSelectedMultiVar();
68
+ const settingsVars = useSettingsVars();
69
+ const [active, setActive] = useState(mode === 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));
67
70
  const [sortedVars, setSortedVars] = useState([]);
68
71
  useEffect(() => {
69
72
  if (mode === SELECTION_MODES.SINGLE) {
70
- var _settings$selectedVar3, _settings$selectedVar4;
71
- 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));
73
+ setActive((selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.matrix_index) || (selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name));
72
74
  }
73
- }, [mode, settings.selectedVar]);
75
+ }, [mode, selectedVar]);
74
76
  useEffect(() => {
75
77
  if (mode === SELECTION_MODES.MULTIPLE) {
76
- setActive(settings.selectedMultiVar.map(i => i.matrix_index || i.name));
78
+ setActive(selectedMultiVar.map(i => i.matrix_index || i.name));
77
79
  }
78
- }, [mode, settings.selectedMultiVar]);
79
- const varMeans = useVarMean(settings.vars, settings.varSort.var.sort === VAR_SORT.MATRIX);
80
+ }, [mode, selectedMultiVar]);
81
+ const varMeans = useVarMean(settingsVars, settings.varSort.var.sort === VAR_SORT.MATRIX);
80
82
 
81
83
  // @TODO: deferr sortedVars ?
82
84
  useEffect(() => {
83
85
  if (settings.varSort.var.sort === VAR_SORT.MATRIX) {
84
86
  if (!varMeans.isPending && !varMeans.serverError && varMeans.fetchedData) {
85
- setSortedVars(_.orderBy(settings.vars, o => {
87
+ setSortedVars(_.orderBy(settingsVars, o => {
86
88
  return sortMeans(o, varMeans.fetchedData);
87
89
  }, settings.varSort.var.sortOrder));
88
90
  }
89
91
  } else if (settings.varSort.var.sort === VAR_SORT.NAME) {
90
- setSortedVars(_.orderBy(settings.vars, "name", settings.varSort.var.sortOrder));
92
+ setSortedVars(_.orderBy(settingsVars, "name", settings.varSort.var.sortOrder));
91
93
  } else {
92
- setSortedVars(settings.vars);
94
+ setSortedVars(settingsVars);
93
95
  }
94
- }, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settings.vars]);
96
+ }, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settingsVars]);
95
97
  const makeListItem = item => {
96
98
  return /*#__PURE__*/React.createElement(ListGroup.Item, {
97
99
  key: item.matrix_index
@@ -15,9 +15,9 @@ import { useFilteredData } from "../../context/FilterContext";
15
15
  import { useSettings } from "../../context/SettingsContext";
16
16
  import { LoadingSpinner } from "../../utils/LoadingIndicators";
17
17
  import { useDebouncedFetch } from "../../utils/requests";
18
+ import { useSelectedMultiVar, useSelectedObs, useSelectedVar } from "../../utils/Resolver";
18
19
  import { ControlsPlotlyToolbar, ObsPlotlyToolbar, VarPlotlyToolbar } from "../toolbar/Toolbar";
19
20
  export function Violin(_ref) {
20
- var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
21
21
  let {
22
22
  mode = VIOLIN_MODES.MULTIKEY,
23
23
  showObsBtn = false,
@@ -37,6 +37,9 @@ export function Violin(_ref) {
37
37
  const [data, setData] = useState([]);
38
38
  const [layout, setLayout] = useState({});
39
39
  const [hasSelections, setHasSelections] = useState(false);
40
+ const selectedMultiVar = useSelectedMultiVar();
41
+ const selectedVar = useSelectedVar();
42
+ const selectedObs = useSelectedObs();
40
43
  const [params, setParams] = useState(_objectSpread({
41
44
  url: dataset.url,
42
45
  mode: mode,
@@ -44,22 +47,19 @@ export function Violin(_ref) {
44
47
  varNamesCol: dataset.varNamesCol
45
48
  }, {
46
49
  [VIOLIN_MODES.MULTIKEY]: {
47
- varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
50
+ varKeys: selectedMultiVar.map(i => i.isSet ? {
48
51
  name: i.name,
49
52
  indices: i.vars.map(v => v.index)
50
53
  } : i.index),
51
54
  obsKeys: [] // @TODO: implement
52
55
  },
53
56
  [VIOLIN_MODES.GROUPBY]: {
54
- varKey: (_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet ? {
55
- name: (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name,
56
- indices: (_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars.map(v => v.index)
57
- } : (_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.index,
58
- obsCol: settings.selectedObs,
59
- obsValues: !((_settings$selectedObs = settings.selectedObs) !== null && _settings$selectedObs !== void 0 && _settings$selectedObs.omit.length) ? null : _.difference(_.values((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.codes), (_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.omit).map(c => {
60
- var _settings$selectedObs4;
61
- return (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.codesMap[c];
62
- }),
57
+ varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
58
+ name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
59
+ indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
60
+ } : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index,
61
+ obsCol: selectedObs,
62
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
63
63
  obsIndices: isSliced ? [...(obsIndices || [])] : null
64
64
  }
65
65
  }[mode]));
@@ -67,7 +67,7 @@ export function Violin(_ref) {
67
67
 
68
68
  useEffect(() => {
69
69
  if (mode === VIOLIN_MODES.MULTIKEY) {
70
- if (settings.selectedMultiVar.length) {
70
+ if (selectedMultiVar.length) {
71
71
  setHasSelections(true);
72
72
  } else {
73
73
  setHasSelections(false);
@@ -76,7 +76,7 @@ export function Violin(_ref) {
76
76
  return _objectSpread(_objectSpread({}, p), {}, {
77
77
  url: dataset.url,
78
78
  mode: mode,
79
- varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
79
+ varKeys: selectedMultiVar.map(i => i.isSet ? {
80
80
  name: i.name,
81
81
  indices: i.vars.map(v => v.index)
82
82
  } : i.index),
@@ -85,32 +85,28 @@ export function Violin(_ref) {
85
85
  });
86
86
  });
87
87
  } else if (mode === VIOLIN_MODES.GROUPBY) {
88
- if (settings.selectedObs && settings.selectedVar) {
88
+ if (selectedObs && selectedVar) {
89
89
  setHasSelections(true);
90
90
  } else {
91
91
  setHasSelections(false);
92
92
  }
93
93
  setParams(p => {
94
- var _settings$selectedVar5, _settings$selectedVar6, _settings$selectedVar7, _settings$selectedVar8, _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
95
94
  return _objectSpread(_objectSpread({}, p), {}, {
96
95
  url: dataset.url,
97
96
  mode: mode,
98
- varKey: (_settings$selectedVar5 = settings.selectedVar) !== null && _settings$selectedVar5 !== void 0 && _settings$selectedVar5.isSet ? {
99
- name: (_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.name,
100
- indices: (_settings$selectedVar7 = settings.selectedVar) === null || _settings$selectedVar7 === void 0 ? void 0 : _settings$selectedVar7.vars.map(v => v.index)
101
- } : (_settings$selectedVar8 = settings.selectedVar) === null || _settings$selectedVar8 === void 0 ? void 0 : _settings$selectedVar8.index,
102
- obsCol: settings.selectedObs,
103
- obsValues: !((_settings$selectedObs5 = settings.selectedObs) !== null && _settings$selectedObs5 !== void 0 && _settings$selectedObs5.omit.length) ? null : _.difference(_.values((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.codes), (_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.omit).map(c => {
104
- var _settings$selectedObs8;
105
- return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
106
- }),
97
+ varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
98
+ name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
99
+ indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
100
+ } : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index,
101
+ obsCol: selectedObs,
102
+ obsValues: !(selectedObs !== null && selectedObs !== void 0 && selectedObs.omit.length) ? null : _.difference(selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.values, selectedObs === null || selectedObs === void 0 ? void 0 : selectedObs.omit),
107
103
  obsIndices: isSliced ? [...(obsIndices || [])] : null,
108
104
  scale: settings.controls.scale.violinplot,
109
105
  varNamesCol: dataset.varNamesCol
110
106
  });
111
107
  });
112
108
  }
113
- }, [settings.controls.scale.violinplot, settings.selectedMultiVar, settings.selectedObs, settings.selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
109
+ }, [settings.controls.scale.violinplot, selectedMultiVar, selectedObs, selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
114
110
  const {
115
111
  fetchedData,
116
112
  isPending,
@@ -50,7 +50,7 @@ const persistOptions = {
50
50
  return false;
51
51
  }
52
52
  },
53
- buster: "1.4.1-dev.2025-08-13.6fc43290" || "0.0.0"
53
+ buster: "1.4.1-dev.2025-08-13.8f63c242" || "0.0.0"
54
54
  // @TODO: add maxAge and api version numbers as buster
55
55
  };
56
56
  const initialDataset = {
@@ -74,13 +74,13 @@ export function DatasetProvider(_ref2) {
74
74
  }, dataset_params));
75
75
  return /*#__PURE__*/React.createElement(DatasetContext.Provider, {
76
76
  value: dataset
77
+ }, /*#__PURE__*/React.createElement(PersistQueryClientProvider, {
78
+ client: queryClient,
79
+ persistOptions: persistOptions
77
80
  }, /*#__PURE__*/React.createElement(SettingsProvider, {
78
81
  dataset_url: dataset.url,
79
82
  defaultSettings: dataset.defaultSettings,
80
83
  canOverrideSettings: dataset.canOverrideSettings
81
- }, /*#__PURE__*/React.createElement(PersistQueryClientProvider, {
82
- client: queryClient,
83
- persistOptions: persistOptions
84
84
  }, /*#__PURE__*/React.createElement(FilterProvider, null, /*#__PURE__*/React.createElement(ZarrDataProvider, null, children)))));
85
85
  }
86
86
  export function useDataset() {