@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.
- package/dist/assets/images/plots/dotplot.svg +152 -0
- package/dist/assets/images/plots/heatmap.svg +193 -0
- package/dist/assets/images/plots/matrixplot.svg +275 -0
- package/dist/assets/images/plots/scatterplot.svg +198 -0
- package/dist/assets/images/plots/violin.svg +50 -0
- package/dist/cjs/components/dotplot/Dotplot.js +35 -5
- package/dist/cjs/components/full-page/FullPage.js +109 -50
- package/dist/cjs/components/full-page/PlotTypeSelector.js +57 -0
- package/dist/cjs/components/heatmap/Heatmap.js +35 -5
- package/dist/cjs/components/matrixplot/Matrixplot.js +35 -5
- package/dist/cjs/components/obs-list/ObsItem.js +49 -22
- package/dist/cjs/components/obs-list/ObsList.js +9 -5
- package/dist/cjs/components/scatterplot/Scatterplot.js +115 -95
- package/dist/cjs/components/scatterplot/SpatialControls.js +3 -3
- package/dist/cjs/components/search-bar/SearchInfo.js +3 -35
- package/dist/cjs/components/toolbar/Toolbar.js +102 -0
- package/dist/cjs/components/var-list/VarList.js +11 -3
- package/dist/cjs/components/violin/Violin.js +37 -6
- package/dist/cjs/constants/constants.js +14 -2
- package/dist/cjs/context/DatasetContext.js +5 -3
- package/dist/cjs/context/SettingsContext.js +77 -46
- package/dist/cjs/helpers/map-helper.js +2 -1
- package/dist/cjs/index.js +15 -21
- package/dist/css/cherita.css +76 -23
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/dotplot/Dotplot.js +36 -6
- package/dist/esm/components/full-page/FullPage.js +111 -50
- package/dist/esm/components/full-page/PlotTypeSelector.js +50 -0
- package/dist/esm/components/heatmap/Heatmap.js +36 -6
- package/dist/esm/components/matrixplot/Matrixplot.js +36 -6
- package/dist/esm/components/obs-list/ObsItem.js +49 -22
- package/dist/esm/components/obs-list/ObsList.js +9 -5
- package/dist/esm/components/scatterplot/Scatterplot.js +115 -95
- package/dist/esm/components/scatterplot/SpatialControls.js +3 -3
- package/dist/esm/components/search-bar/SearchInfo.js +1 -33
- package/dist/esm/components/toolbar/Toolbar.js +91 -0
- package/dist/esm/components/var-list/VarList.js +10 -5
- package/dist/esm/components/violin/Violin.js +39 -8
- package/dist/esm/constants/constants.js +13 -1
- package/dist/esm/context/DatasetContext.js +5 -3
- package/dist/esm/context/SettingsContext.js +77 -46
- package/dist/esm/helpers/map-helper.js +2 -1
- package/dist/esm/index.js +4 -4
- package/package.json +7 -4
- package/scss/cherita.scss +0 -1
- package/scss/components/layouts.scss +69 -1
- package/scss/components/plotly.scss +19 -14
- package/dist/cjs/components/full-page/FullPagePseudospatial.js +0 -157
- package/dist/esm/components/full-page/FullPagePseudospatial.js +0 -149
|
@@ -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 Heatmap() {
|
|
25
|
+
function Heatmap(_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 = "heatmap";
|
|
26
36
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
27
37
|
const settings = (0, _SettingsContext.useSettings)();
|
|
@@ -98,17 +108,29 @@ function Heatmap() {
|
|
|
98
108
|
colorscale.current = settings.controls.colorScale;
|
|
99
109
|
updateColorscale(colorscale.current);
|
|
100
110
|
}, [settings.controls.colorScale, updateColorscale]);
|
|
111
|
+
const customModeBarButtons = _lodash.default.compact([showObsBtn && (0, _Toolbar.ObsPlotlyToolbar)({
|
|
112
|
+
onClick: setShowObs
|
|
113
|
+
}), showVarsBtn && (0, _Toolbar.VarPlotlyToolbar)({
|
|
114
|
+
onClick: setShowVars
|
|
115
|
+
}), showCtrlsBtn && (0, _Toolbar.ControlsPlotlyToolbar)({
|
|
116
|
+
onClick: setShowControls
|
|
117
|
+
})]);
|
|
118
|
+
const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
|
|
101
119
|
if (!serverError) {
|
|
102
120
|
if (hasSelections) {
|
|
103
121
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
104
|
-
className: "cherita-heatmap position-relative"
|
|
122
|
+
className: "cherita-plot cherita-heatmap position-relative"
|
|
105
123
|
}, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
|
|
106
124
|
data: data,
|
|
107
125
|
layout: layout,
|
|
108
126
|
useResizeHandler: true,
|
|
109
127
|
style: {
|
|
110
|
-
|
|
111
|
-
|
|
128
|
+
width: "100%",
|
|
129
|
+
height: "100%"
|
|
130
|
+
},
|
|
131
|
+
config: {
|
|
132
|
+
displaylogo: false,
|
|
133
|
+
modeBarButtons: modeBarButtons
|
|
112
134
|
}
|
|
113
135
|
}));
|
|
114
136
|
}
|
|
@@ -116,7 +138,15 @@ function Heatmap() {
|
|
|
116
138
|
className: "cherita-heatmap"
|
|
117
139
|
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
|
|
118
140
|
variant: "light"
|
|
119
|
-
}, "Select
|
|
141
|
+
}, "Select", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
142
|
+
variant: "link",
|
|
143
|
+
className: "border-0 p-0 align-baseline",
|
|
144
|
+
onClick: setShowVars
|
|
145
|
+
}, "features") : "features", " ", "and a", " ", showObsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
146
|
+
variant: "link",
|
|
147
|
+
className: "border-0 p-0 align-baseline",
|
|
148
|
+
onClick: setShowObs
|
|
149
|
+
}, "category") : "category"));
|
|
120
150
|
} else {
|
|
121
151
|
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
|
|
122
152
|
variant: "danger"
|
|
@@ -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 Matrixplot() {
|
|
25
|
+
function Matrixplot(_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 = "matrixplot";
|
|
26
36
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
27
37
|
const settings = (0, _SettingsContext.useSettings)();
|
|
@@ -100,17 +110,29 @@ function Matrixplot() {
|
|
|
100
110
|
colorscale.current = settings.controls.colorScale;
|
|
101
111
|
updateColorscale(colorscale.current);
|
|
102
112
|
}, [settings.controls.colorScale, updateColorscale]);
|
|
113
|
+
const customModeBarButtons = _lodash.default.compact([showObsBtn && (0, _Toolbar.ObsPlotlyToolbar)({
|
|
114
|
+
onClick: setShowObs
|
|
115
|
+
}), showVarsBtn && (0, _Toolbar.VarPlotlyToolbar)({
|
|
116
|
+
onClick: setShowVars
|
|
117
|
+
}), showCtrlsBtn && (0, _Toolbar.ControlsPlotlyToolbar)({
|
|
118
|
+
onClick: setShowControls
|
|
119
|
+
})]);
|
|
120
|
+
const modeBarButtons = customModeBarButtons.length ? [customModeBarButtons, _constants.PLOTLY_MODEBAR_BUTTONS] : [_constants.PLOTLY_MODEBAR_BUTTONS];
|
|
103
121
|
if (!serverError) {
|
|
104
122
|
if (hasSelections) {
|
|
105
123
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
106
|
-
className: "cherita-matrixplot position-relative"
|
|
124
|
+
className: "cherita-plot cherita-matrixplot position-relative"
|
|
107
125
|
}, isPending && /*#__PURE__*/_react.default.createElement(_LoadingIndicators.LoadingSpinner, null), /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
|
|
108
126
|
data: data,
|
|
109
127
|
layout: layout,
|
|
110
128
|
useResizeHandler: true,
|
|
111
129
|
style: {
|
|
112
|
-
|
|
113
|
-
|
|
130
|
+
width: "100%",
|
|
131
|
+
height: "100%"
|
|
132
|
+
},
|
|
133
|
+
config: {
|
|
134
|
+
displaylogo: false,
|
|
135
|
+
modeBarButtons: modeBarButtons
|
|
114
136
|
}
|
|
115
137
|
}));
|
|
116
138
|
}
|
|
@@ -118,7 +140,15 @@ function Matrixplot() {
|
|
|
118
140
|
className: "cherita-matrixplot"
|
|
119
141
|
}, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
|
|
120
142
|
variant: "light"
|
|
121
|
-
}, "Select
|
|
143
|
+
}, "Select", " ", showVarsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
144
|
+
variant: "link",
|
|
145
|
+
className: "border-0 p-0 align-baseline",
|
|
146
|
+
onClick: setShowVars
|
|
147
|
+
}, "features") : "features", " ", "and a", " ", showObsBtn ? /*#__PURE__*/_react.default.createElement(_reactBootstrap.Button, {
|
|
148
|
+
variant: "link",
|
|
149
|
+
className: "border-0 p-0 align-baseline",
|
|
150
|
+
onClick: setShowObs
|
|
151
|
+
}, "category") : "category"));
|
|
122
152
|
} else {
|
|
123
153
|
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.Alert, {
|
|
124
154
|
variant: "danger"
|
|
@@ -52,8 +52,11 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
52
52
|
function getContinuousLabel(code, binEdges) {
|
|
53
53
|
return "[ ".concat((0, _string.formatNumerical)(binEdges[code][0]), ", ").concat((0, _string.formatNumerical)(binEdges[code][1], _string.FORMATS.EXPONENTIAL)).concat(code === binEdges.length - 1 ? " ]" : " )");
|
|
54
54
|
}
|
|
55
|
-
const useObsHistogram = obs => {
|
|
55
|
+
const useObsHistogram = (obs, _ref) => {
|
|
56
56
|
var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedVar9, _settings$selectedVar0, _settings$selectedVar1, _settings$selectedVar10;
|
|
57
|
+
let {
|
|
58
|
+
enabled = true
|
|
59
|
+
} = _ref;
|
|
57
60
|
const ENDPOINT = "obs/histograms";
|
|
58
61
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
59
62
|
const settings = (0, _SettingsContext.useSettings)();
|
|
@@ -85,7 +88,7 @@ const useObsHistogram = obs => {
|
|
|
85
88
|
});
|
|
86
89
|
}, [(_settings$selectedVar9 = settings.selectedVar) === null || _settings$selectedVar9 === void 0 ? void 0 : _settings$selectedVar9.index, (_settings$selectedVar0 = settings.selectedVar) === null || _settings$selectedVar0 === void 0 ? void 0 : _settings$selectedVar0.isSet, (_settings$selectedVar1 = settings.selectedVar) === null || _settings$selectedVar1 === void 0 ? void 0 : _settings$selectedVar1.name, (_settings$selectedVar10 = settings.selectedVar) === null || _settings$selectedVar10 === void 0 ? void 0 : _settings$selectedVar10.vars, obsIndices, isSliced, obs]);
|
|
87
90
|
return (0, _requests.useFetch)(ENDPOINT, params, {
|
|
88
|
-
enabled: !!settings.selectedVar && settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR,
|
|
91
|
+
enabled: enabled && !!settings.selectedVar && settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR,
|
|
89
92
|
refetchOnMount: false
|
|
90
93
|
});
|
|
91
94
|
};
|
|
@@ -132,7 +135,7 @@ const useFilteredObsData = obs => {
|
|
|
132
135
|
pct: pct
|
|
133
136
|
};
|
|
134
137
|
};
|
|
135
|
-
function CategoricalItem(
|
|
138
|
+
function CategoricalItem(_ref2) {
|
|
136
139
|
let {
|
|
137
140
|
value,
|
|
138
141
|
label,
|
|
@@ -155,8 +158,12 @@ function CategoricalItem(_ref) {
|
|
|
155
158
|
pct: null
|
|
156
159
|
},
|
|
157
160
|
isSliced,
|
|
161
|
+
colors = null,
|
|
158
162
|
showColor = true
|
|
159
|
-
} =
|
|
163
|
+
} = _ref2;
|
|
164
|
+
const {
|
|
165
|
+
useUnsColors
|
|
166
|
+
} = (0, _DatasetContext.useDataset)();
|
|
160
167
|
const {
|
|
161
168
|
getColor
|
|
162
169
|
} = (0, _colorHelper.useColor)();
|
|
@@ -241,7 +248,7 @@ function CategoricalItem(_ref) {
|
|
|
241
248
|
y: "0",
|
|
242
249
|
width: "10",
|
|
243
250
|
height: "10",
|
|
244
|
-
fill: "rgb(".concat(getColor({
|
|
251
|
+
fill: "rgb(".concat(getColor(_objectSpread({
|
|
245
252
|
value: (code - min) / (max - min),
|
|
246
253
|
categorical: true,
|
|
247
254
|
grayOut: isOmitted,
|
|
@@ -249,16 +256,19 @@ function CategoricalItem(_ref) {
|
|
|
249
256
|
alpha: 1
|
|
250
257
|
},
|
|
251
258
|
colorEncoding: "obs"
|
|
252
|
-
}
|
|
259
|
+
}, useUnsColors ? {
|
|
260
|
+
colorscale: colors
|
|
261
|
+
} : {})), ")")
|
|
253
262
|
}))) : null))));
|
|
254
263
|
}
|
|
255
|
-
function CategoricalObs(
|
|
264
|
+
function CategoricalObs(_ref3) {
|
|
256
265
|
let {
|
|
257
266
|
obs,
|
|
258
267
|
toggleAll,
|
|
259
268
|
toggleObs,
|
|
260
|
-
showColor = true
|
|
261
|
-
|
|
269
|
+
showColor = true,
|
|
270
|
+
showHistograms = true
|
|
271
|
+
} = _ref3;
|
|
262
272
|
const settings = (0, _SettingsContext.useSettings)();
|
|
263
273
|
const {
|
|
264
274
|
isSliced
|
|
@@ -266,7 +276,9 @@ function CategoricalObs(_ref2) {
|
|
|
266
276
|
const totalCounts = _lodash.default.sum(_lodash.default.values(obs.value_counts));
|
|
267
277
|
const min = _lodash.default.min(_lodash.default.values(obs.codes));
|
|
268
278
|
const max = _lodash.default.max(_lodash.default.values(obs.codes));
|
|
269
|
-
const obsHistograms = useObsHistogram(obs
|
|
279
|
+
const obsHistograms = useObsHistogram(obs, {
|
|
280
|
+
enabled: showHistograms
|
|
281
|
+
});
|
|
270
282
|
const filteredObsData = useFilteredObsData(obs);
|
|
271
283
|
const getDataAtIndex = (0, _react.useCallback)(index => {
|
|
272
284
|
var _obsHistograms$fetche;
|
|
@@ -279,7 +291,7 @@ function CategoricalObs(_ref2) {
|
|
|
279
291
|
},
|
|
280
292
|
isOmitted: _lodash.default.includes(obs.omit, obs.codes[obs.values[index]]),
|
|
281
293
|
label: obs.values[index],
|
|
282
|
-
histogramData: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
|
|
294
|
+
histogramData: showHistograms && settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
|
|
283
295
|
data: (_obsHistograms$fetche = obsHistograms.fetchedData) === null || _obsHistograms$fetche === void 0 ? void 0 : _obsHistograms$fetche[obs.values[index]],
|
|
284
296
|
isPending: obsHistograms.isPending,
|
|
285
297
|
altColor: isSliced
|
|
@@ -291,9 +303,10 @@ function CategoricalObs(_ref2) {
|
|
|
291
303
|
value_counts: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts[obs.values[index]]) || 0,
|
|
292
304
|
pct: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct[obs.values[index]]) || 0
|
|
293
305
|
},
|
|
294
|
-
isSliced: isSliced
|
|
306
|
+
isSliced: isSliced,
|
|
307
|
+
colors: obs.colors
|
|
295
308
|
};
|
|
296
|
-
}, [settings.colorEncoding, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.
|
|
309
|
+
}, [obs.values, obs.codes, obs.value_counts, obs.omit, totalCounts, showHistograms, obs.colors, settings.colorEncoding, obsHistograms.fetchedData, obsHistograms.isPending, isSliced, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct]);
|
|
297
310
|
showColor &= settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS;
|
|
298
311
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
299
312
|
variant: "flush",
|
|
@@ -315,10 +328,10 @@ function CategoricalObs(_ref2) {
|
|
|
315
328
|
estimateSize: 42
|
|
316
329
|
}));
|
|
317
330
|
}
|
|
318
|
-
function ObsContinuousStats(
|
|
331
|
+
function ObsContinuousStats(_ref4) {
|
|
319
332
|
let {
|
|
320
333
|
obs
|
|
321
|
-
} =
|
|
334
|
+
} = _ref4;
|
|
322
335
|
const ENDPOINT = "obs/distribution";
|
|
323
336
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
324
337
|
const params = {
|
|
@@ -378,21 +391,26 @@ function ObsContinuousStats(_ref3) {
|
|
|
378
391
|
}
|
|
379
392
|
|
|
380
393
|
// @TODO: add bin controls
|
|
381
|
-
|
|
382
|
-
function ContinuousObs(_ref4) {
|
|
394
|
+
function ContinuousObs(_ref5) {
|
|
383
395
|
let {
|
|
384
396
|
obs,
|
|
385
397
|
toggleAll,
|
|
386
|
-
toggleObs
|
|
387
|
-
|
|
398
|
+
toggleObs,
|
|
399
|
+
showHistograms = true
|
|
400
|
+
} = _ref5;
|
|
401
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
388
402
|
const {
|
|
389
403
|
isSliced
|
|
390
404
|
} = (0, _FilterContext.useFilteredData)();
|
|
391
405
|
const totalCounts = _lodash.default.sum(_lodash.default.values(obs.value_counts));
|
|
392
406
|
const min = _lodash.default.min(_lodash.default.values(obs.codes));
|
|
393
407
|
const max = _lodash.default.max(_lodash.default.values(obs.codes));
|
|
408
|
+
const obsHistograms = useObsHistogram(obs, {
|
|
409
|
+
enabled: showHistograms
|
|
410
|
+
});
|
|
394
411
|
const filteredObsData = useFilteredObsData(obs);
|
|
395
|
-
const getDataAtIndex = index => {
|
|
412
|
+
const getDataAtIndex = (0, _react.useCallback)(index => {
|
|
413
|
+
var _obsHistograms$fetche2;
|
|
396
414
|
return {
|
|
397
415
|
value: obs.values[index],
|
|
398
416
|
code: obs.codes[obs.values[index]],
|
|
@@ -402,13 +420,21 @@ function ContinuousObs(_ref4) {
|
|
|
402
420
|
},
|
|
403
421
|
isOmitted: _lodash.default.includes(obs.omit, obs.codes[obs.values[index]]),
|
|
404
422
|
label: isNaN(obs.values[index]) ? "NaN" : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges),
|
|
423
|
+
histogramData: showHistograms && settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
|
|
424
|
+
data: (_obsHistograms$fetche2 = obsHistograms.fetchedData) === null || _obsHistograms$fetche2 === void 0 ? void 0 : _obsHistograms$fetche2[obs.values[index]],
|
|
425
|
+
isPending: obsHistograms.isPending,
|
|
426
|
+
altColor: isSliced
|
|
427
|
+
} : {
|
|
428
|
+
data: null,
|
|
429
|
+
isPending: false
|
|
430
|
+
},
|
|
405
431
|
filteredStats: {
|
|
406
432
|
value_counts: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts[obs.values[index]]) || 0,
|
|
407
433
|
pct: (filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct[obs.values[index]]) || 0
|
|
408
434
|
},
|
|
409
435
|
isSliced: isSliced
|
|
410
436
|
};
|
|
411
|
-
};
|
|
437
|
+
}, [filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.pct, filteredObsData === null || filteredObsData === void 0 ? void 0 : filteredObsData.value_counts, isSliced, obs.bins.binEdges, obs.codes, obs.omit, obs.value_counts, obs.values, obsHistograms.fetchedData, obsHistograms.isPending, settings.colorEncoding, showHistograms, totalCounts]);
|
|
412
438
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
413
439
|
variant: "flush",
|
|
414
440
|
className: "cherita-list"
|
|
@@ -425,7 +451,8 @@ function ContinuousObs(_ref4) {
|
|
|
425
451
|
min: min,
|
|
426
452
|
max: max,
|
|
427
453
|
onChange: toggleObs,
|
|
428
|
-
showColor: false
|
|
454
|
+
showColor: false,
|
|
455
|
+
estimateSize: 42
|
|
429
456
|
})), /*#__PURE__*/_react.default.createElement(ObsContinuousStats, {
|
|
430
457
|
obs: obs
|
|
431
458
|
}));
|
|
@@ -56,7 +56,9 @@ function ObsColsList(_ref2) {
|
|
|
56
56
|
var _settings$selectedObs;
|
|
57
57
|
let {
|
|
58
58
|
showColor = true,
|
|
59
|
-
enableObsGroups = true
|
|
59
|
+
enableObsGroups = true,
|
|
60
|
+
showSelectedAsActive = false,
|
|
61
|
+
showHistograms = true
|
|
60
62
|
} = _ref2;
|
|
61
63
|
const ENDPOINT = "obs/cols";
|
|
62
64
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -223,7 +225,7 @@ function ObsColsList(_ref2) {
|
|
|
223
225
|
}
|
|
224
226
|
const inLabelObs = _lodash.default.some(settings.labelObs, i => i.name === item.name);
|
|
225
227
|
const inSliceObs = settings.sliceBy.obs && ((_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.name) === item.name;
|
|
226
|
-
const isColorEncoding = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.name) === item.name;
|
|
228
|
+
const isColorEncoding = (showSelectedAsActive || settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) && ((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.name) === item.name;
|
|
227
229
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
228
230
|
className: "accordion-item",
|
|
229
231
|
key: item.name
|
|
@@ -250,7 +252,7 @@ function ObsColsList(_ref2) {
|
|
|
250
252
|
event.stopPropagation();
|
|
251
253
|
toggleColor(item);
|
|
252
254
|
},
|
|
253
|
-
title: "Is color encoding"
|
|
255
|
+
title: showSelectedAsActive ? "Is selected" : "Is color encoding"
|
|
254
256
|
}, /*#__PURE__*/_react.default.createElement(_WaterDrop.default, null)))), /*#__PURE__*/_react.default.createElement(_Accordion.default.Collapse, {
|
|
255
257
|
eventKey: item.name
|
|
256
258
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -263,7 +265,8 @@ function ObsColsList(_ref2) {
|
|
|
263
265
|
toggleLabel: () => toggleLabel(item),
|
|
264
266
|
toggleSlice: () => toggleSlice(item),
|
|
265
267
|
toggleColor: () => toggleColor(item),
|
|
266
|
-
showColor: showColor && isColorEncoding
|
|
268
|
+
showColor: showColor && isColorEncoding,
|
|
269
|
+
showHistograms: showHistograms
|
|
267
270
|
}) : /*#__PURE__*/_react.default.createElement(_ObsItem.ContinuousObs, {
|
|
268
271
|
key: item.name,
|
|
269
272
|
obs: item,
|
|
@@ -271,7 +274,8 @@ function ObsColsList(_ref2) {
|
|
|
271
274
|
toggleObs: value => toggleObs(item, value),
|
|
272
275
|
toggleLabel: () => toggleLabel(item),
|
|
273
276
|
toggleSlice: () => toggleSlice(item),
|
|
274
|
-
toggleColor: () => toggleColor(item)
|
|
277
|
+
toggleColor: () => toggleColor(item),
|
|
278
|
+
showHistograms: showHistograms
|
|
275
279
|
})))));
|
|
276
280
|
};
|
|
277
281
|
const groupList = _lodash.default.map(_lodash.default.keys(obsGroups), group => {
|