@haniffalab/cherita-react 1.4.1 → 1.4.2-dev.2025-10-29.81a6b906

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 (138) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/controls/Controls.js +38 -30
  3. package/dist/cjs/components/dotplot/Dotplot.js +67 -69
  4. package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
  5. package/dist/cjs/components/full-page/FullPage.js +100 -74
  6. package/dist/cjs/components/full-page/PlotAlert.js +45 -0
  7. package/dist/cjs/components/full-page/PlotTypeSelector.js +89 -44
  8. package/dist/cjs/components/heatmap/Heatmap.js +65 -65
  9. package/dist/cjs/components/heatmap/HeatmapControls.js +6 -3
  10. package/dist/cjs/components/icons/DotPlotIcon.js +64 -0
  11. package/dist/cjs/components/icons/HeatmapIcon.js +45 -0
  12. package/dist/cjs/components/icons/MatrixPlotIcon.1.js +57 -0
  13. package/dist/cjs/components/icons/MatrixPlotIcon.js +59 -0
  14. package/dist/cjs/components/icons/ScatterplotIcon.1.js +164 -0
  15. package/dist/cjs/components/icons/ScatterplotIcon.js +144 -0
  16. package/dist/cjs/components/icons/ViolinPlotIcon.js +42 -0
  17. package/dist/cjs/components/matrixplot/Matrixplot.js +65 -66
  18. package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
  19. package/dist/cjs/components/obs-list/ObsItem.js +258 -210
  20. package/dist/cjs/components/obs-list/ObsList.js +161 -133
  21. package/dist/cjs/components/obs-list/ObsToolbar.js +2 -3
  22. package/dist/cjs/components/obsm-list/ObsmList.js +53 -38
  23. package/dist/cjs/components/offcanvas/index.js +61 -31
  24. package/dist/cjs/components/pseudospatial/Pseudospatial.js +132 -76
  25. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +122 -74
  26. package/dist/cjs/components/scatterplot/Scatterplot.js +127 -99
  27. package/dist/cjs/components/scatterplot/ScatterplotControls.js +45 -31
  28. package/dist/cjs/components/scatterplot/SpatialControls.js +140 -113
  29. package/dist/cjs/components/scatterplot/Toolbox.js +41 -30
  30. package/dist/cjs/components/search-bar/SearchBar.js +168 -121
  31. package/dist/cjs/components/search-bar/SearchInfo.js +76 -50
  32. package/dist/cjs/components/search-bar/SearchResults.js +93 -71
  33. package/dist/cjs/components/toolbar/Toolbar.js +46 -37
  34. package/dist/cjs/components/var-list/VarItem.js +115 -88
  35. package/dist/cjs/components/var-list/VarList.js +85 -69
  36. package/dist/cjs/components/var-list/VarListToolbar.js +59 -54
  37. package/dist/cjs/components/var-list/VarSet.js +126 -108
  38. package/dist/cjs/components/violin/Violin.js +109 -107
  39. package/dist/cjs/components/violin/ViolinControls.js +8 -5
  40. package/dist/cjs/constants/colorscales.js +19 -19
  41. package/dist/cjs/constants/constants.js +47 -47
  42. package/dist/cjs/context/DatasetContext.js +24 -16
  43. package/dist/cjs/context/FilterContext.js +11 -9
  44. package/dist/cjs/context/SettingsContext.js +255 -89
  45. package/dist/cjs/context/ZarrDataContext.js +6 -5
  46. package/dist/cjs/helpers/color-helper.js +2 -2
  47. package/dist/cjs/helpers/zarr-helper.js +3 -3
  48. package/dist/cjs/utils/Filter.js +16 -11
  49. package/dist/cjs/utils/Histogram.js +35 -33
  50. package/dist/cjs/utils/ImageViewer.js +11 -8
  51. package/dist/cjs/utils/Legend.js +37 -30
  52. package/dist/cjs/utils/LoadingIndicators.js +15 -13
  53. package/dist/cjs/utils/Resolver.js +213 -0
  54. package/dist/cjs/utils/Skeleton.js +10 -10
  55. package/dist/cjs/utils/StyledTooltip.js +44 -0
  56. package/dist/cjs/utils/VirtualizedList.js +34 -27
  57. package/dist/cjs/utils/errors.js +15 -15
  58. package/dist/cjs/utils/requests.js +21 -9
  59. package/dist/cjs/utils/search.js +4 -4
  60. package/dist/cjs/utils/string.js +6 -6
  61. package/dist/cjs/utils/zarrData.js +20 -21
  62. package/dist/css/cherita.css +64 -42
  63. package/dist/css/cherita.css.map +1 -1
  64. package/dist/esm/components/controls/Controls.js +43 -35
  65. package/dist/esm/components/dotplot/Dotplot.js +77 -78
  66. package/dist/esm/components/dotplot/DotplotControls.js +106 -85
  67. package/dist/esm/components/full-page/FullPage.js +120 -93
  68. package/dist/esm/components/full-page/PlotAlert.js +39 -0
  69. package/dist/esm/components/full-page/PlotTypeSelector.js +90 -45
  70. package/dist/esm/components/heatmap/Heatmap.js +75 -74
  71. package/dist/esm/components/heatmap/HeatmapControls.js +8 -4
  72. package/dist/esm/components/icons/DotPlotIcon.js +58 -0
  73. package/dist/esm/components/icons/HeatmapIcon.js +39 -0
  74. package/dist/esm/components/icons/MatrixPlotIcon.1.js +51 -0
  75. package/dist/esm/components/icons/MatrixPlotIcon.js +53 -0
  76. package/dist/esm/components/icons/ScatterplotIcon.1.js +158 -0
  77. package/dist/esm/components/icons/ScatterplotIcon.js +138 -0
  78. package/dist/esm/components/icons/ViolinPlotIcon.js +36 -0
  79. package/dist/esm/components/matrixplot/Matrixplot.js +75 -75
  80. package/dist/esm/components/matrixplot/MatrixplotControls.js +10 -6
  81. package/dist/esm/components/obs-list/ObsItem.js +273 -222
  82. package/dist/esm/components/obs-list/ObsList.js +176 -147
  83. package/dist/esm/components/obs-list/ObsToolbar.js +3 -3
  84. package/dist/esm/components/obsm-list/ObsmList.js +60 -44
  85. package/dist/esm/components/offcanvas/index.js +67 -37
  86. package/dist/esm/components/pseudospatial/Pseudospatial.js +145 -88
  87. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +127 -78
  88. package/dist/esm/components/scatterplot/Scatterplot.js +148 -119
  89. package/dist/esm/components/scatterplot/ScatterplotControls.js +50 -35
  90. package/dist/esm/components/scatterplot/SpatialControls.js +153 -125
  91. package/dist/esm/components/scatterplot/Toolbox.js +44 -32
  92. package/dist/esm/components/search-bar/SearchBar.js +180 -132
  93. package/dist/esm/components/search-bar/SearchInfo.js +86 -59
  94. package/dist/esm/components/search-bar/SearchResults.js +100 -77
  95. package/dist/esm/components/toolbar/Toolbar.js +49 -39
  96. package/dist/esm/components/var-list/VarItem.js +126 -98
  97. package/dist/esm/components/var-list/VarList.js +99 -82
  98. package/dist/esm/components/var-list/VarListToolbar.js +64 -58
  99. package/dist/esm/components/var-list/VarSet.js +134 -115
  100. package/dist/esm/components/violin/Violin.js +121 -118
  101. package/dist/esm/components/violin/ViolinControls.js +10 -6
  102. package/dist/esm/constants/colorscales.js +19 -19
  103. package/dist/esm/constants/constants.js +47 -47
  104. package/dist/esm/context/DatasetContext.js +31 -22
  105. package/dist/esm/context/FilterContext.js +11 -8
  106. package/dist/esm/context/SettingsContext.js +257 -90
  107. package/dist/esm/context/ZarrDataContext.js +8 -6
  108. package/dist/esm/helpers/color-helper.js +5 -5
  109. package/dist/esm/helpers/map-helper.js +2 -2
  110. package/dist/esm/helpers/zarr-helper.js +6 -6
  111. package/dist/esm/index.js +22 -22
  112. package/dist/esm/utils/Filter.js +22 -17
  113. package/dist/esm/utils/Histogram.js +39 -37
  114. package/dist/esm/utils/ImageViewer.js +12 -8
  115. package/dist/esm/utils/Legend.js +44 -36
  116. package/dist/esm/utils/LoadingIndicators.js +16 -13
  117. package/dist/esm/utils/Resolver.js +201 -0
  118. package/dist/esm/utils/Skeleton.js +11 -10
  119. package/dist/esm/utils/StyledTooltip.js +38 -0
  120. package/dist/esm/utils/VirtualizedList.js +35 -27
  121. package/dist/esm/utils/errors.js +15 -15
  122. package/dist/esm/utils/requests.js +24 -12
  123. package/dist/esm/utils/search.js +7 -7
  124. package/dist/esm/utils/string.js +7 -7
  125. package/dist/esm/utils/zarrData.js +27 -28
  126. package/package.json +21 -9
  127. package/scss/cherita-bootstrap.scss +2 -2
  128. package/scss/cherita.scss +43 -17
  129. package/scss/components/accordions.scss +4 -1
  130. package/scss/components/layouts.scss +15 -33
  131. package/scss/components/lists.scss +8 -4
  132. package/scss/components/plotly.scss +38 -26
  133. package/scss/components/plots.scss +14 -1
  134. package/dist/assets/images/plots/dotplot.svg +0 -152
  135. package/dist/assets/images/plots/heatmap.svg +0 -193
  136. package/dist/assets/images/plots/matrixplot.svg +0 -275
  137. package/dist/assets/images/plots/scatterplot.svg +0 -198
  138. package/dist/assets/images/plots/violin.svg +0 -50
@@ -4,18 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ObsmKeysListBtn = void 0;
7
- var _react = _interopRequireDefault(require("react"));
8
7
  var _reactBootstrap = require("react-bootstrap");
9
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
+ var _jsxRuntime = require("react/jsx-runtime");
10
9
  const ObsmKeysListBtn = () => {
11
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Placeholder, {
10
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Placeholder, {
12
11
  as: _reactBootstrap.Button,
13
- animation: "glow"
14
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Placeholder, {
15
- xs: 6,
16
- style: {
17
- width: "40px"
18
- }
19
- }));
12
+ animation: "glow",
13
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Placeholder, {
14
+ xs: 6,
15
+ style: {
16
+ width: '40px'
17
+ }
18
+ })
19
+ });
20
20
  };
21
21
  exports.ObsmKeysListBtn = ObsmKeysListBtn;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StyledTooltip = void 0;
7
+ var _material = require("@mui/material");
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ const _excluded = ["className"];
10
+ 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; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
14
+ 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); }
15
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
16
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
17
+ const StyledTooltip = exports.StyledTooltip = (0, _material.styled)(_ref => {
18
+ let {
19
+ className
20
+ } = _ref,
21
+ props = _objectWithoutProperties(_ref, _excluded);
22
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Tooltip, _objectSpread(_objectSpread({}, props), {}, {
23
+ classes: {
24
+ popper: className
25
+ }
26
+ }));
27
+ })(_ref2 => {
28
+ let {
29
+ theme
30
+ } = _ref2;
31
+ return {
32
+ ["& .".concat(_material.tooltipClasses.tooltip)]: {
33
+ backgroundColor: '#000',
34
+ color: '#fff',
35
+ maxWidth: 220,
36
+ fontSize: 13,
37
+ borderRadius: 4,
38
+ padding: theme.spacing(0.5, 1),
39
+ whiteSpace: 'pre-line',
40
+ textAlign: 'center',
41
+ boxShadow: '0 0.25rem 0.75rem rgba(0, 0, 0, 0.1)'
42
+ }
43
+ };
44
+ });
@@ -4,11 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VirtualizedList = VirtualizedList;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = require("react");
8
8
  var _reactVirtual = require("@tanstack/react-virtual");
9
+ var _jsxRuntime = require("react/jsx-runtime");
9
10
  const _excluded = ["getDataAtIndex", "count", "ItemComponent", "estimateSize", "overscan", "maxHeight"];
10
- 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); }
11
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
11
+ 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; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
14
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
15
+ 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); }
12
16
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
13
17
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
14
18
  function VirtualizedList(_ref) {
@@ -19,7 +23,7 @@ function VirtualizedList(_ref) {
19
23
  ItemComponent,
20
24
  estimateSize = () => 45,
21
25
  overscan = 25,
22
- maxHeight = "65vh"
26
+ maxHeight = '65vh'
23
27
  } = _ref,
24
28
  props = _objectWithoutProperties(_ref, _excluded);
25
29
  const [parentNode, setParentNode] = (0, _react.useState)(null);
@@ -36,31 +40,34 @@ function VirtualizedList(_ref) {
36
40
  (0, _react.useEffect)(() => {
37
41
  itemVirtualizer.measure();
38
42
  }, [itemVirtualizer, parentNode === null || parentNode === void 0 ? void 0 : parentNode.clientHeight, getDataAtIndex]);
39
- return /*#__PURE__*/_react.default.createElement("div", {
43
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
40
44
  ref: refCallback,
41
45
  style: {
42
- overflowY: "auto",
46
+ overflowY: 'auto',
43
47
  maxHeight: maxHeight
44
48
  },
45
- className: "modern-scrollbars"
46
- }, /*#__PURE__*/_react.default.createElement("div", {
47
- style: {
48
- height: "".concat(itemVirtualizer.getTotalSize(), "px"),
49
- width: "100%",
50
- position: "relative",
51
- willChange: "transform"
52
- }
53
- }, /*#__PURE__*/_react.default.createElement("div", {
54
- style: {
55
- position: "absolute",
56
- top: 0,
57
- left: 0,
58
- width: "100%",
59
- transform: "translateY(".concat((_virtualItems$0$start = (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start) !== null && _virtualItems$0$start !== void 0 ? _virtualItems$0$start : 0, "px)")
60
- }
61
- }, virtualItems.map(virtualItem => /*#__PURE__*/_react.default.createElement("div", {
62
- key: virtualItem.key,
63
- "data-index": virtualItem.index,
64
- ref: itemVirtualizer.measureElement
65
- }, /*#__PURE__*/_react.default.createElement(ItemComponent, _extends({}, getDataAtIndex(virtualItem.index), props)))))));
49
+ className: "modern-scrollbars",
50
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
51
+ style: {
52
+ height: "".concat(itemVirtualizer.getTotalSize(), "px"),
53
+ width: '100%',
54
+ position: 'relative',
55
+ willChange: 'transform'
56
+ },
57
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
58
+ style: {
59
+ position: 'absolute',
60
+ top: 0,
61
+ left: 0,
62
+ width: '100%',
63
+ transform: "translateY(".concat((_virtualItems$0$start = (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start) !== null && _virtualItems$0$start !== void 0 ? _virtualItems$0$start : 0, "px)")
64
+ },
65
+ children: virtualItems.map(virtualItem => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
66
+ "data-index": virtualItem.index,
67
+ ref: itemVirtualizer.measureElement,
68
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ItemComponent, _objectSpread(_objectSpread({}, getDataAtIndex(virtualItem.index)), props))
69
+ }, virtualItem.key))
70
+ })
71
+ })
72
+ });
66
73
  }
@@ -12,38 +12,38 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
12
12
  const parseError = err => {
13
13
  if (err === DOMException.TIMEOUT_ERR) {
14
14
  return {
15
- message: "Timeout error",
15
+ message: 'Timeout error',
16
16
  name: err
17
17
  };
18
18
  }
19
19
  switch (err === null || err === void 0 ? void 0 : err.name) {
20
- case "TypeError":
20
+ case 'TypeError':
21
21
  return _objectSpread(_objectSpread({}, err), {}, {
22
- message: "Failed to fetch data from server"
22
+ message: 'Failed to fetch data from server'
23
23
  });
24
- case "ReadZarrError":
24
+ case 'ReadZarrError':
25
25
  return _objectSpread(_objectSpread({}, err), {}, {
26
- message: "Failed to read AnnData-Zarr"
26
+ message: 'Failed to read AnnData-Zarr'
27
27
  });
28
- case "InvalidObs":
28
+ case 'InvalidObs':
29
29
  return _objectSpread(_objectSpread({}, err), {}, {
30
- message: "Observation not found in dataset"
30
+ message: 'Observation not found in dataset'
31
31
  });
32
- case "InvalidVar":
32
+ case 'InvalidVar':
33
33
  return _objectSpread(_objectSpread({}, err), {}, {
34
- message: "Feature not found in dataset"
34
+ message: 'Feature not found in dataset'
35
35
  });
36
- case "InvalidKey":
36
+ case 'InvalidKey':
37
37
  return _objectSpread(_objectSpread({}, err), {}, {
38
- message: "Key not found in datset"
38
+ message: 'Key not found in dataset'
39
39
  });
40
- case "BadRequest":
40
+ case 'BadRequest':
41
41
  return _objectSpread(_objectSpread({}, err), {}, {
42
- message: "Invalid request to server"
42
+ message: 'Invalid request to server'
43
43
  });
44
- case "InternalServerError":
44
+ case 'InternalServerError':
45
45
  return _objectSpread(_objectSpread({}, err), {}, {
46
- message: "Server error"
46
+ message: 'Server error'
47
47
  });
48
48
  default:
49
49
  return err;
@@ -22,13 +22,13 @@ async function fetchData(endpoint, params) {
22
22
  const timeout = setTimeout(() => {
23
23
  controller.abort(DOMException.TIMEOUT_ERR);
24
24
  }, ms || 300000);
25
- if (signal) signal.addEventListener("abort", () => controller.abort());
25
+ if (signal) signal.addEventListener('abort', () => controller.abort());
26
26
  const response = await fetch(new URL(endpoint, apiUrl), {
27
- method: "POST",
28
- mode: "cors",
27
+ method: 'POST',
28
+ mode: 'cors',
29
29
  headers: {
30
- "Content-Type": "application/json",
31
- Accept: "application/json"
30
+ 'Content-Type': 'application/json',
31
+ Accept: 'application/json'
32
32
  },
33
33
  body: JSON.stringify(params),
34
34
  signal: controller.signal
@@ -44,12 +44,17 @@ async function fetchData(endpoint, params) {
44
44
  }
45
45
  return await response.json();
46
46
  }
47
+
48
+ // @TODO: update to match isLoading
47
49
  const useFetch = function (endpoint, params) {
48
50
  let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
49
51
  refetchOnMount: false,
50
52
  refetchOnWindowFocus: false
51
53
  };
52
54
  let apiUrl = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
55
+ const {
56
+ retry = null
57
+ } = opts;
53
58
  const {
54
59
  data: fetchedData = null,
55
60
  isLoading: isPending = false,
@@ -62,13 +67,13 @@ const useFetch = function (endpoint, params) {
62
67
  } = _ref;
63
68
  return fetchData(endpoint, params, signal, apiUrl);
64
69
  },
65
- retry: (failureCount, _ref2) => {
70
+ retry: retry || ((failureCount, _ref2) => {
66
71
  let {
67
72
  error
68
73
  } = _ref2;
69
74
  if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
70
75
  return failureCount < 3;
71
- }
76
+ })
72
77
  }, opts));
73
78
  return {
74
79
  fetchedData,
@@ -84,12 +89,17 @@ const useDebouncedFetch = function (endpoint, params) {
84
89
  refetchOnWindowFocus: false
85
90
  };
86
91
  let apiUrl = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
92
+ // Optional isEnabled function to determine if enabled based on debouncedParams instead of params
93
+ const {
94
+ enabled = true,
95
+ isEnabled = () => true
96
+ } = opts;
87
97
  const debouncedParams = (0, _usehooks.useDebounce)(params, delay);
88
98
  const {
89
99
  data: fetchedData = null,
90
100
  isLoading: isPending = false,
91
101
  error: serverError = null
92
- } = (0, _reactQuery.useQuery)(_objectSpread({
102
+ } = (0, _reactQuery.useQuery)(_objectSpread(_objectSpread({
93
103
  queryKey: [endpoint, debouncedParams],
94
104
  queryFn: _ref3 => {
95
105
  let {
@@ -104,7 +114,9 @@ const useDebouncedFetch = function (endpoint, params) {
104
114
  if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
105
115
  return failureCount < 3;
106
116
  }
107
- }, opts));
117
+ }, opts), {}, {
118
+ enabled: enabled && isEnabled(debouncedParams)
119
+ }));
108
120
  return {
109
121
  fetchedData,
110
122
  isPending,
@@ -8,12 +8,12 @@ var _react = require("react");
8
8
  var _requests = require("./requests");
9
9
  var _DatasetContext = require("../context/DatasetContext");
10
10
  const useDiseaseSearch = () => {
11
- const ENDPOINT = "diseases";
11
+ const ENDPOINT = 'diseases';
12
12
  const dataset = (0, _DatasetContext.useDataset)();
13
13
  const [params, setParams] = (0, _react.useState)({
14
14
  url: dataset.url,
15
15
  diseaseDatasets: dataset.diseaseDatasets,
16
- text: ""
16
+ text: ''
17
17
  });
18
18
  const data = (0, _requests.useFetch)(ENDPOINT, params, {
19
19
  enabled: !!params.text.length,
@@ -27,12 +27,12 @@ const useDiseaseSearch = () => {
27
27
  };
28
28
  exports.useDiseaseSearch = useDiseaseSearch;
29
29
  const useVarSearch = () => {
30
- const ENDPOINT = "var/names";
30
+ const ENDPOINT = 'var/names';
31
31
  const dataset = (0, _DatasetContext.useDataset)();
32
32
  const [params, setParams] = (0, _react.useState)({
33
33
  url: dataset.url,
34
34
  col: dataset.varNamesCol,
35
- text: ""
35
+ text: ''
36
36
  });
37
37
  const data = (0, _requests.useFetch)(ENDPOINT, params, {
38
38
  enabled: !!params.text.length,
@@ -9,9 +9,9 @@ exports.formatString = formatString;
9
9
  var _numbro = _interopRequireDefault(require("numbro"));
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
11
  const FORMATS = exports.FORMATS = {
12
- EXPONENTIAL: "exponential",
13
- ABBREVIATION: "abbreviation",
14
- THOUSAND: "thousand"
12
+ EXPONENTIAL: 'exponential',
13
+ ABBREVIATION: 'abbreviation',
14
+ THOUSAND: 'thousand'
15
15
  };
16
16
  function formatThousand(n) {
17
17
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
@@ -41,9 +41,9 @@ function formatNumerical(n) {
41
41
  let format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : FORMATS.THOUSAND;
42
42
  let precision = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;
43
43
  if (n === 0) {
44
- return "0";
44
+ return '0';
45
45
  } else if (!n || n === undefined || isNaN(n)) {
46
- return "NaN";
46
+ return 'NaN';
47
47
  }
48
48
  switch (format) {
49
49
  case FORMATS.EXPONENTIAL:
@@ -64,5 +64,5 @@ function formatNumerical(n) {
64
64
  }
65
65
  }
66
66
  function formatString(s) {
67
- return s.trim().replace(/_/g, " ");
67
+ return s.trim().replace(/_/g, ' ');
68
68
  }
@@ -7,6 +7,7 @@ exports.useXData = exports.useObsmData = exports.useObsData = exports.useLabelOb
7
7
  var _react = require("react");
8
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
9
  var _zarr = require("zarr");
10
+ var _Resolver = require("./Resolver");
10
11
  var _constants = require("../constants/constants");
11
12
  var _DatasetContext = require("../context/DatasetContext");
12
13
  var _SettingsContext = require("../context/SettingsContext");
@@ -20,7 +21,7 @@ const useObsmData = function () {
20
21
  obsm = obsm || settings.selectedObsm;
21
22
  const obsmParams = (0, _react.useMemo)(() => ({
22
23
  url: dataset.url,
23
- path: "obsm/" + obsm,
24
+ path: 'obsm/' + obsm,
24
25
  s: [null, (0, _zarr.slice)(null, 2)] // load only [:, :2]
25
26
  }), [dataset.url, obsm]);
26
27
  return (0, _zarrHelper.useZarr)(obsmParams, _zarrHelper.GET_OPTIONS, {
@@ -39,21 +40,18 @@ const meanData = (_i, data) => {
39
40
  const useXData = function () {
40
41
  let agg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : meanData;
41
42
  const dataset = (0, _DatasetContext.useDataset)();
42
- const settings = (0, _SettingsContext.useSettings)();
43
- const xParams = (0, _react.useMemo)(() => {
44
- var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3;
45
- return !settings.selectedVar ? [] : !((_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet) ? [{
43
+ const selectedVar = (0, _Resolver.useSelectedVar)();
44
+ const xParams = (0, _react.useMemo)(() => !selectedVar ? [] : !(selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet) ? [{
45
+ url: dataset.url,
46
+ path: 'X',
47
+ s: [null, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.matrix_index]
48
+ }] : _lodash.default.map(selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars, v => {
49
+ return {
46
50
  url: dataset.url,
47
- path: "X",
48
- s: [null, (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.matrix_index]
49
- }] : _lodash.default.map((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars, v => {
50
- return {
51
- url: dataset.url,
52
- path: "X",
53
- s: [null, v.matrix_index]
54
- };
55
- });
56
- }, [dataset.url, settings.selectedVar]);
51
+ path: 'X',
52
+ s: [null, v.matrix_index]
53
+ };
54
+ }), [dataset.url, selectedVar]);
57
55
  return (0, _zarrHelper.useMultipleZarr)(xParams, _zarrHelper.GET_OPTIONS, {
58
56
  enabled: !!xParams.length
59
57
  }, agg);
@@ -63,13 +61,13 @@ const useObsData = function () {
63
61
  var _obs3, _obs4;
64
62
  let obs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
65
63
  const dataset = (0, _DatasetContext.useDataset)();
66
- const settings = (0, _SettingsContext.useSettings)();
67
- obs = obs || settings.selectedObs;
64
+ const selectedObs = (0, _Resolver.useSelectedObs)();
65
+ obs = obs || selectedObs;
68
66
  const obsParams = (0, _react.useMemo)(() => {
69
67
  var _obs, _obs2;
70
68
  return {
71
69
  url: dataset.url,
72
- path: "obs/" + ((_obs = obs) === null || _obs === void 0 ? void 0 : _obs.name) + (((_obs2 = obs) === null || _obs2 === void 0 ? void 0 : _obs2.type) === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : "")
70
+ path: 'obs/' + ((_obs = obs) === null || _obs === void 0 ? void 0 : _obs.name) + (((_obs2 = obs) === null || _obs2 === void 0 ? void 0 : _obs2.type) === _constants.OBS_TYPES.CATEGORICAL ? '/codes' : '')
73
71
  };
74
72
  }, [dataset.url, (_obs3 = obs) === null || _obs3 === void 0 ? void 0 : _obs3.name, (_obs4 = obs) === null || _obs4 === void 0 ? void 0 : _obs4.type]);
75
73
  return (0, _zarrHelper.useZarr)(obsParams, _zarrHelper.GET_OPTIONS, {
@@ -80,13 +78,14 @@ exports.useObsData = useObsData;
80
78
  const useLabelObsData = () => {
81
79
  const dataset = (0, _DatasetContext.useDataset)();
82
80
  const settings = (0, _SettingsContext.useSettings)();
83
- const labelObsParams = (0, _react.useMemo)(() => _lodash.default.map(settings.labelObs, obs => {
81
+ const labelObsParams = (0, _react.useMemo)(() => _lodash.default.map(settings.labelObs, obsName => {
82
+ const obs = settings.data.obs[obsName] || null;
84
83
  return {
85
84
  url: dataset.url,
86
- path: "obs/" + obs.name + (obs.type === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : ""),
85
+ path: 'obs/' + obs.name + (obs.type === _constants.OBS_TYPES.CATEGORICAL ? '/codes' : ''),
87
86
  key: obs.name
88
87
  };
89
- }), [dataset.url, settings.labelObs]);
88
+ }), [dataset.url, settings.data.obs, settings.labelObs]);
90
89
  return (0, _zarrHelper.useMultipleZarr)(labelObsParams, _zarrHelper.GET_OPTIONS, {
91
90
  enabled: !!labelObsParams.length
92
91
  });