@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
@@ -0,0 +1,198 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ version="1.1"
6
+ id="svg1"
7
+ width="299.52322"
8
+ height="282.82245"
9
+ viewBox="0 0 299.52322 282.82245"
10
+ sodipodi:docname="umap.svg"
11
+ inkscape:version="1.4 (1:1.4+202410161351+e7c3feb100)"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ xmlns:svg="http://www.w3.org/2000/svg">
16
+ <defs
17
+ id="defs1" />
18
+ <sodipodi:namedview
19
+ id="namedview1"
20
+ pagecolor="#ffffff"
21
+ bordercolor="#000000"
22
+ borderopacity="0.25"
23
+ inkscape:showpageshadow="2"
24
+ inkscape:pageopacity="0.0"
25
+ inkscape:pagecheckerboard="0"
26
+ inkscape:deskcolor="#d1d1d1"
27
+ inkscape:zoom="0.51375727"
28
+ inkscape:cx="883.68579"
29
+ inkscape:cy="221.89467"
30
+ inkscape:window-width="1854"
31
+ inkscape:window-height="1011"
32
+ inkscape:window-x="0"
33
+ inkscape:window-y="0"
34
+ inkscape:window-maximized="1"
35
+ inkscape:current-layer="g1" />
36
+ <g
37
+ inkscape:groupmode="layer"
38
+ inkscape:label="Image"
39
+ id="g1"
40
+ transform="translate(-61.989251,-346.50722)">
41
+ <circle
42
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
43
+ id="path1"
44
+ cx="151.91397"
45
+ cy="358.70969"
46
+ r="11.870968" />
47
+ <circle
48
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
49
+ id="path1-3"
50
+ cx="100.01968"
51
+ cy="380.43903"
52
+ r="11.870968" />
53
+ <circle
54
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
55
+ id="path1-1"
56
+ cx="122.81537"
57
+ cy="406.75085"
58
+ r="11.870968" />
59
+ <circle
60
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
61
+ id="path1-36"
62
+ cx="157.06268"
63
+ cy="398.81537"
64
+ r="11.870968" />
65
+ <circle
66
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
67
+ id="path1-18"
68
+ cx="80.761612"
69
+ cy="421.50354"
70
+ r="11.870968" />
71
+ <circle
72
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
73
+ id="path1-2"
74
+ cx="108.28849"
75
+ cy="444.78311"
76
+ r="11.870968" />
77
+ <circle
78
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
79
+ id="path1-22"
80
+ cx="142.9229"
81
+ cy="445.9874"
82
+ r="11.870968" />
83
+ <circle
84
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
85
+ id="path1-6"
86
+ cx="74.191719"
87
+ cy="466.75085"
88
+ r="11.870968" />
89
+ <circle
90
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
91
+ id="path1-19"
92
+ cx="110.5143"
93
+ cy="487.65405"
94
+ r="11.870968" />
95
+ <circle
96
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
97
+ id="path1-5"
98
+ cx="147.77235"
99
+ cy="484.92288"
100
+ r="11.870968" />
101
+ <circle
102
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
103
+ id="path1-0"
104
+ cx="126.1487"
105
+ cy="521.36377"
106
+ r="11.870968" />
107
+ <circle
108
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
109
+ id="path1-61"
110
+ cx="294.42828"
111
+ cy="370.49277"
112
+ r="11.870968" />
113
+ <circle
114
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
115
+ id="path1-65"
116
+ cx="260.76163"
117
+ cy="401.9444"
118
+ r="11.870968" />
119
+ <circle
120
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
121
+ id="path1-4"
122
+ cx="297.76163"
123
+ cy="419.99814"
124
+ r="11.870968" />
125
+ <circle
126
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
127
+ id="path1-7"
128
+ cx="329.98743"
129
+ cy="394.70782"
130
+ r="11.870968" />
131
+ <circle
132
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
133
+ id="path1-78"
134
+ cx="349.31"
135
+ cy="436.11642"
136
+ r="11.870968" />
137
+ <circle
138
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
139
+ id="path1-31"
140
+ cx="314.79388"
141
+ cy="462.32074"
142
+ r="11.870968" />
143
+ <circle
144
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
145
+ id="path1-68"
146
+ cx="293.4928"
147
+ cy="495.1702"
148
+ r="11.870968" />
149
+ <circle
150
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
151
+ id="path1-49"
152
+ cx="267.01968"
153
+ cy="452.15945"
154
+ r="11.870968" />
155
+ <circle
156
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
157
+ id="path1-71"
158
+ cx="216.14873"
159
+ cy="530.72931"
160
+ r="11.870968" />
161
+ <circle
162
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
163
+ id="path1-26"
164
+ cx="252.67558"
165
+ cy="538.61108"
166
+ r="11.870968" />
167
+ <circle
168
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
169
+ id="path1-59"
170
+ cx="258.267"
171
+ cy="579.61108"
172
+ r="11.870968" />
173
+ <circle
174
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
175
+ id="path1-17"
176
+ cx="220.66486"
177
+ cy="574.41748"
178
+ r="11.870968" />
179
+ <circle
180
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
181
+ id="path1-9"
182
+ cx="184.00893"
183
+ cy="559.96588"
184
+ r="11.870968" />
185
+ <circle
186
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
187
+ id="path1-365"
188
+ cx="185.79387"
189
+ cy="598.26697"
190
+ r="11.870968" />
191
+ <circle
192
+ style="opacity:0.994362;fill:#000000;fill-opacity:1;stroke:#070707;stroke-width:0.663"
193
+ id="path1-8"
194
+ cx="224.85838"
195
+ cy="617.1272"
196
+ r="11.870968" />
197
+ </g>
198
+ </svg>
@@ -0,0 +1,50 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ viewBox="0 0 36.994598 39.994202"
4
+ x="0px"
5
+ y="0px"
6
+ version="1.1"
7
+ id="svg4"
8
+ sodipodi:docname="violin.svg"
9
+ inkscape:version="1.4 (1:1.4+202410161351+e7c3feb100)"
10
+ width="36.994598"
11
+ height="39.994202"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ xmlns:svg="http://www.w3.org/2000/svg">
16
+ <defs
17
+ id="defs4" />
18
+ <sodipodi:namedview
19
+ id="namedview4"
20
+ pagecolor="#ffffff"
21
+ bordercolor="#000000"
22
+ borderopacity="0.25"
23
+ inkscape:showpageshadow="2"
24
+ inkscape:pageopacity="0.0"
25
+ inkscape:pagecheckerboard="0"
26
+ inkscape:deskcolor="#d1d1d1"
27
+ inkscape:zoom="5.757143"
28
+ inkscape:cx="17.369727"
29
+ inkscape:cy="35.781637"
30
+ inkscape:window-width="1854"
31
+ inkscape:window-height="1011"
32
+ inkscape:window-x="0"
33
+ inkscape:window-y="0"
34
+ inkscape:window-maximized="1"
35
+ inkscape:current-layer="svg4" />
36
+ <g
37
+ class="secondary"
38
+ id="g2"
39
+ transform="translate(-12.0029,-8.0029)">
40
+ <path
41
+ d="M 19.9971,24.5 A 6.3078,6.3078 0 0 0 18.5732,20.8389 7.1479,7.1479 0 0 1 16.9971,16.5 V 16.0029 H 16.0029 V 16.5 a 7.1479,7.1479 0 0 1 -1.5761,4.3389 6.3078,6.3078 0 0 0 -1.4239,3.6611 12.4967,12.4967 0 0 1 -0.4853,3.38 13.5076,13.5076 0 0 0 -0.5147,3.62 6.3078,6.3078 0 0 0 1.4239,3.6611 7.1479,7.1479 0 0 1 1.5761,4.3389 19.2486,19.2486 0 0 0 0.5664,4.7246 13.6883,13.6883 0 0 1 0.4336,3.2754 v 0.4971 h 0.9942 V 47.5 A 13.6883,13.6883 0 0 1 17.4307,44.2246 19.2486,19.2486 0 0 0 17.9971,39.5 7.1479,7.1479 0 0 1 19.5732,35.1611 6.3078,6.3078 0 0 0 20.9971,31.5 13.5076,13.5076 0 0 0 20.4824,27.88 12.4967,12.4967 0 0 1 19.9971,24.5 Z"
42
+ id="path1" />
43
+ <path
44
+ d="M 34.6436,12.6963 C 32.8506,11.5537 30.9971,10.3711 30.9971,8.5 V 8.0029 H 30.0029 V 8.5 c 0,1.8711 -1.8535,3.0537 -3.6465,4.1963 -1.7246,1.1006 -3.3535,2.1387 -3.3535,3.8037 0,1.6152 1.2188,2.7031 2.3975,3.7549 1.2793,1.1426 2.6025,2.3242 2.6025,4.2451 a 18.1508,18.1508 0 0 1 -0.542,4.5068 14.5,14.5 0 0 0 -0.458,3.4932 6.038,6.038 0 0 0 1.6,3.7979 5.179,5.179 0 0 1 1.4,3.2021 v 0.4971 h 0.9942 V 39.5 a 5.179,5.179 0 0 1 1.4,-3.2021 6.038,6.038 0 0 0 1.6,-3.7979 14.5,14.5 0 0 0 -0.458,-3.4932 18.1508,18.1508 0 0 1 -0.542,-4.5068 c 0,-1.9209 1.3232,-3.1025 2.6025,-4.2451 1.1787,-1.0518 2.3975,-2.14 2.3975,-3.7549 0,-1.665 -1.6289,-2.7031 -3.3535,-3.8037 z"
45
+ id="path3" />
46
+ <path
47
+ d="M 47.3975,35.7021 A 5.179,5.179 0 0 1 45.9975,32.5 14.5,14.5 0 0 0 45.5395,29.0068 18.1508,18.1508 0 0 1 44.9975,24.5 V 24.0029 H 44.0033 V 24.5 a 18.1508,18.1508 0 0 1 -0.542,4.5068 14.5,14.5 0 0 0 -0.458,3.4932 5.179,5.179 0 0 1 -1.4,3.2021 6.038,6.038 0 0 0 -1.6,3.7979 c 0,1.582 0.9717,2.667 1.9121,3.7158 1.0264,1.1455 2.0879,2.3311 2.0879,4.2842 v 0.4971 h 0.9942 V 47.5 c 0,-1.9531 1.0615,-3.1387 2.0879,-4.2842 0.94,-1.0488 1.9121,-2.1338 1.9121,-3.7158 a 6.038,6.038 0 0 0 -1.6,-3.7979 z"
48
+ id="path2" />
49
+ </g>
50
+ </svg>
@@ -8,11 +8,13 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
9
  var _reactBootstrap = require("react-bootstrap");
10
10
  var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
11
+ var _constants = require("../../constants/constants");
11
12
  var _DatasetContext = require("../../context/DatasetContext");
12
13
  var _FilterContext = require("../../context/FilterContext");
13
14
  var _SettingsContext = require("../../context/SettingsContext");
14
15
  var _LoadingIndicators = require("../../utils/LoadingIndicators");
15
16
  var _requests = require("../../utils/requests");
17
+ var _Toolbar = require("../toolbar/Toolbar");
16
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
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); }
18
20
  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; }
@@ -20,8 +22,16 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
20
22
  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; }
21
23
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
22
24
  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); }
23
- function Dotplot() {
25
+ function Dotplot(_ref) {
24
26
  var _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3;
27
+ let {
28
+ showObsBtn = false,
29
+ showVarsBtn = false,
30
+ showCtrlsBtn = false,
31
+ setShowObs,
32
+ setShowVars,
33
+ setShowControls
34
+ } = _ref;
25
35
  const ENDPOINT = "dotplot";
26
36
  const dataset = (0, _DatasetContext.useDataset)();
27
37
  const settings = (0, _SettingsContext.useSettings)();
@@ -126,17 +136,29 @@ function Dotplot() {
126
136
  });
127
137
  });
128
138
  }, [settings.controls.colorAxis.cmin, settings.controls.colorAxis.cmax]);
139
+ const customModeBarButtons = _lodash.default.compact([showObsBtn && (0, _Toolbar.ObsPlotlyToolbar)({
140
+ onClick: setShowObs
141
+ }), showVarsBtn && (0, _Toolbar.VarPlotlyToolbar)({
142
+ onClick: setShowVars
143
+ }), showCtrlsBtn && (0, _Toolbar.ControlsPlotlyToolbar)({
144
+ onClick: setShowControls
145
+ })]);
146
+ const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
129
147
  if (!serverError) {
130
148
  if (hasSelections) {
131
149
  return /*#__PURE__*/_react.default.createElement("div", {
132
- className: "cherita-dotplot position-relative"
150
+ className: "cherita-plot cherita-dotplot position-relative"
133
151
  }, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
134
152
  data: data,
135
153
  layout: layout,
136
154
  useResizeHandler: true,
137
155
  style: {
138
- maxWidth: "100%",
139
- maxHeight: "100%"
156
+ width: "100%",
157
+ height: "100%"
158
+ },
159
+ config: {
160
+ displaylogo: false,
161
+ modeBarButtons: modeBarButtons
140
162
  }
141
163
  }));
142
164
  }
@@ -144,7 +166,15 @@ function Dotplot() {
144
166
  className: "cherita-dotplot"
145
167
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
146
168
  variant: "light"
147
- }, "Select features and a category"));
169
+ }, "Select", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
170
+ variant: "link",
171
+ className: "border-0 p-0 align-baseline",
172
+ onClick: setShowVars
173
+ }, "features") : "features", " ", "and a", " ", showObsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
174
+ variant: "link",
175
+ className: "border-0 p-0 align-baseline",
176
+ onClick: setShowObs
177
+ }, "category") : "category"));
148
178
  } else {
149
179
  return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
150
180
  variant: "danger"
@@ -4,32 +4,38 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.FullPage = FullPage;
7
- exports.FullPagePlots = FullPagePlots;
8
- exports.FullPageScatterplot = FullPageScatterplot;
9
7
  var _react = _interopRequireWildcard(require("react"));
8
+ var _material = require("@mui/material");
10
9
  var _reactBootstrap = require("react-bootstrap");
11
10
  var _constants = require("../../constants/constants");
12
11
  var _DatasetContext = require("../../context/DatasetContext");
13
12
  var _Dotplot = require("../dotplot/Dotplot");
13
+ var _DotplotControls = require("../dotplot/DotplotControls");
14
+ var _PlotTypeSelector = require("../full-page/PlotTypeSelector");
14
15
  var _Heatmap = require("../heatmap/Heatmap");
16
+ var _HeatmapControls = require("../heatmap/HeatmapControls");
15
17
  var _Matrixplot = require("../matrixplot/Matrixplot");
18
+ var _MatrixplotControls = require("../matrixplot/MatrixplotControls");
16
19
  var _ObsList = require("../obs-list/ObsList");
17
20
  var _offcanvas = require("../offcanvas");
21
+ var _Pseudospatial = require("../pseudospatial/Pseudospatial");
22
+ var _PseudospatialToolbar = require("../pseudospatial/PseudospatialToolbar");
18
23
  var _Scatterplot = require("../scatterplot/Scatterplot");
19
24
  var _ScatterplotControls = require("../scatterplot/ScatterplotControls");
20
25
  var _SearchBar = require("../search-bar/SearchBar");
21
26
  var _VarList = require("../var-list/VarList");
22
27
  var _Violin = require("../violin/Violin");
23
- const _excluded = ["children", "varMode", "searchDiseases"];
28
+ var _ViolinControls = require("../violin/ViolinControls");
29
+ const _excluded = ["isPseudospatial", "searchDiseases", "defaultPlotType"];
24
30
  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); }
25
31
  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); }
26
32
  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; }
27
33
  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; }
28
34
  function FullPage(_ref) {
29
35
  let {
30
- children,
31
- varMode = _constants.SELECTION_MODES.SINGLE,
32
- searchDiseases = false
36
+ isPseudospatial = false,
37
+ searchDiseases = true,
38
+ defaultPlotType = _constants.PLOT_TYPES.SCATTERPLOT
33
39
  } = _ref,
34
40
  props = _objectWithoutProperties(_ref, _excluded);
35
41
  const appRef = (0, _react.useRef)();
@@ -42,6 +48,16 @@ function FullPage(_ref) {
42
48
  const [showVars, setShowVars] = (0, _react.useState)(false);
43
49
  const [showControls, setShowControls] = (0, _react.useState)(false);
44
50
  const [showModal, setShowModal] = (0, _react.useState)(false);
51
+ const [plotType, setPlotType] = (0, _react.useState)(defaultPlotType || _constants.PLOT_TYPES.SCATTERPLOT);
52
+ const [showPseudospatialControls, setShowPseudospatialControls] = (0, _react.useState)(false);
53
+ const [pseudospatialPlotType, setpseudospatialPlotType] = (0, _react.useState)(null);
54
+ (0, _react.useEffect)(() => {
55
+ setPlotType(defaultPlotType || _constants.PLOT_TYPES.SCATTERPLOT);
56
+ }, [defaultPlotType]);
57
+ const LgBreakpoint = (0, _material.useMediaQuery)(_constants.BREAKPOINTS.LG);
58
+ const XlBreakpoint = (0, _material.useMediaQuery)(_constants.BREAKPOINTS.XL);
59
+ const showObsBtn = LgBreakpoint;
60
+ const showVarsBtn = XlBreakpoint;
45
61
  (0, _react.useEffect)(() => {
46
62
  const updateDimensions = () => {
47
63
  if (appRef.current) {
@@ -60,9 +76,67 @@ function FullPage(_ref) {
60
76
  }
61
77
  };
62
78
  window.addEventListener("resize", updateDimensions);
63
- updateDimensions(); // Initial update
79
+ updateDimensions();
64
80
  return () => window.removeEventListener("resize", updateDimensions);
65
81
  }, []);
82
+ const {
83
+ plotControls,
84
+ varMode,
85
+ showSelectedAsActive
86
+ } = {
87
+ [_constants.PLOT_TYPES.SCATTERPLOT]: {
88
+ plotControls: _ScatterplotControls.ScatterplotControls,
89
+ varMode: _constants.SELECTION_MODES.SINGLE,
90
+ showSelectedAsActive: false
91
+ },
92
+ [_constants.PLOT_TYPES.DOTPLOT]: {
93
+ plotControls: _DotplotControls.DotplotControls,
94
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
95
+ showSelectedAsActive: true
96
+ },
97
+ [_constants.PLOT_TYPES.MATRIXPLOT]: {
98
+ plotControls: _MatrixplotControls.MatrixplotControls,
99
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
100
+ showSelectedAsActive: true
101
+ },
102
+ [_constants.PLOT_TYPES.HEATMAP]: {
103
+ plotControls: _HeatmapControls.HeatmapControls,
104
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
105
+ showSelectedAsActive: true
106
+ },
107
+ [_constants.PLOT_TYPES.VIOLINPLOT]: {
108
+ plotControls: _ViolinControls.ViolinControls,
109
+ varMode: _constants.SELECTION_MODES.MULTIPLE,
110
+ showSelectedAsActive: false
111
+ }
112
+ }[plotType];
113
+ const plot = (0, _react.useMemo)(() => {
114
+ const commonProps = {
115
+ showObsBtn,
116
+ showVarsBtn,
117
+ showCtrlsBtn: true,
118
+ setShowObs,
119
+ setShowVars,
120
+ setShowControls
121
+ };
122
+ switch (plotType) {
123
+ case _constants.PLOT_TYPES.DOTPLOT:
124
+ return /*#__PURE__*/_react.default.createElement(_Dotplot.Dotplot, commonProps);
125
+ case _constants.PLOT_TYPES.MATRIXPLOT:
126
+ return /*#__PURE__*/_react.default.createElement(_Matrixplot.Matrixplot, commonProps);
127
+ case _constants.PLOT_TYPES.HEATMAP:
128
+ return /*#__PURE__*/_react.default.createElement(_Heatmap.Heatmap, commonProps);
129
+ case _constants.PLOT_TYPES.VIOLINPLOT:
130
+ return /*#__PURE__*/_react.default.createElement(_Violin.Violin, _extends({
131
+ mode: _constants.VIOLIN_MODES.MULTIKEY
132
+ }, commonProps));
133
+ case _constants.PLOT_TYPES.SCATTERPLOT:
134
+ default:
135
+ return /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, _extends({}, commonProps, {
136
+ isFullscreen: true
137
+ }));
138
+ }
139
+ }, [plotType, showObsBtn, showVarsBtn]);
66
140
  return /*#__PURE__*/_react.default.createElement("div", {
67
141
  ref: appRef,
68
142
  className: "cherita-app",
@@ -71,22 +145,33 @@ function FullPage(_ref) {
71
145
  }
72
146
  }, /*#__PURE__*/_react.default.createElement(_DatasetContext.DatasetProvider, props, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Container, {
73
147
  fluid: true,
74
- className: "d-flex g-0",
148
+ className: "cherita-app-container",
75
149
  style: {
76
150
  height: appDimensions.height
77
151
  }
78
152
  }, /*#__PURE__*/_react.default.createElement("div", {
79
153
  className: "cherita-app-obs modern-scrollbars border-end h-100"
80
- }, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, props)), /*#__PURE__*/_react.default.createElement("div", {
81
- className: "cherita-app-canvas flex-grow-1"
82
- }, children({
83
- setShowObs,
84
- setShowVars
85
- })), /*#__PURE__*/_react.default.createElement("div", {
154
+ }, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, _extends({}, props, {
155
+ showSelectedAsActive: showSelectedAsActive,
156
+ showHistograms: varMode === _constants.SELECTION_MODES.SINGLE
157
+ }))), /*#__PURE__*/_react.default.createElement("div", {
158
+ className: "cherita-app-canvas"
159
+ }, plot), /*#__PURE__*/_react.default.createElement("div", {
86
160
  className: "cherita-app-sidebar p-3"
87
161
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Card.Body, {
88
162
  className: "d-flex flex-column p-0"
89
163
  }, /*#__PURE__*/_react.default.createElement("div", {
164
+ className: "sidebar-plotselector"
165
+ }, /*#__PURE__*/_react.default.createElement(_PlotTypeSelector.PlotTypeSelector, {
166
+ currentType: plotType,
167
+ onChange: type => setPlotType(type)
168
+ })), plotType === _constants.PLOT_TYPES.SCATTERPLOT && isPseudospatial ? /*#__PURE__*/_react.default.createElement("div", {
169
+ className: "sidebar-pseudospatial"
170
+ }, /*#__PURE__*/_react.default.createElement(_Pseudospatial.Pseudospatial, {
171
+ plotType: pseudospatialPlotType,
172
+ setPlotType: setpseudospatialPlotType,
173
+ setShowControls: setShowPseudospatialControls
174
+ })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), /*#__PURE__*/_react.default.createElement("div", {
90
175
  className: "sidebar-features modern-scrollbars"
91
176
  }, /*#__PURE__*/_react.default.createElement(_SearchBar.SearchBar, {
92
177
  searchDiseases: searchDiseases,
@@ -99,51 +184,25 @@ function FullPage(_ref) {
99
184
  centered: true
100
185
  }, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Header, {
101
186
  closeButton: true
102
- }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, null)), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObs, {
187
+ }), /*#__PURE__*/_react.default.createElement(_reactBootstrap.Modal.Body, null)), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObs, _extends({}, props, {
188
+ showSelectedAsActive: showSelectedAsActive,
103
189
  show: showObs,
104
190
  handleClose: () => setShowObs(false)
105
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasVars, {
191
+ })), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasVars, {
106
192
  show: showVars,
107
193
  handleClose: () => setShowVars(false),
108
194
  mode: varMode
109
- }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
195
+ }), plotControls && /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
110
196
  show: showControls,
111
197
  handleClose: () => setShowControls(false),
112
- Controls: _ScatterplotControls.ScatterplotControls
198
+ Controls: plotControls
113
199
  }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasObsm, {
114
200
  show: showObsm,
115
201
  handleClose: () => setShowObsm(false)
116
- }))));
117
- }
118
- function FullPageScatterplot(props) {
119
- return /*#__PURE__*/_react.default.createElement(FullPage, _extends({}, props, {
120
- varMode: _constants.SELECTION_MODES.SINGLE
121
- }), _ref2 => {
122
- let {
123
- setShowObs,
124
- setShowVars
125
- } = _ref2;
126
- return /*#__PURE__*/_react.default.createElement(_Scatterplot.Scatterplot, {
127
- setShowObs: setShowObs,
128
- setShowVars: setShowVars,
129
- isFullscreen: true
130
- });
131
- });
132
- }
133
- function FullPagePlots(props) {
134
- return /*#__PURE__*/_react.default.createElement(FullPage, _extends({}, props, {
135
- varMode: _constants.SELECTION_MODES.MULTIPLE
136
- }), /*#__PURE__*/_react.default.createElement("div", {
137
- className: "container-fluid w-100 h-100 d-flex flex-column overflow-y-auto"
138
- }, /*#__PURE__*/_react.default.createElement("div", {
139
- className: "row flex-grow-1"
140
- }, /*#__PURE__*/_react.default.createElement(_Heatmap.Heatmap, null)), /*#__PURE__*/_react.default.createElement("div", {
141
- className: "row flex-grow-1"
142
- }, /*#__PURE__*/_react.default.createElement(_Matrixplot.Matrixplot, null)), /*#__PURE__*/_react.default.createElement("div", {
143
- className: "row flex-grow-1"
144
- }, /*#__PURE__*/_react.default.createElement(_Dotplot.Dotplot, null)), /*#__PURE__*/_react.default.createElement("div", {
145
- className: "row flex-grow-1"
146
- }, /*#__PURE__*/_react.default.createElement(_Violin.Violin, {
147
- mode: _constants.VIOLIN_MODES.GROUPBY
202
+ }), /*#__PURE__*/_react.default.createElement(_offcanvas.OffcanvasControls, {
203
+ show: showPseudospatialControls,
204
+ handleClose: () => setShowPseudospatialControls(false),
205
+ Controls: _PseudospatialToolbar.PseudospatialToolbar,
206
+ plotType: pseudospatialPlotType
148
207
  }))));
149
208
  }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PlotTypeSelector = PlotTypeSelector;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _dotplot = _interopRequireDefault(require("../../../assets/images/plots/dotplot.svg"));
9
+ var _heatmap = _interopRequireDefault(require("../../../assets/images/plots/heatmap.svg"));
10
+ var _matrixplot = _interopRequireDefault(require("../../../assets/images/plots/matrixplot.svg"));
11
+ var _scatterplot = _interopRequireDefault(require("../../../assets/images/plots/scatterplot.svg"));
12
+ var _violin = _interopRequireDefault(require("../../../assets/images/plots/violin.svg"));
13
+ var _constants = require("../../constants/constants");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const iconMap = {
16
+ [_constants.PLOT_TYPES.DOTPLOT]: _dotplot.default,
17
+ [_constants.PLOT_TYPES.MATRIXPLOT]: _matrixplot.default,
18
+ [_constants.PLOT_TYPES.VIOLINPLOT]: _violin.default,
19
+ [_constants.PLOT_TYPES.SCATTERPLOT]: _scatterplot.default,
20
+ [_constants.PLOT_TYPES.HEATMAP]: _heatmap.default
21
+ };
22
+ const plotTypes = Object.entries(iconMap).map(_ref => {
23
+ let [type, icon] = _ref;
24
+ return {
25
+ type,
26
+ icon,
27
+ alt: type.charAt(0).toUpperCase() + type.slice(1)
28
+ };
29
+ });
30
+ function PlotTypeSelector(_ref2) {
31
+ let {
32
+ currentType,
33
+ onChange
34
+ } = _ref2;
35
+ return /*#__PURE__*/_react.default.createElement("div", {
36
+ className: "d-flex gap-2 justify-content-between"
37
+ }, plotTypes.map(_ref3 => {
38
+ let {
39
+ type,
40
+ icon,
41
+ alt
42
+ } = _ref3;
43
+ return /*#__PURE__*/_react.default.createElement("img", {
44
+ key: type,
45
+ src: icon,
46
+ alt: alt,
47
+ height: 32,
48
+ width: 32,
49
+ className: "plotselector-icon".concat(currentType === type ? " active" : ""),
50
+ onClick: () => onChange(type),
51
+ style: {
52
+ borderBottom: currentType === type ? "2px solid #007bff" : "none"
53
+ },
54
+ title: alt
55
+ });
56
+ }));
57
+ }