@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.
@@ -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(_reactBootstrap.ListGroup.Item, {
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: "cherita-list-item-unstyled"
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(_reactBootstrap.ListGroup, {
344
- variant: "flush",
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 dispatch = (0, _DatasetContext.useDatasetDispatch)();
406
- const binnedObs = binContinuous(obs, _lodash.default.min([N_BINS, obs.n_unique]));
407
- const params = {
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, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingLinear, null), !serverError && updatedObs && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
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: "cherita-list-item-unstyled"
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(dataset.selectedObs?.name);
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 updateObs = updatedObs => {
144
- setObsCols(o => {
145
- return {
146
- ...o,
147
- [updatedObs.name]: updatedObs
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 (active === item.name) {
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 (active === item.name) {
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
- }, expandedItems[item.name] && (item.type === _constants.OBS_TYPES.CATEGORICAL || item.type === _constants.OBS_TYPES.BOOLEAN ? /*#__PURE__*/_react.default.createElement(_ObsItem.CategoricalObs, {
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(_Accordion.default, {
326
- className: "obs-group-accordion",
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.disease_name,
64
+ key: item.disease_id,
65
65
  className: "feature-disease-info"
66
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("button", {
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("br", null), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Table, {
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", null, /*#__PURE__*/_react.default.createElement("td", null, key), /*#__PURE__*/_react.default.createElement("td", null, value));
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(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, null, /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
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: "100%",
96
+ maxHeight: "40vh",
93
97
  ItemComponent: VarDiseaseInfoItem
94
- })));
98
+ });
95
99
  }
96
100
  function SingleSelectionItem(_ref3) {
97
101
  let {
@@ -16,7 +16,7 @@ function VirtualizedList(_ref) {
16
16
  ItemComponent,
17
17
  estimateSize = 45,
18
18
  overscan = 25,
19
- maxHeight = "80vh",
19
+ maxHeight = "65vh",
20
20
  ...props
21
21
  } = _ref;
22
22
  const [parentNode, setParentNode] = (0, _react.useState)(null);