@haniffalab/cherita-react 0.2.0-dev.2024-09-26.d9293c4c → 0.2.0-dev.2024-09-26.ab815be6
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.
- package/dist/components/dotplot/Dotplot.js +11 -5
- package/dist/components/dotplot/DotplotControls.js +11 -10
- package/dist/components/heatmap/Heatmap.js +11 -5
- package/dist/components/matrixplot/Matrixplot.js +11 -5
- package/dist/components/matrixplot/MatrixplotControls.js +8 -7
- package/dist/components/scatterplot/Scatterplot.js +32 -24
- package/dist/components/search-bar/SearchBar.js +18 -2
- package/dist/components/search-bar/SearchResults.js +8 -8
- package/dist/components/var-list/VarItem.js +25 -22
- package/dist/components/var-list/VarList.js +158 -42
- package/dist/components/var-list/VarSet.js +222 -0
- package/dist/components/violin/Violin.js +42 -26
- package/dist/components/violin/ViolinControls.js +13 -18
- package/dist/constants/constants.js +39 -28
- package/dist/context/DatasetContext.js +81 -29
- package/dist/helpers/zarr-helper.js +35 -13
- package/dist/utils/search.js +3 -56
- package/package.json +2 -2
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
49
|
-
active: dataset.controls.
|
|
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.
|
|
53
|
-
|
|
52
|
+
type: "set.controls.scale",
|
|
53
|
+
plot: "dotplot",
|
|
54
|
+
scale: scale
|
|
54
55
|
});
|
|
55
56
|
},
|
|
56
|
-
children:
|
|
57
|
-
},
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
29
|
-
active: dataset.controls.
|
|
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.
|
|
33
|
-
|
|
32
|
+
type: "set.controls.scale",
|
|
33
|
+
plot: "matrixplot",
|
|
34
|
+
scale: scale
|
|
34
35
|
});
|
|
35
36
|
},
|
|
36
|
-
children:
|
|
37
|
-
},
|
|
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.
|
|
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.
|
|
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
|
-
|
|
103
|
-
|
|
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
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
141
|
-
name: item
|
|
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
|
|
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 =
|
|
253
|
+
const selectVar = () => {
|
|
251
254
|
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
252
255
|
dispatch({
|
|
253
256
|
type: "select.var",
|
|
254
|
-
var:
|
|
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:
|
|
266
|
+
var: item
|
|
264
267
|
});
|
|
265
268
|
}
|
|
266
269
|
};
|
|
267
|
-
const removeVar =
|
|
270
|
+
const removeVar = () => {
|
|
268
271
|
setVarButtons(b => {
|
|
269
|
-
return b.filter(i => i.name !==
|
|
272
|
+
return b.filter(i => i.name !== item.name);
|
|
270
273
|
});
|
|
271
274
|
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
272
|
-
if (active ===
|
|
275
|
+
if (active === item.matrix_index) {
|
|
273
276
|
dispatch({
|
|
274
|
-
type: "
|
|
277
|
+
type: "reset.var"
|
|
275
278
|
});
|
|
276
279
|
}
|
|
277
280
|
} else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
|
|
278
|
-
if (active.includes(
|
|
281
|
+
if (active.includes(item.matrix_index)) {
|
|
279
282
|
dispatch({
|
|
280
283
|
type: "deselect.multivar",
|
|
281
|
-
var:
|
|
284
|
+
var: item
|
|
282
285
|
});
|
|
283
286
|
}
|
|
284
287
|
}
|
|
285
288
|
};
|
|
286
|
-
const toggleVar =
|
|
287
|
-
if (active.includes(
|
|
289
|
+
const toggleVar = () => {
|
|
290
|
+
if (active.includes(item.matrix_index)) {
|
|
288
291
|
dispatch({
|
|
289
292
|
type: "deselect.multivar",
|
|
290
|
-
var:
|
|
293
|
+
var: item
|
|
291
294
|
});
|
|
292
295
|
} else {
|
|
293
|
-
selectVar(
|
|
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:
|
|
301
|
-
removeVar:
|
|
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:
|
|
311
|
+
toggleVar: toggleVar
|
|
309
312
|
});
|
|
310
313
|
} else {
|
|
311
314
|
return null;
|