@haniffalab/cherita-react 1.2.0 → 1.3.0-dev.2025-05-29.ee7e9b72
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/controls/Controls.js +60 -0
- package/dist/cjs/components/dotplot/Dotplot.js +47 -38
- package/dist/cjs/components/dotplot/DotplotControls.js +77 -114
- package/dist/cjs/components/full-page/FullPage.js +29 -33
- package/dist/cjs/components/full-page/FullPagePseudospatial.js +30 -33
- package/dist/cjs/components/heatmap/Heatmap.js +33 -22
- package/dist/cjs/components/heatmap/HeatmapControls.js +2 -19
- package/dist/cjs/components/matrixplot/Matrixplot.js +35 -24
- package/dist/cjs/components/matrixplot/MatrixplotControls.js +4 -34
- package/dist/cjs/components/obs-list/ObsItem.js +63 -51
- package/dist/cjs/components/obs-list/ObsList.js +53 -48
- package/dist/cjs/components/obsm-list/ObsmList.js +17 -12
- package/dist/cjs/components/offcanvas/index.js +14 -11
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +78 -68
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +27 -21
- package/dist/cjs/components/scatterplot/Scatterplot.js +82 -76
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +18 -31
- package/dist/cjs/components/scatterplot/SpatialControls.js +53 -23
- package/dist/cjs/components/scatterplot/Toolbox.js +1 -18
- package/dist/cjs/components/search-bar/SearchBar.js +156 -59
- package/dist/cjs/components/search-bar/SearchInfo.js +182 -0
- package/dist/cjs/components/search-bar/SearchResults.js +90 -60
- package/dist/cjs/components/var-list/VarItem.js +52 -75
- package/dist/cjs/components/var-list/VarList.js +47 -172
- package/dist/cjs/components/var-list/VarListToolbar.js +7 -8
- package/dist/cjs/components/var-list/VarSet.js +66 -57
- package/dist/cjs/components/violin/Violin.js +54 -43
- package/dist/cjs/components/violin/ViolinControls.js +4 -20
- package/dist/cjs/context/DatasetContext.js +26 -513
- package/dist/cjs/context/FilterContext.js +9 -8
- package/dist/cjs/context/SettingsContext.js +539 -0
- package/dist/cjs/context/ZarrDataContext.js +1 -2
- package/dist/cjs/helpers/color-helper.js +8 -8
- package/dist/cjs/helpers/zarr-helper.js +19 -16
- package/dist/cjs/utils/Filter.js +25 -21
- package/dist/cjs/utils/Histogram.js +4 -3
- package/dist/cjs/utils/ImageViewer.js +1 -2
- package/dist/cjs/utils/Legend.js +18 -12
- 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 +31 -50
- package/dist/css/cherita.css +84 -24
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/controls/Controls.js +51 -0
- package/dist/esm/components/dotplot/Dotplot.js +47 -37
- package/dist/esm/components/dotplot/DotplotControls.js +77 -112
- package/dist/esm/components/full-page/FullPage.js +29 -32
- package/dist/esm/components/full-page/FullPagePseudospatial.js +30 -32
- package/dist/esm/components/heatmap/Heatmap.js +32 -20
- package/dist/esm/components/heatmap/HeatmapControls.js +3 -20
- package/dist/esm/components/matrixplot/Matrixplot.js +34 -22
- package/dist/esm/components/matrixplot/MatrixplotControls.js +5 -35
- package/dist/esm/components/obs-list/ObsItem.js +63 -49
- package/dist/esm/components/obs-list/ObsList.js +53 -47
- package/dist/esm/components/obsm-list/ObsmList.js +17 -11
- package/dist/esm/components/offcanvas/index.js +14 -11
- package/dist/esm/components/pseudospatial/Pseudospatial.js +77 -66
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +27 -20
- package/dist/esm/components/scatterplot/Scatterplot.js +81 -74
- package/dist/esm/components/scatterplot/ScatterplotControls.js +18 -29
- package/dist/esm/components/scatterplot/SpatialControls.js +54 -23
- package/dist/esm/components/scatterplot/Toolbox.js +1 -18
- package/dist/esm/components/search-bar/SearchBar.js +156 -59
- package/dist/esm/components/search-bar/SearchInfo.js +173 -0
- package/dist/esm/components/search-bar/SearchResults.js +91 -60
- package/dist/esm/components/var-list/VarItem.js +53 -76
- package/dist/esm/components/var-list/VarList.js +47 -171
- package/dist/esm/components/var-list/VarListToolbar.js +6 -6
- package/dist/esm/components/var-list/VarSet.js +67 -57
- package/dist/esm/components/violin/Violin.js +53 -41
- package/dist/esm/components/violin/ViolinControls.js +5 -21
- package/dist/esm/context/DatasetContext.js +25 -510
- package/dist/esm/context/FilterContext.js +8 -6
- package/dist/esm/context/SettingsContext.js +528 -0
- package/dist/esm/helpers/color-helper.js +8 -8
- package/dist/esm/helpers/zarr-helper.js +19 -16
- package/dist/esm/utils/Filter.js +25 -21
- package/dist/esm/utils/Histogram.js +4 -3
- package/dist/esm/utils/Legend.js +17 -10
- 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 +33 -51
- package/package.json +6 -3
- package/scss/cherita.scss +50 -9
- package/scss/components/layouts.scss +24 -13
- package/scss/components/lists.scss +10 -0
- package/scss/components/plots.scss +3 -5
package/dist/cjs/utils/Filter.js
CHANGED
|
@@ -8,8 +8,8 @@ var _react = require("react");
|
|
|
8
8
|
var _turf = require("@turf/turf");
|
|
9
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
10
|
var _constants = require("../constants/constants");
|
|
11
|
-
var _DatasetContext = require("../context/DatasetContext");
|
|
12
11
|
var _FilterContext = require("../context/FilterContext");
|
|
12
|
+
var _SettingsContext = require("../context/SettingsContext");
|
|
13
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
const EPSILON = 1e-6;
|
|
15
15
|
const isInBins = (v, binEdges, indices) => {
|
|
@@ -22,7 +22,7 @@ const isInBins = (v, binEdges, indices) => {
|
|
|
22
22
|
return _lodash.default.some(ranges, range => _lodash.default.inRange(v, ...range));
|
|
23
23
|
};
|
|
24
24
|
const isInPolygons = (polygons, positions, index) => {
|
|
25
|
-
if (!polygons
|
|
25
|
+
if (!(polygons !== null && polygons !== void 0 && polygons.length) || !(positions !== null && positions !== void 0 && positions.length)) {
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
28
28
|
return _lodash.default.some(polygons, (_f, i) => {
|
|
@@ -30,13 +30,14 @@ const isInPolygons = (polygons, positions, index) => {
|
|
|
30
30
|
});
|
|
31
31
|
};
|
|
32
32
|
const isInValues = (omit, value) => {
|
|
33
|
-
if (!omit
|
|
33
|
+
if (!(omit !== null && omit !== void 0 && omit.length)) {
|
|
34
34
|
return true;
|
|
35
35
|
}
|
|
36
36
|
return !_lodash.default.includes(omit, value);
|
|
37
37
|
};
|
|
38
38
|
const useFilter = data => {
|
|
39
|
-
|
|
39
|
+
var _settings$selectedObs, _settings$selectedObs2, _settings$selectedObs3, _settings$selectedObs4, _settings$selectedObs7, _settings$selectedObs8;
|
|
40
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
40
41
|
const filterDataDispatch = (0, _FilterContext.useFilteredDataDispatch)();
|
|
41
42
|
const {
|
|
42
43
|
obsmData,
|
|
@@ -45,31 +46,33 @@ const useFilter = data => {
|
|
|
45
46
|
isPending,
|
|
46
47
|
serverError
|
|
47
48
|
} = data;
|
|
48
|
-
const isCategorical =
|
|
49
|
-
const isContinuous =
|
|
50
|
-
const sliceByObs =
|
|
49
|
+
const isCategorical = ((_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.type) === _constants.OBS_TYPES.CATEGORICAL || ((_settings$selectedObs2 = settings.selectedObs) === null || _settings$selectedObs2 === void 0 ? void 0 : _settings$selectedObs2.type) === _constants.OBS_TYPES.BOOLEAN;
|
|
50
|
+
const isContinuous = ((_settings$selectedObs3 = settings.selectedObs) === null || _settings$selectedObs3 === void 0 ? void 0 : _settings$selectedObs3.type) === _constants.OBS_TYPES.CONTINUOUS;
|
|
51
|
+
const sliceByObs = settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && !!((_settings$selectedObs4 = settings.selectedObs) !== null && _settings$selectedObs4 !== void 0 && _settings$selectedObs4.omit.length) || settings.sliceBy.obs;
|
|
51
52
|
const isInObsSlice = (0, _react.useCallback)((index, values) => {
|
|
52
53
|
let inSlice = true;
|
|
53
54
|
if (values && sliceByObs) {
|
|
54
55
|
if (isCategorical) {
|
|
55
|
-
|
|
56
|
+
var _settings$selectedObs5;
|
|
57
|
+
inSlice &= isInValues((_settings$selectedObs5 = settings.selectedObs) === null || _settings$selectedObs5 === void 0 ? void 0 : _settings$selectedObs5.omit, values[index]);
|
|
56
58
|
} else if (isContinuous) {
|
|
57
59
|
if (isNaN(values[index])) {
|
|
58
|
-
|
|
60
|
+
var _settings$selectedObs6;
|
|
61
|
+
inSlice &= isInValues((_settings$selectedObs6 = settings.selectedObs) === null || _settings$selectedObs6 === void 0 ? void 0 : _settings$selectedObs6.omit, -1);
|
|
59
62
|
} else {
|
|
60
|
-
inSlice &= isInBins(values[index],
|
|
63
|
+
inSlice &= isInBins(values[index], settings.selectedObs.bins.binEdges, _lodash.default.without(settings.selectedObs.omit, -1));
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
return inSlice;
|
|
65
|
-
}, [
|
|
68
|
+
}, [(_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]);
|
|
66
69
|
const isInPolygonsSlice = (0, _react.useCallback)((index, positions) => {
|
|
67
70
|
let inSlice = true;
|
|
68
|
-
if (
|
|
69
|
-
inSlice &= isInPolygons(
|
|
71
|
+
if (settings.sliceBy.polygons && positions) {
|
|
72
|
+
inSlice &= isInPolygons(settings.polygons[settings.selectedObsm], positions, index);
|
|
70
73
|
}
|
|
71
74
|
return inSlice;
|
|
72
|
-
}, [
|
|
75
|
+
}, [settings.polygons, settings.selectedObsm, settings.sliceBy.polygons]);
|
|
73
76
|
const isInSlice = (0, _react.useCallback)((index, values, positions) => {
|
|
74
77
|
return isInObsSlice(index, values) && isInPolygonsSlice(index, positions);
|
|
75
78
|
}, [isInObsSlice, isInPolygonsSlice]);
|
|
@@ -87,7 +90,7 @@ const useFilter = data => {
|
|
|
87
90
|
slicedLength: null
|
|
88
91
|
};
|
|
89
92
|
}
|
|
90
|
-
if (
|
|
93
|
+
if (settings.colorEncoding === _constants.COLOR_ENCODINGS.VAR) {
|
|
91
94
|
const {
|
|
92
95
|
filtered,
|
|
93
96
|
filteredIndices
|
|
@@ -107,7 +110,7 @@ const useFilter = data => {
|
|
|
107
110
|
valueMax: _lodash.default.max(filtered),
|
|
108
111
|
slicedLength: filtered.length
|
|
109
112
|
};
|
|
110
|
-
} else if (
|
|
113
|
+
} else if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS) {
|
|
111
114
|
const {
|
|
112
115
|
filtered,
|
|
113
116
|
filteredIndices
|
|
@@ -128,16 +131,17 @@ const useFilter = data => {
|
|
|
128
131
|
slicedLength: filtered.length
|
|
129
132
|
};
|
|
130
133
|
} else {
|
|
134
|
+
var _obsData$data;
|
|
131
135
|
return {
|
|
132
136
|
filteredIndices: null,
|
|
133
137
|
valueMin: _lodash.default.min(obsData.data),
|
|
134
138
|
valueMax: _lodash.default.max(obsData.data),
|
|
135
|
-
slicedLength: obsData.data
|
|
139
|
+
slicedLength: (_obsData$data = obsData.data) === null || _obsData$data === void 0 ? void 0 : _obsData$data.length
|
|
136
140
|
};
|
|
137
141
|
}
|
|
138
|
-
}, [
|
|
139
|
-
const isSliced = sliceByObs ||
|
|
140
|
-
// const isSliced =
|
|
142
|
+
}, [settings.colorEncoding, isContinuous, isInSlice, isPending, obsData.data, obsmData.data, serverError, xData.data]);
|
|
143
|
+
const isSliced = sliceByObs || settings.sliceBy.polygons;
|
|
144
|
+
// const isSliced = settings.sliceBy.obs || settings.sliceBy.polygons;
|
|
141
145
|
|
|
142
146
|
(0, _react.useEffect)(() => {
|
|
143
147
|
if (!isPending && !serverError) {
|
|
@@ -150,6 +154,6 @@ const useFilter = data => {
|
|
|
150
154
|
isSliced: isSliced
|
|
151
155
|
});
|
|
152
156
|
}
|
|
153
|
-
}, [
|
|
157
|
+
}, [settings.sliceBy.obs, settings.sliceBy.polygons, filterDataDispatch, filteredIndices, isPending, isSliced, serverError, slicedLength, valueMax, valueMin]);
|
|
154
158
|
};
|
|
155
159
|
exports.useFilter = useFilter;
|
|
@@ -11,6 +11,7 @@ var _LoadingIndicators = require("./LoadingIndicators");
|
|
|
11
11
|
var _string = require("./string");
|
|
12
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
13
|
function Histogram(_ref) {
|
|
14
|
+
var _data$bin_edges;
|
|
14
15
|
let {
|
|
15
16
|
data,
|
|
16
17
|
isPending,
|
|
@@ -36,11 +37,11 @@ function Histogram(_ref) {
|
|
|
36
37
|
let {
|
|
37
38
|
dataIndex
|
|
38
39
|
} = _ref2;
|
|
39
|
-
return
|
|
40
|
+
return "".concat((0, _string.formatNumerical)(data.hist[dataIndex]));
|
|
40
41
|
},
|
|
41
42
|
xAxis: {
|
|
42
|
-
data: _lodash.default.range(data.bin_edges
|
|
43
|
-
valueFormatter: v =>
|
|
43
|
+
data: _lodash.default.range((_data$bin_edges = data.bin_edges) === null || _data$bin_edges === void 0 ? void 0 : _data$bin_edges.length) || null,
|
|
44
|
+
valueFormatter: v => "Bin [".concat((0, _string.formatNumerical)(data.bin_edges[v][0], _string.FORMATS.EXPONENTIAL), ", ").concat((0, _string.formatNumerical)(data.bin_edges[v][1], _string.FORMATS.EXPONENTIAL)).concat(v === data.bin_edges.length - 1 ? "]" : ")")
|
|
44
45
|
},
|
|
45
46
|
slotProps: {
|
|
46
47
|
popper: {
|
|
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.ImageViewer = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactBootstrap = require("react-bootstrap");
|
|
9
|
-
function
|
|
10
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
9
|
+
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); }
|
|
11
10
|
const ImageViewer = _ref => {
|
|
12
11
|
let {
|
|
13
12
|
src,
|
package/dist/cjs/utils/Legend.js
CHANGED
|
@@ -5,14 +5,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.Legend = Legend;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
9
|
+
var _reactFontawesome = require("@fortawesome/react-fontawesome");
|
|
8
10
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
11
|
var _string = require("./string");
|
|
10
12
|
var _constants = require("../constants/constants");
|
|
11
|
-
var
|
|
13
|
+
var _SettingsContext = require("../context/SettingsContext");
|
|
12
14
|
var _colorHelper = require("../helpers/color-helper");
|
|
13
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
-
function
|
|
15
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
|
+
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); }
|
|
16
17
|
function Legend(_ref) {
|
|
17
18
|
let {
|
|
18
19
|
isCategorical = false,
|
|
@@ -21,7 +22,7 @@ function Legend(_ref) {
|
|
|
21
22
|
colorscale = null,
|
|
22
23
|
addText = ""
|
|
23
24
|
} = _ref;
|
|
24
|
-
const
|
|
25
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
25
26
|
const {
|
|
26
27
|
getColor
|
|
27
28
|
} = (0, _colorHelper.useColor)();
|
|
@@ -41,27 +42,32 @@ function Legend(_ref) {
|
|
|
41
42
|
});
|
|
42
43
|
});
|
|
43
44
|
}, [colorscale, getColor, isCategorical]);
|
|
44
|
-
if (
|
|
45
|
+
if (settings.colorEncoding && !isCategorical) {
|
|
46
|
+
var _settings$selectedVar, _settings$selectedObs;
|
|
45
47
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
46
48
|
className: "cherita-legend"
|
|
47
49
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
48
50
|
className: "gradient"
|
|
49
51
|
}, /*#__PURE__*/_react.default.createElement("p", {
|
|
50
52
|
className: "small m-0 p-0"
|
|
51
|
-
},
|
|
53
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
54
|
+
icon: _freeSolidSvgIcons.faDroplet,
|
|
55
|
+
className: "me-1"
|
|
56
|
+
}), (settings.colorEncoding === _constants.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.default.createElement("span", {
|
|
52
57
|
className: "domain-min"
|
|
53
58
|
}, (0, _string.formatNumerical)(min, _string.FORMATS.EXPONENTIAL)), /*#__PURE__*/_react.default.createElement("span", {
|
|
54
59
|
className: "domain-med"
|
|
55
60
|
}, (0, _string.formatNumerical)((min + max) * 0.5, _string.FORMATS.EXPONENTIAL)), /*#__PURE__*/_react.default.createElement("span", {
|
|
56
61
|
className: "domain-max"
|
|
57
62
|
}, (0, _string.formatNumerical)(max, _string.FORMATS.EXPONENTIAL))));
|
|
58
|
-
} else {
|
|
63
|
+
} else if (settings.colorEncoding === _constants.COLOR_ENCODINGS.OBS && settings.selectedObs) {
|
|
59
64
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
60
|
-
className: "cherita-legend"
|
|
61
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
62
|
-
className: "gradient"
|
|
65
|
+
className: "cherita-legend categorical"
|
|
63
66
|
}, /*#__PURE__*/_react.default.createElement("p", {
|
|
64
|
-
className: "
|
|
65
|
-
},
|
|
67
|
+
className: "legend-text text-end m-0 p-0"
|
|
68
|
+
}, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
69
|
+
icon: _freeSolidSvgIcons.faDroplet,
|
|
70
|
+
className: "me-2"
|
|
71
|
+
}), settings.selectedObs.name));
|
|
66
72
|
}
|
|
67
73
|
}
|
|
@@ -16,7 +16,7 @@ const LoadingSpinner = _ref => {
|
|
|
16
16
|
className: "loading-spinner"
|
|
17
17
|
}, /*#__PURE__*/_react.default.createElement(_material.CircularProgress, {
|
|
18
18
|
disableShrink: disableShrink
|
|
19
|
-
}), text
|
|
19
|
+
}), (text === null || text === void 0 ? void 0 : text.length) && /*#__PURE__*/_react.default.createElement("span", {
|
|
20
20
|
className: "visually-hidden"
|
|
21
21
|
}, text));
|
|
22
22
|
};
|
|
@@ -6,19 +6,22 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.VirtualizedList = VirtualizedList;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactVirtual = require("@tanstack/react-virtual");
|
|
9
|
-
|
|
10
|
-
function _interopRequireWildcard(e, r) { if (!
|
|
9
|
+
const _excluded = ["getDataAtIndex", "count", "ItemComponent", "estimateSize", "overscan", "maxHeight"];
|
|
10
|
+
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); }
|
|
11
11
|
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); }
|
|
12
|
+
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; }
|
|
13
|
+
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; }
|
|
12
14
|
function VirtualizedList(_ref) {
|
|
15
|
+
var _virtualItems$0$start, _virtualItems$;
|
|
13
16
|
let {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
getDataAtIndex,
|
|
18
|
+
count,
|
|
19
|
+
ItemComponent,
|
|
20
|
+
estimateSize = 45,
|
|
21
|
+
overscan = 25,
|
|
22
|
+
maxHeight = "65vh"
|
|
23
|
+
} = _ref,
|
|
24
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
22
25
|
const [parentNode, setParentNode] = (0, _react.useState)(null);
|
|
23
26
|
const itemVirtualizer = (0, _reactVirtual.useVirtualizer)({
|
|
24
27
|
count: count,
|
|
@@ -32,7 +35,7 @@ function VirtualizedList(_ref) {
|
|
|
32
35
|
const virtualItems = itemVirtualizer.getVirtualItems();
|
|
33
36
|
(0, _react.useEffect)(() => {
|
|
34
37
|
itemVirtualizer.measure();
|
|
35
|
-
}, [itemVirtualizer, parentNode
|
|
38
|
+
}, [itemVirtualizer, parentNode === null || parentNode === void 0 ? void 0 : parentNode.clientHeight, getDataAtIndex]);
|
|
36
39
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
37
40
|
ref: refCallback,
|
|
38
41
|
style: {
|
|
@@ -42,7 +45,7 @@ function VirtualizedList(_ref) {
|
|
|
42
45
|
className: "modern-scrollbars"
|
|
43
46
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
44
47
|
style: {
|
|
45
|
-
height:
|
|
48
|
+
height: "".concat(itemVirtualizer.getTotalSize(), "px"),
|
|
46
49
|
width: "100%",
|
|
47
50
|
position: "relative",
|
|
48
51
|
willChange: "transform"
|
|
@@ -53,7 +56,7 @@ function VirtualizedList(_ref) {
|
|
|
53
56
|
top: 0,
|
|
54
57
|
left: 0,
|
|
55
58
|
width: "100%",
|
|
56
|
-
transform:
|
|
59
|
+
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)")
|
|
57
60
|
}
|
|
58
61
|
}, virtualItems.map(virtualItem => /*#__PURE__*/_react.default.createElement("div", {
|
|
59
62
|
key: virtualItem.key,
|
package/dist/cjs/utils/errors.js
CHANGED
|
@@ -4,6 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.parseError = void 0;
|
|
7
|
+
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; }
|
|
8
|
+
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; }
|
|
9
|
+
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; }
|
|
10
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
11
|
+
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); }
|
|
7
12
|
const parseError = err => {
|
|
8
13
|
if (err === DOMException.TIMEOUT_ERR) {
|
|
9
14
|
return {
|
|
@@ -11,42 +16,35 @@ const parseError = err => {
|
|
|
11
16
|
name: err
|
|
12
17
|
};
|
|
13
18
|
}
|
|
14
|
-
switch (err
|
|
19
|
+
switch (err === null || err === void 0 ? void 0 : err.name) {
|
|
15
20
|
case "TypeError":
|
|
16
|
-
return {
|
|
17
|
-
...err,
|
|
21
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
18
22
|
message: "Failed to fetch data from server"
|
|
19
|
-
};
|
|
23
|
+
});
|
|
20
24
|
case "ReadZarrError":
|
|
21
|
-
return {
|
|
22
|
-
...err,
|
|
25
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
23
26
|
message: "Failed to read AnnData-Zarr"
|
|
24
|
-
};
|
|
27
|
+
});
|
|
25
28
|
case "InvalidObs":
|
|
26
|
-
return {
|
|
27
|
-
...err,
|
|
29
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
28
30
|
message: "Observation not found in dataset"
|
|
29
|
-
};
|
|
31
|
+
});
|
|
30
32
|
case "InvalidVar":
|
|
31
|
-
return {
|
|
32
|
-
...err,
|
|
33
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
33
34
|
message: "Feature not found in dataset"
|
|
34
|
-
};
|
|
35
|
+
});
|
|
35
36
|
case "InvalidKey":
|
|
36
|
-
return {
|
|
37
|
-
...err,
|
|
37
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
38
38
|
message: "Key not found in datset"
|
|
39
|
-
};
|
|
39
|
+
});
|
|
40
40
|
case "BadRequest":
|
|
41
|
-
return {
|
|
42
|
-
...err,
|
|
41
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
43
42
|
message: "Invalid request to server"
|
|
44
|
-
};
|
|
43
|
+
});
|
|
45
44
|
case "InternalServerError":
|
|
46
|
-
return {
|
|
47
|
-
...err,
|
|
45
|
+
return _objectSpread(_objectSpread({}, err), {}, {
|
|
48
46
|
message: "Server error"
|
|
49
|
-
};
|
|
47
|
+
});
|
|
50
48
|
default:
|
|
51
49
|
return err;
|
|
52
50
|
}
|
|
@@ -8,6 +8,11 @@ exports.useFetch = exports.useDebouncedFetch = void 0;
|
|
|
8
8
|
var _reactQuery = require("@tanstack/react-query");
|
|
9
9
|
var _usehooks = require("@uidotdev/usehooks");
|
|
10
10
|
var _errors = require("./errors");
|
|
11
|
+
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; }
|
|
12
|
+
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; }
|
|
13
|
+
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; }
|
|
14
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
15
|
+
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); }
|
|
11
16
|
async function fetchData(endpoint, params) {
|
|
12
17
|
let signal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
13
18
|
let ms = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 300000;
|
|
@@ -49,7 +54,7 @@ const useFetch = function (endpoint, params) {
|
|
|
49
54
|
data: fetchedData = null,
|
|
50
55
|
isLoading: isPending = false,
|
|
51
56
|
error: serverError = null
|
|
52
|
-
} = (0, _reactQuery.useQuery)({
|
|
57
|
+
} = (0, _reactQuery.useQuery)(_objectSpread({
|
|
53
58
|
queryKey: [endpoint, params],
|
|
54
59
|
queryFn: _ref => {
|
|
55
60
|
let {
|
|
@@ -61,11 +66,10 @@ const useFetch = function (endpoint, params) {
|
|
|
61
66
|
let {
|
|
62
67
|
error
|
|
63
68
|
} = _ref2;
|
|
64
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
69
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
65
70
|
return failureCount < 3;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
});
|
|
71
|
+
}
|
|
72
|
+
}, opts));
|
|
69
73
|
return {
|
|
70
74
|
fetchedData,
|
|
71
75
|
isPending,
|
|
@@ -85,7 +89,7 @@ const useDebouncedFetch = function (endpoint, params) {
|
|
|
85
89
|
data: fetchedData = null,
|
|
86
90
|
isLoading: isPending = false,
|
|
87
91
|
error: serverError = null
|
|
88
|
-
} = (0, _reactQuery.useQuery)({
|
|
92
|
+
} = (0, _reactQuery.useQuery)(_objectSpread({
|
|
89
93
|
queryKey: [endpoint, debouncedParams],
|
|
90
94
|
queryFn: _ref3 => {
|
|
91
95
|
let {
|
|
@@ -97,11 +101,10 @@ const useDebouncedFetch = function (endpoint, params) {
|
|
|
97
101
|
let {
|
|
98
102
|
error
|
|
99
103
|
} = _ref4;
|
|
100
|
-
if ([400, 401, 403, 404, 422].includes(error
|
|
104
|
+
if ([400, 401, 403, 404, 422].includes(error === null || error === void 0 ? void 0 : error.status)) return false;
|
|
101
105
|
return failureCount < 3;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
});
|
|
106
|
+
}
|
|
107
|
+
}, opts));
|
|
105
108
|
return {
|
|
106
109
|
fetchedData,
|
|
107
110
|
isPending,
|
|
@@ -6,25 +6,24 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.useXData = exports.useObsmData = exports.useObsData = exports.useLabelObsData = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
+
var _zarr = require("zarr");
|
|
9
10
|
var _constants = require("../constants/constants");
|
|
10
11
|
var _DatasetContext = require("../context/DatasetContext");
|
|
12
|
+
var _SettingsContext = require("../context/SettingsContext");
|
|
11
13
|
var _zarrHelper = require("../helpers/zarr-helper");
|
|
12
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
// @TODO: support specifying slice to load from context
|
|
13
16
|
const useObsmData = function () {
|
|
14
17
|
let obsm = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
15
18
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
20
|
+
obsm = obsm || settings.selectedObsm;
|
|
21
|
+
const obsmParams = (0, _react.useMemo)(() => ({
|
|
18
22
|
url: dataset.url,
|
|
19
|
-
path: "obsm/" + obsm
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
url: dataset.url,
|
|
24
|
-
path: "obsm/" + obsm
|
|
25
|
-
});
|
|
26
|
-
}, [dataset.url, obsm]);
|
|
27
|
-
return (0, _zarrHelper.useZarr)(obsmParams, null, _zarrHelper.GET_OPTIONS, {
|
|
23
|
+
path: "obsm/" + obsm,
|
|
24
|
+
s: [null, (0, _zarr.slice)(null, 2)] // load only [:, :2]
|
|
25
|
+
}), [dataset.url, obsm]);
|
|
26
|
+
return (0, _zarrHelper.useZarr)(obsmParams, _zarrHelper.GET_OPTIONS, {
|
|
28
27
|
enabled: !!obsm
|
|
29
28
|
});
|
|
30
29
|
};
|
|
@@ -40,72 +39,54 @@ const meanData = (_i, data) => {
|
|
|
40
39
|
const useXData = function () {
|
|
41
40
|
let agg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : meanData;
|
|
42
41
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}] : _lodash.default.map(dataset.selectedVar?.vars, v => {
|
|
48
|
-
return {
|
|
42
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
43
|
+
const xParams = (0, _react.useMemo)(() => {
|
|
44
|
+
var _settings$selectedVar, _settings$selectedVar2, _settings$selectedVar3;
|
|
45
|
+
return !settings.selectedVar ? [] : !((_settings$selectedVar = settings.selectedVar) !== null && _settings$selectedVar !== void 0 && _settings$selectedVar.isSet) ? [{
|
|
49
46
|
url: dataset.url,
|
|
50
47
|
path: "X",
|
|
51
|
-
s: [null,
|
|
52
|
-
}
|
|
53
|
-
}));
|
|
54
|
-
(0, _react.useEffect)(() => {
|
|
55
|
-
setXParams(!dataset.selectedVar ? [] : !dataset.selectedVar?.isSet ? [{
|
|
56
|
-
url: dataset.url,
|
|
57
|
-
path: "X",
|
|
58
|
-
s: [null, dataset.selectedVar?.matrix_index]
|
|
59
|
-
}] : _lodash.default.map(dataset.selectedVar?.vars, v => {
|
|
48
|
+
s: [null, (_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.matrix_index]
|
|
49
|
+
}] : _lodash.default.map((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.vars, v => {
|
|
60
50
|
return {
|
|
61
51
|
url: dataset.url,
|
|
62
52
|
path: "X",
|
|
63
53
|
s: [null, v.matrix_index]
|
|
64
54
|
};
|
|
65
|
-
})
|
|
66
|
-
}, [dataset.url,
|
|
55
|
+
});
|
|
56
|
+
}, [dataset.url, settings.selectedVar]);
|
|
67
57
|
return (0, _zarrHelper.useMultipleZarr)(xParams, _zarrHelper.GET_OPTIONS, {
|
|
68
58
|
enabled: !!xParams.length
|
|
69
59
|
}, agg);
|
|
70
60
|
};
|
|
71
61
|
exports.useXData = useXData;
|
|
72
62
|
const useObsData = function () {
|
|
63
|
+
var _obs3, _obs4;
|
|
73
64
|
let obs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
74
65
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
(0, _react.useEffect)(() => {
|
|
81
|
-
setObsParams({
|
|
66
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
67
|
+
obs = obs || settings.selectedObs;
|
|
68
|
+
const obsParams = (0, _react.useMemo)(() => {
|
|
69
|
+
var _obs, _obs2;
|
|
70
|
+
return {
|
|
82
71
|
url: dataset.url,
|
|
83
|
-
path: "obs/" + obs
|
|
84
|
-
}
|
|
85
|
-
}, [dataset.url, obs]);
|
|
86
|
-
return (0, _zarrHelper.useZarr)(obsParams,
|
|
72
|
+
path: "obs/" + ((_obs = obs) === null || _obs === void 0 ? void 0 : _obs.name) + (((_obs2 = obs) === null || _obs2 === void 0 ? void 0 : _obs2.type) === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : "")
|
|
73
|
+
};
|
|
74
|
+
}, [dataset.url, (_obs3 = obs) === null || _obs3 === void 0 ? void 0 : _obs3.name, (_obs4 = obs) === null || _obs4 === void 0 ? void 0 : _obs4.type]);
|
|
75
|
+
return (0, _zarrHelper.useZarr)(obsParams, _zarrHelper.GET_OPTIONS, {
|
|
87
76
|
enabled: !!obs
|
|
88
77
|
});
|
|
89
78
|
};
|
|
90
79
|
exports.useObsData = useObsData;
|
|
91
80
|
const useLabelObsData = () => {
|
|
92
81
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
93
|
-
const
|
|
82
|
+
const settings = (0, _SettingsContext.useSettings)();
|
|
83
|
+
const labelObsParams = (0, _react.useMemo)(() => _lodash.default.map(settings.labelObs, obs => {
|
|
94
84
|
return {
|
|
95
85
|
url: dataset.url,
|
|
96
86
|
path: "obs/" + obs.name + (obs.type === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : ""),
|
|
97
87
|
key: obs.name
|
|
98
88
|
};
|
|
99
|
-
}));
|
|
100
|
-
(0, _react.useEffect)(() => {
|
|
101
|
-
setLabelObsParams(_lodash.default.map(dataset.labelObs, obs => {
|
|
102
|
-
return {
|
|
103
|
-
url: dataset.url,
|
|
104
|
-
path: "obs/" + obs.name + (obs.type === _constants.OBS_TYPES.CATEGORICAL ? "/codes" : ""),
|
|
105
|
-
key: obs.name
|
|
106
|
-
};
|
|
107
|
-
}));
|
|
108
|
-
}, [dataset.labelObs, dataset.url]);
|
|
89
|
+
}), [dataset.url, settings.labelObs]);
|
|
109
90
|
return (0, _zarrHelper.useMultipleZarr)(labelObsParams, _zarrHelper.GET_OPTIONS, {
|
|
110
91
|
enabled: !!labelObsParams.length
|
|
111
92
|
});
|