@haniffalab/cherita-react 1.2.0-dev.2025-05-21.31931945 → 1.2.0-dev.2025-05-21.e57ef5f2
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 +26 -19
- package/dist/cjs/components/dotplot/DotplotControls.js +17 -19
- package/dist/cjs/components/full-page/FullPage.js +9 -7
- package/dist/cjs/components/full-page/FullPagePseudospatial.js +9 -7
- package/dist/cjs/components/heatmap/Heatmap.js +22 -13
- package/dist/cjs/components/matrixplot/Matrixplot.js +22 -13
- package/dist/cjs/components/obs-list/ObsItem.js +37 -29
- package/dist/cjs/components/obs-list/ObsList.js +47 -44
- package/dist/cjs/components/obsm-list/ObsmList.js +9 -6
- package/dist/cjs/components/offcanvas/index.js +13 -9
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +61 -53
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +17 -11
- package/dist/cjs/components/scatterplot/Scatterplot.js +52 -52
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +3 -3
- package/dist/cjs/components/scatterplot/SpatialControls.js +4 -4
- package/dist/cjs/components/search-bar/SearchBar.js +12 -10
- package/dist/cjs/components/search-bar/SearchInfo.js +14 -13
- package/dist/cjs/components/search-bar/SearchResults.js +16 -14
- package/dist/cjs/components/var-list/VarItem.js +37 -120
- package/dist/cjs/components/var-list/VarList.js +16 -13
- package/dist/cjs/components/var-list/VarListToolbar.js +1 -2
- package/dist/cjs/components/var-list/VarSet.js +17 -29
- package/dist/cjs/components/violin/Violin.js +44 -35
- package/dist/cjs/context/DatasetContext.js +17 -11
- package/dist/cjs/context/FilterContext.js +9 -8
- package/dist/cjs/context/SettingsContext.js +169 -237
- package/dist/cjs/context/ZarrDataContext.js +1 -2
- package/dist/cjs/helpers/color-helper.js +3 -3
- package/dist/cjs/helpers/zarr-helper.js +15 -12
- package/dist/cjs/utils/Filter.js +13 -9
- package/dist/cjs/utils/Histogram.js +4 -3
- package/dist/cjs/utils/ImageViewer.js +1 -2
- package/dist/cjs/utils/Legend.js +3 -3
- package/dist/cjs/utils/LoadingIndicators.js +1 -1
- package/dist/cjs/utils/VirtualizedList.js +16 -13
- package/dist/cjs/utils/errors.js +20 -22
- package/dist/cjs/utils/requests.js +13 -10
- package/dist/cjs/utils/zarrData.js +12 -8
- package/dist/css/cherita.css +24 -10
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/dotplot/Dotplot.js +25 -17
- package/dist/esm/components/dotplot/DotplotControls.js +16 -17
- package/dist/esm/components/full-page/FullPage.js +8 -5
- package/dist/esm/components/full-page/FullPagePseudospatial.js +8 -5
- package/dist/esm/components/heatmap/Heatmap.js +21 -11
- package/dist/esm/components/matrixplot/Matrixplot.js +21 -11
- package/dist/esm/components/obs-list/ObsItem.js +36 -27
- package/dist/esm/components/obs-list/ObsList.js +46 -42
- package/dist/esm/components/obsm-list/ObsmList.js +8 -4
- package/dist/esm/components/offcanvas/index.js +13 -9
- package/dist/esm/components/pseudospatial/Pseudospatial.js +60 -51
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +16 -9
- package/dist/esm/components/scatterplot/Scatterplot.js +51 -50
- package/dist/esm/components/scatterplot/ScatterplotControls.js +2 -1
- package/dist/esm/components/scatterplot/SpatialControls.js +3 -2
- package/dist/esm/components/search-bar/SearchBar.js +11 -8
- package/dist/esm/components/search-bar/SearchInfo.js +13 -11
- package/dist/esm/components/search-bar/SearchResults.js +15 -12
- package/dist/esm/components/var-list/VarItem.js +36 -117
- package/dist/esm/components/var-list/VarList.js +15 -11
- package/dist/esm/components/var-list/VarSet.js +17 -28
- package/dist/esm/components/violin/Violin.js +43 -33
- package/dist/esm/context/DatasetContext.js +16 -9
- package/dist/esm/context/FilterContext.js +8 -6
- package/dist/esm/context/SettingsContext.js +168 -235
- package/dist/esm/helpers/color-helper.js +3 -3
- package/dist/esm/helpers/zarr-helper.js +15 -12
- package/dist/esm/utils/Filter.js +13 -9
- package/dist/esm/utils/Histogram.js +4 -3
- package/dist/esm/utils/Legend.js +2 -1
- package/dist/esm/utils/LoadingIndicators.js +1 -1
- package/dist/esm/utils/VirtualizedList.js +15 -11
- package/dist/esm/utils/errors.js +20 -22
- package/dist/esm/utils/requests.js +13 -10
- package/dist/esm/utils/zarrData.js +12 -8
- package/package.json +4 -2
- package/scss/cherita.scss +5 -0
- package/scss/components/layouts.scss +4 -0
- package/scss/components/lists.scss +4 -5
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
|
+
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); }
|
|
1
6
|
import { useCallback } from "react";
|
|
2
7
|
import { useQueries, useQuery } from "@tanstack/react-query";
|
|
3
8
|
import { ArrayNotFoundError, GroupNotFoundError, openArray } from "zarr";
|
|
@@ -9,7 +14,7 @@ export const GET_OPTIONS = {
|
|
|
9
14
|
progress,
|
|
10
15
|
queueSize
|
|
11
16
|
} = _ref;
|
|
12
|
-
console.debug(
|
|
17
|
+
console.debug("".concat(progress / queueSize * 100, "% complete."));
|
|
13
18
|
} // callback executed after each request
|
|
14
19
|
};
|
|
15
20
|
export class ZarrHelper {
|
|
@@ -47,18 +52,17 @@ export const useZarr = function (_ref2) {
|
|
|
47
52
|
data = null,
|
|
48
53
|
isLoading: isPending = false,
|
|
49
54
|
error: serverError = null
|
|
50
|
-
} = useQuery({
|
|
55
|
+
} = useQuery(_objectSpread({
|
|
51
56
|
queryKey: ["zarr", url, path, s],
|
|
52
57
|
queryFn: () => fetchDataFromZarr(url, path, s, options),
|
|
53
58
|
retry: (failureCount, _ref3) => {
|
|
54
59
|
let {
|
|
55
60
|
error
|
|
56
61
|
} = _ref3;
|
|
57
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
62
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
58
63
|
return failureCount < 3;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
});
|
|
64
|
+
}
|
|
65
|
+
}, opts));
|
|
62
66
|
return {
|
|
63
67
|
data,
|
|
64
68
|
isPending,
|
|
@@ -69,7 +73,7 @@ const aggregateData = (inputs, data) => {
|
|
|
69
73
|
const dataObject = {};
|
|
70
74
|
inputs.forEach((input, index) => {
|
|
71
75
|
const key = input.key;
|
|
72
|
-
dataObject[key] = data
|
|
76
|
+
dataObject[key] = data === null || data === void 0 ? void 0 : data[index];
|
|
73
77
|
});
|
|
74
78
|
return dataObject;
|
|
75
79
|
};
|
|
@@ -89,18 +93,17 @@ export const useMultipleZarr = function (inputs) {
|
|
|
89
93
|
isLoading: isPending = false,
|
|
90
94
|
serverError = null
|
|
91
95
|
} = useQueries({
|
|
92
|
-
queries: inputs.map(input => ({
|
|
96
|
+
queries: inputs.map(input => _objectSpread({
|
|
93
97
|
queryKey: ["zarr", input.url, input.path, input.s],
|
|
94
98
|
queryFn: () => fetchDataFromZarr(input.url, input.path, input.s, options),
|
|
95
99
|
retry: (failureCount, _ref4) => {
|
|
96
100
|
let {
|
|
97
101
|
error
|
|
98
102
|
} = _ref4;
|
|
99
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
103
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
100
104
|
return failureCount < 3;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
})),
|
|
105
|
+
}
|
|
106
|
+
}, opts)),
|
|
104
107
|
combine
|
|
105
108
|
});
|
|
106
109
|
return {
|
package/dist/esm/utils/Filter.js
CHANGED
|
@@ -15,7 +15,7 @@ const isInBins = (v, binEdges, indices) => {
|
|
|
15
15
|
return _.some(ranges, range => _.inRange(v, ...range));
|
|
16
16
|
};
|
|
17
17
|
const isInPolygons = (polygons, positions, index) => {
|
|
18
|
-
if (!polygons
|
|
18
|
+
if (!(polygons !== null && polygons !== void 0 && polygons.length) || !(positions !== null && positions !== void 0 && positions.length)) {
|
|
19
19
|
return false;
|
|
20
20
|
}
|
|
21
21
|
return _.some(polygons, (_f, i) => {
|
|
@@ -23,12 +23,13 @@ const isInPolygons = (polygons, positions, index) => {
|
|
|
23
23
|
});
|
|
24
24
|
};
|
|
25
25
|
const isInValues = (omit, value) => {
|
|
26
|
-
if (!omit
|
|
26
|
+
if (!(omit !== null && omit !== void 0 && omit.length)) {
|
|
27
27
|
return true;
|
|
28
28
|
}
|
|
29
29
|
return !_.includes(omit, value);
|
|
30
30
|
};
|
|
31
31
|
export const useFilter = data => {
|
|
32
|
+
var _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3, _settings$selectedObs4, _settings$selectedObs7, _settings$selectedObs8;
|
|
32
33
|
const settings = useSettings();
|
|
33
34
|
const filterDataDispatch = useFilteredDataDispatch();
|
|
34
35
|
const {
|
|
@@ -38,24 +39,26 @@ export const useFilter = data => {
|
|
|
38
39
|
isPending,
|
|
39
40
|
serverError
|
|
40
41
|
} = data;
|
|
41
|
-
const isCategorical = settings.selectedObs
|
|
42
|
-
const isContinuous = settings.selectedObs
|
|
43
|
-
const sliceByObs = settings.colorEncoding === COLOR_ENCODINGS.OBS && !!settings.selectedObs
|
|
42
|
+
const isCategorical = ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === OBS_TYPES.CATEGORICAL || ((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.type) === OBS_TYPES.BOOLEAN;
|
|
43
|
+
const isContinuous = ((_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.type) === OBS_TYPES.CONTINUOUS;
|
|
44
|
+
const sliceByObs = settings.colorEncoding === COLOR_ENCODINGS.OBS && !!((_settings$selectedObs4 = settings.selectedObs) !== null && _settings$selectedObs4 !== void 0 && _settings$selectedObs4.omit.length) || settings.sliceBy.obs;
|
|
44
45
|
const isInObsSlice = useCallback((index, values) => {
|
|
45
46
|
let inSlice = true;
|
|
46
47
|
if (values && sliceByObs) {
|
|
47
48
|
if (isCategorical) {
|
|
48
|
-
|
|
49
|
+
var _settings$selectedObs5;
|
|
50
|
+
inSlice &= isInValues((_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.omit, values[index]);
|
|
49
51
|
} else if (isContinuous) {
|
|
50
52
|
if (isNaN(values[index])) {
|
|
51
|
-
|
|
53
|
+
var _settings$selectedObs6;
|
|
54
|
+
inSlice &= isInValues((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.omit, -1);
|
|
52
55
|
} else {
|
|
53
56
|
inSlice &= isInBins(values[index], settings.selectedObs.bins.binEdges, _.without(settings.selectedObs.omit, -1));
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
}
|
|
57
60
|
return inSlice;
|
|
58
|
-
}, [settings.selectedObs
|
|
61
|
+
}, [(_settings$selectedObs7 = settings.selectedObs) === null || _settings$selectedObs7 === void 0 || (_settings$selectedObs7 = _settings$selectedObs7.bins) === null || _settings$selectedObs7 === void 0 ? void 0 : _settings$selectedObs7.binEdges, (_settings$selectedObs8 = settings.selectedObs) === null || _settings$selectedObs8 === void 0 ? void 0 : _settings$selectedObs8.omit, isCategorical, isContinuous, sliceByObs]);
|
|
59
62
|
const isInPolygonsSlice = useCallback((index, positions) => {
|
|
60
63
|
let inSlice = true;
|
|
61
64
|
if (settings.sliceBy.polygons && positions) {
|
|
@@ -121,11 +124,12 @@ export const useFilter = data => {
|
|
|
121
124
|
slicedLength: filtered.length
|
|
122
125
|
};
|
|
123
126
|
} else {
|
|
127
|
+
var _obsData$data;
|
|
124
128
|
return {
|
|
125
129
|
filteredIndices: null,
|
|
126
130
|
valueMin: _.min(obsData.data),
|
|
127
131
|
valueMax: _.max(obsData.data),
|
|
128
|
-
slicedLength: obsData.data
|
|
132
|
+
slicedLength: (_obsData$data = obsData.data) === null || _obsData$data === void 0 ? void 0 : _obsData$data.length
|
|
129
133
|
};
|
|
130
134
|
}
|
|
131
135
|
}, [settings.colorEncoding, isContinuous, isInSlice, isPending, obsData.data, obsmData.data, serverError, xData.data]);
|
|
@@ -4,6 +4,7 @@ import _ from "lodash";
|
|
|
4
4
|
import { LoadingLinear } from "./LoadingIndicators";
|
|
5
5
|
import { formatNumerical, FORMATS } from "./string";
|
|
6
6
|
export function Histogram(_ref) {
|
|
7
|
+
var _data$bin_edges;
|
|
7
8
|
let {
|
|
8
9
|
data,
|
|
9
10
|
isPending,
|
|
@@ -29,11 +30,11 @@ export function Histogram(_ref) {
|
|
|
29
30
|
let {
|
|
30
31
|
dataIndex
|
|
31
32
|
} = _ref2;
|
|
32
|
-
return
|
|
33
|
+
return "".concat(formatNumerical(data.hist[dataIndex]));
|
|
33
34
|
},
|
|
34
35
|
xAxis: {
|
|
35
|
-
data: _.range(data.bin_edges
|
|
36
|
-
valueFormatter: v =>
|
|
36
|
+
data: _.range((_data$bin_edges = data.bin_edges) === null || _data$bin_edges === void 0 ? void 0 : _data$bin_edges.length) || null,
|
|
37
|
+
valueFormatter: v => "Bin [".concat(formatNumerical(data.bin_edges[v][0], FORMATS.EXPONENTIAL), ", ").concat(formatNumerical(data.bin_edges[v][1], FORMATS.EXPONENTIAL)).concat(v === data.bin_edges.length - 1 ? "]" : ")")
|
|
37
38
|
},
|
|
38
39
|
slotProps: {
|
|
39
40
|
popper: {
|
package/dist/esm/utils/Legend.js
CHANGED
|
@@ -35,6 +35,7 @@ export function Legend(_ref) {
|
|
|
35
35
|
});
|
|
36
36
|
}, [colorscale, getColor, isCategorical]);
|
|
37
37
|
if (settings.colorEncoding && !isCategorical) {
|
|
38
|
+
var _settings$selectedVar, _settings$selectedObs;
|
|
38
39
|
return /*#__PURE__*/React.createElement("div", {
|
|
39
40
|
className: "cherita-legend"
|
|
40
41
|
}, /*#__PURE__*/React.createElement("div", {
|
|
@@ -44,7 +45,7 @@ export function Legend(_ref) {
|
|
|
44
45
|
}, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
45
46
|
icon: faDroplet,
|
|
46
47
|
className: "me-1"
|
|
47
|
-
}), (settings.colorEncoding === COLOR_ENCODINGS.VAR ? settings.selectedVar
|
|
48
|
+
}), (settings.colorEncoding === COLOR_ENCODINGS.VAR ? (_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name : (_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.name) + addText), spanList, /*#__PURE__*/React.createElement("span", {
|
|
48
49
|
className: "domain-min"
|
|
49
50
|
}, formatNumerical(min, FORMATS.EXPONENTIAL)), /*#__PURE__*/React.createElement("span", {
|
|
50
51
|
className: "domain-med"
|
|
@@ -9,7 +9,7 @@ export const LoadingSpinner = _ref => {
|
|
|
9
9
|
className: "loading-spinner"
|
|
10
10
|
}, /*#__PURE__*/React.createElement(CircularProgress, {
|
|
11
11
|
disableShrink: disableShrink
|
|
12
|
-
}), text
|
|
12
|
+
}), (text === null || text === void 0 ? void 0 : text.length) && /*#__PURE__*/React.createElement("span", {
|
|
13
13
|
className: "visually-hidden"
|
|
14
14
|
}, text));
|
|
15
15
|
};
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
+
const _excluded = ["getDataAtIndex", "count", "ItemComponent", "estimateSize", "overscan", "maxHeight"];
|
|
1
2
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
|
+
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
4
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
2
5
|
import React, { useCallback, useEffect, useState } from "react";
|
|
3
6
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
4
7
|
export function VirtualizedList(_ref) {
|
|
8
|
+
var _virtualItems$0$start, _virtualItems$;
|
|
5
9
|
let {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
getDataAtIndex,
|
|
11
|
+
count,
|
|
12
|
+
ItemComponent,
|
|
13
|
+
estimateSize = 45,
|
|
14
|
+
overscan = 25,
|
|
15
|
+
maxHeight = "65vh"
|
|
16
|
+
} = _ref,
|
|
17
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
14
18
|
const [parentNode, setParentNode] = useState(null);
|
|
15
19
|
const itemVirtualizer = useVirtualizer({
|
|
16
20
|
count: count,
|
|
@@ -24,7 +28,7 @@ export function VirtualizedList(_ref) {
|
|
|
24
28
|
const virtualItems = itemVirtualizer.getVirtualItems();
|
|
25
29
|
useEffect(() => {
|
|
26
30
|
itemVirtualizer.measure();
|
|
27
|
-
}, [itemVirtualizer, parentNode
|
|
31
|
+
}, [itemVirtualizer, parentNode === null || parentNode === void 0 ? void 0 : parentNode.clientHeight, getDataAtIndex]);
|
|
28
32
|
return /*#__PURE__*/React.createElement("div", {
|
|
29
33
|
ref: refCallback,
|
|
30
34
|
style: {
|
|
@@ -34,7 +38,7 @@ export function VirtualizedList(_ref) {
|
|
|
34
38
|
className: "modern-scrollbars"
|
|
35
39
|
}, /*#__PURE__*/React.createElement("div", {
|
|
36
40
|
style: {
|
|
37
|
-
height:
|
|
41
|
+
height: "".concat(itemVirtualizer.getTotalSize(), "px"),
|
|
38
42
|
width: "100%",
|
|
39
43
|
position: "relative",
|
|
40
44
|
willChange: "transform"
|
|
@@ -45,7 +49,7 @@ export function VirtualizedList(_ref) {
|
|
|
45
49
|
top: 0,
|
|
46
50
|
left: 0,
|
|
47
51
|
width: "100%",
|
|
48
|
-
transform:
|
|
52
|
+
transform: "translateY(".concat((_virtualItems$0$start = (_virtualItems$ = virtualItems[0]) === null || _virtualItems$ === void 0 ? void 0 : _virtualItems$.start) !== null && _virtualItems$0$start !== void 0 ? _virtualItems$0$start : 0, "px)")
|
|
49
53
|
}
|
|
50
54
|
}, virtualItems.map(virtualItem => /*#__PURE__*/React.createElement("div", {
|
|
51
55
|
key: virtualItem.key,
|
package/dist/esm/utils/errors.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
|
+
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); }
|
|
1
6
|
export const parseError = err => {
|
|
2
7
|
if (err === DOMException.TIMEOUT_ERR) {
|
|
3
8
|
return {
|
|
@@ -5,42 +10,35 @@ export const parseError = err => {
|
|
|
5
10
|
name: err
|
|
6
11
|
};
|
|
7
12
|
}
|
|
8
|
-
switch (err
|
|
13
|
+
switch (err === null || err === void 0 ? void 0 : err.name) {
|
|
9
14
|
case "TypeError":
|
|
10
|
-
return {
|
|
11
|
-
...err,
|
|
15
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
12
16
|
message: "Failed to fetch data from server"
|
|
13
|
-
};
|
|
17
|
+
});
|
|
14
18
|
case "ReadZarrError":
|
|
15
|
-
return {
|
|
16
|
-
...err,
|
|
19
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
17
20
|
message: "Failed to read AnnData-Zarr"
|
|
18
|
-
};
|
|
21
|
+
});
|
|
19
22
|
case "InvalidObs":
|
|
20
|
-
return {
|
|
21
|
-
...err,
|
|
23
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
22
24
|
message: "Observation not found in dataset"
|
|
23
|
-
};
|
|
25
|
+
});
|
|
24
26
|
case "InvalidVar":
|
|
25
|
-
return {
|
|
26
|
-
...err,
|
|
27
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
27
28
|
message: "Feature not found in dataset"
|
|
28
|
-
};
|
|
29
|
+
});
|
|
29
30
|
case "InvalidKey":
|
|
30
|
-
return {
|
|
31
|
-
...err,
|
|
31
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
32
32
|
message: "Key not found in datset"
|
|
33
|
-
};
|
|
33
|
+
});
|
|
34
34
|
case "BadRequest":
|
|
35
|
-
return {
|
|
36
|
-
...err,
|
|
35
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
37
36
|
message: "Invalid request to server"
|
|
38
|
-
};
|
|
37
|
+
});
|
|
39
38
|
case "InternalServerError":
|
|
40
|
-
return {
|
|
41
|
-
...err,
|
|
39
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
42
40
|
message: "Server error"
|
|
43
|
-
};
|
|
41
|
+
});
|
|
44
42
|
default:
|
|
45
43
|
return err;
|
|
46
44
|
}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
|
+
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); }
|
|
1
6
|
import { useQuery } from "@tanstack/react-query";
|
|
2
7
|
import { useDebounce } from "@uidotdev/usehooks";
|
|
3
8
|
import { parseError } from "./errors";
|
|
@@ -42,7 +47,7 @@ export const useFetch = function (endpoint, params) {
|
|
|
42
47
|
data: fetchedData = null,
|
|
43
48
|
isLoading: isPending = false,
|
|
44
49
|
error: serverError = null
|
|
45
|
-
} = useQuery({
|
|
50
|
+
} = useQuery(_objectSpread({
|
|
46
51
|
queryKey: [endpoint, params],
|
|
47
52
|
queryFn: _ref => {
|
|
48
53
|
let {
|
|
@@ -54,11 +59,10 @@ export const useFetch = function (endpoint, params) {
|
|
|
54
59
|
let {
|
|
55
60
|
error
|
|
56
61
|
} = _ref2;
|
|
57
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
62
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
58
63
|
return failureCount < 3;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
});
|
|
64
|
+
}
|
|
65
|
+
}, opts));
|
|
62
66
|
return {
|
|
63
67
|
fetchedData,
|
|
64
68
|
isPending,
|
|
@@ -77,7 +81,7 @@ export const useDebouncedFetch = function (endpoint, params) {
|
|
|
77
81
|
data: fetchedData = null,
|
|
78
82
|
isLoading: isPending = false,
|
|
79
83
|
error: serverError = null
|
|
80
|
-
} = useQuery({
|
|
84
|
+
} = useQuery(_objectSpread({
|
|
81
85
|
queryKey: [endpoint, debouncedParams],
|
|
82
86
|
queryFn: _ref3 => {
|
|
83
87
|
let {
|
|
@@ -89,11 +93,10 @@ export const useDebouncedFetch = function (endpoint, params) {
|
|
|
89
93
|
let {
|
|
90
94
|
error
|
|
91
95
|
} = _ref4;
|
|
92
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
96
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
93
97
|
return failureCount < 3;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
});
|
|
98
|
+
}
|
|
99
|
+
}, opts));
|
|
97
100
|
return {
|
|
98
101
|
fetchedData,
|
|
99
102
|
isPending,
|
|
@@ -37,14 +37,15 @@ const meanData = (_i, data) => {
|
|
|
37
37
|
});
|
|
38
38
|
};
|
|
39
39
|
export const useXData = function () {
|
|
40
|
+
var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3;
|
|
40
41
|
let agg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : meanData;
|
|
41
42
|
const dataset = useDataset();
|
|
42
43
|
const settings = useSettings();
|
|
43
|
-
const [xParams, setXParams] = useState(!settings.selectedVar ? [] : !settings.selectedVar
|
|
44
|
+
const [xParams, setXParams] = useState(!settings.selectedVar ? [] : !((_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet) ? [{
|
|
44
45
|
url: dataset.url,
|
|
45
46
|
path: "X",
|
|
46
|
-
s: [null, settings.selectedVar
|
|
47
|
-
}] : _.map(settings.selectedVar
|
|
47
|
+
s: [null, (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.matrix_index]
|
|
48
|
+
}] : _.map((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars, v => {
|
|
48
49
|
return {
|
|
49
50
|
url: dataset.url,
|
|
50
51
|
path: "X",
|
|
@@ -52,11 +53,12 @@ export const useXData = function () {
|
|
|
52
53
|
};
|
|
53
54
|
}));
|
|
54
55
|
useEffect(() => {
|
|
55
|
-
|
|
56
|
+
var _settings$selectedVar4, _settings$selectedVar5, _settings$selectedVar6;
|
|
57
|
+
setXParams(!settings.selectedVar ? [] : !((_settings$selectedVar4 = settings.selectedVar) !== null && _settings$selectedVar4 !== void 0 && _settings$selectedVar4.isSet) ? [{
|
|
56
58
|
url: dataset.url,
|
|
57
59
|
path: "X",
|
|
58
|
-
s: [null, settings.selectedVar
|
|
59
|
-
}] : _.map(settings.selectedVar
|
|
60
|
+
s: [null, (_settings$selectedVar5 = settings.selectedVar) === null || _settings$selectedVar5 === void 0 ? void 0 : _settings$selectedVar5.matrix_index]
|
|
61
|
+
}] : _.map((_settings$selectedVar6 = settings.selectedVar) === null || _settings$selectedVar6 === void 0 ? void 0 : _settings$selectedVar6.vars, v => {
|
|
60
62
|
return {
|
|
61
63
|
url: dataset.url,
|
|
62
64
|
path: "X",
|
|
@@ -69,18 +71,20 @@ export const useXData = function () {
|
|
|
69
71
|
}, agg);
|
|
70
72
|
};
|
|
71
73
|
export const useObsData = function () {
|
|
74
|
+
var _obs, _obs2;
|
|
72
75
|
let obs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
73
76
|
const dataset = useDataset();
|
|
74
77
|
const settings = useSettings();
|
|
75
78
|
obs = obs || settings.selectedObs;
|
|
76
79
|
const [obsParams, setObsParams] = useState({
|
|
77
80
|
url: dataset.url,
|
|
78
|
-
path: "obs/" + obs
|
|
81
|
+
path: "obs/" + ((_obs = obs) === null || _obs === void 0 ? void 0 : _obs.name) + (((_obs2 = obs) === null || _obs2 === void 0 ? void 0 : _obs2.type) === OBS_TYPES.CATEGORICAL ? "/codes" : "")
|
|
79
82
|
});
|
|
80
83
|
useEffect(() => {
|
|
84
|
+
var _obs3, _obs4;
|
|
81
85
|
setObsParams({
|
|
82
86
|
url: dataset.url,
|
|
83
|
-
path: "obs/" + obs
|
|
87
|
+
path: "obs/" + ((_obs3 = obs) === null || _obs3 === void 0 ? void 0 : _obs3.name) + (((_obs4 = obs) === null || _obs4 === void 0 ? void 0 : _obs4.type) === OBS_TYPES.CATEGORICAL ? "/codes" : "")
|
|
84
88
|
});
|
|
85
89
|
}, [dataset.url, obs]);
|
|
86
90
|
return useZarr(obsParams, GET_OPTIONS, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haniffalab/cherita-react",
|
|
3
|
-
"version": "1.2.0-dev.2025-05-21.
|
|
3
|
+
"version": "1.2.0-dev.2025-05-21.e57ef5f2",
|
|
4
4
|
"author": "Haniffa Lab",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -77,6 +77,8 @@
|
|
|
77
77
|
"jest": "^29.7.0",
|
|
78
78
|
"jest-environment-jsdom": "^29.7.0",
|
|
79
79
|
"prettier": "^3.5.3",
|
|
80
|
+
"react": "^18.2.0",
|
|
81
|
+
"react-dom": "^18.2.0",
|
|
80
82
|
"sass": "1.77.6",
|
|
81
83
|
"stylelint": "^16.10.0",
|
|
82
84
|
"stylelint-config-prettier": "^9.0.5",
|
|
@@ -124,5 +126,5 @@
|
|
|
124
126
|
"url": "https://github.com/haniffalab/cherita-react/issues"
|
|
125
127
|
},
|
|
126
128
|
"homepage": "https://github.com/haniffalab/cherita-react#readme",
|
|
127
|
-
"prereleaseSha": "
|
|
129
|
+
"prereleaseSha": "e57ef5f2c023e4400ae9f7dbcb1495778ba11e29"
|
|
128
130
|
}
|
package/scss/cherita.scss
CHANGED
|
@@ -29,9 +29,8 @@
|
|
|
29
29
|
border-radius: var(--#{$prefix}border-radius);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
.cherita-list.var-set-list {
|
|
33
|
-
.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
32
|
+
.cherita-list.var-set-list > .list-group-item {
|
|
33
|
+
filter: brightness(0.95); // darken background
|
|
34
|
+
padding-right: 0;
|
|
35
|
+
padding-left: 0.35rem;
|
|
37
36
|
}
|