@haniffalab/cherita-react 1.1.1 → 1.2.0-dev.2025-04-09.0f69cbd1
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/obs-list/ObsItem.js +22 -96
- package/dist/cjs/components/obs-list/ObsList.js +19 -56
- package/dist/cjs/components/var-list/VarItem.js +14 -10
- package/dist/cjs/utils/VirtualizedList.js +1 -1
- package/dist/css/cherita.css +134 -108
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/obs-list/ObsItem.js +23 -97
- package/dist/esm/components/obs-list/ObsList.js +19 -57
- package/dist/esm/components/var-list/VarItem.js +14 -10
- package/dist/esm/utils/VirtualizedList.js +1 -1
- package/package.json +4 -3
- package/scss/cherita.scss +10 -8
- package/scss/components/accordions.scss +5 -0
- package/scss/components/lists.scss +15 -3
|
@@ -10,6 +10,7 @@ var _material = require("@mui/material");
|
|
|
10
10
|
var _xCharts = require("@mui/x-charts");
|
|
11
11
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
12
12
|
var _reactBootstrap = require("react-bootstrap");
|
|
13
|
+
var _ObsToolbar = require("./ObsToolbar");
|
|
13
14
|
var _constants = require("../../constants/constants");
|
|
14
15
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
15
16
|
var _FilterContext = require("../../context/FilterContext");
|
|
@@ -20,7 +21,6 @@ var _requests = require("../../utils/requests");
|
|
|
20
21
|
var _string = require("../../utils/string");
|
|
21
22
|
var _VirtualizedList = require("../../utils/VirtualizedList");
|
|
22
23
|
var _zarrData = require("../../utils/zarrData");
|
|
23
|
-
var _ObsToolbar = require("./ObsToolbar");
|
|
24
24
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
25
25
|
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); }
|
|
26
26
|
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; }
|
|
@@ -149,7 +149,9 @@ function CategoricalItem(_ref) {
|
|
|
149
149
|
const {
|
|
150
150
|
getColor
|
|
151
151
|
} = (0, _colorHelper.useColor)();
|
|
152
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
152
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
153
|
+
className: "virtualized-list-wrapper"
|
|
154
|
+
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
153
155
|
key: value,
|
|
154
156
|
className: "obs-item"
|
|
155
157
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -237,47 +239,24 @@ function CategoricalItem(_ref) {
|
|
|
237
239
|
},
|
|
238
240
|
colorEncoding: "obs"
|
|
239
241
|
})})`
|
|
240
|
-
}))) : null)));
|
|
242
|
+
}))) : null))));
|
|
241
243
|
}
|
|
242
244
|
function CategoricalObs(_ref2) {
|
|
243
245
|
let {
|
|
244
246
|
obs,
|
|
245
|
-
updateObs,
|
|
246
247
|
toggleAll,
|
|
247
248
|
toggleObs,
|
|
248
|
-
toggleLabel,
|
|
249
|
-
toggleSlice,
|
|
250
|
-
toggleColor,
|
|
251
249
|
showColor = true
|
|
252
250
|
} = _ref2;
|
|
253
251
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
254
252
|
const {
|
|
255
253
|
isSliced
|
|
256
254
|
} = (0, _FilterContext.useFilteredData)();
|
|
257
|
-
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
258
255
|
const totalCounts = _lodash.default.sum(_lodash.default.values(obs.value_counts));
|
|
259
256
|
const min = _lodash.default.min(_lodash.default.values(obs.codes));
|
|
260
257
|
const max = _lodash.default.max(_lodash.default.values(obs.codes));
|
|
261
258
|
const obsHistograms = useObsHistogram(obs);
|
|
262
259
|
const filteredObsData = useFilteredObsData(obs);
|
|
263
|
-
(0, _react.useEffect)(() => {
|
|
264
|
-
if (dataset.selectedObs?.name === obs.name) {
|
|
265
|
-
const selectedObsData = _lodash.default.omit(dataset.selectedObs, ["omit"]);
|
|
266
|
-
const obsData = _lodash.default.omit(obs, ["omit"]);
|
|
267
|
-
if (!_lodash.default.isEqual(selectedObsData, obsData)) {
|
|
268
|
-
// outdated selectedObs
|
|
269
|
-
dispatch({
|
|
270
|
-
type: "select.obs",
|
|
271
|
-
obs: obs
|
|
272
|
-
});
|
|
273
|
-
} else if (!_lodash.default.isEqual(dataset.selectedObs.omit, obs.omit)) {
|
|
274
|
-
updateObs({
|
|
275
|
-
...obs,
|
|
276
|
-
omit: dataset.selectedObs.omit
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}, [dataset.selectedObs, dispatch, obs, obs.name, updateObs]);
|
|
281
260
|
const getDataAtIndex = (0, _react.useCallback)(index => {
|
|
282
261
|
return {
|
|
283
262
|
value: obs.values[index],
|
|
@@ -308,7 +287,7 @@ function CategoricalObs(_ref2) {
|
|
|
308
287
|
variant: "flush",
|
|
309
288
|
className: "cherita-list"
|
|
310
289
|
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
311
|
-
className: "
|
|
290
|
+
className: "unstyled"
|
|
312
291
|
}, /*#__PURE__*/_react.default.createElement(_ObsToolbar.ObsToolbar, {
|
|
313
292
|
item: obs,
|
|
314
293
|
onToggleAllObs: toggleAll
|
|
@@ -320,7 +299,8 @@ function CategoricalObs(_ref2) {
|
|
|
320
299
|
min: min,
|
|
321
300
|
max: max,
|
|
322
301
|
onChange: toggleObs,
|
|
323
|
-
showColor: showColor
|
|
302
|
+
showColor: showColor,
|
|
303
|
+
estimateSize: 42
|
|
324
304
|
}));
|
|
325
305
|
}
|
|
326
306
|
function ObsContinuousStats(_ref3) {
|
|
@@ -340,11 +320,8 @@ function ObsContinuousStats(_ref3) {
|
|
|
340
320
|
} = (0, _requests.useFetch)(ENDPOINT, params);
|
|
341
321
|
|
|
342
322
|
// @TODO: fix width issue when min/max/etc values are too large
|
|
343
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
344
|
-
|
|
345
|
-
className: "cherita-list"
|
|
346
|
-
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
347
|
-
className: "obs-item"
|
|
323
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
324
|
+
className: "obs-statistics"
|
|
348
325
|
}, /*#__PURE__*/_react.default.createElement("h5", {
|
|
349
326
|
className: "mb-2"
|
|
350
327
|
}, "Statistics"), /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -385,72 +362,24 @@ function ObsContinuousStats(_ref3) {
|
|
|
385
362
|
className: "d-flex justify-content-between"
|
|
386
363
|
}, /*#__PURE__*/_react.default.createElement("span", null, "Mean"), " ", /*#__PURE__*/_react.default.createElement("span", null, (0, _string.formatNumerical)(obs.mean, _string.FORMATS.EXPONENTIAL))), /*#__PURE__*/_react.default.createElement("div", {
|
|
387
364
|
className: "d-flex justify-content-between"
|
|
388
|
-
}, /*#__PURE__*/_react.default.createElement("span", null, "Median"), " ", /*#__PURE__*/_react.default.createElement("span", null, (0, _string.formatNumerical)(obs.median, _string.FORMATS.EXPONENTIAL))))))
|
|
365
|
+
}, /*#__PURE__*/_react.default.createElement("span", null, "Median"), " ", /*#__PURE__*/_react.default.createElement("span", null, (0, _string.formatNumerical)(obs.median, _string.FORMATS.EXPONENTIAL))))));
|
|
389
366
|
}
|
|
367
|
+
|
|
368
|
+
// @TODO: add bin controls
|
|
369
|
+
// @TODO: add histogram
|
|
390
370
|
function ContinuousObs(_ref4) {
|
|
391
371
|
let {
|
|
392
372
|
obs,
|
|
393
|
-
updateObs,
|
|
394
373
|
toggleAll,
|
|
395
|
-
toggleObs
|
|
396
|
-
toggleLabel,
|
|
397
|
-
toggleSlice,
|
|
398
|
-
toggleColor
|
|
374
|
+
toggleObs
|
|
399
375
|
} = _ref4;
|
|
400
|
-
const ENDPOINT = "obs/bins";
|
|
401
|
-
const dataset = (0, _DatasetContext.useDataset)();
|
|
402
376
|
const {
|
|
403
377
|
isSliced
|
|
404
378
|
} = (0, _FilterContext.useFilteredData)();
|
|
405
|
-
const
|
|
406
|
-
const
|
|
407
|
-
const
|
|
408
|
-
url: dataset.url,
|
|
409
|
-
obsCol: binnedObs.name,
|
|
410
|
-
thresholds: binnedObs.bins.thresholds,
|
|
411
|
-
nBins: binnedObs.bins.nBins
|
|
412
|
-
};
|
|
413
|
-
const {
|
|
414
|
-
fetchedData,
|
|
415
|
-
isPending,
|
|
416
|
-
serverError
|
|
417
|
-
} = (0, _requests.useFetch)(ENDPOINT, params, {
|
|
418
|
-
refetchOnMount: false
|
|
419
|
-
});
|
|
379
|
+
const totalCounts = _lodash.default.sum(_lodash.default.values(obs.value_counts));
|
|
380
|
+
const min = _lodash.default.min(_lodash.default.values(obs.codes));
|
|
381
|
+
const max = _lodash.default.max(_lodash.default.values(obs.codes));
|
|
420
382
|
const filteredObsData = useFilteredObsData(obs);
|
|
421
|
-
const updatedObs = fetchedData && _lodash.default.isMatch(obs, fetchedData);
|
|
422
|
-
(0, _react.useEffect)(() => {
|
|
423
|
-
// Update ObsList obsCols with bin data
|
|
424
|
-
// after update -> re-render -> obs will already be updated
|
|
425
|
-
if (!isPending && !serverError && !_lodash.default.isMatch(obs, fetchedData)) {
|
|
426
|
-
updateObs({
|
|
427
|
-
...binnedObs,
|
|
428
|
-
...fetchedData,
|
|
429
|
-
codesMap: _lodash.default.invert(fetchedData.codes)
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
}, [binnedObs, fetchedData, isPending, obs, serverError, updateObs]);
|
|
433
|
-
(0, _react.useEffect)(() => {
|
|
434
|
-
if (updatedObs && dataset.selectedObs?.name === obs.name) {
|
|
435
|
-
const selectedObsData = _lodash.default.omit(dataset.selectedObs, ["omit"]);
|
|
436
|
-
const obsData = _lodash.default.omit(obs, ["omit"]);
|
|
437
|
-
if (!_lodash.default.isEqual(selectedObsData, obsData)) {
|
|
438
|
-
// outdated selectedObs
|
|
439
|
-
dispatch({
|
|
440
|
-
type: "select.obs",
|
|
441
|
-
obs: obs
|
|
442
|
-
});
|
|
443
|
-
} else if (!_lodash.default.isEqual(dataset.selectedObs.omit, obs.omit)) {
|
|
444
|
-
updateObs({
|
|
445
|
-
...obs,
|
|
446
|
-
omit: dataset.selectedObs.omit
|
|
447
|
-
});
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
}, [dataset.selectedObs, dispatch, obs, obs.name, updateObs, updatedObs]);
|
|
451
|
-
const totalCounts = _lodash.default.sum(_lodash.default.values(obs?.value_counts));
|
|
452
|
-
const min = _lodash.default.min(_lodash.default.values(obs?.codes));
|
|
453
|
-
const max = _lodash.default.max(_lodash.default.values(obs?.codes));
|
|
454
383
|
const getDataAtIndex = index => {
|
|
455
384
|
return {
|
|
456
385
|
value: obs.values[index],
|
|
@@ -468,17 +397,14 @@ function ContinuousObs(_ref4) {
|
|
|
468
397
|
isSliced: isSliced
|
|
469
398
|
};
|
|
470
399
|
};
|
|
471
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null,
|
|
400
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
472
401
|
variant: "flush",
|
|
473
402
|
className: "cherita-list"
|
|
474
403
|
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
475
|
-
className: "
|
|
404
|
+
className: "unstyled"
|
|
476
405
|
}, /*#__PURE__*/_react.default.createElement(_ObsToolbar.ObsToolbar, {
|
|
477
406
|
item: obs,
|
|
478
|
-
onToggleAllObs: toggleAll
|
|
479
|
-
onToggleLabel: toggleLabel,
|
|
480
|
-
onToggleSlice: toggleSlice,
|
|
481
|
-
onToggleColor: toggleColor
|
|
407
|
+
onToggleAllObs: toggleAll
|
|
482
408
|
})), /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
|
|
483
409
|
getDataAtIndex: getDataAtIndex,
|
|
484
410
|
count: obs.values.length,
|
|
@@ -490,5 +416,5 @@ function ContinuousObs(_ref4) {
|
|
|
490
416
|
showColor: false
|
|
491
417
|
})), /*#__PURE__*/_react.default.createElement(ObsContinuousStats, {
|
|
492
418
|
obs: obs
|
|
493
|
-
}))
|
|
419
|
+
}));
|
|
494
420
|
}
|
|
@@ -15,16 +15,14 @@ var _reactBootstrap = require("react-bootstrap");
|
|
|
15
15
|
var _Accordion = _interopRequireDefault(require("react-bootstrap/Accordion"));
|
|
16
16
|
var _AccordionButton = require("react-bootstrap/AccordionButton");
|
|
17
17
|
var _AccordionContext = _interopRequireDefault(require("react-bootstrap/AccordionContext"));
|
|
18
|
+
var _ObsItem = require("./ObsItem");
|
|
18
19
|
var _constants = require("../../constants/constants");
|
|
19
20
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
20
21
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
21
22
|
var _requests = require("../../utils/requests");
|
|
22
|
-
var _ObsItem = require("./ObsItem");
|
|
23
23
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
24
24
|
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); }
|
|
25
25
|
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
|
-
// @TODO: integrate ObsAccordionToggle with ObsColsList active, expandedItems, etc. to avoid duplication
|
|
27
|
-
|
|
28
26
|
const ObsAccordionToggle = _ref => {
|
|
29
27
|
let {
|
|
30
28
|
children,
|
|
@@ -34,10 +32,10 @@ const ObsAccordionToggle = _ref => {
|
|
|
34
32
|
const {
|
|
35
33
|
activeEventKey
|
|
36
34
|
} = (0, _react.useContext)(_AccordionContext.default);
|
|
35
|
+
const isCurrentEventKey = (activeEventKey || []).includes(eventKey);
|
|
37
36
|
const decoratedOnClick = (0, _AccordionButton.useAccordionButton)(eventKey, () => {
|
|
38
|
-
handleAccordionToggle(eventKey);
|
|
37
|
+
handleAccordionToggle(eventKey, isCurrentEventKey);
|
|
39
38
|
});
|
|
40
|
-
const isCurrentEventKey = Array.isArray(activeEventKey) ? activeEventKey.includes(eventKey) : activeEventKey === eventKey;
|
|
41
39
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
42
40
|
className: `obs-accordion-header ${isCurrentEventKey ? "active" : ""}`,
|
|
43
41
|
onClick: decoratedOnClick
|
|
@@ -59,8 +57,7 @@ function ObsColsList(_ref2) {
|
|
|
59
57
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
60
58
|
const [enableGroups, setEnableGroups] = (0, _react.useState)(enableObsGroups);
|
|
61
59
|
const [obsCols, setObsCols] = (0, _react.useState)(null);
|
|
62
|
-
const [active, setActive] = (0, _react.useState)(dataset.selectedObs?.name);
|
|
63
|
-
const [expandedItems, setExpandedItems] = (0, _react.useState)({});
|
|
60
|
+
const [active, setActive] = (0, _react.useState)([...[dataset.selectedObs?.name]]);
|
|
64
61
|
const [params, setParams] = (0, _react.useState)({
|
|
65
62
|
url: dataset.url
|
|
66
63
|
});
|
|
@@ -113,26 +110,10 @@ function ObsColsList(_ref2) {
|
|
|
113
110
|
}), "name"));
|
|
114
111
|
}
|
|
115
112
|
}, [fetchedData, isPending, obsGroups, serverError, enableGroups]);
|
|
116
|
-
(0, _react.useEffect)(() => {
|
|
117
|
-
if (obsCols && Object.keys(expandedItems).length === 0) {
|
|
118
|
-
const initialExpanded = Object.keys(obsCols).reduce((acc, key) => {
|
|
119
|
-
acc[key] = false;
|
|
120
|
-
return acc;
|
|
121
|
-
}, {});
|
|
122
|
-
if (active && obsCols[active]) {
|
|
123
|
-
initialExpanded[active] = true;
|
|
124
|
-
}
|
|
125
|
-
setExpandedItems(initialExpanded);
|
|
126
|
-
}
|
|
127
|
-
}, [obsCols, expandedItems, active]);
|
|
128
|
-
|
|
129
|
-
// @TODO: fix re-rendering performance issue
|
|
130
113
|
(0, _react.useEffect)(() => {
|
|
131
114
|
if (obsCols) {
|
|
132
|
-
if (obsCols[dataset.selectedObs?.name]) {
|
|
133
|
-
setActive(
|
|
134
|
-
} else {
|
|
135
|
-
setActive(null);
|
|
115
|
+
if (!obsCols[dataset.selectedObs?.name]) {
|
|
116
|
+
setActive([]);
|
|
136
117
|
dispatch({
|
|
137
118
|
type: "select.obs",
|
|
138
119
|
obs: null
|
|
@@ -140,25 +121,12 @@ function ObsColsList(_ref2) {
|
|
|
140
121
|
}
|
|
141
122
|
}
|
|
142
123
|
}, [dataset.selectedObs, dispatch, obsCols]);
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
});
|
|
150
|
-
};
|
|
151
|
-
const handleAccordionToggle = itemName => {
|
|
152
|
-
_lodash.default.delay(
|
|
153
|
-
// to avoid contents of accordion disappearing while closing
|
|
154
|
-
() => {
|
|
155
|
-
setExpandedItems(prev => {
|
|
156
|
-
return {
|
|
157
|
-
...prev,
|
|
158
|
-
[itemName]: !prev[itemName]
|
|
159
|
-
};
|
|
160
|
-
});
|
|
161
|
-
}, expandedItems[itemName] ? 250 : 0);
|
|
124
|
+
const handleAccordionToggle = (itemName, isCurrentEventKey) => {
|
|
125
|
+
if (isCurrentEventKey) {
|
|
126
|
+
_lodash.default.delay(() => setActive(prev => _lodash.default.without(prev, itemName)), 250);
|
|
127
|
+
} else {
|
|
128
|
+
setActive(prev => [...prev, itemName]);
|
|
129
|
+
}
|
|
162
130
|
};
|
|
163
131
|
const toggleAll = item => {
|
|
164
132
|
const omit = item.omit.length ? [] : _lodash.default.map(item.values, v => item.codes[v]);
|
|
@@ -171,7 +139,7 @@ function ObsColsList(_ref2) {
|
|
|
171
139
|
}
|
|
172
140
|
};
|
|
173
141
|
});
|
|
174
|
-
if (
|
|
142
|
+
if (dataset.selectedObs?.name === item.name) {
|
|
175
143
|
dispatch({
|
|
176
144
|
type: "select.obs",
|
|
177
145
|
obs: {
|
|
@@ -231,7 +199,7 @@ function ObsColsList(_ref2) {
|
|
|
231
199
|
}
|
|
232
200
|
};
|
|
233
201
|
});
|
|
234
|
-
if (
|
|
202
|
+
if (dataset.selectedObs?.name === item.name) {
|
|
235
203
|
dispatch({
|
|
236
204
|
type: "select.obs",
|
|
237
205
|
obs: {
|
|
@@ -282,20 +250,18 @@ function ObsColsList(_ref2) {
|
|
|
282
250
|
eventKey: item.name
|
|
283
251
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
284
252
|
className: "obs-accordion-body"
|
|
285
|
-
},
|
|
253
|
+
}, active.includes(item.name) && (item.type === _constants.OBS_TYPES.CATEGORICAL || item.type === _constants.OBS_TYPES.BOOLEAN ? /*#__PURE__*/_react.default.createElement(_ObsItem.CategoricalObs, {
|
|
286
254
|
key: item.name,
|
|
287
255
|
obs: item,
|
|
288
|
-
updateObs: updateObs,
|
|
289
256
|
toggleAll: () => toggleAll(item),
|
|
290
257
|
toggleObs: value => toggleObs(item, value),
|
|
291
258
|
toggleLabel: () => toggleLabel(item),
|
|
292
259
|
toggleSlice: () => toggleSlice(item),
|
|
293
260
|
toggleColor: () => toggleColor(item),
|
|
294
|
-
showColor: showColor
|
|
261
|
+
showColor: showColor && isColorEncoding
|
|
295
262
|
}) : /*#__PURE__*/_react.default.createElement(_ObsItem.ContinuousObs, {
|
|
296
263
|
key: item.name,
|
|
297
264
|
obs: item,
|
|
298
|
-
updateObs: updateObs,
|
|
299
265
|
toggleAll: () => toggleAll(item),
|
|
300
266
|
toggleObs: value => toggleObs(item, value),
|
|
301
267
|
toggleLabel: () => toggleLabel(item),
|
|
@@ -322,11 +288,8 @@ function ObsColsList(_ref2) {
|
|
|
322
288
|
}, groupItems));
|
|
323
289
|
}
|
|
324
290
|
});
|
|
325
|
-
const obsList = enableGroups ? /*#__PURE__*/_react.default.createElement(
|
|
326
|
-
|
|
327
|
-
flush: true,
|
|
328
|
-
alwaysOpen: true
|
|
329
|
-
}, groupList) : _lodash.default.map(_lodash.default.sortBy(obsCols, o => _lodash.default.lowerCase(o.name)), item => obsItem(item));
|
|
291
|
+
const obsList = enableGroups ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, groupList) : _lodash.default.map(_lodash.default.sortBy(obsCols, o => _lodash.default.lowerCase(o.name)), item => obsItem(item));
|
|
292
|
+
const defaultActiveGroup = enableGroups ? `group-${_lodash.default.findKey(obsGroups, g => g.includes(active?.[0]))}` : null;
|
|
330
293
|
if (!serverError) {
|
|
331
294
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
332
295
|
className: "position-relative h-100"
|
|
@@ -334,7 +297,7 @@ function ObsColsList(_ref2) {
|
|
|
334
297
|
variant: "danger"
|
|
335
298
|
}, "No observations found.") : /*#__PURE__*/_react.default.createElement(_Accordion.default, {
|
|
336
299
|
flush: true,
|
|
337
|
-
defaultActiveKey: [active],
|
|
300
|
+
defaultActiveKey: [...active, ...[defaultActiveGroup]],
|
|
338
301
|
alwaysOpen: true,
|
|
339
302
|
className: "obs-accordion"
|
|
340
303
|
}, obsList));
|
|
@@ -61,11 +61,11 @@ function VarHistogram(_ref) {
|
|
|
61
61
|
function VarDiseaseInfoItem(item) {
|
|
62
62
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
63
63
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
|
|
64
|
-
key: item.
|
|
64
|
+
key: item.disease_id,
|
|
65
65
|
className: "feature-disease-info"
|
|
66
|
-
}, /*#__PURE__*/_react.default.createElement("
|
|
66
|
+
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
67
67
|
type: "button",
|
|
68
|
-
className: "btn btn-link",
|
|
68
|
+
className: "btn btn-link disease-link",
|
|
69
69
|
onClick: () => {
|
|
70
70
|
dispatch({
|
|
71
71
|
type: "select.disease",
|
|
@@ -73,25 +73,29 @@ function VarDiseaseInfoItem(item) {
|
|
|
73
73
|
name: item.disease_name
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
|
-
}, item.disease_name), /*#__PURE__*/_react.default.createElement(
|
|
77
|
-
striped: true
|
|
76
|
+
}, item.disease_name), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Table, {
|
|
77
|
+
striped: true,
|
|
78
|
+
size: "sm",
|
|
79
|
+
responsive: true
|
|
78
80
|
}, /*#__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) => {
|
|
79
81
|
if (value !== null && value !== undefined) {
|
|
80
|
-
return /*#__PURE__*/_react.default.createElement("tr",
|
|
82
|
+
return /*#__PURE__*/_react.default.createElement("tr", {
|
|
83
|
+
key: key
|
|
84
|
+
}, /*#__PURE__*/_react.default.createElement("td", null, _lodash.default.upperFirst(key)), /*#__PURE__*/_react.default.createElement("td", null, value));
|
|
81
85
|
}
|
|
82
|
-
}))))
|
|
86
|
+
}))));
|
|
83
87
|
}
|
|
84
88
|
function VarDiseaseInfo(_ref2) {
|
|
85
89
|
let {
|
|
86
90
|
data
|
|
87
91
|
} = _ref2;
|
|
88
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
92
|
+
return /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
|
|
89
93
|
getDataAtIndex: index => data[index],
|
|
90
94
|
count: data.length,
|
|
91
95
|
estimateSize: 140,
|
|
92
|
-
maxHeight: "
|
|
96
|
+
maxHeight: "40vh",
|
|
93
97
|
ItemComponent: VarDiseaseInfoItem
|
|
94
|
-
})
|
|
98
|
+
});
|
|
95
99
|
}
|
|
96
100
|
function SingleSelectionItem(_ref3) {
|
|
97
101
|
let {
|