@haniffalab/cherita-react 1.3.0 → 1.3.1-dev.2025-10-29.6de4119f

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 (137) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/controls/Controls.js +38 -30
  3. package/dist/cjs/components/dotplot/Dotplot.js +85 -57
  4. package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
  5. package/dist/cjs/components/full-page/FullPage.js +167 -114
  6. package/dist/cjs/components/full-page/PlotAlert.js +45 -0
  7. package/dist/cjs/components/full-page/PlotTypeSelector.js +102 -0
  8. package/dist/cjs/components/heatmap/Heatmap.js +83 -53
  9. package/dist/cjs/components/heatmap/HeatmapControls.js +6 -3
  10. package/dist/cjs/components/icons/DotPlotIcon.js +64 -0
  11. package/dist/cjs/components/icons/HeatmapIcon.js +45 -0
  12. package/dist/cjs/components/icons/MatrixPlotIcon.1.js +57 -0
  13. package/dist/cjs/components/icons/MatrixPlotIcon.js +59 -0
  14. package/dist/cjs/components/icons/ScatterplotIcon.1.js +164 -0
  15. package/dist/cjs/components/icons/ScatterplotIcon.js +144 -0
  16. package/dist/cjs/components/icons/ViolinPlotIcon.js +42 -0
  17. package/dist/cjs/components/matrixplot/Matrixplot.js +83 -54
  18. package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
  19. package/dist/cjs/components/obs-list/ObsItem.js +305 -216
  20. package/dist/cjs/components/obs-list/ObsList.js +164 -128
  21. package/dist/cjs/components/obs-list/ObsToolbar.js +2 -3
  22. package/dist/cjs/components/obsm-list/ObsmList.js +67 -28
  23. package/dist/cjs/components/offcanvas/index.js +62 -27
  24. package/dist/cjs/components/pseudospatial/Pseudospatial.js +132 -76
  25. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +122 -74
  26. package/dist/cjs/components/scatterplot/Scatterplot.js +223 -175
  27. package/dist/cjs/components/scatterplot/ScatterplotControls.js +45 -31
  28. package/dist/cjs/components/scatterplot/SpatialControls.js +143 -116
  29. package/dist/cjs/components/scatterplot/Toolbox.js +41 -30
  30. package/dist/cjs/components/search-bar/SearchBar.js +176 -120
  31. package/dist/cjs/components/search-bar/SearchInfo.js +79 -85
  32. package/dist/cjs/components/search-bar/SearchResults.js +93 -71
  33. package/dist/cjs/components/toolbar/Toolbar.js +111 -0
  34. package/dist/cjs/components/var-list/VarItem.js +131 -103
  35. package/dist/cjs/components/var-list/VarList.js +96 -74
  36. package/dist/cjs/components/var-list/VarListToolbar.js +59 -54
  37. package/dist/cjs/components/var-list/VarSet.js +126 -108
  38. package/dist/cjs/components/violin/Violin.js +124 -81
  39. package/dist/cjs/components/violin/ViolinControls.js +8 -5
  40. package/dist/cjs/constants/colorscales.js +19 -19
  41. package/dist/cjs/constants/constants.js +54 -39
  42. package/dist/cjs/context/DatasetContext.js +27 -17
  43. package/dist/cjs/context/FilterContext.js +11 -9
  44. package/dist/cjs/context/SettingsContext.js +339 -125
  45. package/dist/cjs/context/ZarrDataContext.js +6 -5
  46. package/dist/cjs/helpers/color-helper.js +2 -2
  47. package/dist/cjs/helpers/map-helper.js +2 -1
  48. package/dist/cjs/helpers/zarr-helper.js +3 -3
  49. package/dist/cjs/index.js +15 -21
  50. package/dist/cjs/utils/Filter.js +16 -11
  51. package/dist/cjs/utils/Histogram.js +35 -33
  52. package/dist/cjs/utils/ImageViewer.js +11 -8
  53. package/dist/cjs/utils/Legend.js +37 -30
  54. package/dist/cjs/utils/LoadingIndicators.js +15 -13
  55. package/dist/cjs/utils/Resolver.js +213 -0
  56. package/dist/cjs/utils/Skeleton.js +10 -10
  57. package/dist/cjs/utils/StyledTooltip.js +44 -0
  58. package/dist/cjs/utils/VirtualizedList.js +36 -29
  59. package/dist/cjs/utils/errors.js +15 -15
  60. package/dist/cjs/utils/requests.js +21 -9
  61. package/dist/cjs/utils/search.js +4 -4
  62. package/dist/cjs/utils/string.js +6 -6
  63. package/dist/cjs/utils/zarrData.js +20 -21
  64. package/dist/css/cherita.css +188 -65
  65. package/dist/css/cherita.css.map +1 -1
  66. package/dist/esm/components/controls/Controls.js +43 -35
  67. package/dist/esm/components/dotplot/Dotplot.js +93 -64
  68. package/dist/esm/components/dotplot/DotplotControls.js +106 -85
  69. package/dist/esm/components/full-page/FullPage.js +180 -124
  70. package/dist/esm/components/full-page/PlotAlert.js +39 -0
  71. package/dist/esm/components/full-page/PlotTypeSelector.js +95 -0
  72. package/dist/esm/components/heatmap/Heatmap.js +91 -60
  73. package/dist/esm/components/heatmap/HeatmapControls.js +8 -4
  74. package/dist/esm/components/icons/DotPlotIcon.js +58 -0
  75. package/dist/esm/components/icons/HeatmapIcon.js +39 -0
  76. package/dist/esm/components/icons/MatrixPlotIcon.1.js +51 -0
  77. package/dist/esm/components/icons/MatrixPlotIcon.js +53 -0
  78. package/dist/esm/components/icons/ScatterplotIcon.1.js +158 -0
  79. package/dist/esm/components/icons/ScatterplotIcon.js +138 -0
  80. package/dist/esm/components/icons/ViolinPlotIcon.js +36 -0
  81. package/dist/esm/components/matrixplot/Matrixplot.js +91 -61
  82. package/dist/esm/components/matrixplot/MatrixplotControls.js +10 -6
  83. package/dist/esm/components/obs-list/ObsItem.js +320 -228
  84. package/dist/esm/components/obs-list/ObsList.js +179 -142
  85. package/dist/esm/components/obs-list/ObsToolbar.js +3 -3
  86. package/dist/esm/components/obsm-list/ObsmList.js +71 -32
  87. package/dist/esm/components/offcanvas/index.js +68 -33
  88. package/dist/esm/components/pseudospatial/Pseudospatial.js +145 -88
  89. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +127 -78
  90. package/dist/esm/components/scatterplot/Scatterplot.js +243 -194
  91. package/dist/esm/components/scatterplot/ScatterplotControls.js +50 -35
  92. package/dist/esm/components/scatterplot/SpatialControls.js +155 -127
  93. package/dist/esm/components/scatterplot/Toolbox.js +44 -32
  94. package/dist/esm/components/search-bar/SearchBar.js +187 -130
  95. package/dist/esm/components/search-bar/SearchInfo.js +86 -91
  96. package/dist/esm/components/search-bar/SearchResults.js +100 -77
  97. package/dist/esm/components/toolbar/Toolbar.js +101 -0
  98. package/dist/esm/components/var-list/VarItem.js +142 -113
  99. package/dist/esm/components/var-list/VarList.js +108 -88
  100. package/dist/esm/components/var-list/VarListToolbar.js +64 -58
  101. package/dist/esm/components/var-list/VarSet.js +134 -115
  102. package/dist/esm/components/violin/Violin.js +135 -91
  103. package/dist/esm/components/violin/ViolinControls.js +10 -6
  104. package/dist/esm/constants/colorscales.js +19 -19
  105. package/dist/esm/constants/constants.js +53 -38
  106. package/dist/esm/context/DatasetContext.js +34 -23
  107. package/dist/esm/context/FilterContext.js +11 -8
  108. package/dist/esm/context/SettingsContext.js +341 -126
  109. package/dist/esm/context/ZarrDataContext.js +8 -6
  110. package/dist/esm/helpers/color-helper.js +5 -5
  111. package/dist/esm/helpers/map-helper.js +4 -3
  112. package/dist/esm/helpers/zarr-helper.js +6 -6
  113. package/dist/esm/index.js +22 -22
  114. package/dist/esm/utils/Filter.js +22 -17
  115. package/dist/esm/utils/Histogram.js +39 -37
  116. package/dist/esm/utils/ImageViewer.js +12 -8
  117. package/dist/esm/utils/Legend.js +44 -36
  118. package/dist/esm/utils/LoadingIndicators.js +16 -13
  119. package/dist/esm/utils/Resolver.js +201 -0
  120. package/dist/esm/utils/Skeleton.js +11 -10
  121. package/dist/esm/utils/StyledTooltip.js +38 -0
  122. package/dist/esm/utils/VirtualizedList.js +37 -29
  123. package/dist/esm/utils/errors.js +15 -15
  124. package/dist/esm/utils/requests.js +24 -12
  125. package/dist/esm/utils/search.js +7 -7
  126. package/dist/esm/utils/string.js +7 -7
  127. package/dist/esm/utils/zarrData.js +27 -28
  128. package/package.json +24 -10
  129. package/scss/cherita-bootstrap.scss +2 -2
  130. package/scss/cherita.scss +65 -17
  131. package/scss/components/accordions.scss +15 -2
  132. package/scss/components/layouts.scss +116 -30
  133. package/scss/components/lists.scss +16 -5
  134. package/scss/components/plotly.scss +40 -23
  135. package/scss/components/plots.scss +14 -1
  136. package/dist/cjs/components/full-page/FullPagePseudospatial.js +0 -157
  137. package/dist/esm/components/full-page/FullPagePseudospatial.js +0 -149
@@ -5,9 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.SearchBar = SearchBar;
7
7
  exports.SearchModal = SearchModal;
8
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = require("react");
9
9
  var _Close = _interopRequireDefault(require("@mui/icons-material/Close"));
10
10
  var _Search = _interopRequireDefault(require("@mui/icons-material/Search"));
11
+ var _lodash = _interopRequireDefault(require("lodash"));
11
12
  var _reactBootstrap = require("react-bootstrap");
12
13
  var _Col = _interopRequireDefault(require("react-bootstrap/Col"));
13
14
  var _Container = _interopRequireDefault(require("react-bootstrap/Container"));
@@ -17,26 +18,34 @@ var _Tab = _interopRequireDefault(require("react-bootstrap/Tab"));
17
18
  var _SearchInfo = require("./SearchInfo");
18
19
  var _SearchResults = require("./SearchResults");
19
20
  var _constants = require("../../constants/constants");
21
+ var _jsxRuntime = require("react/jsx-runtime");
20
22
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
22
23
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
24
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
25
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
25
26
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
26
27
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
27
- function onVarSelect(dispatch, item) {
28
+ const select = (dispatch, item) => {
28
29
  dispatch({
29
- type: "select.var",
30
+ type: 'select.var',
30
31
  var: item
31
32
  });
32
33
  dispatch({
33
- type: "select.multivar",
34
+ type: 'select.multivar',
34
35
  var: item
35
36
  });
36
37
  dispatch({
37
- type: "set.colorEncoding",
38
+ type: 'set.colorEncoding',
38
39
  value: _constants.COLOR_ENCODINGS.VAR
39
40
  });
41
+ };
42
+ const debounceSelect = _lodash.default.debounce(select, 500);
43
+ function onVarSelect(dispatch, item) {
44
+ dispatch({
45
+ type: 'add.var',
46
+ var: item
47
+ });
48
+ debounceSelect(dispatch, item);
40
49
  }
41
50
  function addVarSet(dispatch, _ref) {
42
51
  let {
@@ -44,7 +53,7 @@ function addVarSet(dispatch, _ref) {
44
53
  vars
45
54
  } = _ref;
46
55
  dispatch({
47
- type: "add.var",
56
+ type: 'add.var',
48
57
  var: {
49
58
  name: name,
50
59
  vars: vars,
@@ -53,8 +62,8 @@ function addVarSet(dispatch, _ref) {
53
62
  });
54
63
  }
55
64
  const FEATURE_TYPE = {
56
- VAR: "var",
57
- DISEASE: "disease"
65
+ VAR: 'var',
66
+ DISEASE: 'disease'
58
67
  };
59
68
  function SearchModal(_ref2) {
60
69
  let {
@@ -67,130 +76,177 @@ function SearchModal(_ref2) {
67
76
  searchVar,
68
77
  searchDiseases
69
78
  } = _ref2;
70
- const [tab, setTab] = (0, _react.useState)("var");
79
+ const [tab, setTab] = (0, _react.useState)('var');
71
80
  const [selectedResult, setSelectedResult] = (0, _react.useState)({
72
81
  var: null,
73
82
  disease: null
74
83
  });
75
84
  const [varResultsLength, setVarResultsLength] = (0, _react.useState)(null);
76
85
  const [diseaseResultsLength, setDiseaseResultsLength] = (0, _react.useState)(null);
77
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal, {
86
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Modal, {
78
87
  show: show,
79
88
  onHide: handleClose,
80
- size: "xl"
81
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Header, {
82
- className: "bg-primary"
83
- }, /*#__PURE__*/_react.default.createElement(_Container.default, {
84
- className: "gx-0"
85
- }, /*#__PURE__*/_react.default.createElement(_Row.default, null, /*#__PURE__*/_react.default.createElement(_Col.default, {
86
- xs: 12
87
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, {
88
- onSubmit: e => {
89
- e.preventDefault();
90
- }
91
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.FormGroup, null, /*#__PURE__*/_react.default.createElement("div", {
92
- className: "d-flex align-items-center"
93
- }, /*#__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, {
94
- autoFocus: true,
95
- type: "text",
96
- placeholder: "Search " + displayText,
97
- value: text,
98
- onChange: e => {
99
- setText(e.target.value);
100
- setSelectedResult({
101
- var: null,
102
- disease: null
103
- });
104
- setVarResultsLength(null);
105
- setDiseaseResultsLength(null);
106
- }
107
- }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
108
- variant: "light",
109
- onClick: handleClose
110
- }, /*#__PURE__*/_react.default.createElement(_Close.default, null)))))))))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, {
111
- className: "p-0"
112
- }, /*#__PURE__*/_react.default.createElement(_Container.default, null, /*#__PURE__*/_react.default.createElement(_Row.default, null, /*#__PURE__*/_react.default.createElement(_Col.default, {
113
- xs: 12,
114
- md: 8
115
- }, /*#__PURE__*/_react.default.createElement(_Tab.default.Container, {
116
- activeKey: tab,
117
- onSelect: k => setTab(k)
118
- }, /*#__PURE__*/_react.default.createElement(_Row.default, {
119
- className: "w-100"
120
- }, /*#__PURE__*/_react.default.createElement(_Col.default, {
121
- sm: 3,
122
- className: "py-3 border-end"
123
- }, /*#__PURE__*/_react.default.createElement(_Nav.default, {
124
- variant: "pills",
125
- className: "flex-column"
126
- }, searchVar && /*#__PURE__*/_react.default.createElement(_Nav.default.Item, null, /*#__PURE__*/_react.default.createElement(_Nav.default.Link, {
127
- eventKey: FEATURE_TYPE.VAR
128
- }, "Genes", " ", !!varResultsLength && "(".concat(varResultsLength, ")"))), searchDiseases && /*#__PURE__*/_react.default.createElement(_Nav.default.Item, null, /*#__PURE__*/_react.default.createElement(_Nav.default.Link, {
129
- eventKey: FEATURE_TYPE.DISEASE
130
- }, "Diseases", " ", !!diseaseResultsLength && "(".concat(diseaseResultsLength, ")"))))), /*#__PURE__*/_react.default.createElement(_Col.default, {
131
- sm: 9,
132
- className: "py-3"
133
- }, /*#__PURE__*/_react.default.createElement(_Tab.default.Content, null, searchVar && /*#__PURE__*/_react.default.createElement(_Tab.default.Pane, {
134
- eventKey: FEATURE_TYPE.VAR
135
- }, /*#__PURE__*/_react.default.createElement(_SearchResults.VarSearchResults, {
136
- text: text,
137
- handleSelect: handleSelect,
138
- selectedResult: selectedResult.var,
139
- setSelectedResult: item => setSelectedResult(prev => {
140
- return _objectSpread(_objectSpread({}, prev), {}, {
141
- var: item
142
- });
143
- }),
144
- setResultsLength: setVarResultsLength
145
- })), searchDiseases && /*#__PURE__*/_react.default.createElement(_Tab.default.Pane, {
146
- eventKey: FEATURE_TYPE.DISEASE
147
- }, /*#__PURE__*/_react.default.createElement(_SearchResults.DiseasesSearchResults, {
148
- text: text,
149
- selectedResult: selectedResult.disease,
150
- setSelectedResult: item => setSelectedResult(prev => {
151
- return _objectSpread(_objectSpread({}, prev), {}, {
152
- disease: item
153
- });
154
- }),
155
- setResultsLength: setDiseaseResultsLength
156
- }))))))), /*#__PURE__*/_react.default.createElement(_Col.default, {
157
- xs: 12,
158
- md: 4,
159
- className: "bg-light p-3 search-modal-info"
160
- }, selectedResult[tab] ? tab === FEATURE_TYPE.DISEASE ? /*#__PURE__*/_react.default.createElement(_SearchInfo.DiseaseInfo, {
161
- disease: selectedResult.disease,
162
- handleSelect: handleSelect,
163
- addVarSet: addVarSet
164
- }) : /*#__PURE__*/_react.default.createElement(_SearchInfo.VarInfo, {
165
- varItem: selectedResult.var
166
- }) : /*#__PURE__*/_react.default.createElement("div", {
167
- className: "text-muted"
168
- }, "No result selected"))))));
89
+ size: "xl",
90
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Modal.Header, {
91
+ className: "bg-primary",
92
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Container.default, {
93
+ className: "gx-0",
94
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Row.default, {
95
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Col.default, {
96
+ xs: 12,
97
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form, {
98
+ onSubmit: e => {
99
+ e.preventDefault();
100
+ },
101
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.FormGroup, {
102
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
103
+ className: "d-flex align-items-center",
104
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.InputGroup, {
105
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.InputGroup.Text, {
106
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Search.default, {})
107
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Control, {
108
+ autoFocus: true,
109
+ type: "text",
110
+ placeholder: 'Search ' + displayText,
111
+ value: text,
112
+ onChange: e => {
113
+ setText(e.target.value);
114
+ setSelectedResult({
115
+ var: null,
116
+ disease: null
117
+ });
118
+ setVarResultsLength(null);
119
+ setDiseaseResultsLength(null);
120
+ }
121
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
122
+ variant: "light",
123
+ onClick: handleClose,
124
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Close.default, {})
125
+ })]
126
+ })
127
+ })
128
+ })
129
+ })
130
+ })
131
+ })
132
+ })
133
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Modal.Body, {
134
+ className: "p-0",
135
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Container.default, {
136
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Row.default, {
137
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Col.default, {
138
+ xs: 12,
139
+ md: 8,
140
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tab.default.Container, {
141
+ activeKey: tab,
142
+ onSelect: k => setTab(k),
143
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Row.default, {
144
+ className: "w-100",
145
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Col.default, {
146
+ sm: 3,
147
+ className: "py-3 border-end",
148
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Nav.default, {
149
+ variant: "pills",
150
+ className: "flex-column",
151
+ children: [searchVar && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Nav.default.Item, {
152
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Nav.default.Link, {
153
+ eventKey: FEATURE_TYPE.VAR,
154
+ children: ["Genes", ' ', !!varResultsLength && "(".concat(varResultsLength, ")")]
155
+ })
156
+ }), searchDiseases && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Nav.default.Item, {
157
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Nav.default.Link, {
158
+ eventKey: FEATURE_TYPE.DISEASE,
159
+ children: ["Diseases", ' ', !!diseaseResultsLength && "(".concat(diseaseResultsLength, ")")]
160
+ })
161
+ })]
162
+ })
163
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Col.default, {
164
+ sm: 9,
165
+ className: "py-3",
166
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Tab.default.Content, {
167
+ children: [searchVar && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tab.default.Pane, {
168
+ eventKey: FEATURE_TYPE.VAR,
169
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchResults.VarSearchResults, {
170
+ text: text,
171
+ handleSelect: handleSelect,
172
+ selectedResult: selectedResult.var,
173
+ setSelectedResult: item => setSelectedResult(prev => {
174
+ return _objectSpread(_objectSpread({}, prev), {}, {
175
+ var: item
176
+ });
177
+ }),
178
+ setResultsLength: setVarResultsLength
179
+ })
180
+ }), searchDiseases && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tab.default.Pane, {
181
+ eventKey: FEATURE_TYPE.DISEASE,
182
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchResults.DiseasesSearchResults, {
183
+ text: text,
184
+ selectedResult: selectedResult.disease,
185
+ setSelectedResult: item => setSelectedResult(prev => {
186
+ return _objectSpread(_objectSpread({}, prev), {}, {
187
+ disease: item
188
+ });
189
+ }),
190
+ setResultsLength: setDiseaseResultsLength
191
+ })
192
+ })]
193
+ })
194
+ })]
195
+ })
196
+ })
197
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Col.default, {
198
+ xs: 12,
199
+ md: 4,
200
+ className: "bg-light p-3 search-modal-info",
201
+ children: selectedResult[tab] ? tab === FEATURE_TYPE.DISEASE ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchInfo.DiseaseInfo, {
202
+ disease: selectedResult.disease,
203
+ handleSelect: handleSelect,
204
+ addVarSet: addVarSet
205
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchInfo.VarInfo, {
206
+ varItem: selectedResult.var
207
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
208
+ className: "text-muted",
209
+ children: "No result selected"
210
+ })
211
+ })]
212
+ })
213
+ })
214
+ })]
215
+ });
169
216
  }
170
217
  function SearchBar(_ref3) {
171
218
  let {
172
219
  searchVar = true,
173
220
  searchDiseases = false
174
221
  } = _ref3;
175
- const [text, setText] = (0, _react.useState)("");
176
- const displayText = [...(searchVar ? ["features"] : []), ...(searchDiseases ? ["diseases"] : [])].join(" and ");
222
+ const [text, setText] = (0, _react.useState)('');
223
+ const displayText = [...(searchVar ? ['features'] : []), ...(searchDiseases ? ['diseases'] : [])].join(' and ');
177
224
  const [showModal, setShowModal] = (0, _react.useState)(false);
178
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Form, {
179
- onSubmit: e => {
180
- e.preventDefault();
181
- }
182
- }, /*#__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, {
183
- onClick: () => setShowModal(true),
184
- type: "text",
185
- placeholder: "Search " + displayText,
186
- defaultValue: text
187
- })))), /*#__PURE__*/_react.default.createElement(SearchModal, {
188
- show: showModal,
189
- text: text,
190
- setText: setText,
191
- displayText: displayText,
192
- searchVar: searchVar,
193
- searchDiseases: searchDiseases,
194
- handleClose: () => setShowModal(false)
195
- }));
225
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
226
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form, {
227
+ onSubmit: e => {
228
+ e.preventDefault();
229
+ },
230
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.FormGroup, {
231
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.InputGroup, {
232
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.InputGroup.Text, {
233
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Search.default, {})
234
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Control, {
235
+ onClick: () => setShowModal(true),
236
+ type: "text",
237
+ placeholder: 'Search ' + displayText,
238
+ defaultValue: text
239
+ })]
240
+ })
241
+ })
242
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(SearchModal, {
243
+ show: showModal,
244
+ text: text,
245
+ setText: setText,
246
+ displayText: displayText,
247
+ searchVar: searchVar,
248
+ searchDiseases: searchDiseases,
249
+ handleClose: () => setShowModal(false)
250
+ })]
251
+ });
196
252
  }
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.DiseaseInfo = DiseaseInfo;
7
7
  exports.VarInfo = VarInfo;
8
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = require("react");
9
9
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
10
10
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
11
11
  var _lodash = _interopRequireDefault(require("lodash"));
@@ -15,8 +15,9 @@ var _DatasetContext = require("../../context/DatasetContext");
15
15
  var _SettingsContext = require("../../context/SettingsContext");
16
16
  var _requests = require("../../utils/requests");
17
17
  var _VarItem = require("../var-list/VarItem");
18
+ var _VarList = require("../var-list/VarList");
19
+ var _jsxRuntime = require("react/jsx-runtime");
18
20
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
20
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
22
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
23
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -26,7 +27,7 @@ function VarInfo(_ref) {
26
27
  let {
27
28
  varItem
28
29
  } = _ref;
29
- const ENDPOINT = "disease/gene";
30
+ const ENDPOINT = 'disease/gene';
30
31
  const dataset = (0, _DatasetContext.useDataset)();
31
32
  const [params, setParams] = (0, _react.useState)({
32
33
  geneName: varItem.name,
@@ -48,50 +49,27 @@ function VarInfo(_ref) {
48
49
  enabled: !!dataset.diseaseDatasets.length
49
50
  });
50
51
  const hasDiseaseInfo = !isPending && !serverError && !!(fetchedData !== null && fetchedData !== void 0 && fetchedData.length);
51
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("h5", null, varItem.name), !!dataset.diseaseDatasets.length && isPending && /*#__PURE__*/_react.default.createElement("p", null, "Loading..."), hasDiseaseInfo && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h6", null, "Associated diseases"), /*#__PURE__*/_react.default.createElement(_VarItem.VarDiseaseInfo, {
52
- data: fetchedData
53
- })));
54
- }
55
- const useVarMean = function (varKeys) {
56
- let enabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
57
- const ENDPOINT = "matrix/mean";
58
- const dataset = (0, _DatasetContext.useDataset)();
59
- const [params, setParams] = (0, _react.useState)({
60
- url: dataset.url,
61
- varKeys: _lodash.default.map(varKeys, v => v.isSet ? {
62
- name: v.name,
63
- indices: v.vars.map(v => v.index)
64
- } : v.index),
65
- // obsIndices:
66
- varNamesCol: dataset.varNamesCol
67
- });
68
- (0, _react.useEffect)(() => {
69
- setParams(p => {
70
- return _objectSpread(_objectSpread({}, p), {}, {
71
- varKeys: _lodash.default.map(varKeys, v => v.isSet ? {
72
- name: v.name,
73
- indices: v.vars.map(v => v.index)
74
- } : v.index)
75
- });
76
- });
77
- }, [varKeys]);
78
- return (0, _requests.useFetch)(ENDPOINT, params, {
79
- enabled: enabled,
80
- refetchOnMount: false
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
53
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
54
+ children: varItem.name
55
+ }), !!dataset.diseaseDatasets.length && isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
56
+ children: "Loading..."
57
+ }), hasDiseaseInfo && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
58
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h6", {
59
+ children: "Associated diseases"
60
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_VarItem.VarDiseaseInfo, {
61
+ data: fetchedData
62
+ })]
63
+ })]
81
64
  });
82
- };
83
-
84
- // ensure nulls are lowest values
85
- const sortMeans = (i, means) => {
86
- return means[i.name] || _lodash.default.min(_lodash.default.values(means)) - 1;
87
- };
65
+ }
88
66
  function DiseaseInfo(_ref2) {
89
67
  let {
90
68
  disease,
91
69
  handleSelect,
92
70
  addVarSet
93
71
  } = _ref2;
94
- const ENDPOINT = "disease/genes";
72
+ const ENDPOINT = 'disease/genes';
95
73
  const dataset = (0, _DatasetContext.useDataset)();
96
74
  const settings = (0, _SettingsContext.useSettings)();
97
75
  const dispatch = (0, _SettingsContext.useSettingsDispatch)();
@@ -119,64 +97,80 @@ function DiseaseInfo(_ref2) {
119
97
  setDiseaseVars(diseaseData.fetchedData);
120
98
  }
121
99
  }, [diseaseData.fetchedData, diseaseData.isPending, diseaseData.serverError]);
122
- const varMeans = useVarMean(diseaseVars, !!(diseaseVars !== null && diseaseVars !== void 0 && diseaseVars.length) && settings.varSort.disease.sort === _constants.VAR_SORT.MATRIX);
100
+ const varMeans = (0, _VarList.useVarMean)(diseaseVars, !!(diseaseVars !== null && diseaseVars !== void 0 && diseaseVars.length) && settings.varSort.disease.sort === _constants.VAR_SORT.MATRIX);
123
101
  (0, _react.useEffect)(() => {
124
102
  if (settings.varSort.disease.sort === _constants.VAR_SORT.MATRIX) {
125
103
  if (!varMeans.isPending && !varMeans.serverError) {
126
104
  setSortedDiseaseVars(_lodash.default.orderBy(diseaseVars, o => {
127
- return sortMeans(o, varMeans.fetchedData);
105
+ return (0, _VarList.sortMeans)(o, varMeans.fetchedData);
128
106
  }, settings.varSort.disease.sortOrder));
129
107
  }
130
108
  } else if (settings.varSort.disease.sort === _constants.VAR_SORT.NAME) {
131
- setSortedDiseaseVars(_lodash.default.orderBy(diseaseVars, "name", settings.varSort.disease.sortOrder));
109
+ setSortedDiseaseVars(_lodash.default.orderBy(diseaseVars, 'name', settings.varSort.disease.sortOrder));
132
110
  } else {
133
111
  setSortedDiseaseVars(diseaseVars);
134
112
  }
135
113
  }, [settings.varSort.disease.sort, settings.varSort.disease.sortOrder, diseaseVars, varMeans.fetchedData, varMeans.isPending, varMeans.serverError]);
136
114
  const diseaseVarList = _lodash.default.map(sortedDiseaseVars, v => {
137
- return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup.Item, {
138
- key: v.gene_id
139
- }, /*#__PURE__*/_react.default.createElement("div", {
140
- className: "d-flex justify-content-between align-items-center w-100"
141
- }, v.name, /*#__PURE__*/_react.default.createElement("div", {
142
- className: "d-flex align-items-center gap-1"
143
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
144
- type: "button",
145
- className: "m-0 p-0 px-1",
146
- variant: "outline-secondary",
147
- title: "Add to list",
148
- onClick: () => {
149
- handleSelect(dispatch, {
150
- name: v.name,
151
- index: v.index,
152
- matrix_index: v.matrix_index
153
- });
154
- }
155
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
156
- icon: _freeSolidSvgIcons.faPlus
157
- })))));
115
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
116
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
117
+ className: "d-flex justify-content-between align-items-center w-100",
118
+ children: [v.name, /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
119
+ className: "d-flex align-items-center gap-1",
120
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
121
+ type: "button",
122
+ className: "m-0 p-0 px-1",
123
+ variant: "outline-secondary",
124
+ title: "Add to list",
125
+ onClick: () => {
126
+ handleSelect(dispatch, {
127
+ name: v.name,
128
+ index: v.index,
129
+ matrix_index: v.matrix_index
130
+ });
131
+ },
132
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
133
+ icon: _freeSolidSvgIcons.faPlus
134
+ })
135
+ })
136
+ })]
137
+ })
138
+ }, v.gene_id);
158
139
  });
159
140
  const isPending = diseaseData.isPending || varMeans.isPending && settings.varSort.disease.sort === _constants.VAR_SORT.MATRIX;
160
- return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("h5", null, disease.disease_name), /*#__PURE__*/_react.default.createElement("h6", null, "Implicated genes"), isPending ? /*#__PURE__*/_react.default.createElement("p", null, "Loading...") : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
161
- className: "d-flex justify-content-end mb-2"
162
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
163
- size: "sm",
164
- title: "Add all as a set",
165
- onClick: () => {
166
- addVarSet(dispatch, {
167
- name: disease.disease_name,
168
- vars: _lodash.default.map(diseaseVars, v => {
169
- return {
170
- index: v.index,
171
- name: v.name,
172
- matrix_index: v.matrix_index
173
- };
141
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
142
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
143
+ children: disease.disease_name
144
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("h6", {
145
+ children: "Implicated genes"
146
+ }), isPending ? /*#__PURE__*/(0, _jsxRuntime.jsx)("p", {
147
+ children: "Loading..."
148
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
149
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
150
+ className: "d-flex justify-content-end mb-2",
151
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Button, {
152
+ size: "sm",
153
+ title: "Add all as a set",
154
+ onClick: () => {
155
+ addVarSet(dispatch, {
156
+ name: disease.disease_name,
157
+ vars: _lodash.default.map(diseaseVars, v => {
158
+ return {
159
+ index: v.index,
160
+ name: v.name,
161
+ matrix_index: v.matrix_index
162
+ };
163
+ })
164
+ });
165
+ },
166
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
167
+ icon: _freeSolidSvgIcons.faPlus
168
+ }), " Add all as a set"]
174
169
  })
175
- });
176
- }
177
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
178
- icon: _freeSolidSvgIcons.faPlus
179
- }), " Add all as a set")), /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
180
- className: "overflow-scroll"
181
- }, diseaseVarList)));
170
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
171
+ className: "overflow-scroll",
172
+ children: diseaseVarList
173
+ })]
174
+ })]
175
+ });
182
176
  }