@haniffalab/cherita-react 1.2.0-dev.2025-04-29.181538d6 → 1.2.0-dev.2025-05-16.4367ee63

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.
Files changed (33) hide show
  1. package/dist/cjs/components/full-page/FullPage.js +19 -26
  2. package/dist/cjs/components/full-page/FullPagePseudospatial.js +20 -26
  3. package/dist/cjs/components/offcanvas/index.js +1 -2
  4. package/dist/cjs/components/scatterplot/Scatterplot.js +8 -2
  5. package/dist/cjs/components/scatterplot/SpatialControls.js +46 -17
  6. package/dist/cjs/components/scatterplot/Toolbox.js +1 -18
  7. package/dist/cjs/components/search-bar/SearchBar.js +152 -57
  8. package/dist/cjs/components/search-bar/SearchInfo.js +175 -0
  9. package/dist/cjs/components/search-bar/SearchResults.js +58 -33
  10. package/dist/cjs/components/var-list/VarItem.js +70 -0
  11. package/dist/cjs/components/var-list/VarList.js +7 -91
  12. package/dist/cjs/components/var-list/VarSet.js +42 -16
  13. package/dist/cjs/utils/Legend.js +14 -8
  14. package/dist/css/cherita.css +60 -10
  15. package/dist/css/cherita.css.map +1 -1
  16. package/dist/esm/components/full-page/FullPage.js +20 -27
  17. package/dist/esm/components/full-page/FullPagePseudospatial.js +21 -27
  18. package/dist/esm/components/offcanvas/index.js +1 -2
  19. package/dist/esm/components/scatterplot/Scatterplot.js +8 -2
  20. package/dist/esm/components/scatterplot/SpatialControls.js +47 -18
  21. package/dist/esm/components/scatterplot/Toolbox.js +1 -18
  22. package/dist/esm/components/search-bar/SearchBar.js +153 -59
  23. package/dist/esm/components/search-bar/SearchInfo.js +165 -0
  24. package/dist/esm/components/search-bar/SearchResults.js +60 -35
  25. package/dist/esm/components/var-list/VarItem.js +70 -2
  26. package/dist/esm/components/var-list/VarList.js +7 -91
  27. package/dist/esm/components/var-list/VarSet.js +44 -18
  28. package/dist/esm/utils/Legend.js +14 -8
  29. package/package.json +2 -2
  30. package/scss/cherita.scss +44 -5
  31. package/scss/components/layouts.scss +20 -13
  32. package/scss/components/lists.scss +11 -0
  33. package/scss/components/plots.scss +3 -5
@@ -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"
@@ -4,11 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.SearchBar = SearchBar;
7
+ exports.SearchModal = SearchModal;
7
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
8
10
  var _Search = _interopRequireDefault(require("@mui/icons-material/Search"));
9
- var _lodash = _interopRequireDefault(require("lodash"));
10
11
  var _reactBootstrap = require("react-bootstrap");
12
+ var _Col = _interopRequireDefault(require("react-bootstrap/Col"));
13
+ var _Container = _interopRequireDefault(require("react-bootstrap/Container"));
14
+ var _Nav = _interopRequireDefault(require("react-bootstrap/Nav"));
15
+ var _Row = _interopRequireDefault(require("react-bootstrap/Row"));
16
+ var _Tab = _interopRequireDefault(require("react-bootstrap/Tab"));
17
+ var _SearchInfo = require("./SearchInfo");
11
18
  var _SearchResults = require("./SearchResults");
19
+ var _constants = require("../../constants/constants");
12
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
21
  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); }
14
22
  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; }
@@ -23,77 +31,164 @@ function onVarSelect(dispatch, item) {
23
31
  });
24
32
  dispatch({
25
33
  type: "set.colorEncoding",
26
- value: "var"
34
+ value: _constants.COLOR_ENCODINGS.VAR
27
35
  });
28
36
  }
29
- function SearchBar(_ref) {
37
+ function addVarSet(dispatch, _ref) {
30
38
  let {
31
- searchVar = true,
32
- searchDiseases = false,
33
- handleSelect = onVarSelect
39
+ name,
40
+ vars
34
41
  } = _ref;
35
- const [showSuggestions, setShowSuggestions] = (0, _react.useState)(false);
36
- const [text, setText] = (0, _react.useState)("");
37
- const inputRef = (0, _react.useRef)(null);
38
- const displayText = [...(searchVar ? ["features"] : []), ...(searchDiseases ? ["diseases"] : [])].join(" and ");
39
- (0, _react.useEffect)(() => {
40
- if (text.length > 0) {
41
- setShowSuggestions(true);
42
+ dispatch({
43
+ type: "add.varSet",
44
+ varSet: {
45
+ name: name,
46
+ vars: vars,
47
+ isSet: true
42
48
  }
43
- }, [text]);
44
-
45
- //@TODO: Abstract styles
46
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, {
49
+ });
50
+ }
51
+ const FEATURE_TYPE = {
52
+ VAR: "var",
53
+ DISEASE: "disease"
54
+ };
55
+ function SearchModal(_ref2) {
56
+ let {
57
+ show,
58
+ handleClose,
59
+ text,
60
+ setText,
61
+ displayText,
62
+ handleSelect = onVarSelect,
63
+ searchVar,
64
+ searchDiseases
65
+ } = _ref2;
66
+ const [tab, setTab] = (0, _react.useState)("var");
67
+ const [selectedResult, setSelectedResult] = (0, _react.useState)({
68
+ var: null,
69
+ disease: null
70
+ });
71
+ const [varResultsLength, setVarResultsLength] = (0, _react.useState)(null);
72
+ const [diseaseResultsLength, setDiseaseResultsLength] = (0, _react.useState)(null);
73
+ return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal, {
74
+ show: show,
75
+ onHide: handleClose,
76
+ size: "xl"
77
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Header, {
78
+ className: "bg-primary"
79
+ }, /*#__PURE__*/_react.default.createElement(_Container.default, {
80
+ className: "gx-0"
81
+ }, /*#__PURE__*/_react.default.createElement(_Row.default, null, /*#__PURE__*/_react.default.createElement(_Col.default, {
82
+ xs: 12
83
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, {
47
84
  onSubmit: e => {
48
85
  e.preventDefault();
49
86
  }
50
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.FormGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Control, {
51
- ref: inputRef,
52
- onFocus: () => {
53
- setShowSuggestions(text.length > 0);
54
- },
55
- onBlur: () => {
56
- _lodash.default.delay(() => {
57
- setShowSuggestions(false);
58
- }, 150);
59
- },
87
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.FormGroup, null, /*#__PURE__*/_react.default.createElement("div", {
88
+ className: "d-flex align-items-center"
89
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup.Text, null, /*#__PURE__*/_react.default.createElement(_Search.default, null)), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Control, {
90
+ autoFocus: true,
60
91
  type: "text",
61
92
  placeholder: "Search " + displayText,
62
93
  value: text,
63
94
  onChange: e => {
64
95
  setText(e.target.value);
65
- },
66
- style: {
67
- paddingLeft: "2.5rem",
68
- borderRadius: "5px"
69
- }
70
- }), /*#__PURE__*/_react.default.createElement("div", {
71
- style: {
72
- position: "absolute",
73
- left: "10px",
74
- top: "50%",
75
- transform: "translateY(-50%)",
76
- pointerEvents: "none",
77
- zIndex: 10
96
+ setSelectedResult({
97
+ var: null,
98
+ disease: null
99
+ });
100
+ setVarResultsLength(null);
101
+ setDiseaseResultsLength(null);
78
102
  }
79
- }, /*#__PURE__*/_react.default.createElement(_Search.default, null))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown, {
80
- show: showSuggestions,
81
- onMouseDown: e => {
103
+ }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
104
+ variant: "light",
105
+ onClick: handleClose
106
+ }, /*#__PURE__*/_react.default.createElement(_Close.default, null)))))))))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, {
107
+ className: "p-0"
108
+ }, /*#__PURE__*/_react.default.createElement(_Container.default, null, /*#__PURE__*/_react.default.createElement(_Row.default, null, /*#__PURE__*/_react.default.createElement(_Col.default, {
109
+ xs: 12,
110
+ md: 8
111
+ }, /*#__PURE__*/_react.default.createElement(_Tab.default.Container, {
112
+ activeKey: tab,
113
+ onSelect: k => setTab(k)
114
+ }, /*#__PURE__*/_react.default.createElement(_Row.default, {
115
+ className: "w-100"
116
+ }, /*#__PURE__*/_react.default.createElement(_Col.default, {
117
+ sm: 3,
118
+ className: "py-3 border-end"
119
+ }, /*#__PURE__*/_react.default.createElement(_Nav.default, {
120
+ variant: "pills",
121
+ className: "flex-column"
122
+ }, searchVar && /*#__PURE__*/_react.default.createElement(_Nav.default.Item, null, /*#__PURE__*/_react.default.createElement(_Nav.default.Link, {
123
+ eventKey: FEATURE_TYPE.VAR
124
+ }, "Genes", " ", !!varResultsLength && `(${varResultsLength})`)), searchDiseases && /*#__PURE__*/_react.default.createElement(_Nav.default.Item, null, /*#__PURE__*/_react.default.createElement(_Nav.default.Link, {
125
+ eventKey: FEATURE_TYPE.DISEASE
126
+ }, "Diseases", " ", !!diseaseResultsLength && `(${diseaseResultsLength})`)))), /*#__PURE__*/_react.default.createElement(_Col.default, {
127
+ sm: 9,
128
+ className: "py-3"
129
+ }, /*#__PURE__*/_react.default.createElement(_Tab.default.Content, null, searchVar && /*#__PURE__*/_react.default.createElement(_Tab.default.Pane, {
130
+ eventKey: FEATURE_TYPE.VAR
131
+ }, /*#__PURE__*/_react.default.createElement(_SearchResults.VarSearchResults, {
132
+ text: text,
133
+ handleSelect: handleSelect,
134
+ selectedResult: selectedResult.var,
135
+ setSelectedResult: item => setSelectedResult(prev => {
136
+ return {
137
+ ...prev,
138
+ var: item
139
+ };
140
+ }),
141
+ setResultsLength: setVarResultsLength
142
+ })), searchDiseases && /*#__PURE__*/_react.default.createElement(_Tab.default.Pane, {
143
+ eventKey: FEATURE_TYPE.DISEASE
144
+ }, /*#__PURE__*/_react.default.createElement(_SearchResults.DiseasesSearchResults, {
145
+ text: text,
146
+ selectedResult: selectedResult.disease,
147
+ setSelectedResult: item => setSelectedResult(prev => {
148
+ return {
149
+ ...prev,
150
+ disease: item
151
+ };
152
+ }),
153
+ setResultsLength: setDiseaseResultsLength
154
+ }))))))), /*#__PURE__*/_react.default.createElement(_Col.default, {
155
+ xs: 12,
156
+ md: 4,
157
+ className: "bg-light p-3 search-modal-info"
158
+ }, selectedResult[tab] ? tab === FEATURE_TYPE.DISEASE ? /*#__PURE__*/_react.default.createElement(_SearchInfo.DiseaseInfo, {
159
+ disease: selectedResult.disease,
160
+ handleSelect: handleSelect,
161
+ addVarSet: addVarSet
162
+ }) : /*#__PURE__*/_react.default.createElement(_SearchInfo.VarInfo, {
163
+ varItem: selectedResult.var
164
+ }) : /*#__PURE__*/_react.default.createElement("div", {
165
+ className: "text-muted"
166
+ }, "No result selected"))))));
167
+ }
168
+ function SearchBar(_ref3) {
169
+ let {
170
+ searchVar = true,
171
+ searchDiseases = false
172
+ } = _ref3;
173
+ const [text, setText] = (0, _react.useState)("");
174
+ const displayText = [...(searchVar ? ["features"] : []), ...(searchDiseases ? ["diseases"] : [])].join(" and ");
175
+ const [showModal, setShowModal] = (0, _react.useState)(false);
176
+ return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, {
177
+ onSubmit: e => {
82
178
  e.preventDefault();
83
- },
84
- onSelect: () => {
85
- inputRef.current.blur();
86
- }
87
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Menu, {
88
- style: {
89
- width: "90%"
90
179
  }
91
- }, searchVar && /*#__PURE__*/_react.default.createElement(_SearchResults.VarSearchResults, {
92
- text: text,
93
- setShowSuggestions: setShowSuggestions,
94
- handleSelect: handleSelect
95
- }), searchVar && searchDiseases && /*#__PURE__*/_react.default.createElement(_reactBootstrap.Dropdown.Divider, null), searchDiseases && /*#__PURE__*/_react.default.createElement(_SearchResults.DiseasesSearchResults, {
180
+ }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.FormGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup.Text, null, /*#__PURE__*/_react.default.createElement(_Search.default, null)), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form.Control, {
181
+ onClick: () => setShowModal(true),
182
+ type: "text",
183
+ placeholder: "Search " + displayText,
184
+ defaultValue: text
185
+ })))), /*#__PURE__*/_react.default.createElement(SearchModal, {
186
+ show: showModal,
96
187
  text: text,
97
- setShowSuggestions: setShowSuggestions
98
- }))))));
188
+ setText: setText,
189
+ displayText: displayText,
190
+ searchVar: searchVar,
191
+ searchDiseases: searchDiseases,
192
+ handleClose: () => setShowModal(false)
193
+ }));
99
194
  }