@haniffalab/cherita-react 1.3.0-dev.2025-06-06.c0b05a89 → 1.3.0-dev.2025-06-06.f1eddad0
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/full-page/FullPage.js +2 -1
- package/dist/cjs/components/obs-list/ObsItem.js +27 -18
- package/dist/cjs/components/obs-list/ObsList.js +6 -3
- package/dist/cjs/components/scatterplot/Scatterplot.js +17 -2
- package/dist/esm/components/full-page/FullPage.js +2 -1
- package/dist/esm/components/obs-list/ObsItem.js +27 -18
- package/dist/esm/components/obs-list/ObsList.js +6 -3
- package/dist/esm/components/scatterplot/Scatterplot.js +17 -2
- package/package.json +2 -2
|
@@ -152,7 +152,8 @@ function FullPage(_ref) {
|
|
|
152
152
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
153
153
|
className: "cherita-app-obs modern-scrollbars border-end h-100"
|
|
154
154
|
}, /*#__PURE__*/_react.default.createElement(_ObsList.ObsColsList, _extends({}, props, {
|
|
155
|
-
showSelectedAsActive: showSelectedAsActive
|
|
155
|
+
showSelectedAsActive: showSelectedAsActive,
|
|
156
|
+
showHistograms: varMode === _constants.SELECTION_MODES.SINGLE
|
|
156
157
|
}))), /*#__PURE__*/_react.default.createElement("div", {
|
|
157
158
|
className: "cherita-app-canvas"
|
|
158
159
|
}, plot), /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -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,
|
|
@@ -157,7 +160,7 @@ function CategoricalItem(_ref) {
|
|
|
157
160
|
isSliced,
|
|
158
161
|
colors = null,
|
|
159
162
|
showColor = true
|
|
160
|
-
} =
|
|
163
|
+
} = _ref2;
|
|
161
164
|
const {
|
|
162
165
|
useUnsColors
|
|
163
166
|
} = (0, _DatasetContext.useDataset)();
|
|
@@ -258,13 +261,14 @@ function CategoricalItem(_ref) {
|
|
|
258
261
|
} : {})), ")")
|
|
259
262
|
}))) : null))));
|
|
260
263
|
}
|
|
261
|
-
function CategoricalObs(
|
|
264
|
+
function CategoricalObs(_ref3) {
|
|
262
265
|
let {
|
|
263
266
|
obs,
|
|
264
267
|
toggleAll,
|
|
265
268
|
toggleObs,
|
|
266
|
-
showColor = true
|
|
267
|
-
|
|
269
|
+
showColor = true,
|
|
270
|
+
showHistograms = true
|
|
271
|
+
} = _ref3;
|
|
268
272
|
const settings = (0, _SettingsContext.useSettings)();
|
|
269
273
|
const {
|
|
270
274
|
isSliced
|
|
@@ -272,7 +276,9 @@ function CategoricalObs(_ref2) {
|
|
|
272
276
|
const totalCounts = _lodash.default.sum(_lodash.default.values(obs.value_counts));
|
|
273
277
|
const min = _lodash.default.min(_lodash.default.values(obs.codes));
|
|
274
278
|
const max = _lodash.default.max(_lodash.default.values(obs.codes));
|
|
275
|
-
const obsHistograms = useObsHistogram(obs
|
|
279
|
+
const obsHistograms = useObsHistogram(obs, {
|
|
280
|
+
enabled: showHistograms
|
|
281
|
+
});
|
|
276
282
|
const filteredObsData = useFilteredObsData(obs);
|
|
277
283
|
const getDataAtIndex = (0, _react.useCallback)(index => {
|
|
278
284
|
var _obsHistograms$fetche;
|
|
@@ -285,7 +291,7 @@ function CategoricalObs(_ref2) {
|
|
|
285
291
|
},
|
|
286
292
|
isOmitted: _lodash.default.includes(obs.omit, obs.codes[obs.values[index]]),
|
|
287
293
|
label: obs.values[index],
|
|
288
|
-
histogramData: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
|
|
294
|
+
histogramData: showHistograms && settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
|
|
289
295
|
data: (_obsHistograms$fetche = obsHistograms.fetchedData) === null || _obsHistograms$fetche === void 0 ? void 0 : _obsHistograms$fetche[obs.values[index]],
|
|
290
296
|
isPending: obsHistograms.isPending,
|
|
291
297
|
altColor: isSliced
|
|
@@ -300,7 +306,7 @@ function CategoricalObs(_ref2) {
|
|
|
300
306
|
isSliced: isSliced,
|
|
301
307
|
colors: obs.colors
|
|
302
308
|
};
|
|
303
|
-
}, [obs.values, obs.codes, obs.value_counts, obs.omit, obs.colors,
|
|
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]);
|
|
304
310
|
showColor &= settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS;
|
|
305
311
|
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
306
312
|
variant: "flush",
|
|
@@ -322,10 +328,10 @@ function CategoricalObs(_ref2) {
|
|
|
322
328
|
estimateSize: 42
|
|
323
329
|
}));
|
|
324
330
|
}
|
|
325
|
-
function ObsContinuousStats(
|
|
331
|
+
function ObsContinuousStats(_ref4) {
|
|
326
332
|
let {
|
|
327
333
|
obs
|
|
328
|
-
} =
|
|
334
|
+
} = _ref4;
|
|
329
335
|
const ENDPOINT = "obs/distribution";
|
|
330
336
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
331
337
|
const params = {
|
|
@@ -385,12 +391,13 @@ function ObsContinuousStats(_ref3) {
|
|
|
385
391
|
}
|
|
386
392
|
|
|
387
393
|
// @TODO: add bin controls
|
|
388
|
-
function ContinuousObs(
|
|
394
|
+
function ContinuousObs(_ref5) {
|
|
389
395
|
let {
|
|
390
396
|
obs,
|
|
391
397
|
toggleAll,
|
|
392
|
-
toggleObs
|
|
393
|
-
|
|
398
|
+
toggleObs,
|
|
399
|
+
showHistograms = true
|
|
400
|
+
} = _ref5;
|
|
394
401
|
const settings = (0, _SettingsContext.useSettings)();
|
|
395
402
|
const {
|
|
396
403
|
isSliced
|
|
@@ -398,7 +405,9 @@ function ContinuousObs(_ref4) {
|
|
|
398
405
|
const totalCounts = _lodash.default.sum(_lodash.default.values(obs.value_counts));
|
|
399
406
|
const min = _lodash.default.min(_lodash.default.values(obs.codes));
|
|
400
407
|
const max = _lodash.default.max(_lodash.default.values(obs.codes));
|
|
401
|
-
const obsHistograms = useObsHistogram(obs
|
|
408
|
+
const obsHistograms = useObsHistogram(obs, {
|
|
409
|
+
enabled: showHistograms
|
|
410
|
+
});
|
|
402
411
|
const filteredObsData = useFilteredObsData(obs);
|
|
403
412
|
const getDataAtIndex = (0, _react.useCallback)(index => {
|
|
404
413
|
var _obsHistograms$fetche2;
|
|
@@ -411,7 +420,7 @@ function ContinuousObs(_ref4) {
|
|
|
411
420
|
},
|
|
412
421
|
isOmitted: _lodash.default.includes(obs.omit, obs.codes[obs.values[index]]),
|
|
413
422
|
label: isNaN(obs.values[index]) ? "NaN" : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges),
|
|
414
|
-
histogramData: settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
|
|
423
|
+
histogramData: showHistograms && settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? {
|
|
415
424
|
data: (_obsHistograms$fetche2 = obsHistograms.fetchedData) === null || _obsHistograms$fetche2 === void 0 ? void 0 : _obsHistograms$fetche2[obs.values[index]],
|
|
416
425
|
isPending: obsHistograms.isPending,
|
|
417
426
|
altColor: isSliced
|
|
@@ -425,7 +434,7 @@ function ContinuousObs(_ref4) {
|
|
|
425
434
|
},
|
|
426
435
|
isSliced: isSliced
|
|
427
436
|
};
|
|
428
|
-
}, [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, totalCounts]);
|
|
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]);
|
|
429
438
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ListGroup, {
|
|
430
439
|
variant: "flush",
|
|
431
440
|
className: "cherita-list"
|
|
@@ -57,7 +57,8 @@ function ObsColsList(_ref2) {
|
|
|
57
57
|
let {
|
|
58
58
|
showColor = true,
|
|
59
59
|
enableObsGroups = true,
|
|
60
|
-
showSelectedAsActive = false
|
|
60
|
+
showSelectedAsActive = false,
|
|
61
|
+
showHistograms = true
|
|
61
62
|
} = _ref2;
|
|
62
63
|
const ENDPOINT = "obs/cols";
|
|
63
64
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
@@ -264,7 +265,8 @@ function ObsColsList(_ref2) {
|
|
|
264
265
|
toggleLabel: () => toggleLabel(item),
|
|
265
266
|
toggleSlice: () => toggleSlice(item),
|
|
266
267
|
toggleColor: () => toggleColor(item),
|
|
267
|
-
showColor: showColor && isColorEncoding
|
|
268
|
+
showColor: showColor && isColorEncoding,
|
|
269
|
+
showHistograms: showHistograms
|
|
268
270
|
}) : /*#__PURE__*/_react.default.createElement(_ObsItem.ContinuousObs, {
|
|
269
271
|
key: item.name,
|
|
270
272
|
obs: item,
|
|
@@ -272,7 +274,8 @@ function ObsColsList(_ref2) {
|
|
|
272
274
|
toggleObs: value => toggleObs(item, value),
|
|
273
275
|
toggleLabel: () => toggleLabel(item),
|
|
274
276
|
toggleSlice: () => toggleSlice(item),
|
|
275
|
-
toggleColor: () => toggleColor(item)
|
|
277
|
+
toggleColor: () => toggleColor(item),
|
|
278
|
+
showHistograms: showHistograms
|
|
276
279
|
})))));
|
|
277
280
|
};
|
|
278
281
|
const groupList = _lodash.default.map(_lodash.default.keys(obsGroups), group => {
|
|
@@ -73,6 +73,7 @@ function Scatterplot(_ref) {
|
|
|
73
73
|
positions: [],
|
|
74
74
|
values: []
|
|
75
75
|
});
|
|
76
|
+
const [coordsError, setCoordsError] = (0, _react.useState)(null);
|
|
76
77
|
|
|
77
78
|
// EditableGeoJsonLayer
|
|
78
79
|
const [mode, setMode] = (0, _react.useState)(() => _editModes.ViewMode);
|
|
@@ -110,8 +111,22 @@ function Scatterplot(_ref) {
|
|
|
110
111
|
} else if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
|
|
111
112
|
values = !obsData.serverError ? obsData.data : values;
|
|
112
113
|
}
|
|
114
|
+
if (!obsmData.serverError && obsmData.data) {
|
|
115
|
+
if (obsmData.data[0].length !== 2) {
|
|
116
|
+
setCoordsError("Invalid coordinates. Expected 2D coordinates");
|
|
117
|
+
return {
|
|
118
|
+
positions: [],
|
|
119
|
+
values: []
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
setCoordsError(null);
|
|
123
|
+
return {
|
|
124
|
+
positions: obsmData.data,
|
|
125
|
+
values: values
|
|
126
|
+
};
|
|
127
|
+
}
|
|
113
128
|
return {
|
|
114
|
-
positions:
|
|
129
|
+
positions: d.positions,
|
|
115
130
|
values: values
|
|
116
131
|
};
|
|
117
132
|
});
|
|
@@ -351,7 +366,7 @@ function Scatterplot(_ref) {
|
|
|
351
366
|
}
|
|
352
367
|
};
|
|
353
368
|
};
|
|
354
|
-
const error = settings.selectedObsm && ((_obsmData$serverError = obsmData.serverError) === null || _obsmData$serverError === void 0 ? void 0 : _obsmData$serverError.length) || settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && ((_xData$serverError = xData.serverError) === null || _xData$serverError === void 0 ? void 0 : _xData$serverError.length) || settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_obsData$serverError = obsData.serverError) === null || _obsData$serverError === void 0 ? void 0 : _obsData$serverError.length) || settings.labelObs.length && ((_labelObsData$serverE = labelObsData.serverError) === null || _labelObsData$serverE === void 0 ? void 0 : _labelObsData$serverE.length);
|
|
369
|
+
const error = settings.selectedObsm && ((_obsmData$serverError = obsmData.serverError) === null || _obsmData$serverError === void 0 ? void 0 : _obsmData$serverError.length) || settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR && ((_xData$serverError = xData.serverError) === null || _xData$serverError === void 0 ? void 0 : _xData$serverError.length) || settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && ((_obsData$serverError = obsData.serverError) === null || _obsData$serverError === void 0 ? void 0 : _obsData$serverError.length) || settings.labelObs.length && ((_labelObsData$serverE = labelObsData.serverError) === null || _labelObsData$serverE === void 0 ? void 0 : _labelObsData$serverE.length) || coordsError;
|
|
355
370
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
356
371
|
className: "cherita-container-scatterplot"
|
|
357
372
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -145,7 +145,8 @@ export function FullPage(_ref) {
|
|
|
145
145
|
}, /*#__PURE__*/React.createElement("div", {
|
|
146
146
|
className: "cherita-app-obs modern-scrollbars border-end h-100"
|
|
147
147
|
}, /*#__PURE__*/React.createElement(ObsColsList, _extends({}, props, {
|
|
148
|
-
showSelectedAsActive: showSelectedAsActive
|
|
148
|
+
showSelectedAsActive: showSelectedAsActive,
|
|
149
|
+
showHistograms: varMode === SELECTION_MODES.SINGLE
|
|
149
150
|
}))), /*#__PURE__*/React.createElement("div", {
|
|
150
151
|
className: "cherita-app-canvas"
|
|
151
152
|
}, plot), /*#__PURE__*/React.createElement("div", {
|
|
@@ -44,8 +44,11 @@ import { useObsData } from "../../utils/zarrData";
|
|
|
44
44
|
function getContinuousLabel(code, binEdges) {
|
|
45
45
|
return "[ ".concat(formatNumerical(binEdges[code][0]), ", ").concat(formatNumerical(binEdges[code][1], FORMATS.EXPONENTIAL)).concat(code === binEdges.length - 1 ? " ]" : " )");
|
|
46
46
|
}
|
|
47
|
-
const useObsHistogram = obs => {
|
|
47
|
+
const useObsHistogram = (obs, _ref) => {
|
|
48
48
|
var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3, _settings$selectedVar4, _settings$selectedVar9, _settings$selectedVar0, _settings$selectedVar1, _settings$selectedVar10;
|
|
49
|
+
let {
|
|
50
|
+
enabled = true
|
|
51
|
+
} = _ref;
|
|
49
52
|
const ENDPOINT = "obs/histograms";
|
|
50
53
|
const dataset = useDataset();
|
|
51
54
|
const settings = useSettings();
|
|
@@ -77,7 +80,7 @@ const useObsHistogram = obs => {
|
|
|
77
80
|
});
|
|
78
81
|
}, [(_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]);
|
|
79
82
|
return useFetch(ENDPOINT, params, {
|
|
80
|
-
enabled: !!settings.selectedVar && settings.colorEncoding === COLOR_ENCODINGS.VAR,
|
|
83
|
+
enabled: enabled && !!settings.selectedVar && settings.colorEncoding === COLOR_ENCODINGS.VAR,
|
|
81
84
|
refetchOnMount: false
|
|
82
85
|
});
|
|
83
86
|
};
|
|
@@ -124,7 +127,7 @@ const useFilteredObsData = obs => {
|
|
|
124
127
|
pct: pct
|
|
125
128
|
};
|
|
126
129
|
};
|
|
127
|
-
function CategoricalItem(
|
|
130
|
+
function CategoricalItem(_ref2) {
|
|
128
131
|
let {
|
|
129
132
|
value,
|
|
130
133
|
label,
|
|
@@ -149,7 +152,7 @@ function CategoricalItem(_ref) {
|
|
|
149
152
|
isSliced,
|
|
150
153
|
colors = null,
|
|
151
154
|
showColor = true
|
|
152
|
-
} =
|
|
155
|
+
} = _ref2;
|
|
153
156
|
const {
|
|
154
157
|
useUnsColors
|
|
155
158
|
} = useDataset();
|
|
@@ -250,13 +253,14 @@ function CategoricalItem(_ref) {
|
|
|
250
253
|
} : {})), ")")
|
|
251
254
|
}))) : null))));
|
|
252
255
|
}
|
|
253
|
-
export function CategoricalObs(
|
|
256
|
+
export function CategoricalObs(_ref3) {
|
|
254
257
|
let {
|
|
255
258
|
obs,
|
|
256
259
|
toggleAll,
|
|
257
260
|
toggleObs,
|
|
258
|
-
showColor = true
|
|
259
|
-
|
|
261
|
+
showColor = true,
|
|
262
|
+
showHistograms = true
|
|
263
|
+
} = _ref3;
|
|
260
264
|
const settings = useSettings();
|
|
261
265
|
const {
|
|
262
266
|
isSliced
|
|
@@ -264,7 +268,9 @@ export function CategoricalObs(_ref2) {
|
|
|
264
268
|
const totalCounts = _.sum(_.values(obs.value_counts));
|
|
265
269
|
const min = _.min(_.values(obs.codes));
|
|
266
270
|
const max = _.max(_.values(obs.codes));
|
|
267
|
-
const obsHistograms = useObsHistogram(obs
|
|
271
|
+
const obsHistograms = useObsHistogram(obs, {
|
|
272
|
+
enabled: showHistograms
|
|
273
|
+
});
|
|
268
274
|
const filteredObsData = useFilteredObsData(obs);
|
|
269
275
|
const getDataAtIndex = useCallback(index => {
|
|
270
276
|
var _obsHistograms$fetche;
|
|
@@ -277,7 +283,7 @@ export function CategoricalObs(_ref2) {
|
|
|
277
283
|
},
|
|
278
284
|
isOmitted: _.includes(obs.omit, obs.codes[obs.values[index]]),
|
|
279
285
|
label: obs.values[index],
|
|
280
|
-
histogramData: settings.colorEncoding === COLOR_ENCODINGS.VAR ? {
|
|
286
|
+
histogramData: showHistograms && settings.colorEncoding === COLOR_ENCODINGS.VAR ? {
|
|
281
287
|
data: (_obsHistograms$fetche = obsHistograms.fetchedData) === null || _obsHistograms$fetche === void 0 ? void 0 : _obsHistograms$fetche[obs.values[index]],
|
|
282
288
|
isPending: obsHistograms.isPending,
|
|
283
289
|
altColor: isSliced
|
|
@@ -292,7 +298,7 @@ export function CategoricalObs(_ref2) {
|
|
|
292
298
|
isSliced: isSliced,
|
|
293
299
|
colors: obs.colors
|
|
294
300
|
};
|
|
295
|
-
}, [obs.values, obs.codes, obs.value_counts, obs.omit, obs.colors,
|
|
301
|
+
}, [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]);
|
|
296
302
|
showColor &= settings.colorEncoding === COLOR_ENCODINGS.OBS;
|
|
297
303
|
return /*#__PURE__*/React.createElement(ListGroup, {
|
|
298
304
|
variant: "flush",
|
|
@@ -314,10 +320,10 @@ export function CategoricalObs(_ref2) {
|
|
|
314
320
|
estimateSize: 42
|
|
315
321
|
}));
|
|
316
322
|
}
|
|
317
|
-
function ObsContinuousStats(
|
|
323
|
+
function ObsContinuousStats(_ref4) {
|
|
318
324
|
let {
|
|
319
325
|
obs
|
|
320
|
-
} =
|
|
326
|
+
} = _ref4;
|
|
321
327
|
const ENDPOINT = "obs/distribution";
|
|
322
328
|
const dataset = useDataset();
|
|
323
329
|
const params = {
|
|
@@ -377,12 +383,13 @@ function ObsContinuousStats(_ref3) {
|
|
|
377
383
|
}
|
|
378
384
|
|
|
379
385
|
// @TODO: add bin controls
|
|
380
|
-
export function ContinuousObs(
|
|
386
|
+
export function ContinuousObs(_ref5) {
|
|
381
387
|
let {
|
|
382
388
|
obs,
|
|
383
389
|
toggleAll,
|
|
384
|
-
toggleObs
|
|
385
|
-
|
|
390
|
+
toggleObs,
|
|
391
|
+
showHistograms = true
|
|
392
|
+
} = _ref5;
|
|
386
393
|
const settings = useSettings();
|
|
387
394
|
const {
|
|
388
395
|
isSliced
|
|
@@ -390,7 +397,9 @@ export function ContinuousObs(_ref4) {
|
|
|
390
397
|
const totalCounts = _.sum(_.values(obs.value_counts));
|
|
391
398
|
const min = _.min(_.values(obs.codes));
|
|
392
399
|
const max = _.max(_.values(obs.codes));
|
|
393
|
-
const obsHistograms = useObsHistogram(obs
|
|
400
|
+
const obsHistograms = useObsHistogram(obs, {
|
|
401
|
+
enabled: showHistograms
|
|
402
|
+
});
|
|
394
403
|
const filteredObsData = useFilteredObsData(obs);
|
|
395
404
|
const getDataAtIndex = useCallback(index => {
|
|
396
405
|
var _obsHistograms$fetche2;
|
|
@@ -403,7 +412,7 @@ export function ContinuousObs(_ref4) {
|
|
|
403
412
|
},
|
|
404
413
|
isOmitted: _.includes(obs.omit, obs.codes[obs.values[index]]),
|
|
405
414
|
label: isNaN(obs.values[index]) ? "NaN" : getContinuousLabel(obs.codes[obs.values[index]], obs.bins.binEdges),
|
|
406
|
-
histogramData: settings.colorEncoding === COLOR_ENCODINGS.VAR ? {
|
|
415
|
+
histogramData: showHistograms && settings.colorEncoding === COLOR_ENCODINGS.VAR ? {
|
|
407
416
|
data: (_obsHistograms$fetche2 = obsHistograms.fetchedData) === null || _obsHistograms$fetche2 === void 0 ? void 0 : _obsHistograms$fetche2[obs.values[index]],
|
|
408
417
|
isPending: obsHistograms.isPending,
|
|
409
418
|
altColor: isSliced
|
|
@@ -417,7 +426,7 @@ export function ContinuousObs(_ref4) {
|
|
|
417
426
|
},
|
|
418
427
|
isSliced: isSliced
|
|
419
428
|
};
|
|
420
|
-
}, [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, totalCounts]);
|
|
429
|
+
}, [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]);
|
|
421
430
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ListGroup, {
|
|
422
431
|
variant: "flush",
|
|
423
432
|
className: "cherita-list"
|
|
@@ -49,7 +49,8 @@ export function ObsColsList(_ref2) {
|
|
|
49
49
|
let {
|
|
50
50
|
showColor = true,
|
|
51
51
|
enableObsGroups = true,
|
|
52
|
-
showSelectedAsActive = false
|
|
52
|
+
showSelectedAsActive = false,
|
|
53
|
+
showHistograms = true
|
|
53
54
|
} = _ref2;
|
|
54
55
|
const ENDPOINT = "obs/cols";
|
|
55
56
|
const dataset = useDataset();
|
|
@@ -256,7 +257,8 @@ export function ObsColsList(_ref2) {
|
|
|
256
257
|
toggleLabel: () => toggleLabel(item),
|
|
257
258
|
toggleSlice: () => toggleSlice(item),
|
|
258
259
|
toggleColor: () => toggleColor(item),
|
|
259
|
-
showColor: showColor && isColorEncoding
|
|
260
|
+
showColor: showColor && isColorEncoding,
|
|
261
|
+
showHistograms: showHistograms
|
|
260
262
|
}) : /*#__PURE__*/React.createElement(ContinuousObs, {
|
|
261
263
|
key: item.name,
|
|
262
264
|
obs: item,
|
|
@@ -264,7 +266,8 @@ export function ObsColsList(_ref2) {
|
|
|
264
266
|
toggleObs: value => toggleObs(item, value),
|
|
265
267
|
toggleLabel: () => toggleLabel(item),
|
|
266
268
|
toggleSlice: () => toggleSlice(item),
|
|
267
|
-
toggleColor: () => toggleColor(item)
|
|
269
|
+
toggleColor: () => toggleColor(item),
|
|
270
|
+
showHistograms: showHistograms
|
|
268
271
|
})))));
|
|
269
272
|
};
|
|
270
273
|
const groupList = _.map(_.keys(obsGroups), group => {
|
|
@@ -65,6 +65,7 @@ export function Scatterplot(_ref) {
|
|
|
65
65
|
positions: [],
|
|
66
66
|
values: []
|
|
67
67
|
});
|
|
68
|
+
const [coordsError, setCoordsError] = useState(null);
|
|
68
69
|
|
|
69
70
|
// EditableGeoJsonLayer
|
|
70
71
|
const [mode, setMode] = useState(() => ViewMode);
|
|
@@ -102,8 +103,22 @@ export function Scatterplot(_ref) {
|
|
|
102
103
|
} else if (settings.colorEncoding === COLOR_ENCODINGS.OBS) {
|
|
103
104
|
values = !obsData.serverError ? obsData.data : values;
|
|
104
105
|
}
|
|
106
|
+
if (!obsmData.serverError && obsmData.data) {
|
|
107
|
+
if (obsmData.data[0].length !== 2) {
|
|
108
|
+
setCoordsError("Invalid coordinates. Expected 2D coordinates");
|
|
109
|
+
return {
|
|
110
|
+
positions: [],
|
|
111
|
+
values: []
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
setCoordsError(null);
|
|
115
|
+
return {
|
|
116
|
+
positions: obsmData.data,
|
|
117
|
+
values: values
|
|
118
|
+
};
|
|
119
|
+
}
|
|
105
120
|
return {
|
|
106
|
-
positions:
|
|
121
|
+
positions: d.positions,
|
|
107
122
|
values: values
|
|
108
123
|
};
|
|
109
124
|
});
|
|
@@ -343,7 +358,7 @@ export function Scatterplot(_ref) {
|
|
|
343
358
|
}
|
|
344
359
|
};
|
|
345
360
|
};
|
|
346
|
-
const error = settings.selectedObsm && ((_obsmData$serverError = obsmData.serverError) === null || _obsmData$serverError === void 0 ? void 0 : _obsmData$serverError.length) || settings.colorEncoding === COLOR_ENCODINGS.VAR && ((_xData$serverError = xData.serverError) === null || _xData$serverError === void 0 ? void 0 : _xData$serverError.length) || settings.colorEncoding === COLOR_ENCODINGS.OBS && ((_obsData$serverError = obsData.serverError) === null || _obsData$serverError === void 0 ? void 0 : _obsData$serverError.length) || settings.labelObs.length && ((_labelObsData$serverE = labelObsData.serverError) === null || _labelObsData$serverE === void 0 ? void 0 : _labelObsData$serverE.length);
|
|
361
|
+
const error = settings.selectedObsm && ((_obsmData$serverError = obsmData.serverError) === null || _obsmData$serverError === void 0 ? void 0 : _obsmData$serverError.length) || settings.colorEncoding === COLOR_ENCODINGS.VAR && ((_xData$serverError = xData.serverError) === null || _xData$serverError === void 0 ? void 0 : _xData$serverError.length) || settings.colorEncoding === COLOR_ENCODINGS.OBS && ((_obsData$serverError = obsData.serverError) === null || _obsData$serverError === void 0 ? void 0 : _obsData$serverError.length) || settings.labelObs.length && ((_labelObsData$serverE = labelObsData.serverError) === null || _labelObsData$serverE === void 0 ? void 0 : _labelObsData$serverE.length) || coordsError;
|
|
347
362
|
return /*#__PURE__*/React.createElement("div", {
|
|
348
363
|
className: "cherita-container-scatterplot"
|
|
349
364
|
}, /*#__PURE__*/React.createElement("div", {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haniffalab/cherita-react",
|
|
3
|
-
"version": "1.3.0-dev.2025-06-06.
|
|
3
|
+
"version": "1.3.0-dev.2025-06-06.f1eddad0",
|
|
4
4
|
"author": "Haniffa Lab",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -127,5 +127,5 @@
|
|
|
127
127
|
"url": "https://github.com/haniffalab/cherita-react/issues"
|
|
128
128
|
},
|
|
129
129
|
"homepage": "https://github.com/haniffalab/cherita-react#readme",
|
|
130
|
-
"prereleaseSha": "
|
|
130
|
+
"prereleaseSha": "f1eddad0f8fea03ef886db127e9a9d50766aab8e"
|
|
131
131
|
}
|