@haniffalab/cherita-react 1.5.0 → 2.0.0-dev.2026-04-27.sha-2acdfe23
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.
- package/dist/cjs/components/dotplot/Dotplot.js +27 -23
- package/dist/cjs/components/dotplot/DotplotControls.js +7 -3
- package/dist/cjs/components/heatmap/Heatmap.js +27 -23
- package/dist/cjs/components/icons/HeatmapIcon.js +2 -2
- package/dist/cjs/components/matrixplot/Matrixplot.js +28 -24
- package/dist/cjs/components/obs-list/ObsItem.js +2 -2
- package/dist/cjs/components/offcanvas/{index.js → OffCanvas.js} +39 -3
- package/dist/cjs/components/{full-page → plot}/PlotAlert.js +1 -1
- package/dist/cjs/components/{full-page → plot}/PlotTypeSelector.js +49 -10
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +3 -2
- package/dist/cjs/components/scatterplot/Scatterplot.js +61 -35
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +74 -28
- package/dist/cjs/components/scatterplot/SpatialControls.js +44 -28
- package/dist/cjs/components/scatterplot/Toolbox.js +8 -4
- package/dist/cjs/components/search-bar/SearchBar.js +14 -6
- package/dist/cjs/components/search-bar/SearchInfo.js +70 -27
- package/dist/cjs/components/search-bar/SearchResults.js +62 -50
- package/dist/cjs/components/toolbar/Toolbar.js +35 -85
- package/dist/cjs/components/var-list/VarList.js +24 -18
- package/dist/cjs/components/var-list/VarListToolbar.js +1 -1
- package/dist/cjs/components/var-list/VarSet.js +8 -6
- package/dist/cjs/components/violin/Violin.js +32 -28
- package/dist/cjs/constants/constants.js +1 -1
- package/dist/cjs/context/DatasetContext.js +19 -2
- package/dist/cjs/context/SettingsContext.js +19 -5
- package/dist/cjs/helpers/zarr-helper.js +20 -6
- package/dist/cjs/index.js +16 -30
- package/dist/cjs/utils/Skeleton.js +38 -2
- package/dist/cjs/utils/Slider.js +61 -0
- package/dist/cjs/utils/VirtualizedTable.js +97 -0
- package/dist/cjs/utils/parquetData.js +60 -0
- package/dist/cjs/utils/requests.js +2 -2
- package/dist/cjs/utils/useNCBIData.js +35 -0
- package/dist/cjs/utils/usePlotVisibility.js +21 -0
- package/dist/cjs/utils/zarrData.js +51 -2
- package/dist/cjs/{components/plot/Plot.js → views/ObservationFeature/EmbeddedPlot.js} +41 -37
- package/dist/cjs/{components/full-page/FullPage.js → views/ObservationFeature/StandardView.js} +40 -49
- package/dist/cjs/views/ObservationFeature/index.js +12 -0
- package/dist/cjs/views/PerturbationMap/EmbeddedPlot.js +56 -0
- package/dist/cjs/views/PerturbationMap/ObsExplorer.js +301 -0
- package/dist/cjs/{apps/perturbgen/PerturbGen.js → views/PerturbationMap/StandardView.js} +21 -28
- package/dist/cjs/views/PerturbationMap/index.js +12 -0
- package/dist/css/cherita.css +16 -7
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/dotplot/Dotplot.js +29 -25
- package/dist/esm/components/dotplot/DotplotControls.js +6 -3
- package/dist/esm/components/heatmap/Heatmap.js +29 -25
- package/dist/esm/components/icons/HeatmapIcon.js +2 -2
- package/dist/esm/components/matrixplot/Matrixplot.js +30 -26
- package/dist/esm/components/obs-list/ObsItem.js +2 -2
- package/dist/esm/components/offcanvas/{index.js → OffCanvas.js} +38 -3
- package/dist/esm/components/{full-page → plot}/PlotAlert.js +1 -1
- package/dist/esm/components/{full-page → plot}/PlotTypeSelector.js +49 -10
- package/dist/esm/components/pseudospatial/Pseudospatial.js +3 -2
- package/dist/esm/components/scatterplot/Scatterplot.js +62 -36
- package/dist/esm/components/scatterplot/ScatterplotControls.js +74 -28
- package/dist/esm/components/scatterplot/SpatialControls.js +44 -28
- package/dist/esm/components/scatterplot/Toolbox.js +8 -4
- package/dist/esm/components/search-bar/SearchBar.js +14 -6
- package/dist/esm/components/search-bar/SearchInfo.js +71 -28
- package/dist/esm/components/search-bar/SearchResults.js +62 -50
- package/dist/esm/components/toolbar/Toolbar.js +32 -81
- package/dist/esm/components/var-list/VarList.js +24 -18
- package/dist/esm/components/var-list/VarListToolbar.js +1 -1
- package/dist/esm/components/var-list/VarSet.js +8 -6
- package/dist/esm/components/violin/Violin.js +34 -30
- package/dist/esm/constants/constants.js +1 -1
- package/dist/esm/context/DatasetContext.js +19 -2
- package/dist/esm/context/SettingsContext.js +19 -5
- package/dist/esm/helpers/zarr-helper.js +19 -5
- package/dist/esm/index.js +4 -6
- package/dist/esm/utils/Skeleton.js +35 -1
- package/dist/esm/utils/Slider.js +54 -0
- package/dist/esm/utils/VirtualizedTable.js +89 -0
- package/dist/esm/utils/parquetData.js +51 -0
- package/dist/esm/utils/requests.js +2 -2
- package/dist/esm/utils/useNCBIData.js +28 -0
- package/dist/esm/utils/usePlotVisibility.js +14 -0
- package/dist/esm/utils/zarrData.js +48 -0
- package/dist/esm/{components/plot/Plot.js → views/ObservationFeature/EmbeddedPlot.js} +37 -33
- package/dist/esm/{components/full-page/FullPage.js → views/ObservationFeature/StandardView.js} +35 -44
- package/dist/esm/views/ObservationFeature/index.js +6 -0
- package/dist/esm/views/PerturbationMap/EmbeddedPlot.js +50 -0
- package/dist/esm/views/PerturbationMap/ObsExplorer.js +294 -0
- package/dist/esm/{apps/perturbgen/PerturbGen.js → views/PerturbationMap/StandardView.js} +17 -24
- package/dist/esm/views/PerturbationMap/index.js +6 -0
- package/package.json +16 -8
- package/scss/cherita.scss +1 -1
- package/scss/components/layouts.scss +0 -1
- package/scss/components/lists.scss +1 -1
- package/scss/components/plotly.scss +10 -1
- package/scss/components/plots.scss +7 -4
- package/dist/cjs/apps/perturbgen/ObsExplorer.js +0 -153
- package/dist/esm/apps/perturbgen/ObsExplorer.js +0 -147
|
@@ -15,7 +15,8 @@ var _SettingsContext = require("../../context/SettingsContext");
|
|
|
15
15
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
16
16
|
var _requests = require("../../utils/requests");
|
|
17
17
|
var _Resolver = require("../../utils/Resolver");
|
|
18
|
-
var
|
|
18
|
+
var _usePlotVisibility = _interopRequireDefault(require("../../utils/usePlotVisibility"));
|
|
19
|
+
var _PlotAlert = require("../plot/PlotAlert");
|
|
19
20
|
var _Toolbar = require("../toolbar/Toolbar");
|
|
20
21
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
22
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -26,14 +27,11 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
26
27
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
27
28
|
function Dotplot(_ref) {
|
|
28
29
|
let {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
showCtrlsBtn = false,
|
|
32
|
-
setShowObs,
|
|
33
|
-
setShowVars,
|
|
30
|
+
setShowCategories,
|
|
31
|
+
setShowSearch,
|
|
34
32
|
setShowControls,
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
setPlotType,
|
|
34
|
+
isFullscreen = false
|
|
37
35
|
} = _ref;
|
|
38
36
|
const ENDPOINT = 'dotplot';
|
|
39
37
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -49,6 +47,10 @@ function Dotplot(_ref) {
|
|
|
49
47
|
const [hasSelections, setHasSelections] = (0, _react.useState)(false);
|
|
50
48
|
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
51
49
|
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
50
|
+
const {
|
|
51
|
+
showCategoriesBtn,
|
|
52
|
+
showSearchBtn
|
|
53
|
+
} = (0, _usePlotVisibility.default)(isFullscreen);
|
|
52
54
|
const params = (0, _react.useMemo)(() => {
|
|
53
55
|
var _selectedObs$omit;
|
|
54
56
|
return {
|
|
@@ -125,19 +127,21 @@ function Dotplot(_ref) {
|
|
|
125
127
|
});
|
|
126
128
|
});
|
|
127
129
|
}, [settings.controls.colorAxis.cmin, settings.controls.colorAxis.cmax]);
|
|
128
|
-
const
|
|
129
|
-
onClick: setShowObs
|
|
130
|
-
}), showVarsBtn && (0, _Toolbar.VarPlotlyToolbar)({
|
|
131
|
-
onClick: setShowVars
|
|
132
|
-
}), showCtrlsBtn && (0, _Toolbar.ControlsPlotlyToolbar)({
|
|
130
|
+
const modeBarButtons = [_lodash.default.compact([(0, _Toolbar.PlotlyModebarControls)({
|
|
133
131
|
onClick: setShowControls
|
|
134
|
-
})]);
|
|
135
|
-
const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
|
|
132
|
+
}), ..._constants.PLOTLY_MODEBAR_BUTTONS])];
|
|
136
133
|
if (!serverError) {
|
|
137
134
|
if (hasSelections) {
|
|
138
135
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
139
136
|
className: "cherita-plot cherita-dotplot position-relative",
|
|
140
|
-
children: [
|
|
137
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
138
|
+
className: "plotly-toolbar",
|
|
139
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.PlotlyToolbar, {
|
|
140
|
+
setShowCategories: setShowCategories,
|
|
141
|
+
setShowSearch: setShowSearch,
|
|
142
|
+
isFullscreen: isFullscreen
|
|
143
|
+
})
|
|
144
|
+
}), isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
|
|
141
145
|
data: data,
|
|
142
146
|
layout: layout,
|
|
143
147
|
useResizeHandler: true,
|
|
@@ -155,19 +159,19 @@ function Dotplot(_ref) {
|
|
|
155
159
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
|
|
156
160
|
variant: "info",
|
|
157
161
|
heading: "Set up your dotplot",
|
|
158
|
-
plotType:
|
|
162
|
+
plotType: _constants.PLOT_TYPES.DOTPLOT,
|
|
159
163
|
setPlotType: setPlotType,
|
|
160
164
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
|
|
161
165
|
className: "p-0 m-0",
|
|
162
|
-
children: ["Select one or more", ' ',
|
|
166
|
+
children: ["Select one or more", ' ', showSearchBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
|
|
163
167
|
variant: "link",
|
|
164
168
|
className: "border-0 p-0 align-baseline",
|
|
165
|
-
onClick:
|
|
166
|
-
children:
|
|
167
|
-
}) :
|
|
169
|
+
onClick: setShowSearch,
|
|
170
|
+
children: dataset.varLabel.plural
|
|
171
|
+
}) : dataset.varLabel.plural, ' ', "to display their ", dataset.valueLabel, " across groups, then choose a", ' ', showCategoriesBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
|
|
168
172
|
variant: "link",
|
|
169
173
|
className: "border-0 p-0 align-baseline",
|
|
170
|
-
onClick:
|
|
174
|
+
onClick: setShowCategories,
|
|
171
175
|
children: "category"
|
|
172
176
|
}) : 'category', ' ', "to group observations in the dotplot."]
|
|
173
177
|
})
|
|
@@ -176,7 +180,7 @@ function Dotplot(_ref) {
|
|
|
176
180
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
|
|
177
181
|
variant: "danger",
|
|
178
182
|
heading: "Error displaying the dotplot",
|
|
179
|
-
plotType:
|
|
183
|
+
plotType: _constants.PLOT_TYPES.DOTPLOT,
|
|
180
184
|
setPlotType: setPlotType,
|
|
181
185
|
children: serverError.message || 'An unexpected error occurred while generating the plot.'
|
|
182
186
|
});
|
|
@@ -5,10 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.DotplotControls = DotplotControls;
|
|
7
7
|
var _react = require("react");
|
|
8
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
9
|
var _reactBootstrap = require("react-bootstrap");
|
|
10
|
+
var _DatasetContext = require("../../context/DatasetContext");
|
|
9
11
|
var _SettingsContext = require("../../context/SettingsContext");
|
|
10
12
|
var _Controls = require("../controls/Controls");
|
|
11
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
15
|
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; }
|
|
13
16
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
17
|
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; }
|
|
@@ -17,6 +20,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
17
20
|
function DotplotControls() {
|
|
18
21
|
const settings = (0, _SettingsContext.useSettings)();
|
|
19
22
|
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
23
|
+
const dataset = (0, _DatasetContext.useDataset)();
|
|
20
24
|
const [controls, setControls] = (0, _react.useState)({
|
|
21
25
|
expressionCutoff: settings.controls.expressionCutoff,
|
|
22
26
|
colorAxis: {
|
|
@@ -97,8 +101,8 @@ function DotplotControls() {
|
|
|
97
101
|
plot: "dotplot"
|
|
98
102
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Form.Group, {
|
|
99
103
|
className: "mb-2",
|
|
100
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.
|
|
101
|
-
children: "
|
|
104
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Form.Label, {
|
|
105
|
+
children: [_lodash.default.capitalize(dataset.valueLabel), " Cutoff"]
|
|
102
106
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.InputGroup, {
|
|
103
107
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Control, {
|
|
104
108
|
size: "sm",
|
|
@@ -125,7 +129,7 @@ function DotplotControls() {
|
|
|
125
129
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Form.Check, {
|
|
126
130
|
type: "switch",
|
|
127
131
|
id: "meanOnlyExpressed",
|
|
128
|
-
label: "Average only above cutoff",
|
|
132
|
+
label: "Average only above ".concat(dataset.valueLabel, " cutoff"),
|
|
129
133
|
checked: settings.controls.meanOnlyExpressed,
|
|
130
134
|
onChange: () => {
|
|
131
135
|
dispatch({
|
|
@@ -15,7 +15,8 @@ var _SettingsContext = require("../../context/SettingsContext");
|
|
|
15
15
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
16
16
|
var _requests = require("../../utils/requests");
|
|
17
17
|
var _Resolver = require("../../utils/Resolver");
|
|
18
|
-
var
|
|
18
|
+
var _usePlotVisibility = _interopRequireDefault(require("../../utils/usePlotVisibility"));
|
|
19
|
+
var _PlotAlert = require("../plot/PlotAlert");
|
|
19
20
|
var _Toolbar = require("../toolbar/Toolbar");
|
|
20
21
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
22
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -26,14 +27,11 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
26
27
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
27
28
|
function Heatmap(_ref) {
|
|
28
29
|
let {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
showCtrlsBtn = false,
|
|
32
|
-
setShowObs,
|
|
33
|
-
setShowVars,
|
|
30
|
+
setShowCategories,
|
|
31
|
+
setShowSearch,
|
|
34
32
|
setShowControls,
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
setPlotType,
|
|
34
|
+
isFullscreen = false
|
|
37
35
|
} = _ref;
|
|
38
36
|
const ENDPOINT = 'heatmap';
|
|
39
37
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -48,6 +46,10 @@ function Heatmap(_ref) {
|
|
|
48
46
|
const [hasSelections, setHasSelections] = (0, _react.useState)(false);
|
|
49
47
|
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
50
48
|
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
49
|
+
const {
|
|
50
|
+
showCategoriesBtn,
|
|
51
|
+
showSearchBtn
|
|
52
|
+
} = (0, _usePlotVisibility.default)(isFullscreen);
|
|
51
53
|
const params = (0, _react.useMemo)(() => {
|
|
52
54
|
var _selectedObs$omit;
|
|
53
55
|
return {
|
|
@@ -99,19 +101,21 @@ function Heatmap(_ref) {
|
|
|
99
101
|
colorscale.current = settings.controls.colorScale;
|
|
100
102
|
updateColorscale(colorscale.current);
|
|
101
103
|
}, [settings.controls.colorScale, updateColorscale]);
|
|
102
|
-
const
|
|
103
|
-
onClick: setShowObs
|
|
104
|
-
}), showVarsBtn && (0, _Toolbar.VarPlotlyToolbar)({
|
|
105
|
-
onClick: setShowVars
|
|
106
|
-
}), showCtrlsBtn && (0, _Toolbar.ControlsPlotlyToolbar)({
|
|
104
|
+
const modeBarButtons = [_lodash.default.compact([(0, _Toolbar.PlotlyModebarControls)({
|
|
107
105
|
onClick: setShowControls
|
|
108
|
-
})]);
|
|
109
|
-
const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
|
|
106
|
+
}), ..._constants.PLOTLY_MODEBAR_BUTTONS])];
|
|
110
107
|
if (!serverError) {
|
|
111
108
|
if (hasSelections) {
|
|
112
109
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
113
110
|
className: "cherita-plot cherita-heatmap position-relative",
|
|
114
|
-
children: [
|
|
111
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
112
|
+
className: "plotly-toolbar",
|
|
113
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.PlotlyToolbar, {
|
|
114
|
+
setShowCategories: setShowCategories,
|
|
115
|
+
setShowSearch: setShowSearch,
|
|
116
|
+
isFullscreen: isFullscreen
|
|
117
|
+
})
|
|
118
|
+
}), isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
|
|
115
119
|
data: data,
|
|
116
120
|
layout: layout,
|
|
117
121
|
useResizeHandler: true,
|
|
@@ -129,19 +133,19 @@ function Heatmap(_ref) {
|
|
|
129
133
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
|
|
130
134
|
variant: "info",
|
|
131
135
|
heading: "Set up your heatmap",
|
|
132
|
-
plotType:
|
|
136
|
+
plotType: _constants.PLOT_TYPES.HEATMAP,
|
|
133
137
|
setPlotType: setPlotType,
|
|
134
138
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
|
|
135
139
|
className: "p-0 m-0",
|
|
136
|
-
children: ["Select one or more", ' ',
|
|
140
|
+
children: ["Select one or more", ' ', showSearchBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
|
|
137
141
|
variant: "link",
|
|
138
142
|
className: "border-0 p-0 align-baseline",
|
|
139
|
-
onClick:
|
|
140
|
-
children:
|
|
141
|
-
}) :
|
|
143
|
+
onClick: setShowSearch,
|
|
144
|
+
children: dataset.varLabel.plural
|
|
145
|
+
}) : dataset.varLabel.plural, ' ', "to display their ", dataset.valueLabel, ", then choose a", ' ', showCategoriesBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
|
|
142
146
|
variant: "link",
|
|
143
147
|
className: "border-0 p-0 align-baseline",
|
|
144
|
-
onClick:
|
|
148
|
+
onClick: setShowCategories,
|
|
145
149
|
children: "category"
|
|
146
150
|
}) : 'category', ' ', "to group observations in the heatmap."]
|
|
147
151
|
})
|
|
@@ -150,7 +154,7 @@ function Heatmap(_ref) {
|
|
|
150
154
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
|
|
151
155
|
variant: "danger",
|
|
152
156
|
heading: "Error displaying the heatmap",
|
|
153
|
-
plotType:
|
|
157
|
+
plotType: _constants.PLOT_TYPES.HEATMAP,
|
|
154
158
|
setPlotType: setPlotType,
|
|
155
159
|
children: serverError.message || 'An unexpected error occurred while generating the plot.'
|
|
156
160
|
});
|
|
@@ -20,8 +20,8 @@ function HeatmapIcon(_ref) {
|
|
|
20
20
|
gap = 1
|
|
21
21
|
} = _ref,
|
|
22
22
|
props = _objectWithoutProperties(_ref, _excluded);
|
|
23
|
-
const rows = 6; //
|
|
24
|
-
const cols = 8; //
|
|
23
|
+
const rows = 6; // features
|
|
24
|
+
const cols = 8; // observations
|
|
25
25
|
|
|
26
26
|
// Example expression pattern for visual clusters
|
|
27
27
|
const expressionLevels = [[1, 0.8, 0.2, 0.2, 0.5, 0.9, 1, 0.7], [0.9, 0.7, 0.1, 0.2, 0.4, 0.8, 0.9, 0.6], [0.1, 0.2, 0.8, 0.9, 0.7, 0.2, 0.1, 0.3], [0.2, 0.3, 0.9, 1, 0.8, 0.3, 0.2, 0.4], [0.5, 0.6, 0.2, 0.1, 0.9, 0.7, 0.6, 0.8], [0.6, 0.7, 0.3, 0.2, 0.8, 0.6, 0.7, 0.9]];
|
|
@@ -15,7 +15,8 @@ var _SettingsContext = require("../../context/SettingsContext");
|
|
|
15
15
|
var _LoadingIndicators = require("../../utils/LoadingIndicators");
|
|
16
16
|
var _requests = require("../../utils/requests");
|
|
17
17
|
var _Resolver = require("../../utils/Resolver");
|
|
18
|
-
var
|
|
18
|
+
var _usePlotVisibility = _interopRequireDefault(require("../../utils/usePlotVisibility"));
|
|
19
|
+
var _PlotAlert = require("../plot/PlotAlert");
|
|
19
20
|
var _Toolbar = require("../toolbar/Toolbar");
|
|
20
21
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
22
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -26,14 +27,11 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
26
27
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
27
28
|
function Matrixplot(_ref) {
|
|
28
29
|
let {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
showCtrlsBtn = false,
|
|
32
|
-
setShowObs,
|
|
33
|
-
setShowVars,
|
|
30
|
+
setShowCategories,
|
|
31
|
+
setShowSearch,
|
|
34
32
|
setShowControls,
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
setPlotType,
|
|
34
|
+
isFullscreen = false
|
|
37
35
|
} = _ref;
|
|
38
36
|
const ENDPOINT = 'matrixplot';
|
|
39
37
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -48,6 +46,10 @@ function Matrixplot(_ref) {
|
|
|
48
46
|
const [hasSelections, setHasSelections] = (0, _react.useState)(false);
|
|
49
47
|
const selectedObs = (0, _Resolver.useSelectedObs)();
|
|
50
48
|
const selectedMultiVar = (0, _Resolver.useSelectedMultiVar)();
|
|
49
|
+
const {
|
|
50
|
+
showCategoriesBtn,
|
|
51
|
+
showSearchBtn
|
|
52
|
+
} = (0, _usePlotVisibility.default)(isFullscreen);
|
|
51
53
|
const params = (0, _react.useMemo)(() => {
|
|
52
54
|
var _selectedObs$omit;
|
|
53
55
|
return {
|
|
@@ -100,19 +102,21 @@ function Matrixplot(_ref) {
|
|
|
100
102
|
colorscale.current = settings.controls.colorScale;
|
|
101
103
|
updateColorscale(colorscale.current);
|
|
102
104
|
}, [settings.controls.colorScale, updateColorscale]);
|
|
103
|
-
const
|
|
104
|
-
onClick: setShowObs
|
|
105
|
-
}), showVarsBtn && (0, _Toolbar.VarPlotlyToolbar)({
|
|
106
|
-
onClick: setShowVars
|
|
107
|
-
}), showCtrlsBtn && (0, _Toolbar.ControlsPlotlyToolbar)({
|
|
105
|
+
const modeBarButtons = [_lodash.default.compact([(0, _Toolbar.PlotlyModebarControls)({
|
|
108
106
|
onClick: setShowControls
|
|
109
|
-
})]);
|
|
110
|
-
const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
|
|
107
|
+
}), ..._constants.PLOTLY_MODEBAR_BUTTONS])];
|
|
111
108
|
if (!serverError) {
|
|
112
109
|
if (hasSelections) {
|
|
113
110
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
114
111
|
className: "cherita-plot cherita-matrixplot position-relative",
|
|
115
|
-
children: [
|
|
112
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
113
|
+
className: "plotly-toolbar",
|
|
114
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.PlotlyToolbar, {
|
|
115
|
+
setShowCategories: setShowCategories,
|
|
116
|
+
setShowSearch: setShowSearch,
|
|
117
|
+
isFullscreen: isFullscreen
|
|
118
|
+
})
|
|
119
|
+
}), isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
|
|
116
120
|
data: data,
|
|
117
121
|
layout: layout,
|
|
118
122
|
useResizeHandler: true,
|
|
@@ -130,28 +134,28 @@ function Matrixplot(_ref) {
|
|
|
130
134
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
|
|
131
135
|
variant: "info",
|
|
132
136
|
heading: "Set up your matrix plot",
|
|
133
|
-
plotType:
|
|
137
|
+
plotType: _constants.PLOT_TYPES.MATRIXPLOT,
|
|
134
138
|
setPlotType: setPlotType,
|
|
135
139
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
|
|
136
140
|
className: "p-0 m-0",
|
|
137
|
-
children: ["Select a", ' ',
|
|
141
|
+
children: ["Select a", ' ', showCategoriesBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
|
|
138
142
|
variant: "link",
|
|
139
143
|
className: "border-0 p-0 align-baseline",
|
|
140
|
-
onClick:
|
|
144
|
+
onClick: setShowCategories,
|
|
141
145
|
children: "category"
|
|
142
|
-
}) : 'category', ' ', "to group observations, then choose one or more", ' ',
|
|
146
|
+
}) : 'category', ' ', "to group observations, then choose one or more", ' ', showSearchBtn ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Button, {
|
|
143
147
|
variant: "link",
|
|
144
148
|
className: "border-0 p-0 align-baseline",
|
|
145
|
-
onClick:
|
|
146
|
-
children:
|
|
147
|
-
}) :
|
|
149
|
+
onClick: setShowSearch,
|
|
150
|
+
children: dataset.varLabel.plural
|
|
151
|
+
}) : dataset.varLabel.plural, ' ', "to display the matrix plot."]
|
|
148
152
|
})
|
|
149
153
|
});
|
|
150
154
|
} else {
|
|
151
155
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PlotAlert.PlotAlert, {
|
|
152
156
|
variant: "danger",
|
|
153
157
|
heading: "Error displaying the matrix plot",
|
|
154
|
-
plotType:
|
|
158
|
+
plotType: _constants.PLOT_TYPES.MATRIXPLOT,
|
|
155
159
|
setPlotType: setPlotType,
|
|
156
160
|
children: serverError.message || 'An unexpected error occurred while generating the plot.'
|
|
157
161
|
});
|
|
@@ -165,7 +165,7 @@ function CategoricalItem(_ref2) {
|
|
|
165
165
|
getColor
|
|
166
166
|
} = (0, _colorHelper.useColor)();
|
|
167
167
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
168
|
-
className: "virtualized-list-wrapper",
|
|
168
|
+
className: "virtualized-list-wrapper ps-1",
|
|
169
169
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ListGroup.Item, {
|
|
170
170
|
className: "obs-item",
|
|
171
171
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
@@ -275,7 +275,7 @@ function CategoricalItem(_ref2) {
|
|
|
275
275
|
})]
|
|
276
276
|
})
|
|
277
277
|
}, value)
|
|
278
|
-
});
|
|
278
|
+
}, value);
|
|
279
279
|
}
|
|
280
280
|
function CategoricalObs(_ref3) {
|
|
281
281
|
let {
|
|
@@ -5,17 +5,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.OffcanvasControls = OffcanvasControls;
|
|
7
7
|
exports.OffcanvasObs = OffcanvasObs;
|
|
8
|
+
exports.OffcanvasObsExplorer = OffcanvasObsExplorer;
|
|
8
9
|
exports.OffcanvasObsm = OffcanvasObsm;
|
|
9
10
|
exports.OffcanvasVars = OffcanvasVars;
|
|
10
11
|
var _Offcanvas = _interopRequireDefault(require("react-bootstrap/Offcanvas"));
|
|
11
12
|
var _constants = require("../../constants/constants");
|
|
13
|
+
var _DatasetContext = require("../../context/DatasetContext");
|
|
14
|
+
var _ObsExplorer = require("../../views/PerturbationMap/ObsExplorer");
|
|
12
15
|
var _ObsList = require("../obs-list/ObsList");
|
|
13
16
|
var _ObsmList = require("../obsm-list/ObsmList");
|
|
14
17
|
var _SearchBar = require("../search-bar/SearchBar");
|
|
15
18
|
var _VarList = require("../var-list/VarList");
|
|
16
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
20
|
const _excluded = ["show", "handleClose"],
|
|
18
|
-
_excluded2 = ["show", "handleClose", "Controls"]
|
|
21
|
+
_excluded2 = ["show", "handleClose", "Controls"],
|
|
22
|
+
_excluded3 = ["show", "handleClose"];
|
|
19
23
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
24
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
25
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -69,14 +73,15 @@ function OffcanvasVars(_ref3) {
|
|
|
69
73
|
handleClose,
|
|
70
74
|
mode = _constants.SELECTION_MODES.MULTIPLE
|
|
71
75
|
} = _ref3;
|
|
76
|
+
const dataset = (0, _DatasetContext.useDataset)();
|
|
72
77
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default, {
|
|
73
78
|
show: show,
|
|
74
79
|
onHide: handleClose,
|
|
75
80
|
className: "offcanvas-vars",
|
|
76
81
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Header, {
|
|
77
82
|
closeButton: true,
|
|
78
|
-
children: /*#__PURE__*/(0, _jsxRuntime.
|
|
79
|
-
children: "
|
|
83
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default.Title, {
|
|
84
|
+
children: ["Search for ", dataset.varLabel.plural]
|
|
80
85
|
})
|
|
81
86
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Body, {
|
|
82
87
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
@@ -112,4 +117,35 @@ function OffcanvasControls(_ref4) {
|
|
|
112
117
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Controls, _objectSpread({}, props))
|
|
113
118
|
})]
|
|
114
119
|
});
|
|
120
|
+
}
|
|
121
|
+
function OffcanvasObsExplorer(_ref5) {
|
|
122
|
+
let {
|
|
123
|
+
show,
|
|
124
|
+
handleClose
|
|
125
|
+
} = _ref5,
|
|
126
|
+
props = _objectWithoutProperties(_ref5, _excluded3);
|
|
127
|
+
const dataset = (0, _DatasetContext.useDataset)();
|
|
128
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default, {
|
|
129
|
+
show: show,
|
|
130
|
+
onHide: handleClose,
|
|
131
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Header, {
|
|
132
|
+
closeButton: true,
|
|
133
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Offcanvas.default.Title, {
|
|
134
|
+
children: ["Search for ", dataset.obsLabel.plural]
|
|
135
|
+
})
|
|
136
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Offcanvas.default.Body, {
|
|
137
|
+
className: "p-1",
|
|
138
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
139
|
+
className: "sidebar-features",
|
|
140
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchBar.SearchBar, {
|
|
141
|
+
searchDiseases: false,
|
|
142
|
+
searchVar: false,
|
|
143
|
+
searchObs: true
|
|
144
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
145
|
+
className: "sidebar-features-list",
|
|
146
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ObsExplorer.ObsExplorer, _objectSpread({}, props))
|
|
147
|
+
})]
|
|
148
|
+
})
|
|
149
|
+
})]
|
|
150
|
+
});
|
|
115
151
|
}
|
|
@@ -34,7 +34,7 @@ function PlotAlert(_ref) {
|
|
|
34
34
|
className: "w-100 h-100 d-flex justify-content-center align-items-center",
|
|
35
35
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Alert, {
|
|
36
36
|
variant: variant,
|
|
37
|
-
className: "m-0 w-75 w-lg-50 text-center",
|
|
37
|
+
className: "m-0 my-3 w-75 w-lg-50 text-center",
|
|
38
38
|
children: [heading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Alert.Heading, {
|
|
39
39
|
children: heading
|
|
40
40
|
}), " ", children]
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.PlotTypeSelector = PlotTypeSelector;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _constants = require("../../constants/constants");
|
|
9
|
+
var _DatasetContext = require("../../context/DatasetContext");
|
|
9
10
|
var _StyledTooltip = require("../../utils/StyledTooltip");
|
|
10
11
|
var _DotPlotIcon = _interopRequireDefault(require("../icons/DotPlotIcon"));
|
|
11
12
|
var _HeatmapIcon = _interopRequireDefault(require("../icons/HeatmapIcon"));
|
|
@@ -23,33 +24,67 @@ const plotTypes = [{
|
|
|
23
24
|
type: _constants.PLOT_TYPES.SCATTERPLOT,
|
|
24
25
|
icon: _ScatterplotIcon.default,
|
|
25
26
|
name: 'Scatterplot',
|
|
26
|
-
description:
|
|
27
|
+
description: _ref => {
|
|
28
|
+
let {
|
|
29
|
+
obsLabel
|
|
30
|
+
} = _ref;
|
|
31
|
+
return "Displays ".concat(obsLabel.plural, " in 2D based on dimensionality reduction.");
|
|
32
|
+
}
|
|
27
33
|
}, {
|
|
28
34
|
type: _constants.PLOT_TYPES.MATRIXPLOT,
|
|
29
35
|
icon: _MatrixPlotIcon.default,
|
|
30
36
|
name: 'Matrix Plot',
|
|
31
|
-
description:
|
|
37
|
+
description: _ref2 => {
|
|
38
|
+
let {
|
|
39
|
+
varLabel,
|
|
40
|
+
valueLabel
|
|
41
|
+
} = _ref2;
|
|
42
|
+
return "Shows ".concat(valueLabel, " values of ").concat(varLabel.plural, " across categories.");
|
|
43
|
+
}
|
|
32
44
|
}, {
|
|
33
45
|
type: _constants.PLOT_TYPES.DOTPLOT,
|
|
34
46
|
icon: _DotPlotIcon.default,
|
|
35
47
|
name: 'Dot Plot',
|
|
36
|
-
description:
|
|
48
|
+
description: _ref3 => {
|
|
49
|
+
let {
|
|
50
|
+
varLabel,
|
|
51
|
+
valueLabel
|
|
52
|
+
} = _ref3;
|
|
53
|
+
return "Shows proportion and ".concat(valueLabel, " of ").concat(varLabel.plural, " across groups.");
|
|
54
|
+
}
|
|
37
55
|
}, {
|
|
38
56
|
type: _constants.PLOT_TYPES.HEATMAP,
|
|
39
57
|
icon: _HeatmapIcon.default,
|
|
40
58
|
name: 'Heatmap',
|
|
41
|
-
description:
|
|
59
|
+
description: _ref4 => {
|
|
60
|
+
let {
|
|
61
|
+
varLabel,
|
|
62
|
+
valueLabel
|
|
63
|
+
} = _ref4;
|
|
64
|
+
return "Visualises ".concat(valueLabel, " of ").concat(varLabel.plural, " as a colour-coded matrix.");
|
|
65
|
+
}
|
|
42
66
|
}, {
|
|
43
67
|
type: _constants.PLOT_TYPES.VIOLINPLOT,
|
|
44
68
|
icon: _ViolinPlotIcon.default,
|
|
45
69
|
name: 'Violin Plot',
|
|
46
|
-
description:
|
|
70
|
+
description: _ref5 => {
|
|
71
|
+
let {
|
|
72
|
+
obsLabel,
|
|
73
|
+
valueLabel
|
|
74
|
+
} = _ref5;
|
|
75
|
+
return "Displays distribution of ".concat(valueLabel, " across ").concat(obsLabel.plural, ".");
|
|
76
|
+
}
|
|
47
77
|
}];
|
|
48
|
-
function PlotTypeSelector(
|
|
78
|
+
function PlotTypeSelector(_ref6) {
|
|
49
79
|
let {
|
|
50
80
|
currentType,
|
|
51
81
|
onChange
|
|
52
|
-
} =
|
|
82
|
+
} = _ref6;
|
|
83
|
+
const {
|
|
84
|
+
obsLabel,
|
|
85
|
+
varLabel,
|
|
86
|
+
valueLabel
|
|
87
|
+
} = (0, _DatasetContext.useDataset)();
|
|
53
88
|
const [hoveredMap, setHoveredMap] = (0, _react.useState)({});
|
|
54
89
|
const handleMouseEnter = type => setHoveredMap(prev => _objectSpread(_objectSpread({}, prev), {}, {
|
|
55
90
|
[type]: true
|
|
@@ -59,13 +94,13 @@ function PlotTypeSelector(_ref) {
|
|
|
59
94
|
}));
|
|
60
95
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
61
96
|
className: "d-flex gap-2 justify-content-between",
|
|
62
|
-
children: plotTypes.map(
|
|
97
|
+
children: plotTypes.map(_ref7 => {
|
|
63
98
|
let {
|
|
64
99
|
type,
|
|
65
100
|
icon: Icon,
|
|
66
101
|
name,
|
|
67
102
|
description
|
|
68
|
-
} =
|
|
103
|
+
} = _ref7;
|
|
69
104
|
const isActive = currentType === type;
|
|
70
105
|
const hovered = hoveredMap[type] || false;
|
|
71
106
|
const colour = isActive ? '#005a86' : hovered ? '#0071a7' : '#000';
|
|
@@ -73,7 +108,11 @@ function PlotTypeSelector(_ref) {
|
|
|
73
108
|
title: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
74
109
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("strong", {
|
|
75
110
|
children: name
|
|
76
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), description
|
|
111
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), description({
|
|
112
|
+
obsLabel,
|
|
113
|
+
varLabel,
|
|
114
|
+
valueLabel
|
|
115
|
+
})]
|
|
77
116
|
}),
|
|
78
117
|
placement: "bottom",
|
|
79
118
|
slotProps: {
|
|
@@ -93,7 +93,8 @@ function Pseudospatial(_ref) {
|
|
|
93
93
|
setPlotType
|
|
94
94
|
} = _ref;
|
|
95
95
|
const {
|
|
96
|
-
imageUrl
|
|
96
|
+
imageUrl,
|
|
97
|
+
valueLabel
|
|
97
98
|
} = (0, _DatasetContext.useDataset)();
|
|
98
99
|
const settings = (0, _SettingsContext.useSettings)();
|
|
99
100
|
const dispatch = (0, _SettingsContext.useSettingsDispatch)();
|
|
@@ -279,7 +280,7 @@ function Pseudospatial(_ref) {
|
|
|
279
280
|
}), hasSelections && showLegend && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Legend.Legend, {
|
|
280
281
|
min: layout === null || layout === void 0 || (_layout$coloraxis5 = layout.coloraxis) === null || _layout$coloraxis5 === void 0 ? void 0 : _layout$coloraxis5.cmin,
|
|
281
282
|
max: layout === null || layout === void 0 || (_layout$coloraxis6 = layout.coloraxis) === null || _layout$coloraxis6 === void 0 ? void 0 : _layout$coloraxis6.cmax,
|
|
282
|
-
addText: plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE ?
|
|
283
|
+
addText: plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.GENE ? " - Mean ".concat(valueLabel) : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CATEGORICAL ? ' - %' : plotType === _constants.PSEUDOSPATIAL_PLOT_TYPES.CONTINUOUS ? ' - Mean value' : ''
|
|
283
284
|
})]
|
|
284
285
|
})
|
|
285
286
|
});
|