@haniffalab/cherita-react 1.2.0 → 1.3.0-dev.2025-05-29.ee7e9b72

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 (91) hide show
  1. package/dist/cjs/components/controls/Controls.js +60 -0
  2. package/dist/cjs/components/dotplot/Dotplot.js +47 -38
  3. package/dist/cjs/components/dotplot/DotplotControls.js +77 -114
  4. package/dist/cjs/components/full-page/FullPage.js +29 -33
  5. package/dist/cjs/components/full-page/FullPagePseudospatial.js +30 -33
  6. package/dist/cjs/components/heatmap/Heatmap.js +33 -22
  7. package/dist/cjs/components/heatmap/HeatmapControls.js +2 -19
  8. package/dist/cjs/components/matrixplot/Matrixplot.js +35 -24
  9. package/dist/cjs/components/matrixplot/MatrixplotControls.js +4 -34
  10. package/dist/cjs/components/obs-list/ObsItem.js +63 -51
  11. package/dist/cjs/components/obs-list/ObsList.js +53 -48
  12. package/dist/cjs/components/obsm-list/ObsmList.js +17 -12
  13. package/dist/cjs/components/offcanvas/index.js +14 -11
  14. package/dist/cjs/components/pseudospatial/Pseudospatial.js +78 -68
  15. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +27 -21
  16. package/dist/cjs/components/scatterplot/Scatterplot.js +82 -76
  17. package/dist/cjs/components/scatterplot/ScatterplotControls.js +18 -31
  18. package/dist/cjs/components/scatterplot/SpatialControls.js +53 -23
  19. package/dist/cjs/components/scatterplot/Toolbox.js +1 -18
  20. package/dist/cjs/components/search-bar/SearchBar.js +156 -59
  21. package/dist/cjs/components/search-bar/SearchInfo.js +182 -0
  22. package/dist/cjs/components/search-bar/SearchResults.js +90 -60
  23. package/dist/cjs/components/var-list/VarItem.js +52 -75
  24. package/dist/cjs/components/var-list/VarList.js +47 -172
  25. package/dist/cjs/components/var-list/VarListToolbar.js +7 -8
  26. package/dist/cjs/components/var-list/VarSet.js +66 -57
  27. package/dist/cjs/components/violin/Violin.js +54 -43
  28. package/dist/cjs/components/violin/ViolinControls.js +4 -20
  29. package/dist/cjs/context/DatasetContext.js +26 -513
  30. package/dist/cjs/context/FilterContext.js +9 -8
  31. package/dist/cjs/context/SettingsContext.js +539 -0
  32. package/dist/cjs/context/ZarrDataContext.js +1 -2
  33. package/dist/cjs/helpers/color-helper.js +8 -8
  34. package/dist/cjs/helpers/zarr-helper.js +19 -16
  35. package/dist/cjs/utils/Filter.js +25 -21
  36. package/dist/cjs/utils/Histogram.js +4 -3
  37. package/dist/cjs/utils/ImageViewer.js +1 -2
  38. package/dist/cjs/utils/Legend.js +18 -12
  39. package/dist/cjs/utils/LoadingIndicators.js +1 -1
  40. package/dist/cjs/utils/VirtualizedList.js +16 -13
  41. package/dist/cjs/utils/errors.js +20 -22
  42. package/dist/cjs/utils/requests.js +13 -10
  43. package/dist/cjs/utils/zarrData.js +31 -50
  44. package/dist/css/cherita.css +84 -24
  45. package/dist/css/cherita.css.map +1 -1
  46. package/dist/esm/components/controls/Controls.js +51 -0
  47. package/dist/esm/components/dotplot/Dotplot.js +47 -37
  48. package/dist/esm/components/dotplot/DotplotControls.js +77 -112
  49. package/dist/esm/components/full-page/FullPage.js +29 -32
  50. package/dist/esm/components/full-page/FullPagePseudospatial.js +30 -32
  51. package/dist/esm/components/heatmap/Heatmap.js +32 -20
  52. package/dist/esm/components/heatmap/HeatmapControls.js +3 -20
  53. package/dist/esm/components/matrixplot/Matrixplot.js +34 -22
  54. package/dist/esm/components/matrixplot/MatrixplotControls.js +5 -35
  55. package/dist/esm/components/obs-list/ObsItem.js +63 -49
  56. package/dist/esm/components/obs-list/ObsList.js +53 -47
  57. package/dist/esm/components/obsm-list/ObsmList.js +17 -11
  58. package/dist/esm/components/offcanvas/index.js +14 -11
  59. package/dist/esm/components/pseudospatial/Pseudospatial.js +77 -66
  60. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +27 -20
  61. package/dist/esm/components/scatterplot/Scatterplot.js +81 -74
  62. package/dist/esm/components/scatterplot/ScatterplotControls.js +18 -29
  63. package/dist/esm/components/scatterplot/SpatialControls.js +54 -23
  64. package/dist/esm/components/scatterplot/Toolbox.js +1 -18
  65. package/dist/esm/components/search-bar/SearchBar.js +156 -59
  66. package/dist/esm/components/search-bar/SearchInfo.js +173 -0
  67. package/dist/esm/components/search-bar/SearchResults.js +91 -60
  68. package/dist/esm/components/var-list/VarItem.js +53 -76
  69. package/dist/esm/components/var-list/VarList.js +47 -171
  70. package/dist/esm/components/var-list/VarListToolbar.js +6 -6
  71. package/dist/esm/components/var-list/VarSet.js +67 -57
  72. package/dist/esm/components/violin/Violin.js +53 -41
  73. package/dist/esm/components/violin/ViolinControls.js +5 -21
  74. package/dist/esm/context/DatasetContext.js +25 -510
  75. package/dist/esm/context/FilterContext.js +8 -6
  76. package/dist/esm/context/SettingsContext.js +528 -0
  77. package/dist/esm/helpers/color-helper.js +8 -8
  78. package/dist/esm/helpers/zarr-helper.js +19 -16
  79. package/dist/esm/utils/Filter.js +25 -21
  80. package/dist/esm/utils/Histogram.js +4 -3
  81. package/dist/esm/utils/Legend.js +17 -10
  82. package/dist/esm/utils/LoadingIndicators.js +1 -1
  83. package/dist/esm/utils/VirtualizedList.js +15 -11
  84. package/dist/esm/utils/errors.js +20 -22
  85. package/dist/esm/utils/requests.js +13 -10
  86. package/dist/esm/utils/zarrData.js +33 -51
  87. package/package.json +6 -3
  88. package/scss/cherita.scss +50 -9
  89. package/scss/components/layouts.scss +24 -13
  90. package/scss/components/lists.scss +10 -0
  91. package/scss/components/plots.scss +3 -5
@@ -7,16 +7,14 @@ exports.VarSet = VarSet;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
9
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
- var _iconsMaterial = require("@mui/icons-material");
11
10
  var _lodash = _interopRequireDefault(require("lodash"));
12
11
  var _reactBootstrap = require("react-bootstrap");
12
+ var _VarItem = require("./VarItem");
13
13
  var _constants = require("../../constants/constants");
14
- var _DatasetContext = require("../../context/DatasetContext");
14
+ var _SettingsContext = require("../../context/SettingsContext");
15
15
  var _SearchBar = require("../search-bar/SearchBar");
16
- var _VarItem = require("./VarItem");
17
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
19
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
+ 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); }
20
18
  // @TODO: add button to score genes and plot
21
19
 
22
20
  const addVarToSet = (dispatch, set, v) => {
@@ -26,20 +24,22 @@ const addVarToSet = (dispatch, set, v) => {
26
24
  var: v
27
25
  });
28
26
  };
29
- function SingleSelectionSet(_ref) {
27
+ function SelectionSet(_ref) {
30
28
  let {
31
29
  set,
32
30
  isActive,
33
31
  selectSet,
34
32
  removeSet,
35
33
  removeSetVar,
36
- showSearchBar = true
34
+ isMultiple = false
37
35
  } = _ref;
38
36
  const [openSet, setOpenSet] = (0, _react.useState)(false);
37
+ const [showModal, setShowModal] = (0, _react.useState)(false);
38
+ const [searchText, setSearchText] = (0, _react.useState)("");
39
39
  const varList = set.vars.length ? _lodash.default.map(set.vars, v => {
40
40
  return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
41
41
  key: v.name
42
- }, /*#__PURE__*/_react.default.createElement(_VarItem.SingleSelectionItem, {
42
+ }, /*#__PURE__*/_react.default.createElement(_VarItem.SelectionItem, {
43
43
  item: v,
44
44
  showSetColorEncoding: false,
45
45
  removeVar: () => removeSetVar(v)
@@ -54,16 +54,37 @@ function SingleSelectionSet(_ref) {
54
54
  }
55
55
  }, /*#__PURE__*/_react.default.createElement("div", {
56
56
  className: "d-flex justify-content-between align-items-center w-100"
57
- }, /*#__PURE__*/_react.default.createElement("div", null, set.name), /*#__PURE__*/_react.default.createElement("div", {
57
+ }, /*#__PURE__*/_react.default.createElement("div", {
58
+ className: "ellipsis-text",
59
+ title: set.name
60
+ }, set.name), /*#__PURE__*/_react.default.createElement("div", {
58
61
  className: "d-flex align-items-center gap-1"
59
62
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
60
63
  placement: "top",
61
64
  overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, null, "This set represents the mean value of its features")
62
65
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
63
66
  icon: _freeSolidSvgIcons.faCircleInfo
64
- })), /*#__PURE__*/_react.default.createElement(_iconsMaterial.List, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
67
+ })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
68
+ type: "button",
69
+ variant: "outline-primary",
70
+ className: "m-0 p-0 px-1",
71
+ disabled: !set.vars.length,
72
+ title: "Open set"
73
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
74
+ icon: openSet ? _freeSolidSvgIcons.faChevronUp : _freeSolidSvgIcons.faChevronDown
75
+ })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
76
+ type: "button",
77
+ variant: "outline-primary",
78
+ className: "m-0 p-0 px-1",
79
+ onClick: e => {
80
+ e.stopPropagation();
81
+ setShowModal(true);
82
+ },
83
+ title: "Add to set"
84
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
85
+ icon: _freeSolidSvgIcons.faPlus
86
+ })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
65
87
  type: "button",
66
- key: set.name,
67
88
  variant: isActive ? "primary" : "outline-primary",
68
89
  className: "m-0 p-0 px-1",
69
90
  onClick: e => {
@@ -74,6 +95,10 @@ function SingleSelectionSet(_ref) {
74
95
  title: "Set as color encoding"
75
96
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
76
97
  icon: _freeSolidSvgIcons.faDroplet
98
+ }), isMultiple && /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
99
+ icon: _freeSolidSvgIcons.faPlus,
100
+ size: "xs",
101
+ className: "ps-xs-1"
77
102
  })), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
78
103
  type: "button",
79
104
  className: "m-0 p-0 px-1",
@@ -89,45 +114,30 @@ function SingleSelectionSet(_ref) {
89
114
  in: openSet
90
115
  }, /*#__PURE__*/_react.default.createElement("div", {
91
116
  className: "mt-2"
92
- }, showSearchBar &&
93
- /*#__PURE__*/
94
- // @TODO: fix how results are displayed, should be placed on top of parent components
95
- _react.default.createElement(_SearchBar.SearchBar, {
96
- handleSelect: (d, i) => addVarToSet(d, set, i)
97
- }), /*#__PURE__*/_react.default.createElement("div", {
98
- className: "mx-2"
99
117
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
100
118
  variant: "flush",
101
- className: "cherita-list"
102
- }, varList)))));
103
- }
104
- function MultipleSelectionSet(_ref2) {
105
- let {
106
- set,
107
- isActive,
108
- toggleSet
109
- } = _ref2;
110
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
111
- className: "d-flex"
112
- }, /*#__PURE__*/_react.default.createElement("div", {
113
- className: "flex-grow-1"
114
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
115
- type: "button",
116
- key: set.name,
117
- variant: isActive ? "primary" : "outline-primary",
118
- className: "m-0 p-0 px-1",
119
- onClick: toggleSet,
120
- title: set.name
121
- }, set.name))));
119
+ className: "cherita-list var-set-list"
120
+ }, varList))), /*#__PURE__*/_react.default.createElement(_SearchBar.SearchModal, {
121
+ show: showModal,
122
+ handleClose: () => setShowModal(false),
123
+ text: searchText,
124
+ setText: setSearchText,
125
+ displayText: "features",
126
+ handleSelect: (d, i) => {
127
+ addVarToSet(d, set, i);
128
+ },
129
+ searchVar: true,
130
+ searchDiseases: false
131
+ }));
122
132
  }
123
- function VarSet(_ref3) {
133
+ function VarSet(_ref2) {
124
134
  let {
125
135
  set,
126
136
  active,
127
137
  mode = _constants.SELECTION_MODES.SINGLE
128
- } = _ref3;
129
- const dataset = (0, _DatasetContext.useDataset)();
130
- const dispatch = (0, _DatasetContext.useDatasetDispatch)();
138
+ } = _ref2;
139
+ const settings = (0, _SettingsContext.useSettings)();
140
+ const dispatch = (0, _SettingsContext.useSettingsDispatch)();
131
141
  const selectSet = () => {
132
142
  if (mode === _constants.SELECTION_MODES.SINGLE) {
133
143
  dispatch({
@@ -161,8 +171,8 @@ function VarSet(_ref3) {
161
171
  }
162
172
  }
163
173
  dispatch({
164
- type: "remove.varSet",
165
- varSet: set
174
+ type: "remove.var",
175
+ var: set
166
176
  });
167
177
  };
168
178
  const removeSetVar = v => {
@@ -173,28 +183,27 @@ function VarSet(_ref3) {
173
183
  });
174
184
  };
175
185
  const toggleSet = () => {
176
- if (active.includes(set.name)) {
177
- dispatch({
178
- type: "deselect.multivar",
179
- var: set
180
- });
181
- } else {
182
- selectSet();
183
- }
186
+ dispatch({
187
+ type: "toggle.multivar",
188
+ var: set
189
+ });
184
190
  };
185
191
  if (set && mode === _constants.SELECTION_MODES.SINGLE) {
186
- return /*#__PURE__*/_react.default.createElement(SingleSelectionSet, {
192
+ return /*#__PURE__*/_react.default.createElement(SelectionSet, {
187
193
  set: set,
188
- isActive: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === set.name,
194
+ isActive: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === set.name,
189
195
  selectSet: selectSet,
190
196
  removeSet: removeSet,
191
197
  removeSetVar: v => removeSetVar(v)
192
198
  });
193
199
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
194
- return /*#__PURE__*/_react.default.createElement(MultipleSelectionSet, {
200
+ return /*#__PURE__*/_react.default.createElement(SelectionSet, {
195
201
  set: set,
196
202
  isActive: _lodash.default.includes(active, set.name),
197
- toggleSet: () => toggleSet(set)
203
+ selectSet: toggleSet,
204
+ removeSet: removeSet,
205
+ removeSetVar: v => removeSetVar(v),
206
+ isMultiple: true
198
207
  });
199
208
  } else {
200
209
  return null;
@@ -13,17 +13,24 @@ var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
13
13
  var _constants = require("../../constants/constants");
14
14
  var _DatasetContext = require("../../context/DatasetContext");
15
15
  var _FilterContext = require("../../context/FilterContext");
16
+ var _SettingsContext = require("../../context/SettingsContext");
16
17
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
17
18
  var _requests = require("../../utils/requests");
18
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
20
+ 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); }
21
+ 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; }
22
+ 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; }
23
+ 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; }
24
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
25
+ 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); }
21
26
  function Violin(_ref) {
27
+ var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
22
28
  let {
23
29
  mode = _constants.VIOLIN_MODES.MULTIKEY
24
30
  } = _ref;
25
31
  const ENDPOINT = "violin";
26
32
  const dataset = (0, _DatasetContext.useDataset)();
33
+ const settings = (0, _SettingsContext.useSettings)();
27
34
  const {
28
35
  obsIndices,
29
36
  isSliced
@@ -31,76 +38,80 @@ function Violin(_ref) {
31
38
  const [data, setData] = (0, _react.useState)([]);
32
39
  const [layout, setLayout] = (0, _react.useState)({});
33
40
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
34
- const [params, setParams] = (0, _react.useState)({
41
+ const [params, setParams] = (0, _react.useState)(_objectSpread({
35
42
  url: dataset.url,
36
43
  mode: mode,
37
- scale: dataset.controls.scale.violinplot.value,
38
- varNamesCol: dataset.varNamesCol,
39
- ...{
40
- [_constants.VIOLIN_MODES.MULTIKEY]: {
41
- varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
42
- name: i.name,
43
- indices: i.vars.map(v => v.index)
44
- } : i.index),
45
- obsKeys: [] // @TODO: implement
46
- },
47
- [_constants.VIOLIN_MODES.GROUPBY]: {
48
- varKey: dataset.selectedVar?.isSet ? {
49
- name: dataset.selectedVar?.name,
50
- indices: dataset.selectedVar?.vars.map(v => v.index)
51
- } : dataset.selectedVar?.index,
52
- obsCol: dataset.selectedObs,
53
- obsValues: !dataset.selectedObs?.omit.length ? null : _lodash.default.difference(_lodash.default.values(dataset.selectedObs?.codes), dataset.selectedObs?.omit).map(c => dataset.selectedObs?.codesMap[c]),
54
- obsIndices: isSliced ? [...(obsIndices || [])] : null
55
- }
56
- }[mode]
57
- });
44
+ scale: settings.controls.scale.violinplot,
45
+ varNamesCol: dataset.varNamesCol
46
+ }, {
47
+ [_constants.VIOLIN_MODES.MULTIKEY]: {
48
+ varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
49
+ name: i.name,
50
+ indices: i.vars.map(v => v.index)
51
+ } : i.index),
52
+ obsKeys: [] // @TODO: implement
53
+ },
54
+ [_constants.VIOLIN_MODES.GROUPBY]: {
55
+ varKey: (_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet ? {
56
+ name: (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name,
57
+ indices: (_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars.map(v => v.index)
58
+ } : (_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.index,
59
+ obsCol: settings.selectedObs,
60
+ 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 => {
61
+ var _settings$selectedObs4;
62
+ return (_settings$selectedObs4 = settings.selectedObs) === null || _settings$selectedObs4 === void 0 ? void 0 : _settings$selectedObs4.codesMap[c];
63
+ }),
64
+ obsIndices: isSliced ? [...(obsIndices || [])] : null
65
+ }
66
+ }[mode]));
58
67
  // @TODO: set default scale
59
68
 
60
69
  (0, _react.useEffect)(() => {
61
70
  if (mode === _constants.VIOLIN_MODES.MULTIKEY) {
62
- if (dataset.selectedMultiVar.length) {
71
+ if (settings.selectedMultiVar.length) {
63
72
  setHasSelections(true);
64
73
  } else {
65
74
  setHasSelections(false);
66
75
  }
67
76
  setParams(p => {
68
- return {
69
- ...p,
77
+ return _objectSpread(_objectSpread({}, p), {}, {
70
78
  url: dataset.url,
71
79
  mode: mode,
72
- varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
80
+ varKeys: settings.selectedMultiVar.map(i => i.isSet ? {
73
81
  name: i.name,
74
82
  indices: i.vars.map(v => v.index)
75
83
  } : i.index),
76
- scale: dataset.controls.scale.violinplot.value,
84
+ scale: settings.controls.scale.violinplot,
77
85
  varNamesCol: dataset.varNamesCol
78
- };
86
+ });
79
87
  });
80
88
  } else if (mode === _constants.VIOLIN_MODES.GROUPBY) {
81
- if (dataset.selectedObs && dataset.selectedVar) {
89
+ if (settings.selectedObs && settings.selectedVar) {
82
90
  setHasSelections(true);
83
91
  } else {
84
92
  setHasSelections(false);
85
93
  }
86
94
  setParams(p => {
87
- return {
88
- ...p,
95
+ var _settings$selectedVar5, _settings$selectedVar6, _settings$selectedVar7, _settings$selectedVar8, _settings$selectedObs5, _settings$selectedObs6, _settings$selectedObs7;
96
+ return _objectSpread(_objectSpread({}, p), {}, {
89
97
  url: dataset.url,
90
98
  mode: mode,
91
- varKey: dataset.selectedVar?.isSet ? {
92
- name: dataset.selectedVar?.name,
93
- indices: dataset.selectedVar?.vars.map(v => v.index)
94
- } : dataset.selectedVar?.index,
95
- obsCol: dataset.selectedObs,
96
- obsValues: !dataset.selectedObs?.omit.length ? null : _lodash.default.difference(_lodash.default.values(dataset.selectedObs?.codes), dataset.selectedObs?.omit).map(c => dataset.selectedObs?.codesMap[c]),
99
+ varKey: (_settings$selectedVar5 = settings.selectedVar) !== null && _settings$selectedVar5 !== void 0 && _settings$selectedVar5.isSet ? {
100
+ name: (_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.name,
101
+ indices: (_settings$selectedVar7 = settings.selectedVar) === null || _settings$selectedVar7 === void 0 ? void 0 : _settings$selectedVar7.vars.map(v => v.index)
102
+ } : (_settings$selectedVar8 = settings.selectedVar) === null || _settings$selectedVar8 === void 0 ? void 0 : _settings$selectedVar8.index,
103
+ obsCol: settings.selectedObs,
104
+ 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 => {
105
+ var _settings$selectedObs8;
106
+ return (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.codesMap[c];
107
+ }),
97
108
  obsIndices: isSliced ? [...(obsIndices || [])] : null,
98
- scale: dataset.controls.scale.violinplot.value,
109
+ scale: settings.controls.scale.violinplot,
99
110
  varNamesCol: dataset.varNamesCol
100
- };
111
+ });
101
112
  });
102
113
  }
103
- }, [dataset.controls.scale.violinplot.value, dataset.selectedMultiVar, dataset.selectedObs, dataset.selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
114
+ }, [settings.controls.scale.violinplot, settings.selectedMultiVar, settings.selectedObs, settings.selectedVar, dataset.url, dataset.varNamesCol, obsIndices, isSliced, mode]);
104
115
  const {
105
116
  fetchedData,
106
117
  isPending,
@@ -126,7 +137,7 @@ function Violin(_ref) {
126
137
  maxWidth: "100%",
127
138
  maxHeight: "100%"
128
139
  }
129
- }), fetchedData?.resampled && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
140
+ }), (fetchedData === null || fetchedData === void 0 ? void 0 : fetchedData.resampled) && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
130
141
  variant: "warning"
131
142
  }, /*#__PURE__*/_react.default.createElement("b", null, "Warning:"), " For performance reasons this plot was generated with resampled data. It will not be exactly the same as one produced with the entire dataset. \xA0", /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
132
143
  placement: "top",
@@ -5,27 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.ViolinControls = ViolinControls;
7
7
  var _react = _interopRequireDefault(require("react"));
8
- var _lodash = _interopRequireDefault(require("lodash"));
9
8
  var _reactBootstrap = require("react-bootstrap");
10
- var _constants = require("../../constants/constants");
11
- var _DatasetContext = require("../../context/DatasetContext");
9
+ var _Controls = require("../controls/Controls");
12
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
11
  function ViolinControls() {
14
- const dataset = (0, _DatasetContext.useDataset)();
15
- const dispatch = (0, _DatasetContext.useDatasetDispatch)();
16
- const scaleList = _lodash.default.values(_constants.VIOLINPLOT_SCALES).map(scale => /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
17
- key: scale.value,
18
- active: dataset.controls.scale.violinplot === scale,
19
- onClick: () => {
20
- dispatch({
21
- type: "set.controls.scale",
22
- plot: "violinplot",
23
- scale: scale
24
- });
25
- }
26
- }, scale.name));
27
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonToolbar, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup.Text, null, "Scale"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Toggle, {
28
- id: "dropdownStandardScale",
29
- variant: "light"
30
- }, dataset.controls.scale.violinplot.name), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, null, scaleList)))));
12
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, null, /*#__PURE__*/_react.default.createElement(_Controls.ScaleSelect, {
13
+ plot: "violinplot"
14
+ })));
31
15
  }