@haniffalab/cherita-react 1.2.0-dev.2025-05-21.31931945 → 1.2.0-dev.2025-05-21.e57ef5f2
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/cjs/components/dotplot/Dotplot.js +26 -19
- package/dist/cjs/components/dotplot/DotplotControls.js +17 -19
- package/dist/cjs/components/full-page/FullPage.js +9 -7
- package/dist/cjs/components/full-page/FullPagePseudospatial.js +9 -7
- package/dist/cjs/components/heatmap/Heatmap.js +22 -13
- package/dist/cjs/components/matrixplot/Matrixplot.js +22 -13
- package/dist/cjs/components/obs-list/ObsItem.js +37 -29
- package/dist/cjs/components/obs-list/ObsList.js +47 -44
- package/dist/cjs/components/obsm-list/ObsmList.js +9 -6
- package/dist/cjs/components/offcanvas/index.js +13 -9
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +61 -53
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +17 -11
- package/dist/cjs/components/scatterplot/Scatterplot.js +52 -52
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +3 -3
- package/dist/cjs/components/scatterplot/SpatialControls.js +4 -4
- package/dist/cjs/components/search-bar/SearchBar.js +12 -10
- package/dist/cjs/components/search-bar/SearchInfo.js +14 -13
- package/dist/cjs/components/search-bar/SearchResults.js +16 -14
- package/dist/cjs/components/var-list/VarItem.js +37 -120
- package/dist/cjs/components/var-list/VarList.js +16 -13
- package/dist/cjs/components/var-list/VarListToolbar.js +1 -2
- package/dist/cjs/components/var-list/VarSet.js +17 -29
- package/dist/cjs/components/violin/Violin.js +44 -35
- package/dist/cjs/context/DatasetContext.js +17 -11
- package/dist/cjs/context/FilterContext.js +9 -8
- package/dist/cjs/context/SettingsContext.js +169 -237
- package/dist/cjs/context/ZarrDataContext.js +1 -2
- package/dist/cjs/helpers/color-helper.js +3 -3
- package/dist/cjs/helpers/zarr-helper.js +15 -12
- package/dist/cjs/utils/Filter.js +13 -9
- package/dist/cjs/utils/Histogram.js +4 -3
- package/dist/cjs/utils/ImageViewer.js +1 -2
- package/dist/cjs/utils/Legend.js +3 -3
- package/dist/cjs/utils/LoadingIndicators.js +1 -1
- package/dist/cjs/utils/VirtualizedList.js +16 -13
- package/dist/cjs/utils/errors.js +20 -22
- package/dist/cjs/utils/requests.js +13 -10
- package/dist/cjs/utils/zarrData.js +12 -8
- package/dist/css/cherita.css +24 -10
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/dotplot/Dotplot.js +25 -17
- package/dist/esm/components/dotplot/DotplotControls.js +16 -17
- package/dist/esm/components/full-page/FullPage.js +8 -5
- package/dist/esm/components/full-page/FullPagePseudospatial.js +8 -5
- package/dist/esm/components/heatmap/Heatmap.js +21 -11
- package/dist/esm/components/matrixplot/Matrixplot.js +21 -11
- package/dist/esm/components/obs-list/ObsItem.js +36 -27
- package/dist/esm/components/obs-list/ObsList.js +46 -42
- package/dist/esm/components/obsm-list/ObsmList.js +8 -4
- package/dist/esm/components/offcanvas/index.js +13 -9
- package/dist/esm/components/pseudospatial/Pseudospatial.js +60 -51
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +16 -9
- package/dist/esm/components/scatterplot/Scatterplot.js +51 -50
- package/dist/esm/components/scatterplot/ScatterplotControls.js +2 -1
- package/dist/esm/components/scatterplot/SpatialControls.js +3 -2
- package/dist/esm/components/search-bar/SearchBar.js +11 -8
- package/dist/esm/components/search-bar/SearchInfo.js +13 -11
- package/dist/esm/components/search-bar/SearchResults.js +15 -12
- package/dist/esm/components/var-list/VarItem.js +36 -117
- package/dist/esm/components/var-list/VarList.js +15 -11
- package/dist/esm/components/var-list/VarSet.js +17 -28
- package/dist/esm/components/violin/Violin.js +43 -33
- package/dist/esm/context/DatasetContext.js +16 -9
- package/dist/esm/context/FilterContext.js +8 -6
- package/dist/esm/context/SettingsContext.js +168 -235
- package/dist/esm/helpers/color-helper.js +3 -3
- package/dist/esm/helpers/zarr-helper.js +15 -12
- package/dist/esm/utils/Filter.js +13 -9
- package/dist/esm/utils/Histogram.js +4 -3
- package/dist/esm/utils/Legend.js +2 -1
- package/dist/esm/utils/LoadingIndicators.js +1 -1
- package/dist/esm/utils/VirtualizedList.js +15 -11
- package/dist/esm/utils/errors.js +20 -22
- package/dist/esm/utils/requests.js +13 -10
- package/dist/esm/utils/zarrData.js +12 -8
- package/package.json +4 -2
- package/scss/cherita.scss +5 -0
- package/scss/components/layouts.scss +4 -0
- package/scss/components/lists.scss +4 -5
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
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
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
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); }
|
|
1
6
|
import React, { useState, useEffect } from "react";
|
|
2
7
|
import { faPlus } from "@fortawesome/free-solid-svg-icons";
|
|
3
8
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
@@ -20,10 +25,9 @@ export function VarInfo(_ref) {
|
|
|
20
25
|
});
|
|
21
26
|
useEffect(() => {
|
|
22
27
|
setParams(p => {
|
|
23
|
-
return {
|
|
24
|
-
...p,
|
|
28
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
25
29
|
geneName: varItem.name
|
|
26
|
-
};
|
|
30
|
+
});
|
|
27
31
|
});
|
|
28
32
|
}, [varItem.name]);
|
|
29
33
|
const {
|
|
@@ -34,7 +38,7 @@ export function VarInfo(_ref) {
|
|
|
34
38
|
refetchOnMount: false,
|
|
35
39
|
enabled: !!dataset.diseaseDatasets.length
|
|
36
40
|
});
|
|
37
|
-
const hasDiseaseInfo = !isPending && !serverError && !!fetchedData
|
|
41
|
+
const hasDiseaseInfo = !isPending && !serverError && !!(fetchedData !== null && fetchedData !== void 0 && fetchedData.length);
|
|
38
42
|
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h5", null, varItem.name), !!dataset.diseaseDatasets.length && isPending && /*#__PURE__*/React.createElement("p", null, "Loading..."), hasDiseaseInfo && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("h6", null, "Associated diseases"), /*#__PURE__*/React.createElement(VarDiseaseInfo, {
|
|
39
43
|
data: fetchedData
|
|
40
44
|
})));
|
|
@@ -54,13 +58,12 @@ const useVarMean = function (varKeys) {
|
|
|
54
58
|
});
|
|
55
59
|
useEffect(() => {
|
|
56
60
|
setParams(p => {
|
|
57
|
-
return {
|
|
58
|
-
...p,
|
|
61
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
59
62
|
varKeys: _.map(varKeys, v => v.isSet ? {
|
|
60
63
|
name: v.name,
|
|
61
64
|
indices: v.vars.map(v => v.index)
|
|
62
65
|
} : v.index)
|
|
63
|
-
};
|
|
66
|
+
});
|
|
64
67
|
});
|
|
65
68
|
}, [varKeys]);
|
|
66
69
|
return useFetch(ENDPOINT, params, {
|
|
@@ -93,10 +96,9 @@ export function DiseaseInfo(_ref2) {
|
|
|
93
96
|
});
|
|
94
97
|
useEffect(() => {
|
|
95
98
|
setParams(p => {
|
|
96
|
-
return {
|
|
97
|
-
...p,
|
|
99
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
98
100
|
diseaseId: disease.id
|
|
99
|
-
};
|
|
101
|
+
});
|
|
100
102
|
});
|
|
101
103
|
}, [disease]);
|
|
102
104
|
const diseaseData = useFetch(ENDPOINT, params, {
|
|
@@ -108,7 +110,7 @@ export function DiseaseInfo(_ref2) {
|
|
|
108
110
|
setDiseaseVars(diseaseData.fetchedData);
|
|
109
111
|
}
|
|
110
112
|
}, [diseaseData.fetchedData, diseaseData.isPending, diseaseData.serverError]);
|
|
111
|
-
const varMeans = useVarMean(diseaseVars, !!diseaseVars
|
|
113
|
+
const varMeans = useVarMean(diseaseVars, !!(diseaseVars !== null && diseaseVars !== void 0 && diseaseVars.length) && settings.varSort.disease.sort === VAR_SORT.MATRIX);
|
|
112
114
|
useEffect(() => {
|
|
113
115
|
if (settings.varSort.disease.sort === VAR_SORT.MATRIX) {
|
|
114
116
|
if (!varMeans.isPending && !varMeans.serverError) {
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
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
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
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); }
|
|
1
6
|
import React, { useDeferredValue, useEffect, useMemo, useState } from "react";
|
|
2
7
|
import { faPlus } from "@fortawesome/free-solid-svg-icons";
|
|
3
8
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
@@ -30,10 +35,9 @@ export function VarSearchResults(_ref) {
|
|
|
30
35
|
const setData = text => {
|
|
31
36
|
if (text.length) {
|
|
32
37
|
setParams(p => {
|
|
33
|
-
return {
|
|
34
|
-
...p,
|
|
38
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
35
39
|
text: text
|
|
36
|
-
};
|
|
40
|
+
});
|
|
37
41
|
});
|
|
38
42
|
} else {
|
|
39
43
|
setSuggestions([]);
|
|
@@ -47,7 +51,7 @@ export function VarSearchResults(_ref) {
|
|
|
47
51
|
useEffect(() => {
|
|
48
52
|
if (!isPending && !serverError) {
|
|
49
53
|
setSuggestions(fetchedData);
|
|
50
|
-
setResultsLength(fetchedData
|
|
54
|
+
setResultsLength(fetchedData === null || fetchedData === void 0 ? void 0 : fetchedData.length);
|
|
51
55
|
}
|
|
52
56
|
}, [fetchedData, isPending, serverError, setResultsLength]);
|
|
53
57
|
const getDataAtIndex = index => deferredData[index];
|
|
@@ -58,7 +62,7 @@ export function VarSearchResults(_ref) {
|
|
|
58
62
|
onClick: () => {
|
|
59
63
|
setSelectedResult(item);
|
|
60
64
|
},
|
|
61
|
-
active: selectedResult
|
|
65
|
+
active: (selectedResult === null || selectedResult === void 0 ? void 0 : selectedResult.index) === item.index
|
|
62
66
|
}, /*#__PURE__*/React.createElement("div", {
|
|
63
67
|
className: "d-flex justify-content-between align-items-center w-100"
|
|
64
68
|
}, /*#__PURE__*/React.createElement("div", null, item.name), /*#__PURE__*/React.createElement("div", {
|
|
@@ -80,7 +84,7 @@ export function VarSearchResults(_ref) {
|
|
|
80
84
|
}, /*#__PURE__*/React.createElement(ListGroup, {
|
|
81
85
|
variant: "flush",
|
|
82
86
|
className: "cherita-list"
|
|
83
|
-
}, deferredData
|
|
87
|
+
}, deferredData !== null && deferredData !== void 0 && deferredData.length ? /*#__PURE__*/React.createElement(VirtualizedList, {
|
|
84
88
|
getDataAtIndex: getDataAtIndex,
|
|
85
89
|
count: deferredData.length,
|
|
86
90
|
ItemComponent: ItemComponent,
|
|
@@ -115,10 +119,9 @@ export function DiseasesSearchResults(_ref2) {
|
|
|
115
119
|
const setData = text => {
|
|
116
120
|
if (text.length) {
|
|
117
121
|
setParams(p => {
|
|
118
|
-
return {
|
|
119
|
-
...p,
|
|
122
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
120
123
|
text: text
|
|
121
|
-
};
|
|
124
|
+
});
|
|
122
125
|
});
|
|
123
126
|
} else {
|
|
124
127
|
setSuggestions([]);
|
|
@@ -132,7 +135,7 @@ export function DiseasesSearchResults(_ref2) {
|
|
|
132
135
|
useEffect(() => {
|
|
133
136
|
if (!isPending && !serverError) {
|
|
134
137
|
setSuggestions(fetchedData);
|
|
135
|
-
setResultsLength(fetchedData
|
|
138
|
+
setResultsLength(fetchedData === null || fetchedData === void 0 ? void 0 : fetchedData.length);
|
|
136
139
|
}
|
|
137
140
|
}, [fetchedData, isPending, serverError, setResultsLength]);
|
|
138
141
|
const getDataAtIndex = index => deferredData[index];
|
|
@@ -143,7 +146,7 @@ export function DiseasesSearchResults(_ref2) {
|
|
|
143
146
|
onClick: () => {
|
|
144
147
|
setSelectedResult(item);
|
|
145
148
|
},
|
|
146
|
-
active: selectedResult
|
|
149
|
+
active: (selectedResult === null || selectedResult === void 0 ? void 0 : selectedResult.id) === item.id
|
|
147
150
|
}, /*#__PURE__*/React.createElement("div", {
|
|
148
151
|
className: "d-flex justify-content-between align-items-center w-100"
|
|
149
152
|
}, /*#__PURE__*/React.createElement("div", null, item.disease_name)))));
|
|
@@ -152,7 +155,7 @@ export function DiseasesSearchResults(_ref2) {
|
|
|
152
155
|
}, /*#__PURE__*/React.createElement(ListGroup, {
|
|
153
156
|
variant: "flush",
|
|
154
157
|
className: "cherita-list"
|
|
155
|
-
}, deferredData
|
|
158
|
+
}, deferredData !== null && deferredData !== void 0 && deferredData.length ? /*#__PURE__*/React.createElement(VirtualizedList, {
|
|
156
159
|
getDataAtIndex: getDataAtIndex,
|
|
157
160
|
count: deferredData.length,
|
|
158
161
|
ItemComponent: ItemComponent,
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
6
|
+
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); }
|
|
1
7
|
import React, { useEffect, useState } from "react";
|
|
2
|
-
import { faDroplet, faTrash } from "@fortawesome/free-solid-svg-icons";
|
|
8
|
+
import { faDroplet, faPlus, faTrash } from "@fortawesome/free-solid-svg-icons";
|
|
3
9
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
4
10
|
import { MoreVert } from "@mui/icons-material";
|
|
5
11
|
import _ from "lodash";
|
|
@@ -10,7 +16,6 @@ import { useFilteredData } from "../../context/FilterContext";
|
|
|
10
16
|
import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
|
|
11
17
|
import { Histogram } from "../../utils/Histogram";
|
|
12
18
|
import { useDebouncedFetch, useFetch } from "../../utils/requests";
|
|
13
|
-
import { VirtualizedList } from "../../utils/VirtualizedList";
|
|
14
19
|
function VarHistogram(_ref) {
|
|
15
20
|
let {
|
|
16
21
|
item
|
|
@@ -31,10 +36,9 @@ function VarHistogram(_ref) {
|
|
|
31
36
|
});
|
|
32
37
|
useEffect(() => {
|
|
33
38
|
setParams(p => {
|
|
34
|
-
return {
|
|
35
|
-
...p,
|
|
39
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
36
40
|
obsIndices: isSliced ? [...(obsIndices || [])] : null
|
|
37
|
-
};
|
|
41
|
+
});
|
|
38
42
|
});
|
|
39
43
|
}, [obsIndices, isSliced]);
|
|
40
44
|
const {
|
|
@@ -73,23 +77,23 @@ export function VarDiseaseInfo(_ref2) {
|
|
|
73
77
|
let {
|
|
74
78
|
data
|
|
75
79
|
} = _ref2;
|
|
76
|
-
return /*#__PURE__*/React.createElement(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
});
|
|
80
|
+
return /*#__PURE__*/React.createElement(ListGroup, {
|
|
81
|
+
className: "feature-disease-info-list"
|
|
82
|
+
}, data.map(item => {
|
|
83
|
+
return /*#__PURE__*/React.createElement(VarDiseaseInfoItem, _extends({
|
|
84
|
+
key: item.disease_id
|
|
85
|
+
}, item));
|
|
86
|
+
}));
|
|
83
87
|
}
|
|
84
|
-
export function
|
|
88
|
+
export function SelectionItem(_ref3) {
|
|
85
89
|
let {
|
|
86
90
|
item,
|
|
87
91
|
isActive,
|
|
88
92
|
selectVar,
|
|
89
93
|
removeVar,
|
|
90
|
-
isDiseaseGene = false,
|
|
91
94
|
showSetColorEncoding = true,
|
|
92
|
-
showRemove = true
|
|
95
|
+
showRemove = true,
|
|
96
|
+
isMultiple = false
|
|
93
97
|
} = _ref3;
|
|
94
98
|
const ENDPOINT = "disease/gene";
|
|
95
99
|
const [openInfo, setOpenInfo] = useState(false);
|
|
@@ -107,9 +111,9 @@ export function SingleSelectionItem(_ref3) {
|
|
|
107
111
|
refetchOnMount: false,
|
|
108
112
|
enabled: !!dataset.diseaseDatasets.length
|
|
109
113
|
});
|
|
110
|
-
const hasDiseaseInfo = !isPending && !serverError && !!fetchedData
|
|
114
|
+
const hasDiseaseInfo = !isPending && !serverError && !!(fetchedData !== null && fetchedData !== void 0 && fetchedData.length);
|
|
111
115
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
112
|
-
className:
|
|
116
|
+
className: "d-flex justify-content-between ".concat(hasDiseaseInfo ? "cursor-pointer" : ""),
|
|
113
117
|
onClick: () => {
|
|
114
118
|
setOpenInfo(o => !o);
|
|
115
119
|
}
|
|
@@ -117,7 +121,7 @@ export function SingleSelectionItem(_ref3) {
|
|
|
117
121
|
className: "d-flex justify-content-between align-items-center w-100"
|
|
118
122
|
}, /*#__PURE__*/React.createElement("div", null, item.name), /*#__PURE__*/React.createElement("div", {
|
|
119
123
|
className: "d-flex align-items-center gap-1"
|
|
120
|
-
}, hasDiseaseInfo && /*#__PURE__*/React.createElement(MoreVert, null),
|
|
124
|
+
}, hasDiseaseInfo && /*#__PURE__*/React.createElement(MoreVert, null), /*#__PURE__*/React.createElement(VarHistogram, {
|
|
121
125
|
item: item
|
|
122
126
|
}), showSetColorEncoding && /*#__PURE__*/React.createElement(Button, {
|
|
123
127
|
type: "button",
|
|
@@ -132,7 +136,11 @@ export function SingleSelectionItem(_ref3) {
|
|
|
132
136
|
title: isNotInData ? "Not present in data" : "Set as color encoding"
|
|
133
137
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
134
138
|
icon: faDroplet
|
|
135
|
-
})
|
|
139
|
+
}), isMultiple && /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
140
|
+
icon: faPlus,
|
|
141
|
+
size: "xs",
|
|
142
|
+
className: "ps-xs-1"
|
|
143
|
+
})), showRemove && /*#__PURE__*/React.createElement(Button, {
|
|
136
144
|
type: "button",
|
|
137
145
|
className: "m-0 p-0 px-1",
|
|
138
146
|
variant: "outline-secondary",
|
|
@@ -151,34 +159,12 @@ export function SingleSelectionItem(_ref3) {
|
|
|
151
159
|
data: fetchedData
|
|
152
160
|
}))));
|
|
153
161
|
}
|
|
154
|
-
function
|
|
155
|
-
let {
|
|
156
|
-
item,
|
|
157
|
-
isActive,
|
|
158
|
-
toggleVar
|
|
159
|
-
} = _ref4;
|
|
160
|
-
const isNotInData = item.matrix_index === -1;
|
|
161
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
162
|
-
className: "d-flex"
|
|
163
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
164
|
-
className: "flex-grow-1"
|
|
165
|
-
}, /*#__PURE__*/React.createElement(Button, {
|
|
166
|
-
type: "button",
|
|
167
|
-
key: item.matrix_index,
|
|
168
|
-
variant: isActive ? "primary" : "outline-primary",
|
|
169
|
-
className: "m-0 p-0 px-1",
|
|
170
|
-
onClick: toggleVar,
|
|
171
|
-
disabled: isNotInData,
|
|
172
|
-
title: isNotInData ? "Not present in data" : item.name
|
|
173
|
-
}, item.name))));
|
|
174
|
-
}
|
|
175
|
-
export function VarItem(_ref5) {
|
|
162
|
+
export function VarItem(_ref4) {
|
|
176
163
|
let {
|
|
177
164
|
item,
|
|
178
165
|
active,
|
|
179
|
-
mode = SELECTION_MODES.SINGLE
|
|
180
|
-
|
|
181
|
-
} = _ref5;
|
|
166
|
+
mode = SELECTION_MODES.SINGLE
|
|
167
|
+
} = _ref4;
|
|
182
168
|
const settings = useSettings();
|
|
183
169
|
const dispatch = useSettingsDispatch();
|
|
184
170
|
const selectVar = () => {
|
|
@@ -229,88 +215,21 @@ export function VarItem(_ref5) {
|
|
|
229
215
|
});
|
|
230
216
|
};
|
|
231
217
|
if (item && mode === SELECTION_MODES.SINGLE) {
|
|
232
|
-
return /*#__PURE__*/React.createElement(
|
|
218
|
+
return /*#__PURE__*/React.createElement(SelectionItem, {
|
|
233
219
|
item: item,
|
|
234
220
|
isActive: settings.colorEncoding === COLOR_ENCODINGS.VAR && active === item.matrix_index,
|
|
235
221
|
selectVar: selectVar,
|
|
236
|
-
removeVar: removeVar
|
|
237
|
-
isDiseaseGene: isDiseaseGene
|
|
222
|
+
removeVar: removeVar
|
|
238
223
|
});
|
|
239
224
|
} else if (mode === SELECTION_MODES.MULTIPLE) {
|
|
240
|
-
return /*#__PURE__*/React.createElement(
|
|
225
|
+
return /*#__PURE__*/React.createElement(SelectionItem, {
|
|
241
226
|
item: item,
|
|
242
227
|
isActive: item.matrix_index !== -1 && _.includes(active, item.matrix_index),
|
|
243
|
-
|
|
228
|
+
selectVar: toggleVar,
|
|
229
|
+
removeVar: removeVar,
|
|
230
|
+
isMultiple: true
|
|
244
231
|
});
|
|
245
232
|
} else {
|
|
246
233
|
return null;
|
|
247
234
|
}
|
|
248
|
-
}
|
|
249
|
-
export function SearchResultItem(_ref6) {
|
|
250
|
-
let {
|
|
251
|
-
item,
|
|
252
|
-
isActive,
|
|
253
|
-
selectVar,
|
|
254
|
-
removeVar,
|
|
255
|
-
isDiseaseGene = false,
|
|
256
|
-
showSetColorEncoding = true,
|
|
257
|
-
showRemove = true
|
|
258
|
-
} = _ref6;
|
|
259
|
-
const ENDPOINT = "disease/gene";
|
|
260
|
-
const [openInfo, setOpenInfo] = useState(false);
|
|
261
|
-
const dataset = useDataset();
|
|
262
|
-
const params = {
|
|
263
|
-
geneName: item.name,
|
|
264
|
-
diseaseDatasets: dataset.diseaseDatasets
|
|
265
|
-
};
|
|
266
|
-
const isNotInData = item.matrix_index === -1;
|
|
267
|
-
const {
|
|
268
|
-
fetchedData,
|
|
269
|
-
isPending,
|
|
270
|
-
serverError
|
|
271
|
-
} = useFetch(ENDPOINT, params, {
|
|
272
|
-
refetchOnMount: false,
|
|
273
|
-
enabled: !!dataset.diseaseDatasets.length
|
|
274
|
-
});
|
|
275
|
-
const hasDiseaseInfo = !isPending && !serverError && !!fetchedData?.length;
|
|
276
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
277
|
-
className: `d-flex justify-content-between ${hasDiseaseInfo ? "cursor-pointer" : ""}`,
|
|
278
|
-
onClick: () => {
|
|
279
|
-
setOpenInfo(o => !o);
|
|
280
|
-
}
|
|
281
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
282
|
-
className: "d-flex justify-content-between align-items-center w-100"
|
|
283
|
-
}, /*#__PURE__*/React.createElement("div", null, item.name), /*#__PURE__*/React.createElement("div", {
|
|
284
|
-
className: "d-flex align-items-center gap-1"
|
|
285
|
-
}, hasDiseaseInfo && /*#__PURE__*/React.createElement(MoreVert, null), showSetColorEncoding && /*#__PURE__*/React.createElement(Button, {
|
|
286
|
-
type: "button",
|
|
287
|
-
key: item.matrix_index,
|
|
288
|
-
variant: isActive ? "primary" : isNotInData ? "outline-secondary" : "outline-primary",
|
|
289
|
-
className: "m-0 p-0 px-1",
|
|
290
|
-
onClick: e => {
|
|
291
|
-
e.stopPropagation();
|
|
292
|
-
selectVar();
|
|
293
|
-
},
|
|
294
|
-
disabled: isNotInData,
|
|
295
|
-
title: isNotInData ? "Not present in data" : "Set as color encoding"
|
|
296
|
-
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
297
|
-
icon: faDroplet
|
|
298
|
-
})), (!isDiseaseGene || !showRemove) && /*#__PURE__*/React.createElement(Button, {
|
|
299
|
-
type: "button",
|
|
300
|
-
className: "m-0 p-0 px-1",
|
|
301
|
-
variant: "outline-secondary",
|
|
302
|
-
title: "Remove from list",
|
|
303
|
-
onClick: e => {
|
|
304
|
-
e.stopPropagation();
|
|
305
|
-
removeVar();
|
|
306
|
-
}
|
|
307
|
-
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
308
|
-
icon: faTrash
|
|
309
|
-
}))))), hasDiseaseInfo && /*#__PURE__*/React.createElement(Collapse, {
|
|
310
|
-
in: openInfo
|
|
311
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
312
|
-
className: "mt-2 var-disease-info-collapse"
|
|
313
|
-
}, /*#__PURE__*/React.createElement(VarDiseaseInfo, {
|
|
314
|
-
data: fetchedData
|
|
315
|
-
}))));
|
|
316
235
|
}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
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
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
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); }
|
|
1
6
|
import React, { useEffect, useState } from "react";
|
|
2
7
|
import { faTimes } from "@fortawesome/free-solid-svg-icons";
|
|
3
8
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
@@ -27,13 +32,12 @@ const useVarMean = function (varKeys) {
|
|
|
27
32
|
});
|
|
28
33
|
useEffect(() => {
|
|
29
34
|
setParams(p => {
|
|
30
|
-
return {
|
|
31
|
-
...p,
|
|
35
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
32
36
|
varKeys: _.map(varKeys, v => v.isSet ? {
|
|
33
37
|
name: v.name,
|
|
34
38
|
indices: v.vars.map(v => v.index)
|
|
35
39
|
} : v.index)
|
|
36
|
-
};
|
|
40
|
+
});
|
|
37
41
|
});
|
|
38
42
|
}, [varKeys]);
|
|
39
43
|
return useFetch(ENDPOINT, params, {
|
|
@@ -47,17 +51,19 @@ const sortMeans = (i, means) => {
|
|
|
47
51
|
return means[i.name] || _.min(_.values(means)) - 1;
|
|
48
52
|
};
|
|
49
53
|
export function VarNamesList(_ref) {
|
|
54
|
+
var _settings$selectedVar, _settings$selectedVar2;
|
|
50
55
|
let {
|
|
51
56
|
mode = SELECTION_MODES.SINGLE,
|
|
52
57
|
displayName = "genes"
|
|
53
58
|
} = _ref;
|
|
54
59
|
const settings = useSettings();
|
|
55
60
|
const dispatch = useSettingsDispatch();
|
|
56
|
-
const [active, setActive] = useState(mode === SELECTION_MODES.SINGLE ? settings.selectedVar
|
|
61
|
+
const [active, setActive] = useState(mode === SELECTION_MODES.SINGLE ? ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.matrix_index) || ((_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name) : settings.selectedMultiVar.map(i => i.matrix_index || i.name));
|
|
57
62
|
const [sortedVars, setSortedVars] = useState([]);
|
|
58
63
|
useEffect(() => {
|
|
59
64
|
if (mode === SELECTION_MODES.SINGLE) {
|
|
60
|
-
|
|
65
|
+
var _settings$selectedVar3, _settings$selectedVar4;
|
|
66
|
+
setActive(((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.matrix_index) || ((_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.name));
|
|
61
67
|
}
|
|
62
68
|
}, [mode, settings.selectedVar]);
|
|
63
69
|
useEffect(() => {
|
|
@@ -81,15 +87,13 @@ export function VarNamesList(_ref) {
|
|
|
81
87
|
setSortedVars(settings.vars);
|
|
82
88
|
}
|
|
83
89
|
}, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settings.vars]);
|
|
84
|
-
const makeListItem =
|
|
85
|
-
let isDiseaseGene = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
90
|
+
const makeListItem = item => {
|
|
86
91
|
return /*#__PURE__*/React.createElement(ListGroup.Item, {
|
|
87
92
|
key: item.matrix_index
|
|
88
93
|
}, /*#__PURE__*/React.createElement(VarItem, {
|
|
89
94
|
item: item,
|
|
90
95
|
active: active,
|
|
91
|
-
mode: mode
|
|
92
|
-
isDiseaseGene: isDiseaseGene
|
|
96
|
+
mode: mode
|
|
93
97
|
}));
|
|
94
98
|
};
|
|
95
99
|
const makeSetListItem = set => {
|
|
@@ -110,13 +114,13 @@ export function VarNamesList(_ref) {
|
|
|
110
114
|
});
|
|
111
115
|
const newSetName = () => {
|
|
112
116
|
let n = 1;
|
|
113
|
-
let setName =
|
|
117
|
+
let setName = "Set ".concat(n);
|
|
114
118
|
const nameExists = name => {
|
|
115
119
|
return settings.vars.some(v => v.name === name);
|
|
116
120
|
};
|
|
117
121
|
while (nameExists(setName)) {
|
|
118
122
|
n++;
|
|
119
|
-
setName =
|
|
123
|
+
setName = "Set ".concat(n);
|
|
120
124
|
}
|
|
121
125
|
return setName;
|
|
122
126
|
};
|
|
@@ -3,7 +3,7 @@ import { faChevronDown, faChevronUp, faCircleInfo, faDroplet, faPlus, faTrash }
|
|
|
3
3
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
4
4
|
import _ from "lodash";
|
|
5
5
|
import { Button, Collapse, ListGroup, OverlayTrigger, Tooltip } from "react-bootstrap";
|
|
6
|
-
import {
|
|
6
|
+
import { SelectionItem } from "./VarItem";
|
|
7
7
|
import { COLOR_ENCODINGS, SELECTION_MODES } from "../../constants/constants";
|
|
8
8
|
import { useSettings, useSettingsDispatch } from "../../context/SettingsContext";
|
|
9
9
|
import { SearchModal } from "../search-bar/SearchBar";
|
|
@@ -17,13 +17,14 @@ const addVarToSet = (dispatch, set, v) => {
|
|
|
17
17
|
var: v
|
|
18
18
|
});
|
|
19
19
|
};
|
|
20
|
-
function
|
|
20
|
+
function SelectionSet(_ref) {
|
|
21
21
|
let {
|
|
22
22
|
set,
|
|
23
23
|
isActive,
|
|
24
24
|
selectSet,
|
|
25
25
|
removeSet,
|
|
26
|
-
removeSetVar
|
|
26
|
+
removeSetVar,
|
|
27
|
+
isMultiple = false
|
|
27
28
|
} = _ref;
|
|
28
29
|
const [openSet, setOpenSet] = useState(false);
|
|
29
30
|
const [showModal, setShowModal] = useState(false);
|
|
@@ -31,7 +32,7 @@ function SingleSelectionSet(_ref) {
|
|
|
31
32
|
const varList = set.vars.length ? _.map(set.vars, v => {
|
|
32
33
|
return /*#__PURE__*/React.createElement(ListGroup.Item, {
|
|
33
34
|
key: v.name
|
|
34
|
-
}, /*#__PURE__*/React.createElement(
|
|
35
|
+
}, /*#__PURE__*/React.createElement(SelectionItem, {
|
|
35
36
|
item: v,
|
|
36
37
|
showSetColorEncoding: false,
|
|
37
38
|
removeVar: () => removeSetVar(v)
|
|
@@ -87,6 +88,10 @@ function SingleSelectionSet(_ref) {
|
|
|
87
88
|
title: "Set as color encoding"
|
|
88
89
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
89
90
|
icon: faDroplet
|
|
91
|
+
}), isMultiple && /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
92
|
+
icon: faPlus,
|
|
93
|
+
size: "xs",
|
|
94
|
+
className: "ps-xs-1"
|
|
90
95
|
})), /*#__PURE__*/React.createElement(Button, {
|
|
91
96
|
type: "button",
|
|
92
97
|
className: "m-0 p-0 px-1",
|
|
@@ -118,31 +123,12 @@ function SingleSelectionSet(_ref) {
|
|
|
118
123
|
searchDiseases: false
|
|
119
124
|
}));
|
|
120
125
|
}
|
|
121
|
-
function
|
|
122
|
-
let {
|
|
123
|
-
set,
|
|
124
|
-
isActive,
|
|
125
|
-
toggleSet
|
|
126
|
-
} = _ref2;
|
|
127
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
128
|
-
className: "d-flex"
|
|
129
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
130
|
-
className: "flex-grow-1"
|
|
131
|
-
}, /*#__PURE__*/React.createElement(Button, {
|
|
132
|
-
type: "button",
|
|
133
|
-
key: set.name,
|
|
134
|
-
variant: isActive ? "primary" : "outline-primary",
|
|
135
|
-
className: "m-0 p-0 px-1",
|
|
136
|
-
onClick: toggleSet,
|
|
137
|
-
title: set.name
|
|
138
|
-
}, set.name))));
|
|
139
|
-
}
|
|
140
|
-
export function VarSet(_ref3) {
|
|
126
|
+
export function VarSet(_ref2) {
|
|
141
127
|
let {
|
|
142
128
|
set,
|
|
143
129
|
active,
|
|
144
130
|
mode = SELECTION_MODES.SINGLE
|
|
145
|
-
} =
|
|
131
|
+
} = _ref2;
|
|
146
132
|
const settings = useSettings();
|
|
147
133
|
const dispatch = useSettingsDispatch();
|
|
148
134
|
const selectSet = () => {
|
|
@@ -196,7 +182,7 @@ export function VarSet(_ref3) {
|
|
|
196
182
|
});
|
|
197
183
|
};
|
|
198
184
|
if (set && mode === SELECTION_MODES.SINGLE) {
|
|
199
|
-
return /*#__PURE__*/React.createElement(
|
|
185
|
+
return /*#__PURE__*/React.createElement(SelectionSet, {
|
|
200
186
|
set: set,
|
|
201
187
|
isActive: settings.colorEncoding === COLOR_ENCODINGS.VAR && active === set.name,
|
|
202
188
|
selectSet: selectSet,
|
|
@@ -204,10 +190,13 @@ export function VarSet(_ref3) {
|
|
|
204
190
|
removeSetVar: v => removeSetVar(v)
|
|
205
191
|
});
|
|
206
192
|
} else if (mode === SELECTION_MODES.MULTIPLE) {
|
|
207
|
-
return /*#__PURE__*/React.createElement(
|
|
193
|
+
return /*#__PURE__*/React.createElement(SelectionSet, {
|
|
208
194
|
set: set,
|
|
209
195
|
isActive: _.includes(active, set.name),
|
|
210
|
-
|
|
196
|
+
selectSet: toggleSet,
|
|
197
|
+
removeSet: removeSet,
|
|
198
|
+
removeSetVar: v => removeSetVar(v),
|
|
199
|
+
isMultiple: true
|
|
211
200
|
});
|
|
212
201
|
} else {
|
|
213
202
|
return null;
|