@haniffalab/cherita-react 1.4.1-dev.2025-10-23.3179e534 → 1.4.1-dev.2025-10-23.55fbe6ff

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 (126) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/controls/Controls.js +4 -4
  3. package/dist/cjs/components/dotplot/Dotplot.js +15 -28
  4. package/dist/cjs/components/dotplot/DotplotControls.js +5 -5
  5. package/dist/cjs/components/full-page/FullPage.js +1 -2
  6. package/dist/cjs/components/full-page/PlotAlert.js +1 -1
  7. package/dist/cjs/components/full-page/PlotTypeSelector.js +13 -13
  8. package/dist/cjs/components/heatmap/Heatmap.js +14 -24
  9. package/dist/cjs/components/icons/DotPlotIcon.js +1 -1
  10. package/dist/cjs/components/icons/HeatmapIcon.js +1 -1
  11. package/dist/cjs/components/icons/MatrixPlotIcon.1.js +1 -1
  12. package/dist/cjs/components/icons/MatrixPlotIcon.js +1 -1
  13. package/dist/cjs/components/icons/ScatterplotIcon.1.js +1 -1
  14. package/dist/cjs/components/icons/ScatterplotIcon.js +1 -1
  15. package/dist/cjs/components/icons/ViolinPlotIcon.js +1 -1
  16. package/dist/cjs/components/matrixplot/Matrixplot.js +15 -26
  17. package/dist/cjs/components/obs-list/ObsItem.js +19 -19
  18. package/dist/cjs/components/obs-list/ObsList.js +17 -17
  19. package/dist/cjs/components/obsm-list/ObsmList.js +7 -7
  20. package/dist/cjs/components/pseudospatial/Pseudospatial.js +16 -16
  21. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +10 -10
  22. package/dist/cjs/components/scatterplot/Scatterplot.js +16 -16
  23. package/dist/cjs/components/scatterplot/ScatterplotControls.js +1 -1
  24. package/dist/cjs/components/scatterplot/SpatialControls.js +9 -9
  25. package/dist/cjs/components/scatterplot/Toolbox.js +4 -4
  26. package/dist/cjs/components/search-bar/SearchBar.js +14 -14
  27. package/dist/cjs/components/search-bar/SearchInfo.js +3 -3
  28. package/dist/cjs/components/search-bar/SearchResults.js +2 -2
  29. package/dist/cjs/components/toolbar/Toolbar.js +3 -3
  30. package/dist/cjs/components/var-list/VarItem.js +15 -15
  31. package/dist/cjs/components/var-list/VarList.js +5 -5
  32. package/dist/cjs/components/var-list/VarListToolbar.js +4 -4
  33. package/dist/cjs/components/var-list/VarSet.js +13 -13
  34. package/dist/cjs/components/violin/Violin.js +17 -41
  35. package/dist/cjs/constants/colorscales.js +19 -19
  36. package/dist/cjs/constants/constants.js +47 -47
  37. package/dist/cjs/context/DatasetContext.js +3 -3
  38. package/dist/cjs/context/FilterContext.js +2 -2
  39. package/dist/cjs/context/SettingsContext.js +57 -57
  40. package/dist/cjs/helpers/color-helper.js +2 -2
  41. package/dist/cjs/helpers/zarr-helper.js +3 -3
  42. package/dist/cjs/utils/Filter.js +1 -1
  43. package/dist/cjs/utils/Histogram.js +2 -2
  44. package/dist/cjs/utils/ImageViewer.js +2 -2
  45. package/dist/cjs/utils/Legend.js +1 -1
  46. package/dist/cjs/utils/LoadingIndicators.js +1 -1
  47. package/dist/cjs/utils/Resolver.js +7 -7
  48. package/dist/cjs/utils/Skeleton.js +1 -1
  49. package/dist/cjs/utils/StyledTooltip.js +5 -5
  50. package/dist/cjs/utils/VirtualizedList.js +7 -7
  51. package/dist/cjs/utils/errors.js +15 -15
  52. package/dist/cjs/utils/requests.js +14 -10
  53. package/dist/cjs/utils/search.js +4 -4
  54. package/dist/cjs/utils/string.js +6 -6
  55. package/dist/cjs/utils/zarrData.js +5 -5
  56. package/dist/css/cherita.css +21 -20
  57. package/dist/css/cherita.css.map +1 -1
  58. package/dist/esm/components/controls/Controls.js +9 -9
  59. package/dist/esm/components/dotplot/Dotplot.js +28 -41
  60. package/dist/esm/components/dotplot/DotplotControls.js +9 -9
  61. package/dist/esm/components/full-page/FullPage.js +22 -23
  62. package/dist/esm/components/full-page/PlotAlert.js +5 -5
  63. package/dist/esm/components/full-page/PlotTypeSelector.js +21 -21
  64. package/dist/esm/components/heatmap/Heatmap.js +27 -37
  65. package/dist/esm/components/heatmap/HeatmapControls.js +2 -2
  66. package/dist/esm/components/icons/DotPlotIcon.js +1 -1
  67. package/dist/esm/components/icons/HeatmapIcon.js +1 -1
  68. package/dist/esm/components/icons/MatrixPlotIcon.1.js +1 -1
  69. package/dist/esm/components/icons/MatrixPlotIcon.js +1 -1
  70. package/dist/esm/components/icons/ScatterplotIcon.1.js +1 -1
  71. package/dist/esm/components/icons/ScatterplotIcon.js +1 -1
  72. package/dist/esm/components/icons/ViolinPlotIcon.js +1 -1
  73. package/dist/esm/components/matrixplot/Matrixplot.js +28 -39
  74. package/dist/esm/components/matrixplot/MatrixplotControls.js +2 -2
  75. package/dist/esm/components/obs-list/ObsItem.js +37 -37
  76. package/dist/esm/components/obs-list/ObsList.js +34 -34
  77. package/dist/esm/components/obs-list/ObsToolbar.js +1 -1
  78. package/dist/esm/components/obsm-list/ObsmList.js +15 -15
  79. package/dist/esm/components/offcanvas/index.js +6 -6
  80. package/dist/esm/components/pseudospatial/Pseudospatial.js +31 -31
  81. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +17 -17
  82. package/dist/esm/components/scatterplot/Scatterplot.js +38 -38
  83. package/dist/esm/components/scatterplot/ScatterplotControls.js +9 -9
  84. package/dist/esm/components/scatterplot/SpatialControls.js +23 -23
  85. package/dist/esm/components/scatterplot/Toolbox.js +7 -7
  86. package/dist/esm/components/search-bar/SearchBar.js +27 -27
  87. package/dist/esm/components/search-bar/SearchInfo.js +14 -14
  88. package/dist/esm/components/search-bar/SearchResults.js +10 -10
  89. package/dist/esm/components/toolbar/Toolbar.js +6 -6
  90. package/dist/esm/components/var-list/VarItem.js +27 -27
  91. package/dist/esm/components/var-list/VarList.js +21 -21
  92. package/dist/esm/components/var-list/VarListToolbar.js +10 -10
  93. package/dist/esm/components/var-list/VarSet.js +22 -22
  94. package/dist/esm/components/violin/Violin.js +33 -57
  95. package/dist/esm/components/violin/ViolinControls.js +2 -2
  96. package/dist/esm/constants/colorscales.js +19 -19
  97. package/dist/esm/constants/constants.js +47 -47
  98. package/dist/esm/context/DatasetContext.js +11 -11
  99. package/dist/esm/context/FilterContext.js +3 -3
  100. package/dist/esm/context/SettingsContext.js +61 -61
  101. package/dist/esm/context/ZarrDataContext.js +3 -3
  102. package/dist/esm/helpers/color-helper.js +5 -5
  103. package/dist/esm/helpers/map-helper.js +2 -2
  104. package/dist/esm/helpers/zarr-helper.js +6 -6
  105. package/dist/esm/index.js +22 -22
  106. package/dist/esm/utils/Filter.js +8 -8
  107. package/dist/esm/utils/Histogram.js +6 -6
  108. package/dist/esm/utils/ImageViewer.js +4 -4
  109. package/dist/esm/utils/Legend.js +9 -9
  110. package/dist/esm/utils/LoadingIndicators.js +2 -2
  111. package/dist/esm/utils/Resolver.js +13 -13
  112. package/dist/esm/utils/Skeleton.js +2 -2
  113. package/dist/esm/utils/StyledTooltip.js +6 -6
  114. package/dist/esm/utils/VirtualizedList.js +9 -9
  115. package/dist/esm/utils/errors.js +15 -15
  116. package/dist/esm/utils/requests.js +17 -13
  117. package/dist/esm/utils/search.js +7 -7
  118. package/dist/esm/utils/string.js +7 -7
  119. package/dist/esm/utils/zarrData.js +13 -13
  120. package/package.json +11 -7
  121. package/scss/cherita-bootstrap.scss +2 -2
  122. package/scss/cherita.scss +24 -17
  123. package/scss/components/accordions.scss +4 -1
  124. package/scss/components/layouts.scss +13 -12
  125. package/scss/components/lists.scss +8 -4
  126. package/scss/components/plotly.scss +1 -0
@@ -3,14 +3,14 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  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); }
6
- import { useDeferredValue, useEffect, useMemo, useState } from "react";
7
- import { faPlus } from "@fortawesome/free-solid-svg-icons";
8
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
9
- import _ from "lodash";
10
- import { Button, ListGroup } from "react-bootstrap";
11
- import { useSettingsDispatch } from "../../context/SettingsContext";
12
- import { useDiseaseSearch, useVarSearch } from "../../utils/search";
13
- import { VirtualizedList } from "../../utils/VirtualizedList";
6
+ import { useDeferredValue, useEffect, useMemo, useState } from 'react';
7
+ import { faPlus } from '@fortawesome/free-solid-svg-icons';
8
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
+ import _ from 'lodash';
10
+ import { Button, ListGroup } from 'react-bootstrap';
11
+ import { useSettingsDispatch } from '../../context/SettingsContext';
12
+ import { useDiseaseSearch, useVarSearch } from '../../utils/search';
13
+ import { VirtualizedList } from '../../utils/VirtualizedList';
14
14
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
15
15
  export function VarSearchResults(_ref) {
16
16
  let {
@@ -104,7 +104,7 @@ export function VarSearchResults(_ref) {
104
104
  }) : /*#__PURE__*/_jsx(ListGroup.Item, {
105
105
  as: "button",
106
106
  disabled: true,
107
- children: !text.length ? "Search features" : !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data"
107
+ children: !text.length ? 'Search features' : !serverError ? isStale || isPending ? 'Loading...' : 'No items found' : 'Failed to fetch data'
108
108
  }, "empty")
109
109
  })
110
110
  })
@@ -185,7 +185,7 @@ export function DiseasesSearchResults(_ref2) {
185
185
  }) : /*#__PURE__*/_jsx(ListGroup.Item, {
186
186
  as: "button",
187
187
  disabled: true,
188
- children: !text.length ? "Search diseases" : !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data"
188
+ children: !text.length ? 'Search diseases' : !serverError ? isStale || isPending ? 'Loading...' : 'No items found' : 'Failed to fetch data'
189
189
  }, "empty")
190
190
  })
191
191
  })
@@ -1,6 +1,6 @@
1
- import { faList, faSearch, faSliders } from "@fortawesome/free-solid-svg-icons";
2
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
3
- import { Container, Nav, Navbar } from "react-bootstrap";
1
+ import { faList, faSearch, faSliders } from '@fortawesome/free-solid-svg-icons';
2
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
+ import { Container, Nav, Navbar } from 'react-bootstrap';
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  export const Toolbar = _ref => {
6
6
  let {
@@ -62,7 +62,7 @@ export const ObsPlotlyToolbar = _ref2 => {
62
62
  onClick
63
63
  } = _ref2;
64
64
  return {
65
- name: "Categories",
65
+ name: 'Categories',
66
66
  icon: {
67
67
  width: 512,
68
68
  height: 512,
@@ -76,7 +76,7 @@ export const VarPlotlyToolbar = _ref3 => {
76
76
  onClick
77
77
  } = _ref3;
78
78
  return {
79
- name: "Features",
79
+ name: 'Features',
80
80
  icon: {
81
81
  width: 512,
82
82
  height: 512,
@@ -90,7 +90,7 @@ export const ControlsPlotlyToolbar = _ref4 => {
90
90
  onClick
91
91
  } = _ref4;
92
92
  return {
93
- name: "Controls",
93
+ name: 'Controls',
94
94
  icon: {
95
95
  width: 512,
96
96
  height: 512,
@@ -3,24 +3,24 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  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); }
6
- import { useEffect, useState } from "react";
7
- import { faDroplet, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons";
8
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
9
- import { MoreVert } from "@mui/icons-material";
10
- import _ from "lodash";
11
- import { Button, Collapse, ListGroup, Table } from "react-bootstrap";
12
- import { COLOR_ENCODINGS, SELECTION_MODES } from "../../constants/constants";
13
- import { useDataset } from "../../context/DatasetContext";
14
- import { useFilteredData } from "../../context/FilterContext";
15
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
16
- import { Histogram } from "../../utils/Histogram";
17
- import { useDebouncedFetch, useFetch } from "../../utils/requests";
6
+ import { useEffect, useState } from 'react';
7
+ import { faDroplet, faPlus, faTrash } from '@fortawesome/free-solid-svg-icons';
8
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
+ import { MoreVert } from '@mui/icons-material';
10
+ import _ from 'lodash';
11
+ import { Button, Collapse, ListGroup, Table } from 'react-bootstrap';
12
+ import { COLOR_ENCODINGS, SELECTION_MODES } from '../../constants/constants';
13
+ import { useDataset } from '../../context/DatasetContext';
14
+ import { useFilteredData } from '../../context/FilterContext';
15
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
16
+ import { Histogram } from '../../utils/Histogram';
17
+ import { useDebouncedFetch, useFetch } from '../../utils/requests';
18
18
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
19
19
  function VarHistogram(_ref) {
20
20
  let {
21
21
  item
22
22
  } = _ref;
23
- const ENDPOINT = "var/histograms";
23
+ const ENDPOINT = 'var/histograms';
24
24
  const dataset = useDataset();
25
25
  const settings = useSettings();
26
26
  const {
@@ -70,13 +70,13 @@ function VarDiseaseInfoItem(item) {
70
70
  children: [/*#__PURE__*/_jsx("td", {
71
71
  children: "Confidence"
72
72
  }), /*#__PURE__*/_jsx("td", {
73
- children: item.confidence || "unknown"
73
+ children: item.confidence || 'unknown'
74
74
  })]
75
75
  }), /*#__PURE__*/_jsxs("tr", {
76
76
  children: [/*#__PURE__*/_jsxs("td", {
77
- children: ["Organ", item.organs.length > 1 ? "s" : ""]
77
+ children: ["Organ", item.organs.length > 1 ? 's' : '']
78
78
  }), /*#__PURE__*/_jsx("td", {
79
- children: item.organs.map(o => o.name).join(", ")
79
+ children: item.organs.map(o => o.name).join(', ')
80
80
  })]
81
81
  }), !_.isEmpty(item.metadata) && _.map(item.metadata, (value, key) => {
82
82
  if (value !== null && value !== undefined) {
@@ -114,7 +114,7 @@ export function SelectionItem(_ref3) {
114
114
  showRemove = true,
115
115
  isMultiple = false
116
116
  } = _ref3;
117
- const ENDPOINT = "disease/gene";
117
+ const ENDPOINT = 'disease/gene';
118
118
  const [openInfo, setOpenInfo] = useState(false);
119
119
  const dataset = useDataset();
120
120
  const params = {
@@ -133,7 +133,7 @@ export function SelectionItem(_ref3) {
133
133
  const hasDiseaseInfo = !isPending && !serverError && !!(fetchedData !== null && fetchedData !== void 0 && fetchedData.length);
134
134
  return /*#__PURE__*/_jsxs(_Fragment, {
135
135
  children: [/*#__PURE__*/_jsx("div", {
136
- className: hasDiseaseInfo ? "cursor-pointer" : "",
136
+ className: hasDiseaseInfo ? 'cursor-pointer' : '',
137
137
  onClick: () => {
138
138
  setOpenInfo(o => !o);
139
139
  },
@@ -149,14 +149,14 @@ export function SelectionItem(_ref3) {
149
149
  item: item
150
150
  }), showSetColorEncoding && /*#__PURE__*/_jsxs(Button, {
151
151
  type: "button",
152
- variant: isActive ? "primary" : isNotInData ? "outline-secondary" : "outline-primary",
152
+ variant: isActive ? 'primary' : isNotInData ? 'outline-secondary' : 'outline-primary',
153
153
  className: "m-0 p-0 px-1",
154
154
  onClick: e => {
155
155
  e.stopPropagation();
156
156
  selectVar();
157
157
  },
158
158
  disabled: isNotInData,
159
- title: isNotInData ? "Not present in data" : "Set as color encoding",
159
+ title: isNotInData ? 'Not present in data' : 'Set as color encoding',
160
160
  children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
161
161
  icon: faDroplet
162
162
  }), isMultiple && /*#__PURE__*/_jsx(FontAwesomeIcon, {
@@ -193,17 +193,17 @@ export function SelectionItem(_ref3) {
193
193
  const select = (dispatch, mode, item) => {
194
194
  if (mode === SELECTION_MODES.SINGLE) {
195
195
  dispatch({
196
- type: "select.var",
196
+ type: 'select.var',
197
197
  var: item
198
198
  });
199
199
  } else if (mode === SELECTION_MODES.MULTIPLE) {
200
200
  dispatch({
201
- type: "select.multivar",
201
+ type: 'select.multivar',
202
202
  var: item
203
203
  });
204
204
  }
205
205
  dispatch({
206
- type: "set.colorEncoding",
206
+ type: 'set.colorEncoding',
207
207
  value: COLOR_ENCODINGS.VAR
208
208
  });
209
209
  };
@@ -219,19 +219,19 @@ export function VarItem(_ref4) {
219
219
  const selectVar = () => debounceSelect(dispatch, mode, item);
220
220
  const removeVar = () => {
221
221
  dispatch({
222
- type: "remove.var",
222
+ type: 'remove.var',
223
223
  var: item
224
224
  });
225
225
  if (mode === SELECTION_MODES.SINGLE) {
226
226
  if (active === item.matrix_index) {
227
227
  dispatch({
228
- type: "reset.var"
228
+ type: 'reset.var'
229
229
  });
230
230
  }
231
231
  } else if (mode === SELECTION_MODES.MULTIPLE) {
232
232
  if (active.includes(item.matrix_index)) {
233
233
  dispatch({
234
- type: "deselect.multivar",
234
+ type: 'deselect.multivar',
235
235
  var: item
236
236
  });
237
237
  }
@@ -239,7 +239,7 @@ export function VarItem(_ref4) {
239
239
  };
240
240
  const toggleVar = () => {
241
241
  dispatch({
242
- type: "toggle.multivar",
242
+ type: 'toggle.multivar',
243
243
  var: item
244
244
  });
245
245
  };
@@ -3,26 +3,26 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  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); }
6
- import { useEffect, useState } from "react";
7
- import { faTimes } from "@fortawesome/free-solid-svg-icons";
8
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
9
- import _ from "lodash";
10
- import { Alert, Button, ListGroup } from "react-bootstrap";
11
- import ButtonGroup from "react-bootstrap/ButtonGroup";
12
- import { VarItem } from "./VarItem";
13
- import { VarListToolbar } from "./VarListToolbar";
14
- import { VarSet } from "./VarSet";
15
- import { SELECTION_MODES, VAR_SORT } from "../../constants/constants";
16
- import { useDataset } from "../../context/DatasetContext";
17
- import { useFilteredData } from "../../context/FilterContext";
18
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
19
- import { LoadingSpinner } from "../../utils/LoadingIndicators";
20
- import { useFetch } from "../../utils/requests";
21
- import { useSelectedMultiVar, useSelectedVar, useSettingsVars } from "../../utils/Resolver";
6
+ import { useEffect, useState } from 'react';
7
+ import { faTimes } from '@fortawesome/free-solid-svg-icons';
8
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
+ import _ from 'lodash';
10
+ import { Alert, Button, ListGroup } from 'react-bootstrap';
11
+ import ButtonGroup from 'react-bootstrap/ButtonGroup';
12
+ import { VarItem } from './VarItem';
13
+ import { VarListToolbar } from './VarListToolbar';
14
+ import { VarSet } from './VarSet';
15
+ import { SELECTION_MODES, VAR_SORT } from '../../constants/constants';
16
+ import { useDataset } from '../../context/DatasetContext';
17
+ import { useFilteredData } from '../../context/FilterContext';
18
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
19
+ import { LoadingSpinner } from '../../utils/LoadingIndicators';
20
+ import { useFetch } from '../../utils/requests';
21
+ import { useSelectedMultiVar, useSelectedVar, useSettingsVars } from '../../utils/Resolver';
22
22
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
23
23
  export const useVarMean = function (varKeys) {
24
24
  let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
25
- const ENDPOINT = "matrix/mean";
25
+ const ENDPOINT = 'matrix/mean';
26
26
  const dataset = useDataset();
27
27
  const {
28
28
  obsIndices
@@ -60,7 +60,7 @@ export const sortMeans = (i, means) => {
60
60
  export function VarNamesList(_ref) {
61
61
  let {
62
62
  mode = SELECTION_MODES.SINGLE,
63
- displayName = "genes"
63
+ displayName = 'genes'
64
64
  } = _ref;
65
65
  const settings = useSettings();
66
66
  const dispatch = useSettingsDispatch();
@@ -90,7 +90,7 @@ export function VarNamesList(_ref) {
90
90
  }, settings.varSort.var.sortOrder));
91
91
  }
92
92
  } else if (settings.varSort.var.sort === VAR_SORT.NAME) {
93
- setSortedVars(_.orderBy(settingsVars, "name", settings.varSort.var.sortOrder));
93
+ setSortedVars(_.orderBy(settingsVars, 'name', settings.varSort.var.sortOrder));
94
94
  } else {
95
95
  setSortedVars(settingsVars);
96
96
  }
@@ -146,7 +146,7 @@ export function VarNamesList(_ref) {
146
146
  variant: "info",
147
147
  onClick: () => {
148
148
  dispatch({
149
- type: "add.var",
149
+ type: 'add.var',
150
150
  var: {
151
151
  name: newSetName(),
152
152
  vars: [],
@@ -159,7 +159,7 @@ export function VarNamesList(_ref) {
159
159
  variant: "info",
160
160
  onClick: () => {
161
161
  dispatch({
162
- type: "reset.vars"
162
+ type: 'reset.vars'
163
163
  });
164
164
  },
165
165
  children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
@@ -1,15 +1,15 @@
1
- import { useState } from "react";
2
- import { faArrowDown19, faArrowDownAZ, faArrowUp91, faArrowUpZA, faXmark } from "@fortawesome/free-solid-svg-icons";
3
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
4
- import { ToggleButton, ToggleButtonGroup } from "react-bootstrap";
5
- import { VAR_SORT, VAR_SORT_ORDER } from "../../constants/constants";
6
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
1
+ import { useState } from 'react';
2
+ import { faArrowDown19, faArrowDownAZ, faArrowUp91, faArrowUpZA, faXmark } from '@fortawesome/free-solid-svg-icons';
3
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4
+ import { ToggleButton, ToggleButtonGroup } from 'react-bootstrap';
5
+ import { VAR_SORT, VAR_SORT_ORDER } from '../../constants/constants';
6
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
7
7
 
8
8
  // @TODO: set option for "var" and "disease"
9
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  export function VarListToolbar(_ref) {
11
11
  let {
12
- varType = "var"
12
+ varType = 'var'
13
13
  } = _ref;
14
14
  const settings = useSettings();
15
15
  const dispatch = useSettingsDispatch();
@@ -20,7 +20,7 @@ export function VarListToolbar(_ref) {
20
20
  if (sort !== sortValue) {
21
21
  setSort(sortValue);
22
22
  dispatch({
23
- type: "set.varSort",
23
+ type: 'set.varSort',
24
24
  var: varType,
25
25
  sort: sortValue,
26
26
  sortOrder: sortOrder
@@ -29,7 +29,7 @@ export function VarListToolbar(_ref) {
29
29
  const newSortOrder = sortOrder === VAR_SORT_ORDER.ASC ? VAR_SORT_ORDER.DESC : VAR_SORT_ORDER.ASC;
30
30
  setSortOrder(newSortOrder);
31
31
  dispatch({
32
- type: "set.varSort",
32
+ type: 'set.varSort',
33
33
  var: varType,
34
34
  sort: sortValue,
35
35
  sortOrder: newSortOrder
@@ -79,7 +79,7 @@ export function VarListToolbar(_ref) {
79
79
  onClick: () => {
80
80
  setSort(VAR_SORT.NONE);
81
81
  dispatch({
82
- type: "set.varSort.sort",
82
+ type: 'set.varSort.sort',
83
83
  var: varType,
84
84
  sort: VAR_SORT.NONE
85
85
  });
@@ -1,18 +1,18 @@
1
- import { useState } from "react";
2
- import { faChevronDown, faChevronUp, faCircleInfo, faDroplet, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons";
3
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
4
- import _ from "lodash";
5
- import { Button, Collapse, ListGroup, OverlayTrigger, Tooltip } from "react-bootstrap";
6
- import { SelectionItem } from "./VarItem";
7
- import { COLOR_ENCODINGS, SELECTION_MODES } from "../../constants/constants";
8
- import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
9
- import { SearchModal } from "../search-bar/SearchBar";
1
+ import { useState } from 'react';
2
+ import { faChevronDown, faChevronUp, faCircleInfo, faDroplet, faPlus, faTrash } from '@fortawesome/free-solid-svg-icons';
3
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4
+ import _ from 'lodash';
5
+ import { Button, Collapse, ListGroup, OverlayTrigger, Tooltip } from 'react-bootstrap';
6
+ import { SelectionItem } from './VarItem';
7
+ import { COLOR_ENCODINGS, SELECTION_MODES } from '../../constants/constants';
8
+ import { useSettings, useSettingsDispatch } from '../../context/SettingsContext';
9
+ import { SearchModal } from '../search-bar/SearchBar';
10
10
 
11
11
  // @TODO: add button to score genes and plot
12
12
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
13
  const addVarToSet = (dispatch, set, v) => {
14
14
  dispatch({
15
- type: "add.varSet.var",
15
+ type: 'add.varSet.var',
16
16
  varSet: set,
17
17
  var: v
18
18
  });
@@ -28,7 +28,7 @@ function SelectionSet(_ref) {
28
28
  } = _ref;
29
29
  const [openSet, setOpenSet] = useState(false);
30
30
  const [showModal, setShowModal] = useState(false);
31
- const [searchText, setSearchText] = useState("");
31
+ const [searchText, setSearchText] = useState('');
32
32
  const varList = set.vars.length ? _.map(set.vars, v => {
33
33
  return /*#__PURE__*/_jsx(ListGroup.Item, {
34
34
  children: /*#__PURE__*/_jsx(SelectionItem, {
@@ -88,7 +88,7 @@ function SelectionSet(_ref) {
88
88
  })
89
89
  }), /*#__PURE__*/_jsxs(Button, {
90
90
  type: "button",
91
- variant: isActive ? "primary" : "outline-primary",
91
+ variant: isActive ? 'primary' : 'outline-primary',
92
92
  className: "m-0 p-0 px-1",
93
93
  onClick: e => {
94
94
  e.stopPropagation();
@@ -133,7 +133,7 @@ function SelectionSet(_ref) {
133
133
  handleClose: () => setShowModal(false),
134
134
  text: searchText,
135
135
  setText: setSearchText,
136
- displayText: "features",
136
+ displayText: 'features',
137
137
  handleSelect: (d, i) => {
138
138
  addVarToSet(d, set, i);
139
139
  },
@@ -153,16 +153,16 @@ export function VarSet(_ref2) {
153
153
  const selectSet = () => {
154
154
  if (mode === SELECTION_MODES.SINGLE) {
155
155
  dispatch({
156
- type: "select.var",
156
+ type: 'select.var',
157
157
  var: set
158
158
  });
159
159
  dispatch({
160
- type: "set.colorEncoding",
161
- value: "var"
160
+ type: 'set.colorEncoding',
161
+ value: 'var'
162
162
  });
163
163
  } else if (mode === SELECTION_MODES.MULTIPLE) {
164
164
  dispatch({
165
- type: "select.multivar",
165
+ type: 'select.multivar',
166
166
  var: set
167
167
  });
168
168
  }
@@ -171,32 +171,32 @@ export function VarSet(_ref2) {
171
171
  if (mode === SELECTION_MODES.SINGLE) {
172
172
  if (active === set.name) {
173
173
  dispatch({
174
- type: "reset.var"
174
+ type: 'reset.var'
175
175
  });
176
176
  }
177
177
  } else if (mode === SELECTION_MODES.MULTIPLE) {
178
178
  if (active.includes(set.name)) {
179
179
  dispatch({
180
- type: "deselect.multivar",
180
+ type: 'deselect.multivar',
181
181
  var: set
182
182
  });
183
183
  }
184
184
  }
185
185
  dispatch({
186
- type: "remove.var",
186
+ type: 'remove.var',
187
187
  var: set
188
188
  });
189
189
  };
190
190
  const removeSetVar = v => {
191
191
  dispatch({
192
- type: "remove.varSet.var",
192
+ type: 'remove.varSet.var',
193
193
  varSet: set,
194
194
  var: v
195
195
  });
196
196
  };
197
197
  const toggleSet = () => {
198
198
  dispatch({
199
- type: "toggle.multivar",
199
+ type: 'toggle.multivar',
200
200
  var: set
201
201
  });
202
202
  };
@@ -3,22 +3,22 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
5
  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); }
6
- import { useEffect, useState } from "react";
7
- import { faCircleInfo } from "@fortawesome/free-solid-svg-icons";
8
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
9
- import _ from "lodash";
10
- import { Badge, Button } from "react-bootstrap";
11
- import Plot from "react-plotly.js";
12
- import { PLOTLY_MODEBAR_BUTTONS, VIOLIN_MODES } from "../../constants/constants";
13
- import { useDataset } from "../../context/DatasetContext";
14
- import { useFilteredData } from "../../context/FilterContext";
15
- import { useSettings } from "../../context/SettingsContext";
16
- import { LoadingSpinner } from "../../utils/LoadingIndicators";
17
- import { useDebouncedFetch } from "../../utils/requests";
18
- import { useSelectedMultiVar, useSelectedObs, useSelectedVar } from "../../utils/Resolver";
19
- import { StyledTooltip } from "../../utils/StyledTooltip";
20
- import { PlotAlert } from "../full-page/PlotAlert";
21
- import { ControlsPlotlyToolbar, ObsPlotlyToolbar, VarPlotlyToolbar } from "../toolbar/Toolbar";
6
+ import { useEffect, useMemo, useState } from 'react';
7
+ import { faCircleInfo } from '@fortawesome/free-solid-svg-icons';
8
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
+ import _ from 'lodash';
10
+ import { Badge, Button } from 'react-bootstrap';
11
+ import Plot from 'react-plotly.js';
12
+ import { PLOTLY_MODEBAR_BUTTONS, VIOLIN_MODES } from '../../constants/constants';
13
+ import { useDataset } from '../../context/DatasetContext';
14
+ import { useFilteredData } from '../../context/FilterContext';
15
+ import { useSettings } from '../../context/SettingsContext';
16
+ import { LoadingSpinner } from '../../utils/LoadingIndicators';
17
+ import { useDebouncedFetch } from '../../utils/requests';
18
+ import { useSelectedMultiVar, useSelectedObs, useSelectedVar } from '../../utils/Resolver';
19
+ import { StyledTooltip } from '../../utils/StyledTooltip';
20
+ import { PlotAlert } from '../full-page/PlotAlert';
21
+ import { ControlsPlotlyToolbar, ObsPlotlyToolbar, VarPlotlyToolbar } from '../toolbar/Toolbar';
22
22
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
23
23
  export function Violin(_ref) {
24
24
  let {
@@ -32,7 +32,7 @@ export function Violin(_ref) {
32
32
  plotType,
33
33
  setPlotType
34
34
  } = _ref;
35
- const ENDPOINT = "violin";
35
+ const ENDPOINT = 'violin';
36
36
  const dataset = useDataset();
37
37
  const settings = useSettings();
38
38
  const {
@@ -45,7 +45,7 @@ export function Violin(_ref) {
45
45
  const selectedMultiVar = useSelectedMultiVar();
46
46
  const selectedVar = useSelectedVar();
47
47
  const selectedObs = useSelectedObs();
48
- const [params, setParams] = useState(_objectSpread({
48
+ const params = useMemo(() => _objectSpread({
49
49
  url: dataset.url,
50
50
  mode: mode,
51
51
  scale: settings.controls.scale.violinplot,
@@ -67,7 +67,7 @@ export function Violin(_ref) {
67
67
  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),
68
68
  obsIndices: isSliced ? [...(obsIndices || [])] : null
69
69
  }
70
- }[mode]));
70
+ }[mode]), [dataset.url, dataset.varNamesCol, isSliced, mode, obsIndices, selectedMultiVar, selectedObs, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.isSet, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name, selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars, settings.controls.scale.violinplot]);
71
71
  // @TODO: set default scale
72
72
 
73
73
  useEffect(() => {
@@ -77,39 +77,12 @@ export function Violin(_ref) {
77
77
  } else {
78
78
  setHasSelections(false);
79
79
  }
80
- setParams(p => {
81
- return _objectSpread(_objectSpread({}, p), {}, {
82
- url: dataset.url,
83
- mode: mode,
84
- varKeys: selectedMultiVar.map(i => i.isSet ? {
85
- name: i.name,
86
- indices: i.vars.map(v => v.index)
87
- } : i.index),
88
- scale: settings.controls.scale.violinplot,
89
- varNamesCol: dataset.varNamesCol
90
- });
91
- });
92
80
  } else if (mode === VIOLIN_MODES.GROUPBY) {
93
81
  if (selectedObs && selectedVar) {
94
82
  setHasSelections(true);
95
83
  } else {
96
84
  setHasSelections(false);
97
85
  }
98
- setParams(p => {
99
- return _objectSpread(_objectSpread({}, p), {}, {
100
- url: dataset.url,
101
- mode: mode,
102
- varKey: selectedVar !== null && selectedVar !== void 0 && selectedVar.isSet ? {
103
- name: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.name,
104
- indices: selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.vars.map(v => v.index)
105
- } : selectedVar === null || selectedVar === void 0 ? void 0 : selectedVar.index,
106
- obsCol: selectedObs,
107
- 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),
108
- obsIndices: isSliced ? [...(obsIndices || [])] : null,
109
- scale: settings.controls.scale.violinplot,
110
- varNamesCol: dataset.varNamesCol
111
- });
112
- });
113
86
  }
114
87
  }, [settings.controls.scale.violinplot, selectedMultiVar, selectedObs, selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
115
88
  const {
@@ -117,12 +90,15 @@ export function Violin(_ref) {
117
90
  isPending,
118
91
  serverError
119
92
  } = useDebouncedFetch(ENDPOINT, params, 500, {
120
- enabled: mode === VIOLIN_MODES.MULTIKEY && (!!params.varKeys.length || !!params.obsKeys.length) || mode === VIOLIN_MODES.GROUPBY && !!params.varKey && !!params.obsCol
93
+ isEnabled: mode === VIOLIN_MODES.MULTIKEY && (params => !!params.varKeys.length || !!params.obsKeys.length) || mode === VIOLIN_MODES.GROUPBY && (params => !!params.varKey && !!params.obsCol)
121
94
  });
122
95
  useEffect(() => {
123
- if (hasSelections && !isPending && !serverError) {
96
+ if (hasSelections && !!fetchedData && !isPending && !serverError) {
124
97
  setData(fetchedData.data);
125
98
  setLayout(fetchedData.layout);
99
+ } else {
100
+ setData([]);
101
+ setLayout({});
126
102
  }
127
103
  }, [fetchedData, hasSelections, isPending, serverError]);
128
104
  const customModeBarButtons = _.compact([showObsBtn && ObsPlotlyToolbar({
@@ -142,15 +118,15 @@ export function Violin(_ref) {
142
118
  children: [/*#__PURE__*/_jsx("div", {
143
119
  className: "flex-grow-1 position-relative",
144
120
  style: {
145
- minHeight: "0"
121
+ minHeight: '0'
146
122
  },
147
123
  children: /*#__PURE__*/_jsx(Plot, {
148
124
  data: data,
149
125
  layout: layout,
150
126
  useResizeHandler: true,
151
127
  style: {
152
- width: "100%",
153
- height: "100%"
128
+ width: '100%',
129
+ height: '100%'
154
130
  },
155
131
  config: {
156
132
  displaylogo: false,
@@ -188,25 +164,25 @@ export function Violin(_ref) {
188
164
  setPlotType: setPlotType,
189
165
  children: [mode === VIOLIN_MODES.MULTIKEY && /*#__PURE__*/_jsxs("p", {
190
166
  className: "p-0 m-0",
191
- children: ["Select one or more", " ", showVarsBtn ? /*#__PURE__*/_jsx(Button, {
167
+ children: ["Select one or more", ' ', showVarsBtn ? /*#__PURE__*/_jsx(Button, {
192
168
  variant: "link",
193
169
  className: "border-0 p-0 align-baseline",
194
170
  onClick: setShowVars,
195
171
  children: "features"
196
- }) : "features", " ", "to display their expression distributions across all observations."]
172
+ }) : 'features', ' ', "to display their expression distributions across all observations."]
197
173
  }), mode === VIOLIN_MODES.GROUPBY && /*#__PURE__*/_jsxs("p", {
198
174
  className: "p-0 m-0",
199
- children: ["Select a", " ", showObsBtn ? /*#__PURE__*/_jsx(Button, {
175
+ children: ["Select a", ' ', showObsBtn ? /*#__PURE__*/_jsx(Button, {
200
176
  variant: "link",
201
177
  className: "border-0 p-0 align-baseline",
202
178
  onClick: setShowObs,
203
179
  children: "category"
204
- }) : "category", " ", "to group observations, and choose a", " ", showVarsBtn ? /*#__PURE__*/_jsx(Button, {
180
+ }) : 'category', ' ', "to group observations, and choose a", ' ', showVarsBtn ? /*#__PURE__*/_jsx(Button, {
205
181
  variant: "link",
206
182
  className: "border-0 p-0 align-baseline",
207
183
  onClick: setShowVars,
208
184
  children: "feature"
209
- }) : "feature", " ", "to view its distribution within each group."]
185
+ }) : 'feature', ' ', "to view its distribution within each group."]
210
186
  })]
211
187
  });
212
188
  } else {
@@ -215,7 +191,7 @@ export function Violin(_ref) {
215
191
  heading: "Error displaying the violin plot",
216
192
  plotType: plotType,
217
193
  setPlotType: setPlotType,
218
- children: serverError.message || "An unexpected error occurred while generating the plot."
194
+ children: serverError.message || 'An unexpected error occurred while generating the plot.'
219
195
  });
220
196
  }
221
197
  }