@haniffalab/cherita-react 0.2.0-dev.2024-05-21.ca7d726c → 0.2.0-dev.2024-09-26.f9979478

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 (32) hide show
  1. package/dist/App.scss +67 -12
  2. package/dist/components/Offcanvas/index.js +9 -6
  3. package/dist/components/dotplot/Dotplot.js +5 -189
  4. package/dist/components/dotplot/DotplotControls.js +197 -0
  5. package/dist/components/heatmap/Heatmap.js +5 -31
  6. package/dist/components/heatmap/HeatmapControls.js +36 -0
  7. package/dist/components/matrixplot/Matrixplot.js +5 -59
  8. package/dist/components/matrixplot/MatrixplotControls.js +65 -0
  9. package/dist/components/obs-list/ObsList.js +251 -93
  10. package/dist/components/obs-list/ObsValueList.js +101 -0
  11. package/dist/components/obsm-list/ObsmList.js +25 -16
  12. package/dist/components/scatterplot/Legend.js +28 -36
  13. package/dist/components/scatterplot/Scatterplot.js +303 -119
  14. package/dist/components/scatterplot/ScatterplotControls.js +93 -0
  15. package/dist/components/scatterplot/SpatialControls.js +172 -0
  16. package/dist/components/scatterplot/Toolbox.js +18 -72
  17. package/dist/components/search-bar/SearchBar.js +2 -2
  18. package/dist/components/search-bar/SearchResults.js +2 -2
  19. package/dist/components/var-list/VarList.js +102 -40
  20. package/dist/components/violin/Violin.js +7 -46
  21. package/dist/components/violin/ViolinControls.js +50 -0
  22. package/dist/constants/colorscales.js +28 -0
  23. package/dist/constants/constants.js +11 -43
  24. package/dist/context/DatasetContext.js +122 -23
  25. package/dist/helpers/color-helper.js +54 -21
  26. package/dist/helpers/zarr-helper.js +39 -17
  27. package/dist/index.js +17 -11
  28. package/dist/utils/LoadingIndicators.js +33 -0
  29. package/dist/utils/requests.js +1 -1
  30. package/dist/utils/search.js +4 -3
  31. package/package.json +10 -4
  32. package/dist/utils/LoadingSpinner.js +0 -44
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SpatialControls = SpatialControls;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
+ var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
+ var _iconsMaterial = require("@mui/icons-material");
11
+ var _editModes = require("@nebula.gl/edit-modes");
12
+ var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
13
+ var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
14
+ var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
15
+ var _DropdownButton = _interopRequireDefault(require("react-bootstrap/DropdownButton"));
16
+ var _ScatterplotControls = require("./ScatterplotControls");
17
+ var _DatasetContext = require("../../context/DatasetContext");
18
+ var _Offcanvas = require("../Offcanvas");
19
+ var _jsxRuntime = require("react/jsx-runtime");
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
22
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
+ function SpatialControls(_ref) {
24
+ var _features$features;
25
+ let {
26
+ mode,
27
+ setMode,
28
+ features,
29
+ setFeatures,
30
+ selectedFeatureIndexes,
31
+ resetBounds,
32
+ increaseZoom,
33
+ decreaseZoom
34
+ } = _ref;
35
+ const dataset = (0, _DatasetContext.useDataset)();
36
+ const dispatch = (0, _DatasetContext.useDatasetDispatch)();
37
+ const [showControls, setShowControls] = (0, _react.useState)(false);
38
+ const handleCloseControls = () => setShowControls(false);
39
+ const handleShowControls = () => setShowControls(true);
40
+ const onSelect = (eventKey, event) => {
41
+ switch (eventKey) {
42
+ case "DrawPolygonMode":
43
+ setMode(() => _editModes.DrawPolygonMode);
44
+ break;
45
+ case "DrawLineStringMode":
46
+ setMode(() => _editModes.DrawLineStringMode);
47
+ break;
48
+ case "DrawPolygonByDraggingMode":
49
+ setMode(() => _editModes.DrawPolygonByDraggingMode);
50
+ break;
51
+ case "DrawRectangleMode":
52
+ setMode(() => _editModes.DrawRectangleMode);
53
+ break;
54
+ case "ModifyMode":
55
+ setMode(() => _editModes.ModifyMode);
56
+ break;
57
+ default:
58
+ setMode(() => _editModes.ViewMode);
59
+ }
60
+ };
61
+ const deleteFeatures = (_eventKey, _event) => {
62
+ setFeatures({
63
+ type: "FeatureCollection",
64
+ features: []
65
+ });
66
+ };
67
+ const polygonControls = /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
68
+ className: "mt-2",
69
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ButtonGroup.default, {
70
+ vertical: true,
71
+ className: "w-100",
72
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
73
+ variant: dataset.sliceBy.polygons ? "primary" : "outline-primary",
74
+ title: "Filter data with polygons",
75
+ onClick: () => {
76
+ setMode(() => _editModes.ViewMode);
77
+ dispatch({
78
+ type: "toggle.slice.polygons"
79
+ });
80
+ },
81
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsMaterial.JoinInner, {})
82
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
83
+ variant: "outline-primary",
84
+ title: "Delete selected polygons",
85
+ onClick: () => {
86
+ const newFeatures = features.features.filter((_f, i) => !selectedFeatureIndexes.includes(i));
87
+ setFeatures({
88
+ type: "FeatureCollection",
89
+ features: newFeatures
90
+ });
91
+ },
92
+ disabled: !selectedFeatureIndexes.length,
93
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
94
+ icon: _freeSolidSvgIcons.faTrash
95
+ })
96
+ })]
97
+ })
98
+ });
99
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
100
+ className: "cherita-spatial-controls",
101
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_ButtonGroup.default, {
102
+ vertical: true,
103
+ className: "w-100",
104
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
105
+ onClick: increaseZoom,
106
+ title: "Increase zoom",
107
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
108
+ icon: _freeSolidSvgIcons.faPlus
109
+ })
110
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
111
+ onClick: decreaseZoom,
112
+ title: "Decrease zoom",
113
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
114
+ icon: _freeSolidSvgIcons.faMinus
115
+ })
116
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
117
+ onClick: resetBounds,
118
+ title: "Reset zoom and center",
119
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
120
+ icon: _freeSolidSvgIcons.faCrosshairs
121
+ })
122
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
123
+ onClick: () => setMode(() => _editModes.ViewMode),
124
+ title: "Set dragging mode",
125
+ variant: mode === _editModes.ViewMode ? "primary" : "outline-primary",
126
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
127
+ icon: _freeSolidSvgIcons.faHand
128
+ })
129
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DropdownButton.default, {
130
+ as: _ButtonGroup.default,
131
+ title: /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
132
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
133
+ icon: _freeSolidSvgIcons.faDrawPolygon
134
+ })
135
+ }),
136
+ drop: "end",
137
+ id: "bg-vertical-dropdown-1",
138
+ className: "caret-off",
139
+ onSelect: onSelect,
140
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Header, {
141
+ children: "Selection tools"
142
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
143
+ eventKey: "DrawPolygonMode",
144
+ children: "Draw a polygon"
145
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
146
+ eventKey: "DrawPolygonByDraggingMode",
147
+ children: "Draw a Polygon by Dragging"
148
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
149
+ eventKey: "ModifyMode",
150
+ children: "Modify polygons"
151
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
152
+ eventKey: "ViewMode",
153
+ children: "Viewing mode"
154
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dropdown.default.Item, {
155
+ onClick: deleteFeatures,
156
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
157
+ icon: _freeSolidSvgIcons.faTrash
158
+ }), " Delete polygons"]
159
+ })]
160
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
161
+ onClick: handleShowControls,
162
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
163
+ icon: _freeSolidSvgIcons.faSliders
164
+ })
165
+ })]
166
+ }), !!(features !== null && features !== void 0 && (_features$features = features.features) !== null && _features$features !== void 0 && _features$features.length) && polygonControls, /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.OffcanvasControls, {
167
+ show: showControls,
168
+ handleClose: handleCloseControls,
169
+ Controls: _ScatterplotControls.ScatterplotControls
170
+ })]
171
+ });
172
+ }
@@ -4,89 +4,35 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Toolbox = Toolbox;
7
- require("bootstrap/dist/css/bootstrap.min.css");
8
- var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
9
7
  var _react = require("react");
10
- var _editModes = require("@nebula.gl/edit-modes");
8
+ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
+ var _reactFontawesome = require("@fortawesome/react-fontawesome");
11
10
  var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
12
- var _DropdownButton = _interopRequireDefault(require("react-bootstrap/DropdownButton"));
13
11
  var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
14
- var _reactFontawesome = require("@fortawesome/react-fontawesome");
15
- var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
12
+ var _ObsmList = require("../obsm-list/ObsmList");
16
13
  var _jsxRuntime = require("react/jsx-runtime");
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
15
  function Toolbox(_ref) {
19
16
  let {
20
17
  mode,
21
- setMode,
22
- features,
23
- setFeatures
18
+ obsLength,
19
+ slicedLength
24
20
  } = _ref;
25
- const onSelect = (eventKey, event) => {
26
- console.log(eventKey); // selected event will trigger
27
- switch (eventKey) {
28
- case "DrawPolygonMode":
29
- setMode(() => _editModes.DrawPolygonMode);
30
- break;
31
- case "DrawLineStringMode":
32
- setMode(() => _editModes.DrawLineStringMode);
33
- break;
34
- case "DrawPolygonByDraggingMode":
35
- setMode(() => _editModes.DrawPolygonByDraggingMode);
36
- break;
37
- case "DrawRectangleMode":
38
- setMode(() => _editModes.DrawRectangleMode);
39
- break;
40
- case "ModifyMode":
41
- setMode(() => _editModes.ModifyMode);
42
- break;
43
- default:
44
- setMode(() => _editModes.ViewMode);
45
- }
46
- };
47
- const deleteFeatures = (eventKey, event) => {
48
- console.log(eventKey); // selected event will trigger
49
- setFeatures({
50
- type: "FeatureCollection",
51
- features: []
52
- });
53
- };
54
21
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
55
22
  className: "cherita-toolbox",
56
23
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ButtonGroup.default, {
57
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_DropdownButton.default, {
58
- as: _ButtonGroup.default,
59
- title: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
60
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
61
- icon: _freeSolidSvgIcons.faArrowPointer
62
- }), " Mode"]
63
- }),
64
- id: "bg-nested-dropdown",
65
- onSelect: onSelect,
66
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
67
- eventKey: "DrawPolygonMode",
68
- children: "DrawPolygonMode"
69
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
70
- eventKey: "DrawLineStringMode",
71
- children: "DrawLineStringMode"
72
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
73
- eventKey: "DrawPolygonByDraggingMode",
74
- children: "DrawPolygonByDraggingMode"
75
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
76
- eventKey: "DrawRectangleMode",
77
- children: "DrawRectangleMode"
78
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
79
- eventKey: "ModifyMode",
80
- children: "ModifyMode"
81
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dropdown.default.Item, {
82
- eventKey: "ViewMode",
83
- children: "ViewMode"
84
- })]
85
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
86
- variant: "primary",
87
- onClick: deleteFeatures,
88
- children: "Delete"
89
- })]
24
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ObsmList.ObsmKeysList, {}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
25
+ size: "sm",
26
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
27
+ icon: _freeSolidSvgIcons.faDroplet
28
+ }), " ", mode]
29
+ }), (mode || !Number.isNaN(obsLength)) && (mode !== null && !Number.isNaN(slicedLength) && slicedLength !== obsLength ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
30
+ size: "sm",
31
+ children: [slicedLength.toLocaleString(), " out of", " ", obsLength.toLocaleString(), " cells"]
32
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
33
+ size: "sm",
34
+ children: [obsLength.toLocaleString(), " cells"]
35
+ }))]
90
36
  })
91
37
  });
92
38
  }
@@ -9,9 +9,9 @@ var _lodash = _interopRequireDefault(require("lodash"));
9
9
  var _reactBootstrap = require("react-bootstrap");
10
10
  var _SearchResults = require("./SearchResults");
11
11
  var _jsxRuntime = require("react/jsx-runtime");
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
15
  function SearchBar(_ref) {
16
16
  let {
17
17
  searchVar = true,
@@ -11,9 +11,9 @@ var _reactBootstrap = require("react-bootstrap");
11
11
  var _DatasetContext = require("../../context/DatasetContext");
12
12
  var _search = require("../../utils/search");
13
13
  var _jsxRuntime = require("react/jsx-runtime");
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
17
  function VarSearchResults(_ref) {
18
18
  let {
19
19
  text,
@@ -4,16 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.VarNamesList = VarNamesList;
7
- require("bootstrap/dist/css/bootstrap.min.css");
8
7
  var _react = _interopRequireWildcard(require("react"));
8
+ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
+ var _reactFontawesome = require("@fortawesome/react-fontawesome");
9
10
  var _lodash = _interopRequireDefault(require("lodash"));
10
- var _DatasetContext = require("../../context/DatasetContext");
11
- var _constants = require("../../constants/constants");
12
11
  var _reactBootstrap = require("react-bootstrap");
12
+ var _constants = require("../../constants/constants");
13
+ var _DatasetContext = require("../../context/DatasetContext");
13
14
  var _jsxRuntime = require("react/jsx-runtime");
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
16
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
18
  function VarNamesList(_ref) {
18
19
  var _dataset$selectedVar, _dataset$selectedDise, _dataset$selectedDise2, _dataset$selectedDise3;
19
20
  let {
@@ -31,7 +32,7 @@ function VarNamesList(_ref) {
31
32
  if (dataset.selectedVar) {
32
33
  return _lodash.default.unionWith(v, [dataset.selectedVar], _lodash.default.isEqual);
33
34
  } else {
34
- return [];
35
+ return v;
35
36
  }
36
37
  });
37
38
  setActive((_dataset$selectedVar2 = dataset.selectedVar) === null || _dataset$selectedVar2 === void 0 ? void 0 : _dataset$selectedVar2.matrix_index);
@@ -43,7 +44,7 @@ function VarNamesList(_ref) {
43
44
  if (dataset.selectedMultiVar.length) {
44
45
  return _lodash.default.unionWith(v, dataset.selectedMultiVar, _lodash.default.isEqual);
45
46
  } else {
46
- return [];
47
+ return v;
47
48
  }
48
49
  });
49
50
  setActive(dataset.selectedMultiVar.map(i => i.matrix_index));
@@ -52,7 +53,7 @@ function VarNamesList(_ref) {
52
53
  const selectVar = (0, _react.useCallback)(item => {
53
54
  if (mode === _constants.SELECTION_MODES.SINGLE) {
54
55
  dispatch({
55
- type: "varSelected",
56
+ type: "select.var",
56
57
  var: item
57
58
  });
58
59
  dispatch({
@@ -61,49 +62,107 @@ function VarNamesList(_ref) {
61
62
  });
62
63
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
63
64
  dispatch({
64
- type: "multiVarSelected",
65
+ type: "select.multivar",
65
66
  var: item
66
67
  });
67
68
  }
68
69
  }, [dispatch, mode]);
70
+ const removeVar = (0, _react.useCallback)(v => {
71
+ setVarButtons(b => {
72
+ return b.filter(i => i.name !== v.name);
73
+ });
74
+ if (mode === _constants.SELECTION_MODES.SINGLE) {
75
+ if (active === v.matrix_index) {
76
+ dispatch({
77
+ type: "deselect.var"
78
+ });
79
+ }
80
+ } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
81
+ if (active.includes(v.matrix_index)) {
82
+ dispatch({
83
+ type: "deselect.multivar",
84
+ var: v
85
+ });
86
+ }
87
+ }
88
+ }, [active, dispatch, mode]);
69
89
  const makeList = (0, _react.useCallback)(vars => {
70
90
  return vars.map(item => {
71
91
  if (item && mode === _constants.SELECTION_MODES.SINGLE) {
72
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
73
- type: "button",
74
- variant: item.matrix_index !== -1 ? "outline-primary" : "outline-secondary",
75
- className: "".concat(active === item.matrix_index && "active", " m-1"),
76
- onClick: () => {
77
- selectVar(item);
78
- },
79
- disabled: item.matrix_index === -1,
80
- title: item.matrix_index === -1 ? "Not present in data" : "",
81
- children: item.name
82
- }, item.matrix_index);
92
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
93
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
94
+ className: "d-flex gap-1",
95
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
96
+ className: "flex-grow-1",
97
+ children: item.name
98
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
99
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
100
+ icon: _freeSolidSvgIcons.faCircleInfo
101
+ })
102
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
103
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
104
+ type: "button",
105
+ variant: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR && active === item.matrix_index ? "primary" : "outline-primary",
106
+ className: "m-0 p-0 px-1",
107
+ onClick: () => {
108
+ selectVar(item);
109
+ },
110
+ disabled: item.matrix_index === -1,
111
+ title: item.matrix_index === -1 ? "Not present in data" : "Set as color encoding",
112
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
113
+ icon: _freeSolidSvgIcons.faDroplet
114
+ })
115
+ }, item.matrix_index)
116
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
117
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
118
+ type: "button",
119
+ className: "m-0 p-0 px-1",
120
+ variant: "outline-secondary",
121
+ title: "Remove from list",
122
+ onClick: () => removeVar(item),
123
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
124
+ icon: _freeSolidSvgIcons.faTrash
125
+ })
126
+ })
127
+ })]
128
+ })
129
+ }, item.name);
83
130
  } else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
84
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
85
- type: "button",
86
- variant: item.matrix_index !== -1 ? "outline-primary" : "outline-secondary",
87
- className: "".concat(active.includes(item.matrix_index) && "active", " m-1"),
88
- onClick: () => {
89
- if (active.includes(item.matrix_index)) {
90
- dispatch({
91
- type: "multiVarDeselected",
92
- var: item
93
- });
94
- } else {
95
- selectVar(item);
96
- }
97
- },
98
- disabled: item.matrix_index === -1,
99
- title: item.matrix_index === -1 ? "Not present in data" : "",
100
- children: item.name
101
- }, item.matrix_index);
131
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
132
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
133
+ className: "d-flex",
134
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
135
+ className: "flex-grow-1",
136
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
137
+ type: "button",
138
+ variant: item.matrix_index !== -1 && _lodash.default.includes(active, item.matrix_index) ? "primary" : "outline-primary",
139
+ className: "m-0 p-0 px-1",
140
+ onClick: () => {
141
+ if (active.includes(item.matrix_index)) {
142
+ dispatch({
143
+ type: "deselect.multivar",
144
+ var: item
145
+ });
146
+ } else {
147
+ selectVar(item);
148
+ }
149
+ },
150
+ disabled: item.matrix_index === -1,
151
+ title: item.matrix_index === -1 ? "Not present in data" : "",
152
+ children: item.name
153
+ }, item.matrix_index)
154
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
155
+ children: [" ", /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
156
+ icon: _freeSolidSvgIcons.faPlus
157
+ })]
158
+ })]
159
+ })
160
+ }, item.name);
102
161
  } else {
103
162
  return null;
104
163
  }
105
164
  });
106
- }, [active, dispatch, mode, selectVar]);
165
+ }, [active, dataset.colorEncoding, dispatch, mode, removeVar, selectVar]);
107
166
  const varList = (0, _react.useMemo)(() => {
108
167
  return makeList(varButtons);
109
168
  }, [makeList, varButtons]);
@@ -122,13 +181,16 @@ function VarNamesList(_ref) {
122
181
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
123
182
  variant: "link",
124
183
  onClick: () => {
184
+ setVarButtons([]);
125
185
  dispatch({
126
186
  type: mode === _constants.SELECTION_MODES.SINGLE ? "reset.var" : "reset.multiVar"
127
187
  });
128
188
  },
129
189
  children: "clear"
130
190
  })]
131
- }), varList]
191
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup, {
192
+ children: varList
193
+ })]
132
194
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
133
195
  children: ((_dataset$selectedDise = dataset.selectedDisease) === null || _dataset$selectedDise === void 0 ? void 0 : _dataset$selectedDise.id) && ((_dataset$selectedDise2 = dataset.selectedDisease) === null || _dataset$selectedDise2 === void 0 || (_dataset$selectedDise2 = _dataset$selectedDise2.genes) === null || _dataset$selectedDise2 === void 0 ? void 0 : _dataset$selectedDise2.length) > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
134
196
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
@@ -4,58 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Violin = Violin;
7
- exports.ViolinControls = ViolinControls;
8
- require("bootstrap/dist/css/bootstrap.min.css");
9
7
  var _react = _interopRequireWildcard(require("react"));
10
- var _reactFontawesome = require("@fortawesome/react-fontawesome");
11
8
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
9
+ var _reactFontawesome = require("@fortawesome/react-fontawesome");
10
+ var _reactBootstrap = require("react-bootstrap");
12
11
  var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
13
- var _DatasetContext = require("../../context/DatasetContext");
14
12
  var _constants = require("../../constants/constants");
15
- var _reactBootstrap = require("react-bootstrap");
13
+ var _DatasetContext = require("../../context/DatasetContext");
14
+ var _LoadingIndicators = require("../../utils/LoadingIndicators");
16
15
  var _requests = require("../../utils/requests");
17
- var _LoadingSpinner = require("../../utils/LoadingSpinner");
18
16
  var _jsxRuntime = require("react/jsx-runtime");
19
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
21
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
22
- function ViolinControls() {
23
- const dataset = (0, _DatasetContext.useDataset)();
24
- const dispatch = (0, _DatasetContext.useDatasetDispatch)();
25
- const [activeStandardScale, setActiveStandardScale] = (0, _react.useState)(dataset.controls.standardScale);
26
- (0, _react.useEffect)(() => {
27
- if (dataset.controls.standardScale) {
28
- setActiveStandardScale(_constants.VIOLINPLOT_STANDARDSCALES.find(obs => obs.value === dataset.controls.standardScale).name);
29
- }
30
- }, [dataset.controls.standardScale]);
31
- const standardScaleList = _constants.VIOLINPLOT_STANDARDSCALES.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
32
- active: activeStandardScale === item.value,
33
- onClick: () => {
34
- dispatch({
35
- type: "set.controls.standardScale",
36
- standardScale: item.value
37
- });
38
- },
39
- children: item.name
40
- }, item.value));
41
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonToolbar, {
42
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonGroup, {
43
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.InputGroup, {
44
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.InputGroup.Text, {
45
- children: "Standard scale"
46
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown, {
47
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Toggle, {
48
- id: "dropdownStandardScale",
49
- variant: "light",
50
- children: activeStandardScale
51
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Menu, {
52
- children: standardScaleList
53
- })]
54
- })]
55
- })
56
- })
57
- });
58
- }
19
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
59
20
  function Violin(_ref) {
60
21
  let {
61
22
  mode = _constants.VIOLIN_MODES.MULTIKEY
@@ -124,7 +85,7 @@ function Violin(_ref) {
124
85
  if (hasSelections) {
125
86
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
126
87
  className: "cherita-violin position-relative",
127
- children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingSpinner.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
88
+ children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)("h5", {
128
89
  children: mode
129
90
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
130
91
  data: data,
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ViolinControls = ViolinControls;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactBootstrap = require("react-bootstrap");
9
+ var _constants = require("../../constants/constants");
10
+ var _DatasetContext = require("../../context/DatasetContext");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
+ function ViolinControls() {
15
+ const dataset = (0, _DatasetContext.useDataset)();
16
+ const dispatch = (0, _DatasetContext.useDatasetDispatch)();
17
+ const [activeStandardScale, setActiveStandardScale] = (0, _react.useState)(dataset.controls.standardScale);
18
+ (0, _react.useEffect)(() => {
19
+ if (dataset.controls.standardScale) {
20
+ setActiveStandardScale(_constants.VIOLINPLOT_STANDARDSCALES.find(obs => obs.value === dataset.controls.standardScale).name);
21
+ }
22
+ }, [dataset.controls.standardScale]);
23
+ const standardScaleList = _constants.VIOLINPLOT_STANDARDSCALES.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
24
+ active: activeStandardScale === item.value,
25
+ onClick: () => {
26
+ dispatch({
27
+ type: "set.controls.standardScale",
28
+ standardScale: item.value
29
+ });
30
+ },
31
+ children: item.name
32
+ }, item.value));
33
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonToolbar, {
34
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonGroup, {
35
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.InputGroup, {
36
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.InputGroup.Text, {
37
+ children: "Standard scale"
38
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown, {
39
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Toggle, {
40
+ id: "dropdownStandardScale",
41
+ variant: "light",
42
+ children: activeStandardScale
43
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Menu, {
44
+ children: standardScaleList
45
+ })]
46
+ })]
47
+ })
48
+ })
49
+ });
50
+ }