@haniffalab/cherita-react 1.2.0 → 1.3.0-dev.2025-05-29.ee7e9b72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/controls/Controls.js +60 -0
- package/dist/cjs/components/dotplot/Dotplot.js +47 -38
- package/dist/cjs/components/dotplot/DotplotControls.js +77 -114
- package/dist/cjs/components/full-page/FullPage.js +29 -33
- package/dist/cjs/components/full-page/FullPagePseudospatial.js +30 -33
- package/dist/cjs/components/heatmap/Heatmap.js +33 -22
- package/dist/cjs/components/heatmap/HeatmapControls.js +2 -19
- package/dist/cjs/components/matrixplot/Matrixplot.js +35 -24
- package/dist/cjs/components/matrixplot/MatrixplotControls.js +4 -34
- package/dist/cjs/components/obs-list/ObsItem.js +63 -51
- package/dist/cjs/components/obs-list/ObsList.js +53 -48
- package/dist/cjs/components/obsm-list/ObsmList.js +17 -12
- package/dist/cjs/components/offcanvas/index.js +14 -11
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +78 -68
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +27 -21
- package/dist/cjs/components/scatterplot/Scatterplot.js +82 -76
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +18 -31
- package/dist/cjs/components/scatterplot/SpatialControls.js +53 -23
- package/dist/cjs/components/scatterplot/Toolbox.js +1 -18
- package/dist/cjs/components/search-bar/SearchBar.js +156 -59
- package/dist/cjs/components/search-bar/SearchInfo.js +182 -0
- package/dist/cjs/components/search-bar/SearchResults.js +90 -60
- package/dist/cjs/components/var-list/VarItem.js +52 -75
- package/dist/cjs/components/var-list/VarList.js +47 -172
- package/dist/cjs/components/var-list/VarListToolbar.js +7 -8
- package/dist/cjs/components/var-list/VarSet.js +66 -57
- package/dist/cjs/components/violin/Violin.js +54 -43
- package/dist/cjs/components/violin/ViolinControls.js +4 -20
- package/dist/cjs/context/DatasetContext.js +26 -513
- package/dist/cjs/context/FilterContext.js +9 -8
- package/dist/cjs/context/SettingsContext.js +539 -0
- package/dist/cjs/context/ZarrDataContext.js +1 -2
- package/dist/cjs/helpers/color-helper.js +8 -8
- package/dist/cjs/helpers/zarr-helper.js +19 -16
- package/dist/cjs/utils/Filter.js +25 -21
- package/dist/cjs/utils/Histogram.js +4 -3
- package/dist/cjs/utils/ImageViewer.js +1 -2
- package/dist/cjs/utils/Legend.js +18 -12
- 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 +31 -50
- package/dist/css/cherita.css +84 -24
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/controls/Controls.js +51 -0
- package/dist/esm/components/dotplot/Dotplot.js +47 -37
- package/dist/esm/components/dotplot/DotplotControls.js +77 -112
- package/dist/esm/components/full-page/FullPage.js +29 -32
- package/dist/esm/components/full-page/FullPagePseudospatial.js +30 -32
- package/dist/esm/components/heatmap/Heatmap.js +32 -20
- package/dist/esm/components/heatmap/HeatmapControls.js +3 -20
- package/dist/esm/components/matrixplot/Matrixplot.js +34 -22
- package/dist/esm/components/matrixplot/MatrixplotControls.js +5 -35
- package/dist/esm/components/obs-list/ObsItem.js +63 -49
- package/dist/esm/components/obs-list/ObsList.js +53 -47
- package/dist/esm/components/obsm-list/ObsmList.js +17 -11
- package/dist/esm/components/offcanvas/index.js +14 -11
- package/dist/esm/components/pseudospatial/Pseudospatial.js +77 -66
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +27 -20
- package/dist/esm/components/scatterplot/Scatterplot.js +81 -74
- package/dist/esm/components/scatterplot/ScatterplotControls.js +18 -29
- package/dist/esm/components/scatterplot/SpatialControls.js +54 -23
- package/dist/esm/components/scatterplot/Toolbox.js +1 -18
- package/dist/esm/components/search-bar/SearchBar.js +156 -59
- package/dist/esm/components/search-bar/SearchInfo.js +173 -0
- package/dist/esm/components/search-bar/SearchResults.js +91 -60
- package/dist/esm/components/var-list/VarItem.js +53 -76
- package/dist/esm/components/var-list/VarList.js +47 -171
- package/dist/esm/components/var-list/VarListToolbar.js +6 -6
- package/dist/esm/components/var-list/VarSet.js +67 -57
- package/dist/esm/components/violin/Violin.js +53 -41
- package/dist/esm/components/violin/ViolinControls.js +5 -21
- package/dist/esm/context/DatasetContext.js +25 -510
- package/dist/esm/context/FilterContext.js +8 -6
- package/dist/esm/context/SettingsContext.js +528 -0
- package/dist/esm/helpers/color-helper.js +8 -8
- package/dist/esm/helpers/zarr-helper.js +19 -16
- package/dist/esm/utils/Filter.js +25 -21
- package/dist/esm/utils/Histogram.js +4 -3
- package/dist/esm/utils/Legend.js +17 -10
- 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 +33 -51
- package/package.json +6 -3
- package/scss/cherita.scss +50 -9
- package/scss/components/layouts.scss +24 -13
- package/scss/components/lists.scss +10 -0
- package/scss/components/plots.scss +3 -5
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.SelectionItem = SelectionItem;
|
|
7
|
+
exports.VarDiseaseInfo = VarDiseaseInfo;
|
|
7
8
|
exports.VarItem = VarItem;
|
|
8
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
10
|
var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
@@ -14,24 +15,30 @@ var _reactBootstrap = require("react-bootstrap");
|
|
|
14
15
|
var _constants = require("../../constants/constants");
|
|
15
16
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
16
17
|
var _FilterContext = require("../../context/FilterContext");
|
|
18
|
+
var _SettingsContext = require("../../context/SettingsContext");
|
|
17
19
|
var _Histogram = require("../../utils/Histogram");
|
|
18
20
|
var _requests = require("../../utils/requests");
|
|
19
|
-
var _VirtualizedList = require("../../utils/VirtualizedList");
|
|
20
21
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
|
-
function
|
|
22
|
-
function
|
|
22
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
23
|
+
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); }
|
|
24
|
+
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; }
|
|
25
|
+
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; }
|
|
26
|
+
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; }
|
|
27
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
28
|
+
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); }
|
|
23
29
|
function VarHistogram(_ref) {
|
|
24
30
|
let {
|
|
25
31
|
item
|
|
26
32
|
} = _ref;
|
|
27
33
|
const ENDPOINT = "var/histograms";
|
|
28
34
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
35
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
29
36
|
const {
|
|
30
37
|
obsIndices
|
|
31
38
|
} = (0, _FilterContext.useFilteredData)();
|
|
32
39
|
// @TODO: consider using Filter's isSliced; would trigger more re-renders/requests
|
|
33
40
|
// const { obsIndices, isSliced } = useFilteredData();
|
|
34
|
-
const isSliced =
|
|
41
|
+
const isSliced = settings.sliceBy.obs || settings.sliceBy.polygons;
|
|
35
42
|
const [params, setParams] = (0, _react.useState)({
|
|
36
43
|
url: dataset.url,
|
|
37
44
|
varKey: item.matrix_index,
|
|
@@ -39,10 +46,9 @@ function VarHistogram(_ref) {
|
|
|
39
46
|
});
|
|
40
47
|
(0, _react.useEffect)(() => {
|
|
41
48
|
setParams(p => {
|
|
42
|
-
return {
|
|
43
|
-
...p,
|
|
49
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
44
50
|
obsIndices: isSliced ? [...(obsIndices || [])] : null
|
|
45
|
-
};
|
|
51
|
+
});
|
|
46
52
|
});
|
|
47
53
|
}, [obsIndices, isSliced]);
|
|
48
54
|
const {
|
|
@@ -59,20 +65,12 @@ function VarHistogram(_ref) {
|
|
|
59
65
|
});
|
|
60
66
|
}
|
|
61
67
|
function VarDiseaseInfoItem(item) {
|
|
62
|
-
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
63
68
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
64
69
|
key: item.disease_id,
|
|
65
70
|
className: "feature-disease-info"
|
|
66
71
|
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
67
72
|
type: "button",
|
|
68
|
-
className: "btn btn-link disease-link"
|
|
69
|
-
onClick: () => {
|
|
70
|
-
dispatch({
|
|
71
|
-
type: "select.disease",
|
|
72
|
-
id: item.disease_id,
|
|
73
|
-
name: item.disease_name
|
|
74
|
-
});
|
|
75
|
-
}
|
|
73
|
+
className: "btn btn-link disease-link"
|
|
76
74
|
}, item.disease_name), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Table, {
|
|
77
75
|
striped: true,
|
|
78
76
|
size: "sm",
|
|
@@ -89,23 +87,23 @@ function VarDiseaseInfo(_ref2) {
|
|
|
89
87
|
let {
|
|
90
88
|
data
|
|
91
89
|
} = _ref2;
|
|
92
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
});
|
|
90
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
91
|
+
className: "feature-disease-info-list"
|
|
92
|
+
}, data.map(item => {
|
|
93
|
+
return /*#__PURE__*/_react.default.createElement(VarDiseaseInfoItem, _extends({
|
|
94
|
+
key: item.disease_id
|
|
95
|
+
}, item));
|
|
96
|
+
}));
|
|
99
97
|
}
|
|
100
|
-
function
|
|
98
|
+
function SelectionItem(_ref3) {
|
|
101
99
|
let {
|
|
102
100
|
item,
|
|
103
101
|
isActive,
|
|
104
102
|
selectVar,
|
|
105
103
|
removeVar,
|
|
106
|
-
isDiseaseGene = false,
|
|
107
104
|
showSetColorEncoding = true,
|
|
108
|
-
showRemove = true
|
|
105
|
+
showRemove = true,
|
|
106
|
+
isMultiple = false
|
|
109
107
|
} = _ref3;
|
|
110
108
|
const ENDPOINT = "disease/gene";
|
|
111
109
|
const [openInfo, setOpenInfo] = (0, _react.useState)(false);
|
|
@@ -123,9 +121,9 @@ function SingleSelectionItem(_ref3) {
|
|
|
123
121
|
refetchOnMount: false,
|
|
124
122
|
enabled: !!dataset.diseaseDatasets.length
|
|
125
123
|
});
|
|
126
|
-
const hasDiseaseInfo = !isPending && !serverError && !!fetchedData
|
|
124
|
+
const hasDiseaseInfo = !isPending && !serverError && !!(fetchedData !== null && fetchedData !== void 0 && fetchedData.length);
|
|
127
125
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
128
|
-
className:
|
|
126
|
+
className: "d-flex justify-content-between ".concat(hasDiseaseInfo ? "cursor-pointer" : ""),
|
|
129
127
|
onClick: () => {
|
|
130
128
|
setOpenInfo(o => !o);
|
|
131
129
|
}
|
|
@@ -133,7 +131,7 @@ function SingleSelectionItem(_ref3) {
|
|
|
133
131
|
className: "d-flex justify-content-between align-items-center w-100"
|
|
134
132
|
}, /*#__PURE__*/_react.default.createElement("div", null, item.name), /*#__PURE__*/_react.default.createElement("div", {
|
|
135
133
|
className: "d-flex align-items-center gap-1"
|
|
136
|
-
}, hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_iconsMaterial.MoreVert, null),
|
|
134
|
+
}, hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_iconsMaterial.MoreVert, null), /*#__PURE__*/_react.default.createElement(VarHistogram, {
|
|
137
135
|
item: item
|
|
138
136
|
}), showSetColorEncoding && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
139
137
|
type: "button",
|
|
@@ -148,7 +146,11 @@ function SingleSelectionItem(_ref3) {
|
|
|
148
146
|
title: isNotInData ? "Not present in data" : "Set as color encoding"
|
|
149
147
|
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
150
148
|
icon: _freeSolidSvgIcons.faDroplet
|
|
151
|
-
})
|
|
149
|
+
}), isMultiple && /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
150
|
+
icon: _freeSolidSvgIcons.faPlus,
|
|
151
|
+
size: "xs",
|
|
152
|
+
className: "ps-xs-1"
|
|
153
|
+
})), showRemove && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
152
154
|
type: "button",
|
|
153
155
|
className: "m-0 p-0 px-1",
|
|
154
156
|
variant: "outline-secondary",
|
|
@@ -167,37 +169,14 @@ function SingleSelectionItem(_ref3) {
|
|
|
167
169
|
data: fetchedData
|
|
168
170
|
}))));
|
|
169
171
|
}
|
|
170
|
-
function
|
|
171
|
-
let {
|
|
172
|
-
item,
|
|
173
|
-
isActive,
|
|
174
|
-
toggleVar
|
|
175
|
-
} = _ref4;
|
|
176
|
-
const isNotInData = item.matrix_index === -1;
|
|
177
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
178
|
-
className: "d-flex"
|
|
179
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
180
|
-
className: "flex-grow-1"
|
|
181
|
-
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
182
|
-
type: "button",
|
|
183
|
-
key: item.matrix_index,
|
|
184
|
-
variant: isActive ? "primary" : "outline-primary",
|
|
185
|
-
className: "m-0 p-0 px-1",
|
|
186
|
-
onClick: toggleVar,
|
|
187
|
-
disabled: isNotInData,
|
|
188
|
-
title: isNotInData ? "Not present in data" : item.name
|
|
189
|
-
}, item.name))));
|
|
190
|
-
}
|
|
191
|
-
function VarItem(_ref5) {
|
|
172
|
+
function VarItem(_ref4) {
|
|
192
173
|
let {
|
|
193
174
|
item,
|
|
194
175
|
active,
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const dataset = (0, _DatasetContext.useDataset)();
|
|
200
|
-
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
176
|
+
mode = _constants.SELECTION_MODES.SINGLE
|
|
177
|
+
} = _ref4;
|
|
178
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
179
|
+
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
201
180
|
const selectVar = () => {
|
|
202
181
|
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
203
182
|
dispatch({
|
|
@@ -220,8 +199,9 @@ function VarItem(_ref5) {
|
|
|
220
199
|
}
|
|
221
200
|
};
|
|
222
201
|
const removeVar = () => {
|
|
223
|
-
|
|
224
|
-
|
|
202
|
+
dispatch({
|
|
203
|
+
type: "remove.var",
|
|
204
|
+
var: item
|
|
225
205
|
});
|
|
226
206
|
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
227
207
|
if (active === item.matrix_index) {
|
|
@@ -239,28 +219,25 @@ function VarItem(_ref5) {
|
|
|
239
219
|
}
|
|
240
220
|
};
|
|
241
221
|
const toggleVar = () => {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
});
|
|
247
|
-
} else {
|
|
248
|
-
selectVar(item);
|
|
249
|
-
}
|
|
222
|
+
dispatch({
|
|
223
|
+
type: "toggle.multivar",
|
|
224
|
+
var: item
|
|
225
|
+
});
|
|
250
226
|
};
|
|
251
227
|
if (item && mode === _constants.SELECTION_MODES.SINGLE) {
|
|
252
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
228
|
+
return /*#__PURE__*/_react.default.createElement(SelectionItem, {
|
|
253
229
|
item: item,
|
|
254
|
-
isActive:
|
|
230
|
+
isActive: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === item.matrix_index,
|
|
255
231
|
selectVar: selectVar,
|
|
256
|
-
removeVar: removeVar
|
|
257
|
-
isDiseaseGene: isDiseaseGene
|
|
232
|
+
removeVar: removeVar
|
|
258
233
|
});
|
|
259
234
|
} else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
|
|
260
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
235
|
+
return /*#__PURE__*/_react.default.createElement(SelectionItem, {
|
|
261
236
|
item: item,
|
|
262
237
|
isActive: item.matrix_index !== -1 && _lodash.default.includes(active, item.matrix_index),
|
|
263
|
-
|
|
238
|
+
selectVar: toggleVar,
|
|
239
|
+
removeVar: removeVar,
|
|
240
|
+
isMultiple: true
|
|
264
241
|
});
|
|
265
242
|
} else {
|
|
266
243
|
return null;
|
|
@@ -10,16 +10,21 @@ var _reactFontawesome = require("@fortawesome/react-fontawesome");
|
|
|
10
10
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
11
|
var _reactBootstrap = require("react-bootstrap");
|
|
12
12
|
var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
|
|
13
|
+
var _VarItem = require("./VarItem");
|
|
14
|
+
var _VarListToolbar = require("./VarListToolbar");
|
|
15
|
+
var _VarSet = require("./VarSet");
|
|
13
16
|
var _constants = require("../../constants/constants");
|
|
14
17
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
18
|
+
var _SettingsContext = require("../../context/SettingsContext");
|
|
15
19
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
16
20
|
var _requests = require("../../utils/requests");
|
|
17
|
-
var _VarItem = require("./VarItem");
|
|
18
|
-
var _VarListToolbar = require("./VarListToolbar");
|
|
19
|
-
var _VarSet = require("./VarSet");
|
|
20
21
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
|
-
function
|
|
22
|
-
function
|
|
22
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
23
|
+
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; }
|
|
24
|
+
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; }
|
|
25
|
+
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; }
|
|
26
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
27
|
+
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); }
|
|
23
28
|
const useVarMean = function (varKeys) {
|
|
24
29
|
let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
25
30
|
const ENDPOINT = "matrix/mean";
|
|
@@ -35,13 +40,12 @@ const useVarMean = function (varKeys) {
|
|
|
35
40
|
});
|
|
36
41
|
(0, _react.useEffect)(() => {
|
|
37
42
|
setParams(p => {
|
|
38
|
-
return {
|
|
39
|
-
...p,
|
|
43
|
+
return _objectSpread(_objectSpread({}, p), {}, {
|
|
40
44
|
varKeys: _lodash.default.map(varKeys, v => v.isSet ? {
|
|
41
45
|
name: v.name,
|
|
42
46
|
indices: v.vars.map(v => v.index)
|
|
43
47
|
} : v.index)
|
|
44
|
-
};
|
|
48
|
+
});
|
|
45
49
|
});
|
|
46
50
|
}, [varKeys]);
|
|
47
51
|
return (0, _requests.useFetch)(ENDPOINT, params, {
|
|
@@ -54,173 +58,50 @@ const useVarMean = function (varKeys) {
|
|
|
54
58
|
const sortMeans = (i, means) => {
|
|
55
59
|
return means[i.name] || _lodash.default.min(_lodash.default.values(means)) - 1;
|
|
56
60
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// add to disease dataset metadata
|
|
60
|
-
function DiseaseVarList(_ref) {
|
|
61
|
-
let {
|
|
62
|
-
makeListItem
|
|
63
|
-
} = _ref;
|
|
64
|
-
const ENDPOINT = "disease/genes";
|
|
65
|
-
const dataset = (0, _DatasetContext.useDataset)();
|
|
66
|
-
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
67
|
-
const [diseaseVars, setDiseaseVars] = (0, _react.useState)([]);
|
|
68
|
-
const [sortedDiseaseVars, setSortedDiseaseVars] = (0, _react.useState)([]);
|
|
69
|
-
const [params, setParams] = (0, _react.useState)({
|
|
70
|
-
url: dataset.url,
|
|
71
|
-
col: dataset.varNamesCol,
|
|
72
|
-
diseaseId: dataset.selectedDisease?.id,
|
|
73
|
-
diseaseDatasets: dataset.diseaseDatasets
|
|
74
|
-
});
|
|
75
|
-
(0, _react.useEffect)(() => {
|
|
76
|
-
setParams(p => {
|
|
77
|
-
return {
|
|
78
|
-
...p,
|
|
79
|
-
diseaseId: dataset.selectedDisease?.id
|
|
80
|
-
};
|
|
81
|
-
});
|
|
82
|
-
}, [dataset.selectedDisease]);
|
|
83
|
-
const diseaseData = (0, _requests.useFetch)(ENDPOINT, params, {
|
|
84
|
-
enabled: !!params.diseaseId,
|
|
85
|
-
refetchOnMount: false
|
|
86
|
-
});
|
|
87
|
-
(0, _react.useEffect)(() => {
|
|
88
|
-
if (!diseaseData.isPending && !diseaseData.serverError) {
|
|
89
|
-
setDiseaseVars(diseaseData.fetchedData);
|
|
90
|
-
}
|
|
91
|
-
}, [diseaseData.fetchedData, diseaseData.isPending, diseaseData.serverError]);
|
|
92
|
-
const varMeans = useVarMean(diseaseVars, !!diseaseVars?.length && dataset.varSort.disease.sort === _constants.VAR_SORT.MATRIX);
|
|
93
|
-
(0, _react.useEffect)(() => {
|
|
94
|
-
if (dataset.varSort.disease.sort === _constants.VAR_SORT.MATRIX) {
|
|
95
|
-
if (!varMeans.isPending && !varMeans.serverError) {
|
|
96
|
-
setSortedDiseaseVars(_lodash.default.orderBy(diseaseVars, o => {
|
|
97
|
-
return sortMeans(o, varMeans.fetchedData);
|
|
98
|
-
}, dataset.varSort.disease.sortOrder));
|
|
99
|
-
}
|
|
100
|
-
} else if (dataset.varSort.disease.sort === _constants.VAR_SORT.NAME) {
|
|
101
|
-
setSortedDiseaseVars(_lodash.default.orderBy(diseaseVars, "name", dataset.varSort.disease.sortOrder));
|
|
102
|
-
} else {
|
|
103
|
-
setSortedDiseaseVars(diseaseVars);
|
|
104
|
-
}
|
|
105
|
-
}, [dataset.varSort.disease.sort, dataset.varSort.disease.sortOrder, diseaseVars, varMeans.fetchedData, varMeans.isPending, varMeans.serverError]);
|
|
106
|
-
const diseaseVarList = _lodash.default.map(sortedDiseaseVars, item => {
|
|
107
|
-
return makeListItem(item, true);
|
|
108
|
-
});
|
|
109
|
-
const isPending = diseaseData.isPending || varMeans.isPending && dataset.varSort.disease.sort === _constants.VAR_SORT.MATRIX;
|
|
110
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, dataset.selectedDisease && (!isPending && !diseaseVars?.length ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
111
|
-
className: "d-flex justify-content-between mt-3"
|
|
112
|
-
}, /*#__PURE__*/_react.default.createElement("h5", null, "Disease genes")), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
|
|
113
|
-
variant: "light"
|
|
114
|
-
}, "No disease genes found.")) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
115
|
-
className: "d-flex justify-content-between my-2"
|
|
116
|
-
}, /*#__PURE__*/_react.default.createElement("h5", null, "Disease genes"), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
|
|
117
|
-
"aria-label": "Feature options",
|
|
118
|
-
size: "sm"
|
|
119
|
-
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
120
|
-
variant: "info",
|
|
121
|
-
onClick: () => {
|
|
122
|
-
dispatch({
|
|
123
|
-
type: "reset.disease"
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
127
|
-
icon: _freeSolidSvgIcons.faTimes,
|
|
128
|
-
className: "me-1"
|
|
129
|
-
}), "Clear"))), /*#__PURE__*/_react.default.createElement("p", null, dataset.selectedDisease?.name), /*#__PURE__*/_react.default.createElement(_VarListToolbar.VarListToolbar, {
|
|
130
|
-
varType: "disease"
|
|
131
|
-
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
132
|
-
className: "position-relative"
|
|
133
|
-
}, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
134
|
-
variant: "flush",
|
|
135
|
-
className: "cherita-list"
|
|
136
|
-
}, diseaseVarList)))));
|
|
137
|
-
}
|
|
138
|
-
function VarNamesList(_ref2) {
|
|
61
|
+
function VarNamesList(_ref) {
|
|
62
|
+
var _settings$selectedVar, _settings$selectedVar2;
|
|
139
63
|
let {
|
|
140
64
|
mode = _constants.SELECTION_MODES.SINGLE,
|
|
141
|
-
displayName = "genes"
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
const
|
|
146
|
-
const [
|
|
147
|
-
const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? dataset.selectedVar?.matrix_index || dataset.selectedVar?.name : dataset.selectedMultiVar.map(i => i.matrix_index || i.name));
|
|
148
|
-
const [sortedVarButtons, setSortedVarButtons] = (0, _react.useState)([]);
|
|
65
|
+
displayName = "genes"
|
|
66
|
+
} = _ref;
|
|
67
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
68
|
+
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
69
|
+
const [active, setActive] = (0, _react.useState)(mode === _constants.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));
|
|
70
|
+
const [sortedVars, setSortedVars] = (0, _react.useState)([]);
|
|
149
71
|
(0, _react.useEffect)(() => {
|
|
150
72
|
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return _lodash.default.unionWith(v, [dataset.selectedVar], _lodash.default.isEqual);
|
|
154
|
-
} else {
|
|
155
|
-
return v;
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
setActive(dataset.selectedVar?.matrix_index || dataset.selectedVar?.name);
|
|
73
|
+
var _settings$selectedVar3, _settings$selectedVar4;
|
|
74
|
+
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));
|
|
159
75
|
}
|
|
160
|
-
}, [mode,
|
|
76
|
+
}, [mode, settings.selectedVar]);
|
|
161
77
|
(0, _react.useEffect)(() => {
|
|
162
78
|
if (mode === _constants.SELECTION_MODES.MULTIPLE) {
|
|
163
|
-
|
|
164
|
-
if (dataset.selectedMultiVar.length) {
|
|
165
|
-
return _lodash.default.unionWith(v, dataset.selectedMultiVar, _lodash.default.isEqual);
|
|
166
|
-
} else {
|
|
167
|
-
return v;
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
setActive(dataset.selectedMultiVar.map(i => i.matrix_index || i.name));
|
|
79
|
+
setActive(settings.selectedMultiVar.map(i => i.matrix_index || i.name));
|
|
171
80
|
}
|
|
172
|
-
}, [mode,
|
|
173
|
-
(
|
|
174
|
-
setVarButtons(v => {
|
|
175
|
-
const updated = _lodash.default.compact(_lodash.default.map(v, i => {
|
|
176
|
-
if (i.isSet) {
|
|
177
|
-
return dataset.varSets.find(s => s.name === i.name);
|
|
178
|
-
} else return i;
|
|
179
|
-
}));
|
|
180
|
-
const newSets = _lodash.default.difference(dataset.varSets, updated);
|
|
181
|
-
return [...updated, ...newSets];
|
|
182
|
-
});
|
|
183
|
-
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
184
|
-
if (dataset.selectedVar?.isSet) {
|
|
185
|
-
const selectedSet = dataset.varSets.find(s => s.name === dataset.selectedVar.name);
|
|
186
|
-
dispatch({
|
|
187
|
-
type: "select.var",
|
|
188
|
-
var: selectedSet
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
} else {
|
|
192
|
-
dispatch({
|
|
193
|
-
type: "update.multivar",
|
|
194
|
-
vars: dataset.varSets
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
}, [mode, dataset.varSets, dataset.selectedVar?.isSet, dataset.selectedVar?.name, dispatch]);
|
|
198
|
-
const varMeans = useVarMean(varButtons, dataset.varSort.var.sort === _constants.VAR_SORT.MATRIX);
|
|
81
|
+
}, [mode, settings.selectedMultiVar]);
|
|
82
|
+
const varMeans = useVarMean(settings.vars, settings.varSort.var.sort === _constants.VAR_SORT.MATRIX);
|
|
199
83
|
|
|
200
|
-
// @TODO: deferr
|
|
84
|
+
// @TODO: deferr sortedVars ?
|
|
201
85
|
(0, _react.useEffect)(() => {
|
|
202
|
-
if (
|
|
86
|
+
if (settings.varSort.var.sort === _constants.VAR_SORT.MATRIX) {
|
|
203
87
|
if (!varMeans.isPending && !varMeans.serverError && varMeans.fetchedData) {
|
|
204
|
-
|
|
88
|
+
setSortedVars(_lodash.default.orderBy(settings.vars, o => {
|
|
205
89
|
return sortMeans(o, varMeans.fetchedData);
|
|
206
|
-
},
|
|
90
|
+
}, settings.varSort.var.sortOrder));
|
|
207
91
|
}
|
|
208
|
-
} else if (
|
|
209
|
-
|
|
92
|
+
} else if (settings.varSort.var.sort === _constants.VAR_SORT.NAME) {
|
|
93
|
+
setSortedVars(_lodash.default.orderBy(settings.vars, "name", settings.varSort.var.sortOrder));
|
|
210
94
|
} else {
|
|
211
|
-
|
|
95
|
+
setSortedVars(settings.vars);
|
|
212
96
|
}
|
|
213
|
-
}, [
|
|
214
|
-
const makeListItem =
|
|
215
|
-
let isDiseaseGene = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
97
|
+
}, [settings.varSort.var.sort, settings.varSort.var.sortOrder, varMeans.isPending, varMeans.serverError, varMeans.fetchedData, settings.vars]);
|
|
98
|
+
const makeListItem = item => {
|
|
216
99
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
217
100
|
key: item.matrix_index
|
|
218
101
|
}, /*#__PURE__*/_react.default.createElement(_VarItem.VarItem, {
|
|
219
102
|
item: item,
|
|
220
103
|
active: active,
|
|
221
|
-
|
|
222
|
-
mode: mode,
|
|
223
|
-
isDiseaseGene: isDiseaseGene
|
|
104
|
+
mode: mode
|
|
224
105
|
}));
|
|
225
106
|
};
|
|
226
107
|
const makeSetListItem = set => {
|
|
@@ -232,7 +113,7 @@ function VarNamesList(_ref2) {
|
|
|
232
113
|
mode: mode
|
|
233
114
|
}));
|
|
234
115
|
};
|
|
235
|
-
const varList = _lodash.default.map(
|
|
116
|
+
const varList = _lodash.default.map(sortedVars, item => {
|
|
236
117
|
if (item.isSet) {
|
|
237
118
|
return makeSetListItem(item);
|
|
238
119
|
} else {
|
|
@@ -241,17 +122,17 @@ function VarNamesList(_ref2) {
|
|
|
241
122
|
});
|
|
242
123
|
const newSetName = () => {
|
|
243
124
|
let n = 1;
|
|
244
|
-
let setName =
|
|
245
|
-
const
|
|
246
|
-
return
|
|
125
|
+
let setName = "Set ".concat(n);
|
|
126
|
+
const nameExists = name => {
|
|
127
|
+
return settings.vars.some(v => v.name === name);
|
|
247
128
|
};
|
|
248
|
-
while (
|
|
129
|
+
while (nameExists(setName)) {
|
|
249
130
|
n++;
|
|
250
|
-
setName =
|
|
131
|
+
setName = "Set ".concat(n);
|
|
251
132
|
}
|
|
252
133
|
return setName;
|
|
253
134
|
};
|
|
254
|
-
const isPending = varMeans.isPending &&
|
|
135
|
+
const isPending = varMeans.isPending && settings.varSort.var.sort === _constants.VAR_SORT.MATRIX;
|
|
255
136
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
256
137
|
className: "position-relative"
|
|
257
138
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -265,8 +146,8 @@ function VarNamesList(_ref2) {
|
|
|
265
146
|
variant: "info",
|
|
266
147
|
onClick: () => {
|
|
267
148
|
dispatch({
|
|
268
|
-
type: "add.
|
|
269
|
-
|
|
149
|
+
type: "add.var",
|
|
150
|
+
var: {
|
|
270
151
|
name: newSetName(),
|
|
271
152
|
vars: [],
|
|
272
153
|
isSet: true
|
|
@@ -276,12 +157,8 @@ function VarNamesList(_ref2) {
|
|
|
276
157
|
}, "New set"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
277
158
|
variant: "info",
|
|
278
159
|
onClick: () => {
|
|
279
|
-
setVarButtons([]);
|
|
280
|
-
dispatch({
|
|
281
|
-
type: mode === _constants.SELECTION_MODES.SINGLE ? "reset.var" : "reset.multiVar"
|
|
282
|
-
});
|
|
283
160
|
dispatch({
|
|
284
|
-
type: "reset.
|
|
161
|
+
type: "reset.vars"
|
|
285
162
|
});
|
|
286
163
|
}
|
|
287
164
|
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
@@ -294,7 +171,5 @@ function VarNamesList(_ref2) {
|
|
|
294
171
|
}, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
295
172
|
variant: "flush",
|
|
296
173
|
className: "cherita-list"
|
|
297
|
-
}, varList))))
|
|
298
|
-
makeListItem: makeListItem
|
|
299
|
-
}))));
|
|
174
|
+
}, varList))))));
|
|
300
175
|
}
|
|
@@ -9,19 +9,18 @@ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
|
9
9
|
var _reactFontawesome = require("@fortawesome/react-fontawesome");
|
|
10
10
|
var _reactBootstrap = require("react-bootstrap");
|
|
11
11
|
var _constants = require("../../constants/constants");
|
|
12
|
-
var
|
|
13
|
-
function
|
|
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; }
|
|
12
|
+
var _SettingsContext = require("../../context/SettingsContext");
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
15
14
|
// @TODO: set option for "var" and "disease"
|
|
16
15
|
function VarListToolbar(_ref) {
|
|
17
16
|
let {
|
|
18
17
|
varType = "var"
|
|
19
18
|
} = _ref;
|
|
20
|
-
const
|
|
21
|
-
const dispatch = (0,
|
|
22
|
-
const [sort, setSort] = (0, _react.useState)(
|
|
23
|
-
const [nameSortOrder, setNameSortOrder] = (0, _react.useState)(
|
|
24
|
-
const [matrixSortOrder, setMatrixSortOrder] = (0, _react.useState)(
|
|
19
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
20
|
+
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
21
|
+
const [sort, setSort] = (0, _react.useState)(settings.varSort.var.sort);
|
|
22
|
+
const [nameSortOrder, setNameSortOrder] = (0, _react.useState)(settings.varSort.var.sortOrder);
|
|
23
|
+
const [matrixSortOrder, setMatrixSortOrder] = (0, _react.useState)(settings.varSort.var.sortOrder);
|
|
25
24
|
const handleSort = (sortValue, sortOrder, setSortOrder) => {
|
|
26
25
|
if (sort !== sortValue) {
|
|
27
26
|
setSort(sortValue);
|