@haniffalab/cherita-react 1.2.0-dev.2025-04-28.623a001f → 1.2.0-dev.2025-04-30.0a204a1c

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.
@@ -73,34 +73,14 @@ function FullPage(_ref) {
73
73
  style: {
74
74
  height: appDimensions.height
75
75
  }
76
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Navbar, {
77
- expand: "sm",
78
- bg: "primary",
79
- className: "cherita-navbar"
80
76
  }, /*#__PURE__*/_react.default.createElement("div", {
81
- className: "container-fluid"
82
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Navbar.Toggle, {
83
- "aria-controls": "navbarScroll"
84
- }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Navbar.Collapse, {
85
- id: "navbarScroll"
86
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav, {
87
- className: "me-auto my-0",
88
- navbarScroll: true
89
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Item, {
90
- className: "d-block d-lg-none"
91
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Link, {
92
- onClick: () => setShowObs(true)
93
- }, "Observations")), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Item, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Link, {
94
- onClick: () => setShowVars(true)
95
- }, "Features"))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav, {
96
- className: "d-flex"
97
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Item, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Link, {
98
- onClick: () => setShowControls(true)
99
- }, "Controls")))))), /*#__PURE__*/_react.default.createElement("div", {
100
77
  className: "cherita-app-obs modern-scrollbars border-end h-100"
101
78
  }, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, props)), /*#__PURE__*/_react.default.createElement("div", {
102
79
  className: "cherita-app-canvas flex-grow-1"
103
- }, children), /*#__PURE__*/_react.default.createElement("div", {
80
+ }, children({
81
+ setShowObs,
82
+ setShowVars
83
+ })), /*#__PURE__*/_react.default.createElement("div", {
104
84
  className: "cherita-app-sidebar p-3"
105
85
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card.Body, {
106
86
  className: "d-flex flex-column p-0"
@@ -122,7 +102,8 @@ function FullPage(_ref) {
122
102
  handleClose: () => setShowObs(false)
123
103
  }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasVars, {
124
104
  show: showVars,
125
- handleClose: () => setShowVars(false)
105
+ handleClose: () => setShowVars(false),
106
+ mode: varMode
126
107
  }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
127
108
  show: showControls,
128
109
  handleClose: () => setShowControls(false),
@@ -133,7 +114,19 @@ function FullPage(_ref) {
133
114
  }))));
134
115
  }
135
116
  function FullPageScatterplot(props) {
136
- return /*#__PURE__*/_react.default.createElement(FullPage, props, /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, null));
117
+ return /*#__PURE__*/_react.default.createElement(FullPage, _extends({}, props, {
118
+ varMode: _constants.SELECTION_MODES.SINGLE
119
+ }), _ref2 => {
120
+ let {
121
+ setShowObs,
122
+ setShowVars
123
+ } = _ref2;
124
+ return /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, {
125
+ setShowObs: setShowObs,
126
+ setShowVars: setShowVars,
127
+ isFullscreen: true
128
+ });
129
+ });
137
130
  }
138
131
  function FullPagePlots(props) {
139
132
  return /*#__PURE__*/_react.default.createElement(FullPage, _extends({}, props, {
@@ -21,6 +21,7 @@ var _SearchBar = require("../search-bar/SearchBar");
21
21
  var _VarList = require("../var-list/VarList");
22
22
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
23
23
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
24
+ function _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
25
  function FullPage(_ref) {
25
26
  let {
26
27
  children,
@@ -73,34 +74,14 @@ function FullPage(_ref) {
73
74
  style: {
74
75
  height: appDimensions.height
75
76
  }
76
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Navbar, {
77
- expand: "sm",
78
- bg: "primary",
79
- className: "cherita-navbar"
80
77
  }, /*#__PURE__*/_react.default.createElement("div", {
81
- className: "container-fluid"
82
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Navbar.Toggle, {
83
- "aria-controls": "navbarScroll"
84
- }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Navbar.Collapse, {
85
- id: "navbarScroll"
86
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav, {
87
- className: "me-auto my-0",
88
- navbarScroll: true
89
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Item, {
90
- className: "d-block d-lg-none"
91
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Link, {
92
- onClick: () => setShowObs(true)
93
- }, "Observations")), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Item, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Link, {
94
- onClick: () => setShowVars(true)
95
- }, "Features"))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav, {
96
- className: "d-flex"
97
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Item, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Nav.Link, {
98
- onClick: () => setShowControls(true)
99
- }, "Controls")))))), /*#__PURE__*/_react.default.createElement("div", {
100
78
  className: "cherita-app-obs modern-scrollbars border-end h-100"
101
79
  }, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, props)), /*#__PURE__*/_react.default.createElement("div", {
102
80
  className: "cherita-app-canvas flex-grow-1"
103
- }, children), /*#__PURE__*/_react.default.createElement("div", {
81
+ }, children({
82
+ setShowObs,
83
+ setShowVars
84
+ })), /*#__PURE__*/_react.default.createElement("div", {
104
85
  className: "cherita-app-sidebar p-3"
105
86
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card.Header, {
106
87
  className: "d-flex justify-content-evenly align-items-center"
@@ -141,7 +122,8 @@ function FullPage(_ref) {
141
122
  handleClose: () => setShowObs(false)
142
123
  }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasVars, {
143
124
  show: showVars,
144
- handleClose: () => setShowVars(false)
125
+ handleClose: () => setShowVars(false),
126
+ mode: varMode
145
127
  }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
146
128
  show: showControls,
147
129
  handleClose: () => setShowControls(false),
@@ -157,5 +139,17 @@ function FullPage(_ref) {
157
139
  }))));
158
140
  }
159
141
  function FullPagePseudospatial(props) {
160
- return /*#__PURE__*/_react.default.createElement(FullPage, props, /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, null));
142
+ return /*#__PURE__*/_react.default.createElement(FullPage, _extends({}, props, {
143
+ varMode: _constants.SELECTION_MODES.SINGLE
144
+ }), _ref2 => {
145
+ let {
146
+ setShowObs,
147
+ setShowVars
148
+ } = _ref2;
149
+ return /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, {
150
+ setShowObs: setShowObs,
151
+ setShowVars: setShowVars,
152
+ isFullscreen: true
153
+ });
154
+ });
161
155
  }
@@ -24,8 +24,7 @@ function OffcanvasObs(_ref) {
24
24
  return /*#__PURE__*/_react.default.createElement(_Offcanvas.default, {
25
25
  show: show,
26
26
  onHide: handleClose,
27
- scroll: true,
28
- backdrop: false
27
+ scroll: true
29
28
  }, /*#__PURE__*/_react.default.createElement(_Offcanvas.default.Header, {
30
29
  closeButton: true
31
30
  }, /*#__PURE__*/_react.default.createElement(_Offcanvas.default.Title, null, "Categories")), /*#__PURE__*/_react.default.createElement(_Offcanvas.default.Body, {
@@ -39,7 +39,10 @@ const INITIAL_VIEW_STATE = {
39
39
  };
40
40
  function Scatterplot(_ref) {
41
41
  let {
42
- radius = 30
42
+ radius = 30,
43
+ setShowObs,
44
+ setShowVars,
45
+ isFullscreen = false
43
46
  } = _ref;
44
47
  const dataset = (0, _DatasetContext.useDataset)();
45
48
  const {
@@ -382,7 +385,10 @@ function Scatterplot(_ref) {
382
385
  decreaseZoom: () => setViewState(v => ({
383
386
  ...v,
384
387
  zoom: v.zoom - 1
385
- }))
388
+ })),
389
+ setShowObs: setShowObs,
390
+ setShowVars: setShowVars,
391
+ isFullscreen: isFullscreen
386
392
  }), /*#__PURE__*/_react.default.createElement("div", {
387
393
  className: "cherita-spatial-footer"
388
394
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -8,7 +8,9 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
9
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
10
  var _iconsMaterial = require("@mui/icons-material");
11
+ var _useMediaQuery = _interopRequireDefault(require("@mui/material/useMediaQuery"));
11
12
  var _editModes = require("@nebula.gl/edit-modes");
13
+ var _reactBootstrap = require("react-bootstrap");
12
14
  var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
13
15
  var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
14
16
  var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
@@ -27,13 +29,20 @@ function SpatialControls(_ref) {
27
29
  selectedFeatureIndexes,
28
30
  resetBounds,
29
31
  increaseZoom,
30
- decreaseZoom
32
+ decreaseZoom,
33
+ setShowObs,
34
+ setShowVars,
35
+ isFullscreen
31
36
  } = _ref;
32
37
  const dataset = (0, _DatasetContext.useDataset)();
33
38
  const dispatch = (0, _DatasetContext.useDatasetDispatch)();
34
39
  const [showControls, setShowControls] = (0, _react.useState)(false);
35
40
  const handleCloseControls = () => setShowControls(false);
36
41
  const handleShowControls = () => setShowControls(true);
42
+ const LgBreakpoint = (0, _useMediaQuery.default)("(max-width: 991.98px)");
43
+ const XlBreakpoint = (0, _useMediaQuery.default)("(max-width: 1199.98px)");
44
+ const showObsBtn = isFullscreen ? LgBreakpoint : true;
45
+ const showVarsBtn = isFullscreen ? XlBreakpoint : true;
37
46
  const onSelect = (eventKey, event) => {
38
47
  switch (eventKey) {
39
48
  case "DrawPolygonMode":
@@ -85,10 +94,37 @@ function SpatialControls(_ref) {
85
94
  })));
86
95
  return /*#__PURE__*/_react.default.createElement("div", {
87
96
  className: "cherita-spatial-controls"
88
- }, /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
97
+ }, (showObsBtn || showVarsBtn) && /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
89
98
  vertical: true,
90
99
  className: "w-100 mb-1"
100
+ }, showObsBtn && /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
101
+ placement: "right",
102
+ overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
103
+ id: "tooltip-obs"
104
+ }, "Browse categories")
91
105
  }, /*#__PURE__*/_react.default.createElement(_Button.default, {
106
+ onClick: () => setShowObs(true)
107
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
108
+ icon: _freeSolidSvgIcons.faList
109
+ }))), showVarsBtn && /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
110
+ placement: "right",
111
+ overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
112
+ id: "tooltip-vars"
113
+ }, "Search features")
114
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
115
+ onClick: () => setShowVars(true)
116
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
117
+ icon: _freeSolidSvgIcons.faSearch
118
+ })))), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
119
+ vertical: true,
120
+ className: "w-100"
121
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
122
+ onClick: () => setMode(() => _editModes.ViewMode),
123
+ title: "Set dragging mode",
124
+ active: mode === _editModes.ViewMode
125
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
126
+ icon: _freeSolidSvgIcons.faHand
127
+ })), /*#__PURE__*/_react.default.createElement(_Button.default, {
92
128
  onClick: increaseZoom,
93
129
  title: "Increase zoom"
94
130
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
@@ -98,24 +134,13 @@ function SpatialControls(_ref) {
98
134
  title: "Decrease zoom"
99
135
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
100
136
  icon: _freeSolidSvgIcons.faMinus
101
- })), /*#__PURE__*/_react.default.createElement(_Button.default, {
137
+ })), /*#__PURE__*/_react.default.createElement("div", {
138
+ className: "border-bottom"
139
+ }), " ", /*#__PURE__*/_react.default.createElement(_Button.default, {
102
140
  onClick: resetBounds,
103
141
  title: "Reset zoom and center"
104
142
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
105
143
  icon: _freeSolidSvgIcons.faCrosshairs
106
- })), /*#__PURE__*/_react.default.createElement(_Button.default, {
107
- onClick: handleShowControls
108
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
109
- icon: _freeSolidSvgIcons.faSliders
110
- }))), /*#__PURE__*/_react.default.createElement(_ButtonGroup.default, {
111
- vertical: true,
112
- className: "w-100"
113
- }, /*#__PURE__*/_react.default.createElement(_Button.default, {
114
- onClick: () => setMode(() => _editModes.ViewMode),
115
- title: "Set dragging mode",
116
- active: mode === _editModes.ViewMode
117
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
118
- icon: _freeSolidSvgIcons.faHand
119
144
  })), /*#__PURE__*/_react.default.createElement(_Dropdown.default, {
120
145
  as: _ButtonGroup.default,
121
146
  className: "caret-off",
@@ -141,7 +166,11 @@ function SpatialControls(_ref) {
141
166
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
142
167
  icon: _freeSolidSvgIcons.faTrash,
143
168
  className: "nav-icon"
144
- }), "Delete polygons"))), !!features?.features?.length && polygonControls), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
169
+ }), "Delete polygons"))), !!features?.features?.length && polygonControls, /*#__PURE__*/_react.default.createElement(_Button.default, {
170
+ onClick: handleShowControls
171
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
172
+ icon: _freeSolidSvgIcons.faSliders
173
+ }))), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
145
174
  show: showControls,
146
175
  handleClose: handleCloseControls,
147
176
  Controls: _ScatterplotControls.ScatterplotControls
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Toolbox = Toolbox;
7
7
  var _react = _interopRequireDefault(require("react"));
8
- var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
- var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
8
  var _reactBootstrap = require("react-bootstrap");
11
9
  var _string = require("../../utils/string");
12
10
  var _ObsmList = require("../obsm-list/ObsmList");
@@ -19,22 +17,7 @@ function Toolbox(_ref) {
19
17
  } = _ref;
20
18
  return /*#__PURE__*/_react.default.createElement("div", {
21
19
  className: "cherita-toolbox"
22
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_ObsmList.ObsmKeysList, null), mode && /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
23
- placement: "top",
24
- overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
25
- id: "tooltip-dropped-mode"
26
- }, "The color scale is currently set to ", mode)
27
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
28
- size: "sm",
29
- variant: "primary",
30
- style: {
31
- cursor: "default"
32
- },
33
- "aria-disabled": "true"
34
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
35
- icon: _freeSolidSvgIcons.faDroplet,
36
- className: "me-1"
37
- }), " ", mode)), (mode || !isNaN(obsLength)) && (mode !== null && !isNaN(slicedLength) && slicedLength !== obsLength ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
20
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_ObsmList.ObsmKeysList, null), (mode || !isNaN(obsLength)) && (mode !== null && !isNaN(slicedLength) && slicedLength !== obsLength ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.OverlayTrigger, {
38
21
  placement: "top",
39
22
  overlay: /*#__PURE__*/_react.default.createElement(_reactBootstrap.Tooltip, {
40
23
  id: "tooltip-dropped-mode"
@@ -10,6 +10,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
10
10
  var _reactBootstrap = require("react-bootstrap");
11
11
  var _DatasetContext = require("../../context/DatasetContext");
12
12
  var _search = require("../../utils/search");
13
+ var _VirtualizedList = require("../../utils/VirtualizedList");
13
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
15
  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); }
15
16
  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; }
@@ -56,24 +57,28 @@ function VarSearchResults(_ref) {
56
57
  setShowSuggestions(true);
57
58
  }
58
59
  }, [fetchedData, isPending, serverError, setShowSuggestions]);
59
- const suggestionsList = (0, _react.useMemo)(() => {
60
- return deferredData?.map(item => {
61
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
62
- key: item.name,
63
- as: "button",
64
- disabled: isStale,
65
- onClick: () => {
66
- handleSelect(dispatch, item);
67
- _lodash.default.delay(() => {
68
- setShowSuggestions(false);
69
- }, 150);
70
- }
71
- }, item.name);
72
- });
73
- }, [deferredData, dispatch, handleSelect, isStale, setShowSuggestions]);
60
+ const getDataAtIndex = index => deferredData[index];
61
+ const ItemComponent = item => /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
62
+ key: item.name,
63
+ as: "button",
64
+ disabled: isStale,
65
+ onClick: () => {
66
+ handleSelect(dispatch, item);
67
+ _lodash.default.delay(() => {
68
+ setShowSuggestions(false);
69
+ }, 150);
70
+ }
71
+ }, item.name);
74
72
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Features"), /*#__PURE__*/_react.default.createElement("div", {
75
73
  className: "search-results"
76
- }, deferredData?.length ? suggestionsList : /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
74
+ }, deferredData?.length ? /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
75
+ getDataAtIndex: getDataAtIndex,
76
+ count: deferredData.length,
77
+ ItemComponent: ItemComponent,
78
+ overscan: 500,
79
+ estimateSize: 32,
80
+ maxHeight: "25vh"
81
+ }) : /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
77
82
  key: "empty",
78
83
  as: "button",
79
84
  disabled: true
@@ -120,28 +125,32 @@ function DiseasesSearchResults(_ref2) {
120
125
  setShowSuggestions(true);
121
126
  }
122
127
  }, [fetchedData, isPending, serverError, setShowSuggestions]);
123
- const suggestionsList = (0, _react.useMemo)(() => {
124
- return deferredData?.map(item => {
125
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
126
- key: item.id,
127
- as: "button",
128
- disabled: isStale,
129
- onClick: () => {
130
- dispatch({
131
- type: "select.disease",
132
- id: item.disease_id,
133
- name: item.disease_name
134
- });
135
- _lodash.default.delay(() => {
136
- setShowSuggestions(false);
137
- }, 150);
138
- }
139
- }, item.disease_name);
140
- });
141
- }, [deferredData, dispatch, isStale, setShowSuggestions]);
128
+ const getDataAtIndex = index => deferredData[index];
129
+ const ItemComponent = item => /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
130
+ key: item.name,
131
+ as: "button",
132
+ disabled: isStale,
133
+ onClick: () => {
134
+ dispatch({
135
+ type: "select.disease",
136
+ id: item.disease_id,
137
+ name: item.disease_name
138
+ });
139
+ _lodash.default.delay(() => {
140
+ setShowSuggestions(false);
141
+ }, 150);
142
+ }
143
+ }, item.disease_name);
142
144
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Header, null, "Diseases"), /*#__PURE__*/_react.default.createElement("div", {
143
145
  className: "search-results"
144
- }, deferredData?.length ? suggestionsList : /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
146
+ }, deferredData?.length ? /*#__PURE__*/_react.default.createElement(_VirtualizedList.VirtualizedList, {
147
+ getDataAtIndex: getDataAtIndex,
148
+ count: deferredData.length,
149
+ ItemComponent: ItemComponent,
150
+ overscan: 250,
151
+ estimateSize: 32,
152
+ maxHeight: "25vh"
153
+ }) : /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Item, {
145
154
  key: "empty",
146
155
  as: "button",
147
156
  disabled: true
@@ -5,11 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Legend = Legend;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
+ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
+ var _reactFontawesome = require("@fortawesome/react-fontawesome");
8
10
  var _lodash = _interopRequireDefault(require("lodash"));
9
- var _string = require("./string");
10
11
  var _constants = require("../constants/constants");
11
12
  var _DatasetContext = require("../context/DatasetContext");
12
13
  var _colorHelper = require("../helpers/color-helper");
14
+ var _string = require("./string");
13
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
16
  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); }
15
17
  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; }
@@ -48,20 +50,24 @@ function Legend(_ref) {
48
50
  className: "gradient"
49
51
  }, /*#__PURE__*/_react.default.createElement("p", {
50
52
  className: "small m-0 p-0"
51
- }, (dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? dataset.selectedVar?.name : dataset.selectedObs?.name) + addText), spanList, /*#__PURE__*/_react.default.createElement("span", {
53
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
54
+ icon: _freeSolidSvgIcons.faDroplet,
55
+ className: "me-1"
56
+ }), (dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? dataset.selectedVar?.name : dataset.selectedObs?.name) + addText), spanList, /*#__PURE__*/_react.default.createElement("span", {
52
57
  className: "domain-min"
53
58
  }, (0, _string.formatNumerical)(min, _string.FORMATS.EXPONENTIAL)), /*#__PURE__*/_react.default.createElement("span", {
54
59
  className: "domain-med"
55
60
  }, (0, _string.formatNumerical)((min + max) * 0.5, _string.FORMATS.EXPONENTIAL)), /*#__PURE__*/_react.default.createElement("span", {
56
61
  className: "domain-max"
57
62
  }, (0, _string.formatNumerical)(max, _string.FORMATS.EXPONENTIAL))));
58
- } else {
63
+ } else if (dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs) {
59
64
  return /*#__PURE__*/_react.default.createElement("div", {
60
- className: "cherita-legend"
61
- }, /*#__PURE__*/_react.default.createElement("div", {
62
- className: "gradient"
65
+ className: "cherita-legend categorical"
63
66
  }, /*#__PURE__*/_react.default.createElement("p", {
64
- className: "small m-0 p-0"
65
- }, dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && dataset.selectedObs ? dataset.selectedObs.name : "")));
67
+ className: "legend-text text-end m-0 p-0"
68
+ }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
69
+ icon: _freeSolidSvgIcons.faDroplet,
70
+ className: "me-2"
71
+ }), dataset.selectedObs.name));
66
72
  }
67
73
  }
@@ -12027,12 +12027,11 @@ textarea.form-control-lg {
12027
12027
  left: 1rem;
12028
12028
  width: 3rem;
12029
12029
  }
12030
-
12031
- @media (max-width: 1199.98px) {
12032
- .cherita-spatial-controls {
12033
- top: 5rem;
12034
- }
12030
+ .cherita-spatial-controls .btn {
12031
+ padding-left: 0;
12032
+ padding-right: 0;
12035
12033
  }
12034
+
12036
12035
  .modern-scrollbars::-webkit-scrollbar {
12037
12036
  width: 20px;
12038
12037
  }
@@ -12111,15 +12110,13 @@ textarea.form-control-lg {
12111
12110
  .cherita-spatial-footer {
12112
12111
  position: absolute;
12113
12112
  z-index: 10;
12114
- bottom: 1rem;
12113
+ bottom: 0;
12115
12114
  display: flex;
12116
12115
  justify-content: space-between;
12117
- align-items: flex-end;
12116
+ align-items: end;
12118
12117
  flex-wrap: wrap;
12119
12118
  width: 100%;
12120
- padding-left: 1rem;
12121
- padding-right: 1rem;
12122
- padding-bottom: 1rem;
12119
+ padding: 1rem;
12123
12120
  pointer-events: none;
12124
12121
  }
12125
12122
  .cherita-spatial-footer > * {
@@ -12142,8 +12139,41 @@ textarea.form-control-lg {
12142
12139
  .cherita-legend {
12143
12140
  order: 2;
12144
12141
  width: 12rem;
12142
+ color: #333;
12143
+ }
12144
+
12145
+ .cherita-legend.categorical {
12146
+ display: flex;
12147
+ align-items: center;
12148
+ justify-content: flex-end;
12149
+ padding-left: 1rem;
12150
+ flex: 1;
12151
+ overflow: hidden;
12152
+ white-space: nowrap;
12153
+ text-overflow: ellipsis;
12154
+ pointer-events: auto;
12155
+ }
12156
+ .cherita-legend.categorical .legend-text {
12157
+ overflow: hidden;
12158
+ text-overflow: ellipsis;
12159
+ white-space: nowrap;
12160
+ max-width: 100%;
12161
+ display: inline-block;
12145
12162
  }
12146
12163
 
12164
+ @media (max-width: 600px) {
12165
+ .cherita-spatial-footer {
12166
+ flex-direction: column;
12167
+ align-items: center;
12168
+ justify-content: center;
12169
+ }
12170
+ .cherita-legend {
12171
+ flex-direction: column;
12172
+ align-items: center;
12173
+ margin-top: 1rem;
12174
+ padding: 0;
12175
+ }
12176
+ }
12147
12177
  .cherita-accordion-active .accordion-button {
12148
12178
  background-color: #cce3ed;
12149
12179
  }
@@ -12370,10 +12400,6 @@ textarea.form-control-lg {
12370
12400
  left: 1rem;
12371
12401
  }
12372
12402
 
12373
- .search-results {
12374
- max-height: 25vh;
12375
- overflow-y: scroll;
12376
- }
12377
12403
  .search-results .dropdown-item {
12378
12404
  white-space: normal;
12379
12405
  overflow-wrap: break-word;