@haniffalab/cherita-react 0.2.0-dev.2024-09-26.d9293c4c → 0.2.0-dev.2024-09-26.1ea62883

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.
@@ -26,12 +26,15 @@ function Dotplot() {
26
26
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
27
27
  const [params, setParams] = (0, _react.useState)({
28
28
  url: dataset.url,
29
- selectedObs: dataset.selectedObs,
29
+ obsCol: dataset.selectedObs,
30
30
  obsValues: !((_dataset$selectedObs = dataset.selectedObs) !== null && _dataset$selectedObs !== void 0 && _dataset$selectedObs.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_dataset$selectedObs2 = dataset.selectedObs) === null || _dataset$selectedObs2 === void 0 ? void 0 : _dataset$selectedObs2.codes), (_dataset$selectedObs3 = dataset.selectedObs) === null || _dataset$selectedObs3 === void 0 ? void 0 : _dataset$selectedObs3.omit).map(c => {
31
31
  var _dataset$selectedObs4;
32
32
  return (_dataset$selectedObs4 = dataset.selectedObs) === null || _dataset$selectedObs4 === void 0 ? void 0 : _dataset$selectedObs4.codesMap[c];
33
33
  }),
34
- selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
34
+ varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
35
+ name: i.name,
36
+ indices: i.vars.map(v => v.index)
37
+ } : i.index),
35
38
  standardScale: dataset.controls.standardScale,
36
39
  meanOnlyExpressed: dataset.controls.meanOnlyExpressed,
37
40
  expressionCutoff: dataset.controls.expressionCutoff,
@@ -50,12 +53,15 @@ function Dotplot() {
50
53
  return {
51
54
  ...p,
52
55
  url: dataset.url,
53
- selectedObs: dataset.selectedObs,
56
+ obsCol: dataset.selectedObs,
54
57
  obsValues: !((_dataset$selectedObs5 = dataset.selectedObs) !== null && _dataset$selectedObs5 !== void 0 && _dataset$selectedObs5.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_dataset$selectedObs6 = dataset.selectedObs) === null || _dataset$selectedObs6 === void 0 ? void 0 : _dataset$selectedObs6.codes), (_dataset$selectedObs7 = dataset.selectedObs) === null || _dataset$selectedObs7 === void 0 ? void 0 : _dataset$selectedObs7.omit).map(c => {
55
58
  var _dataset$selectedObs8;
56
59
  return (_dataset$selectedObs8 = dataset.selectedObs) === null || _dataset$selectedObs8 === void 0 ? void 0 : _dataset$selectedObs8.codesMap[c];
57
60
  }),
58
- selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
61
+ varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
62
+ name: i.name,
63
+ indices: i.vars.map(v => v.index)
64
+ } : i.index),
59
65
  standardScale: dataset.controls.standardScale,
60
66
  meanOnlyExpressed: dataset.controls.meanOnlyExpressed,
61
67
  expressionCutoff: dataset.controls.expressionCutoff,
@@ -79,7 +85,7 @@ function Dotplot() {
79
85
  isPending,
80
86
  serverError
81
87
  } = (0, _requests.useDebouncedFetch)(ENDPOINT, params, 500, {
82
- enabled: !!params.selectedObs && !!params.selectedMultiVar.length
88
+ enabled: !!params.obsCol && !!params.varKeys.length
83
89
  });
84
90
  (0, _react.useEffect)(() => {
85
91
  if (hasSelections && !isPending && !serverError) {
@@ -19,7 +19,6 @@ function DotplotControls() {
19
19
  const dataset = (0, _DatasetContext.useDataset)();
20
20
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
21
21
  const [controls, setControls] = (0, _react.useState)({
22
- standardScale: dataset.controls.standardScale,
23
22
  expressionCutoff: dataset.controls.expressionCutoff,
24
23
  colorAxis: {
25
24
  cmin: dataset.controls.colorAxis.cmin,
@@ -32,9 +31,10 @@ function DotplotControls() {
32
31
  colorAxis: {
33
32
  cmin: dataset.controls.colorAxis.cmin,
34
33
  cmax: dataset.controls.colorAxis.cmax
35
- }
34
+ },
35
+ expressionCutoff: dataset.controls.expressionCutoff
36
36
  }));
37
- }, [dataset.controls.colorAxis.cmin, dataset.controls.colorAxis.cmax]);
37
+ }, [dataset.controls.colorAxis.cmin, dataset.controls.colorAxis.cmax, dataset.controls.expressionCutoff]);
38
38
  const colorScaleList = _lodash.default.keys(_colorscales.COLORSCALES).map(key => /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
39
39
  active: dataset.controls.colorScale === key,
40
40
  onClick: () => {
@@ -45,16 +45,17 @@ function DotplotControls() {
45
45
  },
46
46
  children: key
47
47
  }, key));
48
- const standardScaleList = _constants.DOTPLOT_STANDARDSCALES.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
49
- active: dataset.controls.standardScale === item.value,
48
+ const standardScaleList = _lodash.default.values(_constants.DOTPLOT_SCALES).map(scale => /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
49
+ active: dataset.controls.scale.dotplot === scale,
50
50
  onClick: () => {
51
51
  dispatch({
52
- type: "set.controls.standardScale",
53
- standardScale: item.value
52
+ type: "set.controls.scale",
53
+ plot: "dotplot",
54
+ scale: scale
54
55
  });
55
56
  },
56
- children: item.name
57
- }, item.value));
57
+ children: scale.name
58
+ }, scale.value));
58
59
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.ButtonToolbar, {
59
60
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonGroup, {
60
61
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dropdown.default, {
@@ -74,7 +75,7 @@ function DotplotControls() {
74
75
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Toggle, {
75
76
  id: "dropdownStandardScale",
76
77
  variant: "light",
77
- children: dataset.controls.standardScale
78
+ children: dataset.controls.scale.dotplot.name
78
79
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Menu, {
79
80
  children: standardScaleList
80
81
  })]
@@ -25,12 +25,15 @@ function Heatmap() {
25
25
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
26
26
  const [params, setParams] = (0, _react.useState)({
27
27
  url: dataset.url,
28
- selectedObs: dataset.selectedObs,
28
+ obsCol: dataset.selectedObs,
29
29
  obsValues: !((_dataset$selectedObs = dataset.selectedObs) !== null && _dataset$selectedObs !== void 0 && _dataset$selectedObs.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_dataset$selectedObs2 = dataset.selectedObs) === null || _dataset$selectedObs2 === void 0 ? void 0 : _dataset$selectedObs2.codes), (_dataset$selectedObs3 = dataset.selectedObs) === null || _dataset$selectedObs3 === void 0 ? void 0 : _dataset$selectedObs3.omit).map(c => {
30
30
  var _dataset$selectedObs4;
31
31
  return (_dataset$selectedObs4 = dataset.selectedObs) === null || _dataset$selectedObs4 === void 0 ? void 0 : _dataset$selectedObs4.codesMap[c];
32
32
  }),
33
- selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
33
+ varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
34
+ name: i.name,
35
+ indices: i.vars.map(v => v.index)
36
+ } : i.index),
34
37
  varNamesCol: dataset.varNamesCol
35
38
  });
36
39
  (0, _react.useEffect)(() => {
@@ -44,12 +47,15 @@ function Heatmap() {
44
47
  return {
45
48
  ...p,
46
49
  url: dataset.url,
47
- selectedObs: dataset.selectedObs,
50
+ obsCol: dataset.selectedObs,
48
51
  obsValues: !((_dataset$selectedObs5 = dataset.selectedObs) !== null && _dataset$selectedObs5 !== void 0 && _dataset$selectedObs5.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_dataset$selectedObs6 = dataset.selectedObs) === null || _dataset$selectedObs6 === void 0 ? void 0 : _dataset$selectedObs6.codes), (_dataset$selectedObs7 = dataset.selectedObs) === null || _dataset$selectedObs7 === void 0 ? void 0 : _dataset$selectedObs7.omit).map(c => {
49
52
  var _dataset$selectedObs8;
50
53
  return (_dataset$selectedObs8 = dataset.selectedObs) === null || _dataset$selectedObs8 === void 0 ? void 0 : _dataset$selectedObs8.codesMap[c];
51
54
  }),
52
- selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
55
+ varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
56
+ name: i.name,
57
+ indices: i.vars.map(v => v.index)
58
+ } : i.index),
53
59
  varNamesCol: dataset.varNamesCol
54
60
  };
55
61
  });
@@ -70,7 +76,7 @@ function Heatmap() {
70
76
  isPending,
71
77
  serverError
72
78
  } = (0, _requests.useDebouncedFetch)(ENDPOINT, params, 500, {
73
- enabled: !!params.selectedObs && !!params.selectedMultiVar.length
79
+ enabled: !!params.obsCol && !!params.varKeys.length
74
80
  });
75
81
  (0, _react.useEffect)(() => {
76
82
  if (hasSelections && !isPending && !serverError) {
@@ -25,12 +25,15 @@ function Matrixplot() {
25
25
  const [hasSelections, setHasSelections] = (0, _react.useState)(false);
26
26
  const [params, setParams] = (0, _react.useState)({
27
27
  url: dataset.url,
28
- selectedObs: dataset.selectedObs,
28
+ obsCol: dataset.selectedObs,
29
29
  obsValues: !((_dataset$selectedObs = dataset.selectedObs) !== null && _dataset$selectedObs !== void 0 && _dataset$selectedObs.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_dataset$selectedObs2 = dataset.selectedObs) === null || _dataset$selectedObs2 === void 0 ? void 0 : _dataset$selectedObs2.codes), (_dataset$selectedObs3 = dataset.selectedObs) === null || _dataset$selectedObs3 === void 0 ? void 0 : _dataset$selectedObs3.omit).map(c => {
30
30
  var _dataset$selectedObs4;
31
31
  return (_dataset$selectedObs4 = dataset.selectedObs) === null || _dataset$selectedObs4 === void 0 ? void 0 : _dataset$selectedObs4.codesMap[c];
32
32
  }),
33
- selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
33
+ varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
34
+ name: i.name,
35
+ indices: i.vars.map(v => v.index)
36
+ } : i.index),
34
37
  standardScale: dataset.controls.standardScale,
35
38
  varNamesCol: dataset.varNamesCol
36
39
  });
@@ -45,12 +48,15 @@ function Matrixplot() {
45
48
  return {
46
49
  ...p,
47
50
  url: dataset.url,
48
- selectedObs: dataset.selectedObs,
51
+ obsCol: dataset.selectedObs,
49
52
  obsValues: !((_dataset$selectedObs5 = dataset.selectedObs) !== null && _dataset$selectedObs5 !== void 0 && _dataset$selectedObs5.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_dataset$selectedObs6 = dataset.selectedObs) === null || _dataset$selectedObs6 === void 0 ? void 0 : _dataset$selectedObs6.codes), (_dataset$selectedObs7 = dataset.selectedObs) === null || _dataset$selectedObs7 === void 0 ? void 0 : _dataset$selectedObs7.omit).map(c => {
50
53
  var _dataset$selectedObs8;
51
54
  return (_dataset$selectedObs8 = dataset.selectedObs) === null || _dataset$selectedObs8 === void 0 ? void 0 : _dataset$selectedObs8.codesMap[c];
52
55
  }),
53
- selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
56
+ varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
57
+ name: i.name,
58
+ indices: i.vars.map(v => v.index)
59
+ } : i.index),
54
60
  standardScale: dataset.controls.standardScale,
55
61
  varNamesCol: dataset.varNamesCol
56
62
  };
@@ -72,7 +78,7 @@ function Matrixplot() {
72
78
  isPending,
73
79
  serverError
74
80
  } = (0, _requests.useDebouncedFetch)(ENDPOINT, params, 500, {
75
- enabled: !!params.selectedObs && !!params.selectedMultiVar.length
81
+ enabled: !!params.obsCol && !!params.varKeys.length
76
82
  });
77
83
  (0, _react.useEffect)(() => {
78
84
  if (hasSelections && !isPending && !serverError) {
@@ -25,16 +25,17 @@ function MatrixplotControls() {
25
25
  },
26
26
  children: key
27
27
  }, key));
28
- const standardScaleList = _constants.MATRIXPLOT_STANDARDSCALES.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
29
- active: dataset.controls.standardScale === item.name,
28
+ const standardScaleList = _lodash.default.values(_constants.MATRIXPLOT_SCALES).map(scale => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
29
+ active: dataset.controls.scale.matrixplot.name === scale.name,
30
30
  onClick: () => {
31
31
  dispatch({
32
- type: "set.controls.standardScale",
33
- standardScale: item.value
32
+ type: "set.controls.scale",
33
+ plot: "matrixplot",
34
+ scale: scale
34
35
  });
35
36
  },
36
- children: item.name
37
- }, item.value));
37
+ children: scale.name
38
+ }, scale.value));
38
39
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.ButtonToolbar, {
39
40
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonGroup, {
40
41
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown, {
@@ -54,7 +55,7 @@ function MatrixplotControls() {
54
55
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Toggle, {
55
56
  id: "dropdownStandardScale",
56
57
  variant: "light",
57
- children: dataset.controls.standardScale
58
+ children: dataset.controls.scale.matrixplot.name
58
59
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Menu, {
59
60
  children: standardScaleList
60
61
  })]
@@ -39,8 +39,16 @@ const INITIAL_VIEW_STATE = {
39
39
  bearing: 0
40
40
  };
41
41
  const EPSILON = 1e-6;
42
+ const meanData = (_i, data) => {
43
+ return _lodash.default.zipWith(...data, function () {
44
+ for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {
45
+ values[_key] = arguments[_key];
46
+ }
47
+ return _lodash.default.mean(values);
48
+ });
49
+ };
42
50
  function Scatterplot(_ref) {
43
- var _dataset$selectedObs, _dataset$selectedObs2, _dataset$selectedObs7, _dataset$selectedObs11, _dataset$selectedObs12, _dataset$selectedObs13, _dataset$selectedObs15, _features$features2, _obsmData$serverError, _xData$serverError, _obsData$serverError, _labelObsData$serverE, _obsmData$data;
51
+ var _dataset$selectedVar, _dataset$selectedVar2, _dataset$selectedVar3, _dataset$selectedObs, _dataset$selectedObs2, _dataset$selectedObs7, _dataset$selectedObs11, _dataset$selectedObs12, _dataset$selectedObs13, _dataset$selectedObs15, _features$features2, _obsmData$serverError, _xData$serverError, _obsData$serverError, _labelObsData$serverE, _obsmData$data;
44
52
  let {
45
53
  radius = 30
46
54
  } = _ref;
@@ -71,23 +79,24 @@ function Scatterplot(_ref) {
71
79
  url: dataset.url,
72
80
  path: "obsm/" + dataset.selectedObsm
73
81
  });
74
- const [xParams, setXParams] = (0, _react.useState)({
82
+ const [xParams, setXParams] = (0, _react.useState)(!dataset.selectedVar ? [] : !((_dataset$selectedVar = dataset.selectedVar) !== null && _dataset$selectedVar !== void 0 && _dataset$selectedVar.isSet) ? [{
75
83
  url: dataset.url,
76
- path: "X"
77
- });
84
+ path: "X",
85
+ s: [null, (_dataset$selectedVar2 = dataset.selectedVar) === null || _dataset$selectedVar2 === void 0 ? void 0 : _dataset$selectedVar2.matrix_index]
86
+ }] : _lodash.default.map((_dataset$selectedVar3 = dataset.selectedVar) === null || _dataset$selectedVar3 === void 0 ? void 0 : _dataset$selectedVar3.vars, v => {
87
+ return {
88
+ url: dataset.url,
89
+ path: "X",
90
+ s: [null, v.matrix_index]
91
+ };
92
+ }));
78
93
  const [obsParams, setObsParams] = (0, _react.useState)({
79
94
  url: dataset.url,
80
95
  path: "obs/" + ((_dataset$selectedObs = dataset.selectedObs) === null || _dataset$selectedObs === void 0 ? void 0 : _dataset$selectedObs.name) + (((_dataset$selectedObs2 = dataset.selectedObs) === null || _dataset$selectedObs2 === void 0 ? void 0 : _dataset$selectedObs2.type) === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : "")
81
96
  });
82
97
  const [labelObsParams, setLabelObsParams] = (0, _react.useState)([]);
83
-
84
- // needs to be wrapped in useMemo as it is an array an could cause an infinite loop otherwise
85
- const xSelection = (0, _react.useMemo)(() => {
86
- var _dataset$selectedVar;
87
- return [null, (_dataset$selectedVar = dataset.selectedVar) === null || _dataset$selectedVar === void 0 ? void 0 : _dataset$selectedVar.matrix_index];
88
- }, [dataset.selectedVar]);
89
98
  const obsmData = (0, _zarrHelper.useZarr)(obsmParams, null, _zarrHelper.GET_OPTIONS);
90
- const xData = (0, _zarrHelper.useZarr)(xParams, xSelection, _zarrHelper.GET_OPTIONS);
99
+ const xData = (0, _zarrHelper.useMultipleZarr)(xParams, _zarrHelper.GET_OPTIONS, meanData);
91
100
  const obsData = (0, _zarrHelper.useZarr)(obsParams, null, _zarrHelper.GET_OPTIONS);
92
101
  const labelObsData = (0, _zarrHelper.useMultipleZarr)(labelObsParams, _zarrHelper.GET_OPTIONS);
93
102
  (0, _react.useEffect)(() => {
@@ -99,14 +108,19 @@ function Scatterplot(_ref) {
99
108
  });
100
109
  }, [dataset.selectedObsm]);
101
110
  (0, _react.useEffect)(() => {
102
- setXParams(p => {
103
- var _dataset$selectedVar2;
111
+ var _dataset$selectedVar4, _dataset$selectedVar5, _dataset$selectedVar6;
112
+ setXParams(!dataset.selectedVar ? [] : !((_dataset$selectedVar4 = dataset.selectedVar) !== null && _dataset$selectedVar4 !== void 0 && _dataset$selectedVar4.isSet) ? [{
113
+ url: dataset.url,
114
+ path: "X",
115
+ s: [null, (_dataset$selectedVar5 = dataset.selectedVar) === null || _dataset$selectedVar5 === void 0 ? void 0 : _dataset$selectedVar5.matrix_index]
116
+ }] : _lodash.default.map((_dataset$selectedVar6 = dataset.selectedVar) === null || _dataset$selectedVar6 === void 0 ? void 0 : _dataset$selectedVar6.vars, v => {
104
117
  return {
105
- ...p,
106
- s: [null, (_dataset$selectedVar2 = dataset.selectedVar) === null || _dataset$selectedVar2 === void 0 ? void 0 : _dataset$selectedVar2.matrix_index]
118
+ url: dataset.url,
119
+ path: "X",
120
+ s: [null, v.matrix_index]
107
121
  };
108
- });
109
- }, [dataset.selectedVar]);
122
+ }));
123
+ }, [dataset.selectedVar, dataset.url]);
110
124
  (0, _react.useEffect)(() => {
111
125
  setObsParams(p => {
112
126
  var _dataset$selectedObs3, _dataset$selectedObs4;
@@ -132,12 +146,6 @@ function Scatterplot(_ref) {
132
146
  url: dataset.url
133
147
  };
134
148
  });
135
- setXParams(p => {
136
- return {
137
- ...p,
138
- url: dataset.url
139
- };
140
- });
141
149
  setObsParams(p => {
142
150
  return {
143
151
  ...p,
@@ -473,7 +481,7 @@ function Scatterplot(_ref) {
473
481
  text.push(getLabel(dataset.selectedVar, (_xData$data = xData.data) === null || _xData$data === void 0 ? void 0 : _xData$data[index], true));
474
482
  }
475
483
  if (dataset.labelObs.length) {
476
- text.push(..._lodash.default.map(labelObsData, (v, k) => {
484
+ text.push(..._lodash.default.map(labelObsData.data, (v, k) => {
477
485
  const labelObs = _lodash.default.find(dataset.labelObs, o => o.name === k);
478
486
  return getLabel(labelObs, v[index]);
479
487
  }));
@@ -12,10 +12,25 @@ var _jsxRuntime = require("react/jsx-runtime");
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  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); }
14
14
  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; }
15
+ function onVarSelect(dispatch, item) {
16
+ dispatch({
17
+ type: "select.var",
18
+ var: item
19
+ });
20
+ dispatch({
21
+ type: "select.multivar",
22
+ var: item
23
+ });
24
+ dispatch({
25
+ type: "set.colorEncoding",
26
+ value: "var"
27
+ });
28
+ }
15
29
  function SearchBar(_ref) {
16
30
  let {
17
31
  searchVar = true,
18
- searchDiseases = false
32
+ searchDiseases = false,
33
+ handleSelect = onVarSelect
19
34
  } = _ref;
20
35
  const [showSuggestions, setShowSuggestions] = (0, _react.useState)(false);
21
36
  const [text, setText] = (0, _react.useState)("");
@@ -62,7 +77,8 @@ function SearchBar(_ref) {
62
77
  },
63
78
  children: [searchVar && /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchResults.VarSearchResults, {
64
79
  text: text,
65
- setShowSuggestions: setShowSuggestions
80
+ setShowSuggestions: setShowSuggestions,
81
+ handleSelect: handleSelect
66
82
  }), searchVar && searchDiseases && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Divider, {}), searchDiseases && /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchResults.DiseasesSearchResults, {
67
83
  text: text,
68
84
  setShowSuggestions: setShowSuggestions
@@ -17,17 +17,18 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
17
17
  function VarSearchResults(_ref) {
18
18
  let {
19
19
  text,
20
- setShowSuggestions
20
+ setShowSuggestions,
21
+ handleSelect
21
22
  } = _ref;
22
23
  const [suggestions, setSuggestions] = (0, _react.useState)([]);
24
+ const dispatch = (0, _DatasetContext.useDatasetDispatch)();
23
25
  const {
24
26
  setParams,
25
27
  data: {
26
28
  fetchedData = [],
27
29
  isPending,
28
30
  serverError
29
- },
30
- onSelect
31
+ }
31
32
  } = (0, _search.useVarSearch)();
32
33
  const deferredData = (0, _react.useDeferredValue)(suggestions);
33
34
  const isStale = deferredData !== fetchedData;
@@ -62,7 +63,7 @@ function VarSearchResults(_ref) {
62
63
  as: "button",
63
64
  disabled: isStale,
64
65
  onClick: () => {
65
- onSelect(item);
66
+ handleSelect(dispatch, item);
66
67
  _lodash.default.delay(() => {
67
68
  setShowSuggestions(false);
68
69
  }, 150);
@@ -70,7 +71,7 @@ function VarSearchResults(_ref) {
70
71
  children: item.name
71
72
  }, item.name);
72
73
  });
73
- }, [deferredData, isStale, onSelect, setShowSuggestions]);
74
+ }, [deferredData, dispatch, handleSelect, isStale, setShowSuggestions]);
74
75
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
75
76
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Header, {
76
77
  children: "Features"
@@ -102,7 +103,6 @@ function DiseasesSearchResults(_ref2) {
102
103
  serverError
103
104
  }
104
105
  } = (0, _search.useDiseaseSearch)();
105
- (0, _search.useGetDisease)();
106
106
  const deferredData = (0, _react.useDeferredValue)(suggestions);
107
107
  const isStale = deferredData !== fetchedData;
108
108
  const updateParams = (0, _react.useMemo)(() => {
@@ -137,8 +137,8 @@ function DiseasesSearchResults(_ref2) {
137
137
  onClick: () => {
138
138
  dispatch({
139
139
  type: "select.disease",
140
- id: item === null || item === void 0 ? void 0 : item.disease_id,
141
- name: item === null || item === void 0 ? void 0 : item.disease_name
140
+ id: item.disease_id,
141
+ name: item.disease_name
142
142
  });
143
143
  _lodash.default.delay(() => {
144
144
  setShowSuggestions(false);
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.SingleSelectionItem = SingleSelectionItem;
6
7
  exports.VarItem = VarItem;
7
8
  var _react = _interopRequireWildcard(require("react"));
8
9
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
@@ -53,9 +54,9 @@ function VarHistogram(_ref) {
53
54
  refetchOnMount: false
54
55
  });
55
56
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
56
- className: "feature-histogram-container m-2",
57
+ className: "feature-histogram-container",
57
58
  children: isPending ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingLinear, {}) : !serverError && fetchedData ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
58
- className: "feature-histogram",
59
+ className: "feature-histogram m-1",
59
60
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_xCharts.SparkLineChart, {
60
61
  plotType: "bar",
61
62
  data: fetchedData.log10,
@@ -143,7 +144,9 @@ function SingleSelectionItem(_ref4) {
143
144
  isActive,
144
145
  selectVar,
145
146
  removeVar,
146
- isDiseaseGene
147
+ isDiseaseGene = false,
148
+ showSetColorEncoding = true,
149
+ showRemove = true
147
150
  } = _ref4;
148
151
  const ENDPOINT = "disease/gene";
149
152
  const [openInfo, setOpenInfo] = (0, _react.useState)(false);
@@ -173,7 +176,7 @@ function SingleSelectionItem(_ref4) {
173
176
  className: "d-flex align-items-center gap-1",
174
177
  children: [hasDiseaseInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.MoreVert, {}), !isDiseaseGene && /*#__PURE__*/(0, _jsxRuntime.jsx)(VarHistogram, {
175
178
  item: item
176
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
179
+ }), showSetColorEncoding && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
177
180
  type: "button",
178
181
  variant: isActive ? "primary" : isNotInData ? "outline-secondary" : "outline-primary",
179
182
  className: "m-0 p-0 px-1",
@@ -186,7 +189,7 @@ function SingleSelectionItem(_ref4) {
186
189
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
187
190
  icon: _freeSolidSvgIcons.faDroplet
188
191
  })
189
- }, item.matrix_index), !isDiseaseGene && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
192
+ }, item.matrix_index), (!isDiseaseGene || !showRemove) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
190
193
  type: "button",
191
194
  className: "m-0 p-0 px-1",
192
195
  variant: "outline-secondary",
@@ -230,7 +233,7 @@ function MultipleSelectionItem(_ref5) {
230
233
  className: "m-0 p-0 px-1",
231
234
  onClick: toggleVar,
232
235
  disabled: isNotInData,
233
- title: isNotInData ? "Not present in data" : "",
236
+ title: isNotInData ? "Not present in data" : item.name,
234
237
  children: item.name
235
238
  }, item.matrix_index)
236
239
  })
@@ -247,11 +250,11 @@ function VarItem(_ref6) {
247
250
  } = _ref6;
248
251
  const dataset = (0, _DatasetContext.useDataset)();
249
252
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
250
- const selectVar = v => {
253
+ const selectVar = () => {
251
254
  if (mode === _constants.SELECTION_MODES.SINGLE) {
252
255
  dispatch({
253
256
  type: "select.var",
254
- var: v
257
+ var: item
255
258
  });
256
259
  dispatch({
257
260
  type: "set.colorEncoding",
@@ -260,52 +263,52 @@ function VarItem(_ref6) {
260
263
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
261
264
  dispatch({
262
265
  type: "select.multivar",
263
- var: v
266
+ var: item
264
267
  });
265
268
  }
266
269
  };
267
- const removeVar = v => {
270
+ const removeVar = () => {
268
271
  setVarButtons(b => {
269
- return b.filter(i => i.name !== v.name);
272
+ return b.filter(i => i.name !== item.name);
270
273
  });
271
274
  if (mode === _constants.SELECTION_MODES.SINGLE) {
272
- if (active === v.matrix_index) {
275
+ if (active === item.matrix_index) {
273
276
  dispatch({
274
- type: "deselect.var"
277
+ type: "reset.var"
275
278
  });
276
279
  }
277
280
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
278
- if (active.includes(v.matrix_index)) {
281
+ if (active.includes(item.matrix_index)) {
279
282
  dispatch({
280
283
  type: "deselect.multivar",
281
- var: v
284
+ var: item
282
285
  });
283
286
  }
284
287
  }
285
288
  };
286
- const toggleVar = v => {
287
- if (active.includes(v.matrix_index)) {
289
+ const toggleVar = () => {
290
+ if (active.includes(item.matrix_index)) {
288
291
  dispatch({
289
292
  type: "deselect.multivar",
290
- var: v
293
+ var: item
291
294
  });
292
295
  } else {
293
- selectVar(v);
296
+ selectVar(item);
294
297
  }
295
298
  };
296
299
  if (item && mode === _constants.SELECTION_MODES.SINGLE) {
297
300
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(SingleSelectionItem, {
298
301
  item: item,
299
302
  isActive: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === item.matrix_index,
300
- selectVar: () => selectVar(item),
301
- removeVar: () => removeVar(item),
303
+ selectVar: selectVar,
304
+ removeVar: removeVar,
302
305
  isDiseaseGene: isDiseaseGene
303
306
  });
304
307
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
305
308
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(MultipleSelectionItem, {
306
309
  item: item,
307
310
  isActive: item.matrix_index !== -1 && _lodash.default.includes(active, item.matrix_index),
308
- toggleVar: () => toggleVar(item)
311
+ toggleVar: toggleVar
309
312
  });
310
313
  } else {
311
314
  return null;