@haniffalab/cherita-react 1.3.0 → 1.4.0-dev.2025-06-09.7cd38232

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 (49) hide show
  1. package/dist/assets/images/plots/dotplot.svg +152 -0
  2. package/dist/assets/images/plots/heatmap.svg +193 -0
  3. package/dist/assets/images/plots/matrixplot.svg +275 -0
  4. package/dist/assets/images/plots/scatterplot.svg +198 -0
  5. package/dist/assets/images/plots/violin.svg +50 -0
  6. package/dist/cjs/components/dotplot/Dotplot.js +35 -5
  7. package/dist/cjs/components/full-page/FullPage.js +109 -50
  8. package/dist/cjs/components/full-page/PlotTypeSelector.js +57 -0
  9. package/dist/cjs/components/heatmap/Heatmap.js +35 -5
  10. package/dist/cjs/components/matrixplot/Matrixplot.js +35 -5
  11. package/dist/cjs/components/obs-list/ObsItem.js +49 -22
  12. package/dist/cjs/components/obs-list/ObsList.js +9 -5
  13. package/dist/cjs/components/scatterplot/Scatterplot.js +115 -95
  14. package/dist/cjs/components/scatterplot/SpatialControls.js +3 -3
  15. package/dist/cjs/components/search-bar/SearchInfo.js +3 -35
  16. package/dist/cjs/components/toolbar/Toolbar.js +102 -0
  17. package/dist/cjs/components/var-list/VarList.js +11 -3
  18. package/dist/cjs/components/violin/Violin.js +37 -6
  19. package/dist/cjs/constants/constants.js +14 -2
  20. package/dist/cjs/context/DatasetContext.js +5 -3
  21. package/dist/cjs/context/SettingsContext.js +77 -46
  22. package/dist/cjs/helpers/map-helper.js +2 -1
  23. package/dist/cjs/index.js +15 -21
  24. package/dist/css/cherita.css +76 -23
  25. package/dist/css/cherita.css.map +1 -1
  26. package/dist/esm/components/dotplot/Dotplot.js +36 -6
  27. package/dist/esm/components/full-page/FullPage.js +111 -50
  28. package/dist/esm/components/full-page/PlotTypeSelector.js +50 -0
  29. package/dist/esm/components/heatmap/Heatmap.js +36 -6
  30. package/dist/esm/components/matrixplot/Matrixplot.js +36 -6
  31. package/dist/esm/components/obs-list/ObsItem.js +49 -22
  32. package/dist/esm/components/obs-list/ObsList.js +9 -5
  33. package/dist/esm/components/scatterplot/Scatterplot.js +115 -95
  34. package/dist/esm/components/scatterplot/SpatialControls.js +3 -3
  35. package/dist/esm/components/search-bar/SearchInfo.js +1 -33
  36. package/dist/esm/components/toolbar/Toolbar.js +91 -0
  37. package/dist/esm/components/var-list/VarList.js +10 -5
  38. package/dist/esm/components/violin/Violin.js +39 -8
  39. package/dist/esm/constants/constants.js +13 -1
  40. package/dist/esm/context/DatasetContext.js +5 -3
  41. package/dist/esm/context/SettingsContext.js +77 -46
  42. package/dist/esm/helpers/map-helper.js +2 -1
  43. package/dist/esm/index.js +4 -4
  44. package/package.json +7 -4
  45. package/scss/cherita.scss +0 -1
  46. package/scss/components/layouts.scss +69 -1
  47. package/scss/components/plotly.scss +19 -14
  48. package/dist/cjs/components/full-page/FullPagePseudospatial.js +0 -157
  49. package/dist/esm/components/full-page/FullPagePseudospatial.js +0 -149
@@ -49,8 +49,9 @@ const persistOptions = {
49
49
  }
50
50
  return false;
51
51
  }
52
- }
53
- // @TODO: add maxAge and buster (app and api version numbers as busters)
52
+ },
53
+ buster: "1.4.0-dev.2025-06-09.7cd38232" || "0.0.0"
54
+ // @TODO: add maxAge and api version numbers as buster
54
55
  };
55
56
  const initialDataset = {
56
57
  url: null,
@@ -59,7 +60,8 @@ const initialDataset = {
59
60
  obsGroups: null,
60
61
  imageUrl: null,
61
62
  defaultSettings: {},
62
- canOverrideSettings: true
63
+ canOverrideSettings: true,
64
+ useUnsColors: false
63
65
  };
64
66
  export function DatasetProvider(_ref2) {
65
67
  let {
@@ -8,6 +8,11 @@ import _ from "lodash";
8
8
  import { COLOR_ENCODINGS, DOTPLOT_SCALES, LOCAL_STORAGE_KEY, MATRIXPLOT_SCALES, OBS_TYPES, PSEUDOSPATIAL_CATEGORICAL_MODES, VAR_SORT, VAR_SORT_ORDER, VIOLINPLOT_SCALES } from "../constants/constants";
9
9
  export const SettingsContext = /*#__PURE__*/createContext(null);
10
10
  export const SettingsDispatchContext = /*#__PURE__*/createContext(null);
11
+
12
+ // @TODO: consider splitting constant values and dataset-resolved values
13
+ // e.g. store only obs name in selectedObs, and resolved obs data (counts, values, etc.) elsewhere
14
+ // e.g. store only var name in selectedVar, and resolved var data (index, matrix_index) elsewhere
15
+ // would simplify passing and validating defaultSettings and localSettings
11
16
  const initialSettings = {
12
17
  selectedObs: null,
13
18
  selectedVar: null,
@@ -56,13 +61,51 @@ const initialSettings = {
56
61
  categoricalMode: PSEUDOSPATIAL_CATEGORICAL_MODES.ACROSS.value
57
62
  }
58
63
  };
64
+
65
+ // validate on initialization and reducer
66
+ const validateSettings = settings => {
67
+ // make sure selectedVar is in vars
68
+ if (settings.selectedVar) {
69
+ const inVars = _.some(settings.vars, v => v.name === settings.selectedVar.name);
70
+ if (!inVars) {
71
+ settings.vars = [...settings.vars, settings.selectedVar];
72
+ }
73
+ }
74
+
75
+ // make sure selectedMultiVar are in vars
76
+ if (settings.selectedMultiVar) {
77
+ const notInVars = _.differenceBy(settings.selectedMultiVar, settings.vars, "name");
78
+ if (notInVars.length) {
79
+ settings.vars = [...settings.vars, ...notInVars];
80
+ }
81
+ }
82
+
83
+ // make sure there's a selectedVar if colorEncoding is VAR
84
+ if (settings.colorEncoding === COLOR_ENCODINGS.VAR) {
85
+ if (!settings.selectedVar) {
86
+ settings.colorEncoding = null;
87
+ } else if (settings.selectedVar.isSet && !settings.selectedVar.vars.length) {
88
+ settings.selectedVar = null;
89
+ settings.colorEncoding = null;
90
+ }
91
+ }
92
+
93
+ // make sure there's a selectedObs if colorEncoding is OBS
94
+ if (settings.colorEncoding === COLOR_ENCODINGS.OBS) {
95
+ if (!settings.selectedObs) {
96
+ settings.colorEncoding = null;
97
+ }
98
+ }
99
+ return settings;
100
+ };
59
101
  const initializer = _ref => {
60
102
  let {
61
103
  canOverrideSettings,
62
104
  defaultSettings,
63
105
  localSettings
64
106
  } = _ref;
65
- return canOverrideSettings ? _.assign({}, initialSettings, defaultSettings, localSettings) : _.assign({}, initialSettings, defaultSettings);
107
+ const mergedSettings = canOverrideSettings ? _.assign({}, initialSettings, defaultSettings, localSettings) : _.assign({}, initialSettings, defaultSettings);
108
+ return validateSettings(mergedSettings);
66
109
  };
67
110
  export function SettingsProvider(_ref2) {
68
111
  let {
@@ -129,77 +172,65 @@ function settingsReducer(settings, action) {
129
172
  }
130
173
  case "select.var":
131
174
  {
132
- if (settings.vars.find(v => _.isEqual(v, action.var))) {
133
- return _objectSpread(_objectSpread({}, settings), {}, {
134
- selectedVar: action.var
135
- });
136
- } else {
137
- return _objectSpread(_objectSpread({}, settings), {}, {
138
- selectedVar: action.var,
139
- vars: [...settings.vars, action.var]
140
- });
141
- }
175
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
176
+ selectedVar: action.var
177
+ }));
142
178
  }
143
179
  case "select.multivar":
144
180
  {
145
- const vars = settings.vars.find(v => _.isEqual(v, action.var)) ? settings.vars : [...settings.vars, action.var];
146
- if (settings.selectedMultiVar.find(v => _.isEqual(v, action.var))) {
147
- return _objectSpread(_objectSpread({}, settings), {}, {
148
- vars: vars
149
- });
181
+ const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
182
+ if (inMultiVar) {
183
+ return validateSettings(_objectSpread({}, settings));
150
184
  } else {
151
- return _objectSpread(_objectSpread({}, settings), {}, {
152
- selectedMultiVar: [...settings.selectedMultiVar, action.var],
153
- vars: vars
154
- });
185
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
186
+ selectedMultiVar: [...settings.selectedMultiVar, action.var]
187
+ }));
155
188
  }
156
189
  }
157
190
  case "deselect.multivar":
158
191
  {
159
- return _objectSpread(_objectSpread({}, settings), {}, {
192
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
160
193
  selectedMultiVar: settings.selectedMultiVar.filter(v => v !== action.var.name)
161
- });
194
+ }));
162
195
  }
163
196
  case "toggle.multivar":
164
197
  {
165
198
  const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
166
199
  if (inMultiVar) {
167
- return _objectSpread(_objectSpread({}, settings), {}, {
200
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
168
201
  selectedMultiVar: settings.selectedMultiVar.filter(v => v.name !== action.var.name)
169
- });
202
+ }));
170
203
  } else {
171
- return _objectSpread(_objectSpread({}, settings), {}, {
204
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
172
205
  selectedMultiVar: [...settings.selectedMultiVar, action.var]
173
- });
206
+ }));
174
207
  }
175
208
  }
176
209
  case "set.colorEncoding":
177
210
  {
178
- return _objectSpread(_objectSpread({}, settings), {}, {
211
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
179
212
  colorEncoding: action.value
180
- });
213
+ }));
181
214
  }
182
215
  case "reset.vars":
183
216
  {
184
- return _objectSpread(_objectSpread({}, settings), {}, {
217
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
185
218
  vars: [],
186
219
  selectedVar: null,
187
220
  selectedMultiVar: []
188
- });
221
+ }));
189
222
  }
190
223
  case "reset.multiVar":
191
224
  {
192
- return _objectSpread(_objectSpread({}, settings), {}, {
193
- selectedMultiVar: [],
194
- colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
195
- });
225
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
226
+ selectedMultiVar: []
227
+ }));
196
228
  }
197
229
  case "reset.var":
198
230
  {
199
- return _objectSpread(_objectSpread({}, settings), {}, {
200
- selectedVar: null,
201
- colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
202
- });
231
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
232
+ selectedVar: null
233
+ }));
203
234
  }
204
235
  case "add.var":
205
236
  {
@@ -216,11 +247,11 @@ function settingsReducer(settings, action) {
216
247
  var _settings$selectedVar;
217
248
  const selectedVar = ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name) === action.var.name ? null : settings.selectedVar;
218
249
  const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.var.name);
219
- return _objectSpread(_objectSpread({}, settings), {}, {
250
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
220
251
  vars: settings.vars.filter(a => a.name !== action.var.name),
221
252
  selectedVar: selectedVar,
222
253
  selectedMultiVar: selectedMultiVar
223
- });
254
+ }));
224
255
  }
225
256
  case "add.varSet.var":
226
257
  {
@@ -254,11 +285,11 @@ function settingsReducer(settings, action) {
254
285
  return v;
255
286
  }
256
287
  });
257
- return _objectSpread(_objectSpread({}, settings), {}, {
288
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
258
289
  vars: vars,
259
290
  selectedVar: selectedVar,
260
291
  selectedMultiVar: selectedMultiVar
261
- });
292
+ }));
262
293
  }
263
294
  }
264
295
  case "remove.varSet.var":
@@ -285,11 +316,11 @@ function settingsReducer(settings, action) {
285
316
  var _settings$selectedVar3;
286
317
  const selectedVar = ((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.name) === action.varSet.name ? null : settings.selectedVar;
287
318
  const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.varSet.name);
288
- return _objectSpread(_objectSpread({}, settings), {}, {
319
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
289
320
  vars: vars,
290
321
  selectedVar: selectedVar,
291
322
  selectedMultiVar: selectedMultiVar
292
- });
323
+ }));
293
324
  } else {
294
325
  var _settings$selectedVar4;
295
326
  // Update selected if varSet is selected
@@ -305,11 +336,11 @@ function settingsReducer(settings, action) {
305
336
  return v;
306
337
  }
307
338
  });
308
- return _objectSpread(_objectSpread({}, settings), {}, {
339
+ return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
309
340
  vars: vars,
310
341
  selectedVar: selectedVar,
311
342
  selectedMultiVar: selectedMultiVar
312
- });
343
+ }));
313
344
  }
314
345
  }
315
346
  }
@@ -47,7 +47,8 @@ export class MapHelper {
47
47
  return {
48
48
  longitude,
49
49
  latitude,
50
- zoom
50
+ zoom,
51
+ bounds
51
52
  };
52
53
  }
53
54
  }
package/dist/esm/index.js CHANGED
@@ -1,22 +1,22 @@
1
1
  export { Dotplot } from "./components/dotplot/Dotplot";
2
2
  export { DotplotControls } from "./components/dotplot/DotplotControls";
3
+ export { FullPage } from "./components/full-page/FullPage";
3
4
  export { Heatmap } from "./components/heatmap/Heatmap";
4
5
  export { HeatmapControls } from "./components/heatmap/HeatmapControls";
5
6
  export { Matrixplot } from "./components/matrixplot/Matrixplot";
6
7
  export { MatrixplotControls } from "./components/matrixplot/MatrixplotControls";
7
8
  export { ObsColsList } from "./components/obs-list/ObsList";
8
9
  export { ObsmKeysList } from "./components/obsm-list/ObsmList";
10
+ export { OffcanvasControls, OffcanvasObs, OffcanvasObsm, OffcanvasVars } from "./components/offcanvas";
9
11
  export { Pseudospatial } from "./components/pseudospatial/Pseudospatial";
10
12
  export { Scatterplot } from "./components/scatterplot/Scatterplot";
11
13
  export { ScatterplotControls } from "./components/scatterplot/ScatterplotControls";
12
14
  export { SearchBar } from "./components/search-bar/SearchBar";
15
+ export { Toolbar } from "./components/toolbar/Toolbar";
13
16
  export { VarNamesList } from "./components/var-list/VarList";
14
17
  export { Violin } from "./components/violin/Violin";
15
18
  export { ViolinControls } from "./components/violin/ViolinControls";
16
- export { FullPage, FullPagePlots, FullPageScatterplot } from "./components/full-page/FullPage";
17
- export { FullPagePseudospatial } from "./components/full-page/FullPagePseudospatial";
18
- export { OffcanvasControls, OffcanvasObs, OffcanvasObsm, OffcanvasVars } from "./components/offcanvas";
19
19
  export { COLORSCALES } from "./constants/colorscales";
20
- export { SELECTION_MODES, VIOLIN_MODES } from "./constants/constants";
20
+ export { PLOT_TYPES, SELECTION_MODES, VIOLIN_MODES } from "./constants/constants";
21
21
  export { DatasetProvider } from "./context/DatasetContext";
22
22
  export { FilterProvider } from "./context/FilterContext";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haniffalab/cherita-react",
3
- "version": "1.3.0",
3
+ "version": "1.4.0-dev.2025-06-09.7cd38232",
4
4
  "author": "Haniffa Lab",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -68,6 +68,7 @@
68
68
  "@testing-library/jest-dom": "^6.6.3",
69
69
  "@testing-library/react": "^16.2.0",
70
70
  "babel-jest": "^29.7.0",
71
+ "babel-plugin-transform-define": "^2.1.4",
71
72
  "cpx": "^1.5.0",
72
73
  "eslint": "^8.57.1",
73
74
  "eslint-config-prettier": "^8.10.0",
@@ -90,7 +91,8 @@
90
91
  "build:babel": "npm run build:esm && npm run build:cjs",
91
92
  "build:scss": "sass --load-path=node_modules src/scss/cherita-bootstrap.scss dist/css/cherita.css",
92
93
  "copy:scss": "cpx 'src/scss/**/*' 'scss'",
93
- "build": "npm run build:babel && npm run build:scss && npm run copy:scss",
94
+ "copy:assets": "cpx 'src/assets/**/*' 'dist/assets'",
95
+ "build": "npm run build:babel && npm run build:scss && npm run copy:scss && npm run copy:assets",
94
96
  "test": "jest --watchAll",
95
97
  "test:ci": "jest --coverage --ci --no-watch",
96
98
  "lint:scss": "stylelint 'src/**/*.scss' --fix",
@@ -125,5 +127,6 @@
125
127
  "bugs": {
126
128
  "url": "https://github.com/haniffalab/cherita-react/issues"
127
129
  },
128
- "homepage": "https://github.com/haniffalab/cherita-react#readme"
129
- }
130
+ "homepage": "https://github.com/haniffalab/cherita-react#readme",
131
+ "prereleaseSha": "7cd382328af1f50698b9685b997517b3dcbe991a"
132
+ }
package/scss/cherita.scss CHANGED
@@ -58,7 +58,6 @@ $prefix: "bs-" !default;
58
58
  /* End scrollbar styling */
59
59
 
60
60
  .cherita-container-plot {
61
- margin-top: 76px;
62
61
  padding: 20px;
63
62
  position: relative;
64
63
  min-height: 400px;
@@ -1,5 +1,6 @@
1
1
  .cherita-app {
2
2
  position: relative;
3
+ width: 100%;
3
4
  }
4
5
 
5
6
  .cherita-app {
@@ -50,6 +51,21 @@
50
51
  overflow-y: hidden;
51
52
  }
52
53
 
54
+ .sidebar-plotselector {
55
+ padding: 6px;
56
+ border-bottom: 1px solid #dee2e6;
57
+
58
+ .plotselector-icon {
59
+ padding-bottom: 2px;
60
+ cursor: pointer;
61
+
62
+ .active {
63
+ opacity: 1;
64
+ border-bottom: 2px solid #007bff;
65
+ }
66
+ }
67
+ }
68
+
53
69
  .sidebar-pseudospatial {
54
70
  padding: 10px;
55
71
  border-bottom: 1px solid #dee2e6;
@@ -108,6 +124,58 @@
108
124
  border-left: 1px solid #dee2e6;
109
125
  }
110
126
 
127
+ .cherita-app-canvas {
128
+ .cherita-plot {
129
+ height: 100%;
130
+ min-height: 400px;
131
+ }
132
+ }
133
+
134
+ .cherita-app-container {
135
+ @extend .p-0;
136
+ display: flex;
137
+ flex-wrap: nowrap;
138
+ width: 100%;
139
+ height: 100%;
140
+
141
+ .cherita-app-obs {
142
+ flex: 0 0 auto;
143
+ min-width: 350px;
144
+ max-width: 20%;
145
+ overflow-y: auto;
146
+ }
147
+
148
+ .cherita-app-canvas {
149
+ @extend .p-1;
150
+ flex: 1 1 auto;
151
+ min-width: 400px;
152
+ position: relative;
153
+ max-height: 100%;
154
+ display: flex;
155
+ flex-direction: column;
156
+
157
+ .cherita-navbar {
158
+ @extend .m-0;
159
+ @extend .d-block;
160
+ position: relative;
161
+ }
162
+ }
163
+
164
+ .cherita-app-sidebar {
165
+ flex: 0 0 auto;
166
+ min-width: 350px;
167
+ max-width: 20%;
168
+ position: relative;
169
+ }
170
+
171
+ @media (max-width: 1400px) {
172
+ .cherita-app-obs,
173
+ .cherita-app-sidebar {
174
+ max-width: 25%;
175
+ }
176
+ }
177
+ }
178
+
111
179
  .ps-xs-1 {
112
180
  padding-left: 0.15rem !important;
113
- }
181
+ }
@@ -1,30 +1,35 @@
1
1
  .js-plotly-plot .plotly .modebar {
2
- border-radius: 5px;
3
- background-color: rgba(0, 0, 0, 0.6);
4
- padding: 0 4px !important;
5
2
 
6
3
  .modebar-group {
7
- margin: 0 !important;
8
- padding: 0 !important;
9
- background-color: transparent !important;
4
+ @extend .bg-primary;
5
+ @extend .mx-1;
6
+ border-radius: 5px;
7
+ padding: 4px !important;
10
8
 
11
9
  .modebar-btn {
12
- fill: white !important; /* Ensures white icons */
13
- color: white !important; /* Ensures text/icons are visible */
10
+ display: inline-flex;
11
+ justify-content: center;
14
12
  position: relative;
15
- font-size: 16px;
16
- padding: 4px;
13
+ font-size: 1.25rem;
14
+ padding: 0.25rem;
17
15
  height: auto;
18
16
  cursor: pointer;
19
17
  line-height: normal;
20
18
 
21
19
  svg {
22
20
  position: relative;
23
- top: auto;
24
- bottom: auto;
25
- left: auto;
26
- right: auto;
21
+ top: 1px;
22
+
23
+ path {
24
+ fill: white !important;
25
+ color: white !important;
26
+ }
27
27
  }
28
28
  }
29
29
  }
30
30
  }
31
+
32
+ .js-plotly-plot .plotly .modebar--hover > :not(.watermark) {
33
+ opacity: 0.5;
34
+ transition: opacity 0.3s;
35
+ }
@@ -1,157 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.FullPage = FullPage;
7
- exports.FullPagePseudospatial = FullPagePseudospatial;
8
- var _react = _interopRequireWildcard(require("react"));
9
- var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
10
- var _reactFontawesome = require("@fortawesome/react-fontawesome");
11
- var _reactBootstrap = require("react-bootstrap");
12
- var _constants = require("../../constants/constants");
13
- var _DatasetContext = require("../../context/DatasetContext");
14
- var _ObsList = require("../obs-list/ObsList");
15
- var _offcanvas = require("../offcanvas");
16
- var _Pseudospatial = require("../pseudospatial/Pseudospatial");
17
- var _PseudospatialToolbar = require("../pseudospatial/PseudospatialToolbar");
18
- var _Scatterplot = require("../scatterplot/Scatterplot");
19
- var _ScatterplotControls = require("../scatterplot/ScatterplotControls");
20
- var _SearchBar = require("../search-bar/SearchBar");
21
- var _VarList = require("../var-list/VarList");
22
- const _excluded = ["children", "varMode", "searchDiseases"];
23
- 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); }
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); }
25
- function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
26
- function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
27
- function FullPage(_ref) {
28
- let {
29
- children,
30
- varMode = _constants.SELECTION_MODES.SINGLE,
31
- searchDiseases = false
32
- } = _ref,
33
- props = _objectWithoutProperties(_ref, _excluded);
34
- const appRef = (0, _react.useRef)();
35
- const [appDimensions, setAppDimensions] = (0, _react.useState)({
36
- width: 0,
37
- height: 0
38
- });
39
- const [showObs, setShowObs] = (0, _react.useState)(false);
40
- const [showObsm, setShowObsm] = (0, _react.useState)(false);
41
- const [showVars, setShowVars] = (0, _react.useState)(false);
42
- const [showControls, setShowControls] = (0, _react.useState)(false);
43
- const [showPseudospatialControls, setShowPseudospatialControls] = (0, _react.useState)(false);
44
- const [showModal, setShowModal] = (0, _react.useState)(false);
45
- const [pseudospatialPlotType, setpseudospatialPlotType] = (0, _react.useState)(null);
46
- (0, _react.useEffect)(() => {
47
- const updateDimensions = () => {
48
- if (appRef.current) {
49
- // Get the distance from the top of the page to the target element
50
- const rect = appRef.current.getBoundingClientRect();
51
- const distanceFromTop = rect.top + window.scrollY;
52
-
53
- // Calculate the available height for the Cherita app
54
- const availableHeight = window.innerHeight - distanceFromTop;
55
-
56
- // Update the dimensions to fit the viewport minus the navbar height
57
- setAppDimensions({
58
- width: appRef.current.offsetWidth,
59
- height: availableHeight
60
- });
61
- }
62
- };
63
- window.addEventListener("resize", updateDimensions);
64
- updateDimensions(); // Initial update
65
- return () => window.removeEventListener("resize", updateDimensions);
66
- }, []);
67
- return /*#__PURE__*/_react.default.createElement("div", {
68
- ref: appRef,
69
- className: "cherita-app",
70
- style: {
71
- height: appDimensions.height
72
- }
73
- }, /*#__PURE__*/_react.default.createElement(_DatasetContext.DatasetProvider, props, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Container, {
74
- fluid: true,
75
- className: "d-flex g-0",
76
- style: {
77
- height: appDimensions.height
78
- }
79
- }, /*#__PURE__*/_react.default.createElement("div", {
80
- className: "cherita-app-obs modern-scrollbars border-end h-100"
81
- }, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, props)), /*#__PURE__*/_react.default.createElement("div", {
82
- className: "cherita-app-canvas flex-grow-1"
83
- }, children({
84
- setShowObs,
85
- setShowVars
86
- })), /*#__PURE__*/_react.default.createElement("div", {
87
- className: "cherita-app-sidebar p-3"
88
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card.Header, {
89
- className: "d-flex justify-content-evenly align-items-center"
90
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
91
- variant: "link",
92
- onClick: () => setShowModal(true)
93
- }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
94
- icon: _freeSolidSvgIcons.faArrowUpRightFromSquare
95
- }))), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card.Body, {
96
- className: "d-flex flex-column p-0"
97
- }, /*#__PURE__*/_react.default.createElement("div", {
98
- className: "sidebar-pseudospatial"
99
- }, /*#__PURE__*/_react.default.createElement(_Pseudospatial.Pseudospatial, {
100
- className: "sidebar-pseudospatial",
101
- plotType: pseudospatialPlotType,
102
- setPlotType: setpseudospatialPlotType,
103
- setShowControls: setShowPseudospatialControls
104
- })), /*#__PURE__*/_react.default.createElement("div", {
105
- className: "sidebar-features modern-scrollbars"
106
- }, /*#__PURE__*/_react.default.createElement(_SearchBar.SearchBar, {
107
- searchDiseases: searchDiseases,
108
- searchVar: true
109
- }), /*#__PURE__*/_react.default.createElement(_VarList.VarNamesList, {
110
- mode: varMode
111
- })))))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal, {
112
- show: showModal,
113
- onHide: () => setShowModal(false),
114
- centered: true
115
- }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Header, {
116
- closeButton: true
117
- }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, null, /*#__PURE__*/_react.default.createElement(_Pseudospatial.Pseudospatial, {
118
- plotType: pseudospatialPlotType,
119
- setPlotType: setpseudospatialPlotType,
120
- setShowControls: setShowPseudospatialControls,
121
- height: 500
122
- }))), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObs, {
123
- show: showObs,
124
- handleClose: () => setShowObs(false)
125
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasVars, {
126
- show: showVars,
127
- handleClose: () => setShowVars(false),
128
- mode: varMode
129
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
130
- show: showControls,
131
- handleClose: () => setShowControls(false),
132
- Controls: _ScatterplotControls.ScatterplotControls
133
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
134
- show: showPseudospatialControls,
135
- handleClose: () => setShowPseudospatialControls(false),
136
- Controls: _PseudospatialToolbar.PseudospatialToolbar,
137
- plotType: pseudospatialPlotType
138
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObsm, {
139
- show: showObsm,
140
- handleClose: () => setShowObsm(false)
141
- }))));
142
- }
143
- function FullPagePseudospatial(props) {
144
- return /*#__PURE__*/_react.default.createElement(FullPage, _extends({}, props, {
145
- varMode: _constants.SELECTION_MODES.SINGLE
146
- }), _ref2 => {
147
- let {
148
- setShowObs,
149
- setShowVars
150
- } = _ref2;
151
- return /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, {
152
- setShowObs: setShowObs,
153
- setShowVars: setShowVars,
154
- isFullscreen: true
155
- });
156
- });
157
- }