@haniffalab/cherita-react 0.2.0-dev.2025-01-22.f523ac5e → 0.2.0-dev.2025-01-28.4d5ab0a4
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/README.md +5 -0
- package/dist/components/dotplot/Dotplot.js +19 -26
- package/dist/components/dotplot/DotplotControls.js +106 -147
- package/dist/components/full-page/FullPage.js +99 -148
- package/dist/components/heatmap/Heatmap.js +19 -26
- package/dist/components/heatmap/HeatmapControls.js +7 -13
- package/dist/components/matrixplot/Matrixplot.js +19 -26
- package/dist/components/matrixplot/MatrixplotControls.js +14 -35
- package/dist/components/obs-list/ObsItem.js +182 -239
- package/dist/components/obs-list/ObsList.js +40 -49
- package/dist/components/obs-list/ObsToolbar.js +44 -55
- package/dist/components/obsm-list/ObsmList.js +15 -23
- package/dist/components/offcanvas/index.js +45 -75
- package/dist/components/pseudospatial/Pseudospatial.js +26 -34
- package/dist/components/pseudospatial/PseudospatialControls.js +1 -2
- package/dist/components/pseudospatial/PseudospatialToolbar.js +37 -65
- package/dist/components/scatterplot/Scatterplot.js +74 -89
- package/dist/components/scatterplot/ScatterplotControls.js +28 -39
- package/dist/components/scatterplot/SpatialControls.js +94 -117
- package/dist/components/scatterplot/Toolbox.js +16 -24
- package/dist/components/search-bar/SearchBar.js +45 -54
- package/dist/components/search-bar/SearchResults.js +36 -49
- package/dist/components/var-list/VarItem.js +112 -160
- package/dist/components/var-list/VarList.js +81 -124
- package/dist/components/var-list/VarListToolbar.js +48 -59
- package/dist/components/var-list/VarSet.js +95 -120
- package/dist/components/violin/Violin.js +31 -46
- package/dist/components/violin/ViolinControls.js +8 -22
- package/dist/context/DatasetContext.js +17 -27
- package/dist/context/FilterContext.js +8 -12
- package/dist/context/ZarrDataContext.js +6 -9
- package/dist/helpers/color-helper.js +11 -12
- package/dist/helpers/map-helper.js +7 -8
- package/dist/helpers/zarr-helper.js +9 -15
- package/dist/utils/Histogram.js +34 -41
- package/dist/utils/ImageViewer.js +9 -14
- package/dist/utils/Legend.js +30 -40
- package/dist/utils/LoadingIndicators.js +16 -19
- package/dist/utils/VirtualizedList.js +32 -39
- package/dist/utils/requests.js +15 -25
- package/dist/utils/string.js +4 -9
- package/dist/utils/zarrData.js +2 -8
- package/package.json +40 -34
|
@@ -8,7 +8,6 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
8
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
9
|
var _reactBootstrap = require("react-bootstrap");
|
|
10
10
|
var _SearchResults = require("./SearchResults");
|
|
11
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
12
|
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
13
|
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; }
|
|
@@ -26,12 +25,11 @@ function onVarSelect(dispatch, item) {
|
|
|
26
25
|
value: "var"
|
|
27
26
|
});
|
|
28
27
|
}
|
|
29
|
-
function SearchBar(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
} = _ref;
|
|
28
|
+
function SearchBar({
|
|
29
|
+
searchVar = true,
|
|
30
|
+
searchDiseases = false,
|
|
31
|
+
handleSelect = onVarSelect
|
|
32
|
+
}) {
|
|
35
33
|
const [showSuggestions, setShowSuggestions] = (0, _react.useState)(false);
|
|
36
34
|
const [text, setText] = (0, _react.useState)("");
|
|
37
35
|
const inputRef = (0, _react.useRef)(null);
|
|
@@ -41,51 +39,44 @@ function SearchBar(_ref) {
|
|
|
41
39
|
setShowSuggestions(true);
|
|
42
40
|
}
|
|
43
41
|
}, [text]);
|
|
44
|
-
return /*#__PURE__*/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
setShowSuggestions: setShowSuggestions
|
|
85
|
-
})]
|
|
86
|
-
})
|
|
87
|
-
})]
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
});
|
|
42
|
+
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, {
|
|
43
|
+
onSubmit: e => {
|
|
44
|
+
e.preventDefault();
|
|
45
|
+
}
|
|
46
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.FormGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Control, {
|
|
47
|
+
ref: inputRef,
|
|
48
|
+
onFocus: () => {
|
|
49
|
+
setShowSuggestions(text.length > 0);
|
|
50
|
+
},
|
|
51
|
+
onBlur: () => {
|
|
52
|
+
_lodash.default.delay(() => {
|
|
53
|
+
setShowSuggestions(false);
|
|
54
|
+
}, 150);
|
|
55
|
+
},
|
|
56
|
+
type: "text",
|
|
57
|
+
placeholder: "Search " + displayText,
|
|
58
|
+
value: text,
|
|
59
|
+
onChange: e => {
|
|
60
|
+
setText(e.target.value);
|
|
61
|
+
}
|
|
62
|
+
}), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, {
|
|
63
|
+
show: showSuggestions,
|
|
64
|
+
onMouseDown: e => {
|
|
65
|
+
e.preventDefault();
|
|
66
|
+
},
|
|
67
|
+
onSelect: () => {
|
|
68
|
+
inputRef.current.blur();
|
|
69
|
+
}
|
|
70
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, {
|
|
71
|
+
style: {
|
|
72
|
+
width: "90%"
|
|
73
|
+
}
|
|
74
|
+
}, searchVar && /*#__PURE__*/_react.default.createElement(_SearchResults.VarSearchResults, {
|
|
75
|
+
text: text,
|
|
76
|
+
setShowSuggestions: setShowSuggestions,
|
|
77
|
+
handleSelect: handleSelect
|
|
78
|
+
}), searchVar && searchDiseases && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Divider, null), searchDiseases && /*#__PURE__*/_react.default.createElement(_SearchResults.DiseasesSearchResults, {
|
|
79
|
+
text: text,
|
|
80
|
+
setShowSuggestions: setShowSuggestions
|
|
81
|
+
}))))));
|
|
91
82
|
}
|
|
@@ -10,16 +10,14 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
10
10
|
var _reactBootstrap = require("react-bootstrap");
|
|
11
11
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
12
12
|
var _search = require("../../utils/search");
|
|
13
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
14
|
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); }
|
|
16
15
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
-
function VarSearchResults(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
} = _ref;
|
|
16
|
+
function VarSearchResults({
|
|
17
|
+
text,
|
|
18
|
+
setShowSuggestions,
|
|
19
|
+
handleSelect
|
|
20
|
+
}) {
|
|
23
21
|
const [suggestions, setSuggestions] = (0, _react.useState)([]);
|
|
24
22
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
25
23
|
const {
|
|
@@ -59,7 +57,8 @@ function VarSearchResults(_ref) {
|
|
|
59
57
|
}, [fetchedData, isPending, serverError, setShowSuggestions]);
|
|
60
58
|
const suggestionsList = (0, _react.useMemo)(() => {
|
|
61
59
|
return deferredData?.map(item => {
|
|
62
|
-
return /*#__PURE__*/
|
|
60
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
|
|
61
|
+
key: item.name,
|
|
63
62
|
as: "button",
|
|
64
63
|
disabled: isStale,
|
|
65
64
|
onClick: () => {
|
|
@@ -67,32 +66,25 @@ function VarSearchResults(_ref) {
|
|
|
67
66
|
_lodash.default.delay(() => {
|
|
68
67
|
setShowSuggestions(false);
|
|
69
68
|
}, 150);
|
|
70
|
-
}
|
|
71
|
-
children: item.name
|
|
69
|
+
}
|
|
72
70
|
}, item.name);
|
|
73
71
|
});
|
|
74
72
|
}, [deferredData, dispatch, handleSelect, isStale, setShowSuggestions]);
|
|
75
|
-
return /*#__PURE__*/(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
disabled: true,
|
|
86
|
-
children: !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data"
|
|
87
|
-
}, "empty")
|
|
88
|
-
})]
|
|
89
|
-
});
|
|
73
|
+
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Features"), /*#__PURE__*/_react.default.createElement("div", {
|
|
74
|
+
style: {
|
|
75
|
+
maxHeight: "25vh",
|
|
76
|
+
overflowY: "scroll"
|
|
77
|
+
}
|
|
78
|
+
}, deferredData?.length ? suggestionsList : /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
|
|
79
|
+
key: "empty",
|
|
80
|
+
as: "button",
|
|
81
|
+
disabled: true
|
|
82
|
+
}, !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data")));
|
|
90
83
|
}
|
|
91
|
-
function DiseasesSearchResults(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
} = _ref2;
|
|
84
|
+
function DiseasesSearchResults({
|
|
85
|
+
text,
|
|
86
|
+
setShowSuggestions
|
|
87
|
+
}) {
|
|
96
88
|
const [suggestions, setSuggestions] = (0, _react.useState)([]);
|
|
97
89
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
98
90
|
const {
|
|
@@ -131,7 +123,8 @@ function DiseasesSearchResults(_ref2) {
|
|
|
131
123
|
}, [fetchedData, isPending, serverError, setShowSuggestions]);
|
|
132
124
|
const suggestionsList = (0, _react.useMemo)(() => {
|
|
133
125
|
return deferredData?.map(item => {
|
|
134
|
-
return /*#__PURE__*/
|
|
126
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
|
|
127
|
+
key: item.id,
|
|
135
128
|
as: "button",
|
|
136
129
|
disabled: isStale,
|
|
137
130
|
onClick: () => {
|
|
@@ -143,24 +136,18 @@ function DiseasesSearchResults(_ref2) {
|
|
|
143
136
|
_lodash.default.delay(() => {
|
|
144
137
|
setShowSuggestions(false);
|
|
145
138
|
}, 150);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
}, item.id);
|
|
139
|
+
}
|
|
140
|
+
}, item.disease_name);
|
|
149
141
|
});
|
|
150
142
|
}, [deferredData, dispatch, isStale, setShowSuggestions]);
|
|
151
|
-
return /*#__PURE__*/(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
disabled: true,
|
|
162
|
-
children: !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data"
|
|
163
|
-
}, "empty")
|
|
164
|
-
})]
|
|
165
|
-
});
|
|
143
|
+
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Diseases"), /*#__PURE__*/_react.default.createElement("div", {
|
|
144
|
+
style: {
|
|
145
|
+
maxHeight: "25vh",
|
|
146
|
+
overflowY: "scroll"
|
|
147
|
+
}
|
|
148
|
+
}, deferredData?.length ? suggestionsList : /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
|
|
149
|
+
key: "empty",
|
|
150
|
+
as: "button",
|
|
151
|
+
disabled: true
|
|
152
|
+
}, !serverError ? isStale || isPending ? "Loading..." : "No items found" : "Failed to fetch data")));
|
|
166
153
|
}
|
|
@@ -17,14 +17,12 @@ var _FilterContext = require("../../context/FilterContext");
|
|
|
17
17
|
var _Histogram = require("../../utils/Histogram");
|
|
18
18
|
var _requests = require("../../utils/requests");
|
|
19
19
|
var _VirtualizedList = require("../../utils/VirtualizedList");
|
|
20
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
20
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
22
21
|
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); }
|
|
23
22
|
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; }
|
|
24
|
-
function VarHistogram(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} = _ref;
|
|
23
|
+
function VarHistogram({
|
|
24
|
+
item
|
|
25
|
+
}) {
|
|
28
26
|
const ENDPOINT = "var/histograms";
|
|
29
27
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
30
28
|
const {
|
|
@@ -53,7 +51,7 @@ function VarHistogram(_ref) {
|
|
|
53
51
|
} = (0, _requests.useDebouncedFetch)(ENDPOINT, params, {
|
|
54
52
|
refetchOnMount: false
|
|
55
53
|
});
|
|
56
|
-
return !serverError && /*#__PURE__*/
|
|
54
|
+
return !serverError && /*#__PURE__*/_react.default.createElement(_Histogram.Histogram, {
|
|
57
55
|
data: fetchedData,
|
|
58
56
|
isPending: isPending,
|
|
59
57
|
altColor: isSliced
|
|
@@ -61,77 +59,47 @@ function VarHistogram(_ref) {
|
|
|
61
59
|
}
|
|
62
60
|
function VarDiseaseInfoItem(item) {
|
|
63
61
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
64
|
-
return /*#__PURE__*/
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
85
|
-
children: item.confidence || "unknown"
|
|
86
|
-
})]
|
|
87
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
|
|
88
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("td", {
|
|
89
|
-
children: ["Organ", item.organs.length > 1 ? "s" : ""]
|
|
90
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
91
|
-
children: item.organs.map(o => o.name).join(", ")
|
|
92
|
-
})]
|
|
93
|
-
}), !_lodash.default.isEmpty(item.metadata) && _lodash.default.map(item.metadata, (value, key) => {
|
|
94
|
-
if (value !== null && value !== undefined) {
|
|
95
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("tr", {
|
|
96
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
97
|
-
children: key
|
|
98
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("td", {
|
|
99
|
-
children: value
|
|
100
|
-
})]
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
})]
|
|
104
|
-
})
|
|
105
|
-
})]
|
|
106
|
-
})
|
|
107
|
-
}, item.disease_name);
|
|
62
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
63
|
+
key: item.disease_name,
|
|
64
|
+
className: "feature-disease-info"
|
|
65
|
+
}, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("button", {
|
|
66
|
+
type: "button",
|
|
67
|
+
className: "btn btn-link",
|
|
68
|
+
onClick: () => {
|
|
69
|
+
dispatch({
|
|
70
|
+
type: "select.disease",
|
|
71
|
+
id: item.disease_id,
|
|
72
|
+
name: item.disease_name
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}, item.disease_name), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Table, {
|
|
76
|
+
striped: true
|
|
77
|
+
}, /*#__PURE__*/_react.default.createElement("tbody", null, /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "Confidence"), /*#__PURE__*/_react.default.createElement("td", null, item.confidence || "unknown")), /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, "Organ", item.organs.length > 1 ? "s" : ""), /*#__PURE__*/_react.default.createElement("td", null, item.organs.map(o => o.name).join(", "))), !_lodash.default.isEmpty(item.metadata) && _lodash.default.map(item.metadata, (value, key) => {
|
|
78
|
+
if (value !== null && value !== undefined) {
|
|
79
|
+
return /*#__PURE__*/_react.default.createElement("tr", null, /*#__PURE__*/_react.default.createElement("td", null, key), /*#__PURE__*/_react.default.createElement("td", null, value));
|
|
80
|
+
}
|
|
81
|
+
})))));
|
|
108
82
|
}
|
|
109
|
-
function VarDiseaseInfo(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
maxHeight: "100%",
|
|
120
|
-
ItemComponent: VarDiseaseInfoItem
|
|
121
|
-
})
|
|
122
|
-
})
|
|
123
|
-
});
|
|
83
|
+
function VarDiseaseInfo({
|
|
84
|
+
data
|
|
85
|
+
}) {
|
|
86
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, null, /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
|
|
87
|
+
getDataAtIndex: index => data[index],
|
|
88
|
+
count: data.length,
|
|
89
|
+
estimateSize: 140,
|
|
90
|
+
maxHeight: "100%",
|
|
91
|
+
ItemComponent: VarDiseaseInfoItem
|
|
92
|
+
})));
|
|
124
93
|
}
|
|
125
|
-
function SingleSelectionItem(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
} = _ref3;
|
|
94
|
+
function SingleSelectionItem({
|
|
95
|
+
item,
|
|
96
|
+
isActive,
|
|
97
|
+
selectVar,
|
|
98
|
+
removeVar,
|
|
99
|
+
isDiseaseGene = false,
|
|
100
|
+
showSetColorEncoding = true,
|
|
101
|
+
showRemove = true
|
|
102
|
+
}) {
|
|
135
103
|
const ENDPOINT = "disease/gene";
|
|
136
104
|
const [openInfo, setOpenInfo] = (0, _react.useState)(false);
|
|
137
105
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -149,92 +117,76 @@ function SingleSelectionItem(_ref3) {
|
|
|
149
117
|
enabled: !!dataset.diseaseDatasets.length
|
|
150
118
|
});
|
|
151
119
|
const hasDiseaseInfo = !isPending && !serverError && !!fetchedData.length;
|
|
152
|
-
return /*#__PURE__*/(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}), hasDiseaseInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Collapse, {
|
|
195
|
-
in: openInfo,
|
|
196
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
197
|
-
className: "mt-2 var-disease-info-collapse",
|
|
198
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(VarDiseaseInfo, {
|
|
199
|
-
data: fetchedData
|
|
200
|
-
})
|
|
201
|
-
})
|
|
202
|
-
})]
|
|
203
|
-
});
|
|
120
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
121
|
+
className: `d-flex justify-content-between ${hasDiseaseInfo ? "cursor-pointer" : ""}`,
|
|
122
|
+
onClick: () => {
|
|
123
|
+
setOpenInfo(o => !o);
|
|
124
|
+
}
|
|
125
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
126
|
+
className: "d-flex justify-content-between align-items-center w-100"
|
|
127
|
+
}, /*#__PURE__*/_react.default.createElement("div", null, item.name), /*#__PURE__*/_react.default.createElement("div", {
|
|
128
|
+
className: "d-flex align-items-center gap-1"
|
|
129
|
+
}, hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_iconsMaterial.MoreVert, null), !isDiseaseGene && /*#__PURE__*/_react.default.createElement(VarHistogram, {
|
|
130
|
+
item: item
|
|
131
|
+
}), showSetColorEncoding && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
132
|
+
type: "button",
|
|
133
|
+
key: item.matrix_index,
|
|
134
|
+
variant: isActive ? "primary" : isNotInData ? "outline-secondary" : "outline-primary",
|
|
135
|
+
className: "m-0 p-0 px-1",
|
|
136
|
+
onClick: e => {
|
|
137
|
+
e.stopPropagation();
|
|
138
|
+
selectVar();
|
|
139
|
+
},
|
|
140
|
+
disabled: isNotInData,
|
|
141
|
+
title: isNotInData ? "Not present in data" : "Set as color encoding"
|
|
142
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
143
|
+
icon: _freeSolidSvgIcons.faDroplet
|
|
144
|
+
})), (!isDiseaseGene || !showRemove) && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
145
|
+
type: "button",
|
|
146
|
+
className: "m-0 p-0 px-1",
|
|
147
|
+
variant: "outline-secondary",
|
|
148
|
+
title: "Remove from list",
|
|
149
|
+
onClick: e => {
|
|
150
|
+
e.stopPropagation();
|
|
151
|
+
removeVar();
|
|
152
|
+
}
|
|
153
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
154
|
+
icon: _freeSolidSvgIcons.faTrash
|
|
155
|
+
}))))), hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Collapse, {
|
|
156
|
+
in: openInfo
|
|
157
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
158
|
+
className: "mt-2 var-disease-info-collapse"
|
|
159
|
+
}, /*#__PURE__*/_react.default.createElement(VarDiseaseInfo, {
|
|
160
|
+
data: fetchedData
|
|
161
|
+
}))));
|
|
204
162
|
}
|
|
205
|
-
function MultipleSelectionItem(
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
} = _ref4;
|
|
163
|
+
function MultipleSelectionItem({
|
|
164
|
+
item,
|
|
165
|
+
isActive,
|
|
166
|
+
toggleVar
|
|
167
|
+
}) {
|
|
211
168
|
const isNotInData = item.matrix_index === -1;
|
|
212
|
-
return /*#__PURE__*/(
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}, item.matrix_index)
|
|
226
|
-
})
|
|
227
|
-
})
|
|
228
|
-
});
|
|
169
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
170
|
+
className: "d-flex"
|
|
171
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
172
|
+
className: "flex-grow-1"
|
|
173
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
174
|
+
type: "button",
|
|
175
|
+
key: item.matrix_index,
|
|
176
|
+
variant: isActive ? "primary" : "outline-primary",
|
|
177
|
+
className: "m-0 p-0 px-1",
|
|
178
|
+
onClick: toggleVar,
|
|
179
|
+
disabled: isNotInData,
|
|
180
|
+
title: isNotInData ? "Not present in data" : item.name
|
|
181
|
+
}, item.name))));
|
|
229
182
|
}
|
|
230
|
-
function VarItem(
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
} = _ref5;
|
|
183
|
+
function VarItem({
|
|
184
|
+
item,
|
|
185
|
+
active,
|
|
186
|
+
setVarButtons,
|
|
187
|
+
mode = _constants.SELECTION_MODES.SINGLE,
|
|
188
|
+
isDiseaseGene = false
|
|
189
|
+
}) {
|
|
238
190
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
239
191
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
240
192
|
const selectVar = () => {
|
|
@@ -284,7 +236,7 @@ function VarItem(_ref5) {
|
|
|
284
236
|
}
|
|
285
237
|
};
|
|
286
238
|
if (item && mode === _constants.SELECTION_MODES.SINGLE) {
|
|
287
|
-
return /*#__PURE__*/
|
|
239
|
+
return /*#__PURE__*/_react.default.createElement(SingleSelectionItem, {
|
|
288
240
|
item: item,
|
|
289
241
|
isActive: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === item.matrix_index,
|
|
290
242
|
selectVar: selectVar,
|
|
@@ -292,7 +244,7 @@ function VarItem(_ref5) {
|
|
|
292
244
|
isDiseaseGene: isDiseaseGene
|
|
293
245
|
});
|
|
294
246
|
} else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
|
|
295
|
-
return /*#__PURE__*/
|
|
247
|
+
return /*#__PURE__*/_react.default.createElement(MultipleSelectionItem, {
|
|
296
248
|
item: item,
|
|
297
249
|
isActive: item.matrix_index !== -1 && _lodash.default.includes(active, item.matrix_index),
|
|
298
250
|
toggleVar: toggleVar
|