@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.
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 +35 -29
  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 +35 -29
  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
@@ -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 _settings$selectedObs2, _settings$selectedObs5, _settings$selectedObs8, _features$features2, _obsmData$serverError, _xData$serverError, _obsData$serverError, _labelObsData$serverE, _settings$selectedVar, _settings$selectedObs9, _data$positions;
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
- values = !xData.serverError ? xData.data : values;
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
- values = !obsData.serverError ? obsData.data : values;
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
- var _settings$selectedObs;
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, settings.colorEncoding, (_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.type]);
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
- var _settings$selectedObs3, _settings$selectedObs4;
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, (_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.type]);
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 && (_settings$selectedObs6 = settings.selectedObs) !== null && _settings$selectedObs6 !== void 0 && _settings$selectedObs6.colors ? {
239
- colorscale: (_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.colors
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, (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.colors]);
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 && settings.selectedObs && !_lodash.default.some(settings.labelObs, {
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(settings.selectedObs, (_data$values = data.values) === null || _data$values === void 0 ? void 0 : _data$values[getOriginalIndex(index)]));
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 = _lodash.default.find(settings.labelObs, o => o.name === k);
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) || settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && ((_xData$serverError = xData.serverError) === null || _xData$serverError === void 0 ? void 0 : _xData$serverError.length) || settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_obsData$serverError = obsData.serverError) === null || _obsData$serverError === void 0 ? void 0 : _obsData$serverError.length) || settings.labelObs.length && ((_labelObsData$serverE = labelObsData.serverError) === null || _labelObsData$serverE === void 0 ? void 0 : _labelObsData$serverE.length) || coordsError;
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(_Toolbox.Toolbox, {
421
- 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 ? (_settings$selectedObs9 = settings.selectedObs) === null || _settings$selectedObs9 === void 0 ? void 0 : _settings$selectedObs9.name : null,
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 isCategorical = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS ? ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === _constants.OBS_TYPES.CATEGORICAL : false;
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 * (settings.controls.valueRange[1] - settings.controls.valueRange[0]) + settings.controls.valueRange[0]).toFixed(2);
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(v => v.index)
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(v => v.index)
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 [active, setActive] = (0, _react.useState)(mode === _constants.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));
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
- var _settings$selectedVar3, _settings$selectedVar4;
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, settings.selectedVar]);
86
+ }, [mode, selectedVar]);
85
87
  (0, _react.useEffect)(() => {
86
88
  if (mode === _constants.SELECTION_MODES.MULTIPLE) {
87
- setActive(settings.selectedMultiVar.map(i => i.matrix_index || i.name));
89
+ setActive(selectedMultiVar.map(i => i.matrix_index || i.name));
88
90
  }
89
- }, [mode, settings.selectedMultiVar]);
90
- const varMeans = useVarMean(settings.vars, settings.varSort.var.sort === _constants.VAR_SORT.MATRIX);
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(settings.vars, o => {
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(settings.vars, "name", settings.varSort.var.sortOrder));
103
+ setSortedVars(_lodash.default.orderBy(settingsVars, "name", settings.varSort.var.sortOrder));
102
104
  } else {
103
- setSortedVars(settings.vars);
105
+ setSortedVars(settingsVars);
104
106
  }
105
- }, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settings.vars]);
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: settings.selectedMultiVar.map(i => i.isSet ? {
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: (_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet ? {
63
- name: (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name,
64
- indices: (_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars.map(v => v.index)
65
- } : (_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.index,
66
- obsCol: settings.selectedObs,
67
- obsValues: !((_settings$selectedObs = settings.selectedObs) !== null && _settings$selectedObs !== void 0 && _settings$selectedObs.omit.length) ? null : _lodash.default.difference(_lodash.default.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 => {
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 (settings.selectedMultiVar.length) {
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: settings.selectedMultiVar.map(i => i.isSet ? {
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 (settings.selectedObs && settings.selectedVar) {
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: (_settings$selectedVar5 = settings.selectedVar) !== null && _settings$selectedVar5 !== void 0 && _settings$selectedVar5.isSet ? {
107
- name: (_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.name,
108
- indices: (_settings$selectedVar7 = settings.selectedVar) === null || _settings$selectedVar7 === void 0 ? void 0 : _settings$selectedVar7.vars.map(v => v.index)
109
- } : (_settings$selectedVar8 = settings.selectedVar) === null || _settings$selectedVar8 === void 0 ? void 0 : _settings$selectedVar8.index,
110
- obsCol: settings.selectedObs,
111
- obsValues: !((_settings$selectedObs5 = settings.selectedObs) !== null && _settings$selectedObs5 !== void 0 && _settings$selectedObs5.omit.length) ? null : _lodash.default.difference(_lodash.default.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 => {
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, settings.selectedMultiVar, settings.selectedObs, settings.selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
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-13.6fc43290" || "0.0.0"
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() {