@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
|
@@ -15,12 +15,10 @@ var _constants = require("../../constants/constants");
|
|
|
15
15
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
16
16
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
17
17
|
var _requests = require("../../utils/requests");
|
|
18
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
19
|
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); }
|
|
21
20
|
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; }
|
|
22
|
-
const useVarMean =
|
|
23
|
-
let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
21
|
+
const useVarMean = (varKeys, enabled = false) => {
|
|
24
22
|
const ENDPOINT = "matrix/mean";
|
|
25
23
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
26
24
|
const [params, setParams] = (0, _react.useState)({
|
|
@@ -51,10 +49,9 @@ const useVarMean = function (varKeys) {
|
|
|
51
49
|
|
|
52
50
|
// @TODO: display where disease data comes from
|
|
53
51
|
// add to disease dataset metadata
|
|
54
|
-
function DiseaseVarList(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
} = _ref;
|
|
52
|
+
function DiseaseVarList({
|
|
53
|
+
makeListItem
|
|
54
|
+
}) {
|
|
58
55
|
const ENDPOINT = "disease/genes";
|
|
59
56
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
60
57
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
@@ -101,50 +98,30 @@ function DiseaseVarList(_ref) {
|
|
|
101
98
|
return makeListItem(item, true);
|
|
102
99
|
});
|
|
103
100
|
const isPending = diseaseData.isPending || varMeans.isPending && dataset.varSort.disease.sort === _constants.VAR_SORT.MATRIX;
|
|
104
|
-
return /*#__PURE__*/(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
onClick: () => {
|
|
123
|
-
dispatch({
|
|
124
|
-
type: "reset.disease"
|
|
125
|
-
});
|
|
126
|
-
},
|
|
127
|
-
children: "clear"
|
|
128
|
-
})]
|
|
129
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
|
|
130
|
-
children: dataset.selectedDisease?.name
|
|
131
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarListToolbar.VarListToolbar, {
|
|
132
|
-
varType: "disease"
|
|
133
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
134
|
-
className: "position-relative",
|
|
135
|
-
children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
|
|
136
|
-
children: diseaseVarList
|
|
137
|
-
})]
|
|
138
|
-
})]
|
|
139
|
-
}))
|
|
140
|
-
});
|
|
101
|
+
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", {
|
|
102
|
+
className: "d-flex justify-content-between mt-3"
|
|
103
|
+
}, /*#__PURE__*/_react.default.createElement("h5", null, "Disease genes")), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
|
|
104
|
+
variant: "light"
|
|
105
|
+
}, "No disease genes found.")) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
106
|
+
className: "d-flex justify-content-between mt-3"
|
|
107
|
+
}, /*#__PURE__*/_react.default.createElement("h5", null, "Disease genes"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
108
|
+
variant: "link",
|
|
109
|
+
onClick: () => {
|
|
110
|
+
dispatch({
|
|
111
|
+
type: "reset.disease"
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}, "clear")), /*#__PURE__*/_react.default.createElement("p", null, dataset.selectedDisease?.name), /*#__PURE__*/_react.default.createElement(_VarListToolbar.VarListToolbar, {
|
|
115
|
+
varType: "disease"
|
|
116
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
117
|
+
className: "position-relative"
|
|
118
|
+
}, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, null, diseaseVarList)))));
|
|
141
119
|
}
|
|
142
|
-
function VarNamesList(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
} = _ref2;
|
|
120
|
+
function VarNamesList({
|
|
121
|
+
mode = _constants.SELECTION_MODES.SINGLE,
|
|
122
|
+
displayName = "genes",
|
|
123
|
+
showDiseaseVarList = true
|
|
124
|
+
}) {
|
|
148
125
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
149
126
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
150
127
|
const [varButtons, setVarButtons] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? dataset.selectedVar ? _lodash.default.unionWith([dataset.selectedVar], dataset.varSets, _lodash.default.isEqual) : [...dataset.varSets] : [...dataset.selectedMultiVar, ...dataset.varSets]);
|
|
@@ -215,26 +192,25 @@ function VarNamesList(_ref2) {
|
|
|
215
192
|
setSortedVarButtons(varButtons);
|
|
216
193
|
}
|
|
217
194
|
}, [dataset.varSort.var.sort, dataset.varSort.var.sortOrder, varButtons, varMeans.isPending, varMeans.serverError, varMeans.fetchedData]);
|
|
218
|
-
const makeListItem =
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}, item.matrix_index);
|
|
195
|
+
const makeListItem = (item, isDiseaseGene = false) => {
|
|
196
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
197
|
+
key: item.matrix_index
|
|
198
|
+
}, /*#__PURE__*/_react.default.createElement(_VarItem.VarItem, {
|
|
199
|
+
item: item,
|
|
200
|
+
active: active,
|
|
201
|
+
setVarButtons: setVarButtons,
|
|
202
|
+
mode: mode,
|
|
203
|
+
isDiseaseGene: isDiseaseGene
|
|
204
|
+
}));
|
|
229
205
|
};
|
|
230
206
|
const makeSetListItem = set => {
|
|
231
|
-
return /*#__PURE__*/
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}
|
|
207
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
208
|
+
key: set.name
|
|
209
|
+
}, /*#__PURE__*/_react.default.createElement(_VarSet.VarSet, {
|
|
210
|
+
set: set,
|
|
211
|
+
active: active,
|
|
212
|
+
mode: mode
|
|
213
|
+
}));
|
|
238
214
|
};
|
|
239
215
|
const varList = _lodash.default.map(sortedVarButtons, item => {
|
|
240
216
|
if (item.isSet) {
|
|
@@ -256,60 +232,41 @@ function VarNamesList(_ref2) {
|
|
|
256
232
|
return setName;
|
|
257
233
|
};
|
|
258
234
|
const isPending = varMeans.isPending && dataset.varSort.var.sort === _constants.VAR_SORT.MATRIX;
|
|
259
|
-
return /*#__PURE__*/
|
|
260
|
-
className: "position-relative"
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
297
|
-
children: !varList.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Alert, {
|
|
298
|
-
variant: "light",
|
|
299
|
-
children: "Search for a feature."
|
|
300
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
301
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_VarListToolbar.VarListToolbar, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
302
|
-
className: "position-relative",
|
|
303
|
-
children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
|
|
304
|
-
children: varList
|
|
305
|
-
})]
|
|
306
|
-
})]
|
|
307
|
-
})
|
|
308
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
309
|
-
children: showDiseaseVarList && /*#__PURE__*/(0, _jsxRuntime.jsx)(DiseaseVarList, {
|
|
310
|
-
makeListItem: makeListItem
|
|
311
|
-
})
|
|
312
|
-
})]
|
|
313
|
-
})
|
|
314
|
-
});
|
|
235
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
236
|
+
className: "position-relative"
|
|
237
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
238
|
+
className: "overflow-auto mt-3"
|
|
239
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
240
|
+
className: "d-flex justify-content-between"
|
|
241
|
+
}, /*#__PURE__*/_react.default.createElement("h5", null, _lodash.default.capitalize(displayName)), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
242
|
+
variant: "light",
|
|
243
|
+
className: "p-1",
|
|
244
|
+
onClick: () => {
|
|
245
|
+
dispatch({
|
|
246
|
+
type: "add.varSet",
|
|
247
|
+
varSet: {
|
|
248
|
+
name: newSetName(),
|
|
249
|
+
vars: [],
|
|
250
|
+
isSet: true
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}, /*#__PURE__*/_react.default.createElement(_iconsMaterial.Add, null), "New set"), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
255
|
+
variant: "link",
|
|
256
|
+
onClick: () => {
|
|
257
|
+
setVarButtons([]);
|
|
258
|
+
dispatch({
|
|
259
|
+
type: mode === _constants.SELECTION_MODES.SINGLE ? "reset.var" : "reset.multiVar"
|
|
260
|
+
});
|
|
261
|
+
dispatch({
|
|
262
|
+
type: "reset.varSets"
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}, "clear"))), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !varList.length ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
|
|
266
|
+
variant: "light"
|
|
267
|
+
}, "Search for a feature.") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_VarListToolbar.VarListToolbar, null), /*#__PURE__*/_react.default.createElement("div", {
|
|
268
|
+
className: "position-relative"
|
|
269
|
+
}, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, null, varList)))), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showDiseaseVarList && /*#__PURE__*/_react.default.createElement(DiseaseVarList, {
|
|
270
|
+
makeListItem: makeListItem
|
|
271
|
+
}))));
|
|
315
272
|
}
|
|
@@ -11,14 +11,12 @@ var _material = require("@mui/material");
|
|
|
11
11
|
var _reactBootstrap = require("react-bootstrap");
|
|
12
12
|
var _constants = require("../../constants/constants");
|
|
13
13
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
14
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
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
16
|
// @TODO: set option for "var" and "disease"
|
|
18
|
-
function VarListToolbar(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} = _ref;
|
|
17
|
+
function VarListToolbar({
|
|
18
|
+
varType = "var"
|
|
19
|
+
}) {
|
|
22
20
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
23
21
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
24
22
|
const [sort, setSort] = (0, _react.useState)(dataset.varSort.var.sort);
|
|
@@ -44,58 +42,49 @@ function VarListToolbar(_ref) {
|
|
|
44
42
|
});
|
|
45
43
|
}
|
|
46
44
|
};
|
|
47
|
-
return /*#__PURE__*/
|
|
48
|
-
className: "var-list-toolbar"
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
});
|
|
93
|
-
},
|
|
94
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
|
|
95
|
-
icon: _freeSolidSvgIcons.faXmark
|
|
96
|
-
})
|
|
97
|
-
})]
|
|
98
|
-
})]
|
|
99
|
-
})
|
|
100
|
-
});
|
|
45
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Navbar, {
|
|
46
|
+
className: "var-list-toolbar"
|
|
47
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup.Text, null, "Sort by:"), /*#__PURE__*/_react.default.createElement(_material.ToggleButtonGroup, {
|
|
48
|
+
"aria-label": "Sort feature by",
|
|
49
|
+
size: "small",
|
|
50
|
+
className: "mh-100"
|
|
51
|
+
}, /*#__PURE__*/_react.default.createElement(_material.ToggleButton, {
|
|
52
|
+
value: _constants.VAR_SORT.NAME,
|
|
53
|
+
"aria-label": "alphabetical",
|
|
54
|
+
title: "Sort alphabetically",
|
|
55
|
+
selected: sort === _constants.VAR_SORT.NAME,
|
|
56
|
+
onChange: () => {
|
|
57
|
+
handleSort(_constants.VAR_SORT.NAME, nameSortOrder, setNameSortOrder);
|
|
58
|
+
}
|
|
59
|
+
}, nameSortOrder === _constants.VAR_SORT_ORDER.ASC ? /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
60
|
+
icon: _freeSolidSvgIcons.faArrowDownAZ
|
|
61
|
+
}) : /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
62
|
+
icon: _freeSolidSvgIcons.faArrowUpZA
|
|
63
|
+
})), /*#__PURE__*/_react.default.createElement(_material.ToggleButton, {
|
|
64
|
+
value: _constants.VAR_SORT.MATRIX,
|
|
65
|
+
"aria-label": "matrix value",
|
|
66
|
+
title: "Sort by matrix value",
|
|
67
|
+
selected: sort === _constants.VAR_SORT.MATRIX,
|
|
68
|
+
onChange: () => {
|
|
69
|
+
handleSort(_constants.VAR_SORT.MATRIX, matrixSortOrder, setMatrixSortOrder);
|
|
70
|
+
}
|
|
71
|
+
}, matrixSortOrder === _constants.VAR_SORT_ORDER.ASC ? /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
72
|
+
icon: _freeSolidSvgIcons.faArrowDown19
|
|
73
|
+
}) : /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
74
|
+
icon: _freeSolidSvgIcons.faArrowUp91
|
|
75
|
+
})), /*#__PURE__*/_react.default.createElement(_material.ToggleButton, {
|
|
76
|
+
value: "none",
|
|
77
|
+
"aria-label": "none",
|
|
78
|
+
title: "No sorting",
|
|
79
|
+
onClick: () => {
|
|
80
|
+
setSort(_constants.VAR_SORT.NONE);
|
|
81
|
+
dispatch({
|
|
82
|
+
type: "set.varSort.sort",
|
|
83
|
+
var: varType,
|
|
84
|
+
sort: _constants.VAR_SORT.NONE
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
88
|
+
icon: _freeSolidSvgIcons.faXmark
|
|
89
|
+
})))));
|
|
101
90
|
}
|
|
@@ -14,11 +14,11 @@ var _VarItem = require("./VarItem");
|
|
|
14
14
|
var _constants = require("../../constants/constants");
|
|
15
15
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
16
16
|
var _SearchBar = require("../search-bar/SearchBar");
|
|
17
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
18
|
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); }
|
|
20
19
|
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; }
|
|
21
20
|
// @TODO: add button to score genes and plot
|
|
21
|
+
|
|
22
22
|
const addVarToSet = (dispatch, set, v) => {
|
|
23
23
|
dispatch({
|
|
24
24
|
type: "add.varSet.var",
|
|
@@ -26,127 +26,102 @@ const addVarToSet = (dispatch, set, v) => {
|
|
|
26
26
|
var: v
|
|
27
27
|
});
|
|
28
28
|
};
|
|
29
|
-
function SingleSelectionSet(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
} = _ref;
|
|
29
|
+
function SingleSelectionSet({
|
|
30
|
+
set,
|
|
31
|
+
isActive,
|
|
32
|
+
selectSet,
|
|
33
|
+
removeSet,
|
|
34
|
+
removeSetVar,
|
|
35
|
+
showSearchBar = true
|
|
36
|
+
}) {
|
|
38
37
|
const [openSet, setOpenSet] = (0, _react.useState)(false);
|
|
39
38
|
const varList = set.vars.length ? _lodash.default.map(set.vars, v => {
|
|
40
|
-
return /*#__PURE__*/
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
}) : /*#__PURE__*/
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
in: openSet,
|
|
103
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
104
|
-
className: "mt-2",
|
|
105
|
-
children: [showSearchBar &&
|
|
106
|
-
/*#__PURE__*/
|
|
107
|
-
// @TODO: fix how results are displayed, should be placed on top of parent components
|
|
108
|
-
(0, _jsxRuntime.jsx)(_SearchBar.SearchBar, {
|
|
109
|
-
handleSelect: (d, i) => addVarToSet(d, set, i)
|
|
110
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
111
|
-
className: "mx-2",
|
|
112
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
|
|
113
|
-
variant: "flush",
|
|
114
|
-
children: varList
|
|
115
|
-
})
|
|
116
|
-
})]
|
|
117
|
-
})
|
|
118
|
-
})]
|
|
119
|
-
});
|
|
39
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
40
|
+
key: v.name
|
|
41
|
+
}, /*#__PURE__*/_react.default.createElement(_VarItem.SingleSelectionItem, {
|
|
42
|
+
item: v,
|
|
43
|
+
showSetColorEncoding: false,
|
|
44
|
+
removeVar: () => removeSetVar(v)
|
|
45
|
+
}));
|
|
46
|
+
}) : /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
47
|
+
className: "text-muted"
|
|
48
|
+
}, "No features in this set"));
|
|
49
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
50
|
+
className: "d-flex justify-content-between cursor-pointer",
|
|
51
|
+
onClick: () => {
|
|
52
|
+
setOpenSet(o => !o);
|
|
53
|
+
}
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
55
|
+
className: "d-flex justify-content-between align-items-center w-100"
|
|
56
|
+
}, /*#__PURE__*/_react.default.createElement("div", null, set.name), /*#__PURE__*/_react.default.createElement("div", {
|
|
57
|
+
className: "d-flex align-items-center gap-1"
|
|
58
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
|
|
59
|
+
placement: "top",
|
|
60
|
+
overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, null, "This set represents the mean value of its features")
|
|
61
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
62
|
+
icon: _freeSolidSvgIcons.faCircleInfo
|
|
63
|
+
})), /*#__PURE__*/_react.default.createElement(_iconsMaterial.List, null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
64
|
+
type: "button",
|
|
65
|
+
key: set.name,
|
|
66
|
+
variant: isActive ? "primary" : "outline-primary",
|
|
67
|
+
className: "m-0 p-0 px-1",
|
|
68
|
+
onClick: e => {
|
|
69
|
+
e.stopPropagation();
|
|
70
|
+
selectSet();
|
|
71
|
+
},
|
|
72
|
+
disabled: !set.vars.length,
|
|
73
|
+
title: "Set as color encoding"
|
|
74
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
75
|
+
icon: _freeSolidSvgIcons.faDroplet
|
|
76
|
+
})), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
77
|
+
type: "button",
|
|
78
|
+
className: "m-0 p-0 px-1",
|
|
79
|
+
variant: "outline-secondary",
|
|
80
|
+
title: "Remove from list",
|
|
81
|
+
onClick: e => {
|
|
82
|
+
e.stopPropagation();
|
|
83
|
+
removeSet();
|
|
84
|
+
}
|
|
85
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
86
|
+
icon: _freeSolidSvgIcons.faTrash
|
|
87
|
+
}))))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Collapse, {
|
|
88
|
+
in: openSet
|
|
89
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
90
|
+
className: "mt-2"
|
|
91
|
+
}, showSearchBar &&
|
|
92
|
+
/*#__PURE__*/
|
|
93
|
+
// @TODO: fix how results are displayed, should be placed on top of parent components
|
|
94
|
+
_react.default.createElement(_SearchBar.SearchBar, {
|
|
95
|
+
handleSelect: (d, i) => addVarToSet(d, set, i)
|
|
96
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
97
|
+
className: "mx-2"
|
|
98
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
99
|
+
variant: "flush"
|
|
100
|
+
}, varList)))));
|
|
120
101
|
}
|
|
121
|
-
function MultipleSelectionSet(
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
children: set.name
|
|
139
|
-
}, set.name)
|
|
140
|
-
})
|
|
141
|
-
})
|
|
142
|
-
});
|
|
102
|
+
function MultipleSelectionSet({
|
|
103
|
+
set,
|
|
104
|
+
isActive,
|
|
105
|
+
toggleSet
|
|
106
|
+
}) {
|
|
107
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
108
|
+
className: "d-flex"
|
|
109
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
110
|
+
className: "flex-grow-1"
|
|
111
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
112
|
+
type: "button",
|
|
113
|
+
key: set.name,
|
|
114
|
+
variant: isActive ? "primary" : "outline-primary",
|
|
115
|
+
className: "m-0 p-0 px-1",
|
|
116
|
+
onClick: toggleSet,
|
|
117
|
+
title: set.name
|
|
118
|
+
}, set.name))));
|
|
143
119
|
}
|
|
144
|
-
function VarSet(
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
} = _ref3;
|
|
120
|
+
function VarSet({
|
|
121
|
+
set,
|
|
122
|
+
active,
|
|
123
|
+
mode = _constants.SELECTION_MODES.SINGLE
|
|
124
|
+
}) {
|
|
150
125
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
151
126
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
152
127
|
const selectSet = () => {
|
|
@@ -204,7 +179,7 @@ function VarSet(_ref3) {
|
|
|
204
179
|
}
|
|
205
180
|
};
|
|
206
181
|
if (set && mode === _constants.SELECTION_MODES.SINGLE) {
|
|
207
|
-
return /*#__PURE__*/
|
|
182
|
+
return /*#__PURE__*/_react.default.createElement(SingleSelectionSet, {
|
|
208
183
|
set: set,
|
|
209
184
|
isActive: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === set.name,
|
|
210
185
|
selectSet: selectSet,
|
|
@@ -212,7 +187,7 @@ function VarSet(_ref3) {
|
|
|
212
187
|
removeSetVar: v => removeSetVar(v)
|
|
213
188
|
});
|
|
214
189
|
} else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
|
|
215
|
-
return /*#__PURE__*/
|
|
190
|
+
return /*#__PURE__*/_react.default.createElement(MultipleSelectionSet, {
|
|
216
191
|
set: set,
|
|
217
192
|
isActive: _lodash.default.includes(active, set.name),
|
|
218
193
|
toggleSet: () => toggleSet(set)
|