@haniffalab/cherita-react 0.2.0-dev.2024-05-09.97c686f2 → 0.2.0-dev.2024-05-21.ca7d726c
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/components/Offcanvas/index.js +6 -3
- package/dist/components/obs-list/ObsList.js +24 -16
- package/dist/components/scatterplot/Legend.js +47 -37
- package/dist/components/scatterplot/Scatterplot.js +220 -123
- package/dist/components/search-bar/SearchBar.js +75 -0
- package/dist/components/search-bar/SearchResults.js +166 -0
- package/dist/components/var-list/VarList.js +86 -170
- package/dist/context/DatasetContext.js +48 -7
- package/dist/helpers/color-helper.js +28 -20
- package/dist/helpers/zarr-helper.js +37 -2
- package/dist/index.js +7 -0
- package/dist/utils/requests.js +20 -3
- package/dist/utils/search.js +97 -0
- package/package.json +2 -2
|
@@ -3,27 +3,35 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.useColor = void 0;
|
|
7
7
|
var _chromaJs = _interopRequireDefault(require("chroma-js"));
|
|
8
8
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
9
|
var _constants = require("../constants/constants");
|
|
10
|
+
var _DatasetContext = require("../context/DatasetContext");
|
|
11
|
+
var _react = require("react");
|
|
10
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
13
|
+
const useColor = () => {
|
|
14
|
+
var _dataset$selectedObs2;
|
|
15
|
+
const dataset = (0, _DatasetContext.useDataset)();
|
|
16
|
+
const getScale = (0, _react.useCallback)(function () {
|
|
17
|
+
let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
18
|
+
const c = _chromaJs.default.scale(_constants.CHROMA_COLORSCALES[dataset.controls.colorScale]).domain(values ? [_lodash.default.min(values), _lodash.default.max(values)] : [0, 1]);
|
|
19
|
+
return c;
|
|
20
|
+
}, [dataset.controls.colorScale]);
|
|
21
|
+
const getColor = (0, _react.useCallback)(function (scale, value) {
|
|
22
|
+
let colorEncoding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : dataset.colorEncoding;
|
|
23
|
+
if (colorEncoding === "var") {
|
|
24
|
+
return scale(value).rgb();
|
|
25
|
+
} else if (colorEncoding === "obs") {
|
|
26
|
+
var _dataset$obs$dataset$, _dataset$selectedObs;
|
|
27
|
+
return (_dataset$obs$dataset$ = dataset.obs[(_dataset$selectedObs = dataset.selectedObs) === null || _dataset$selectedObs === void 0 ? void 0 : _dataset$selectedObs.name]) === null || _dataset$obs$dataset$ === void 0 || (_dataset$obs$dataset$ = _dataset$obs$dataset$.state) === null || _dataset$obs$dataset$ === void 0 || (_dataset$obs$dataset$ = _dataset$obs$dataset$[value]) === null || _dataset$obs$dataset$ === void 0 ? void 0 : _dataset$obs$dataset$["color"];
|
|
28
|
+
} else {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}, [dataset.colorEncoding, dataset.obs, (_dataset$selectedObs2 = dataset.selectedObs) === null || _dataset$selectedObs2 === void 0 ? void 0 : _dataset$selectedObs2.name]);
|
|
32
|
+
return {
|
|
33
|
+
getScale,
|
|
34
|
+
getColor
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
exports.useColor = useColor;
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.ZarrHelper = exports.GET_OPTIONS = void 0;
|
|
6
|
+
exports.useZarr = exports.ZarrHelper = exports.GET_OPTIONS = void 0;
|
|
7
|
+
var _react = require("react");
|
|
7
8
|
var _zarr = require("zarr");
|
|
8
9
|
const GET_OPTIONS = exports.GET_OPTIONS = {
|
|
9
10
|
concurrencyLimit: 10,
|
|
@@ -26,4 +27,38 @@ class ZarrHelper {
|
|
|
26
27
|
return z;
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
|
-
exports.ZarrHelper = ZarrHelper;
|
|
30
|
+
exports.ZarrHelper = ZarrHelper;
|
|
31
|
+
const useZarr = function (_ref2) {
|
|
32
|
+
let {
|
|
33
|
+
url,
|
|
34
|
+
path
|
|
35
|
+
} = _ref2;
|
|
36
|
+
let s = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
37
|
+
let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
38
|
+
const [data, setData] = (0, _react.useState)(null);
|
|
39
|
+
const [isPending, setIsPending] = (0, _react.useState)(true);
|
|
40
|
+
const [serverError, setServerError] = (0, _react.useState)(null);
|
|
41
|
+
(0, _react.useEffect)(() => {
|
|
42
|
+
const fetchData = async () => {
|
|
43
|
+
try {
|
|
44
|
+
setIsPending(true);
|
|
45
|
+
setServerError(null);
|
|
46
|
+
const zarrHelper = new ZarrHelper();
|
|
47
|
+
const z = await zarrHelper.open(url, path);
|
|
48
|
+
const result = await z.get(s, opts);
|
|
49
|
+
setData(result.data);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
setServerError(error.message);
|
|
52
|
+
} finally {
|
|
53
|
+
setIsPending(false);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
fetchData();
|
|
57
|
+
}, [opts, path, s, url]);
|
|
58
|
+
return {
|
|
59
|
+
data,
|
|
60
|
+
isPending,
|
|
61
|
+
serverError
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
exports.useZarr = useZarr;
|
package/dist/index.js
CHANGED
|
@@ -111,6 +111,12 @@ Object.defineProperty(exports, "ScatterplotControls", {
|
|
|
111
111
|
return _Scatterplot.ScatterplotControls;
|
|
112
112
|
}
|
|
113
113
|
});
|
|
114
|
+
Object.defineProperty(exports, "SearchBar", {
|
|
115
|
+
enumerable: true,
|
|
116
|
+
get: function () {
|
|
117
|
+
return _SearchBar.SearchBar;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
114
120
|
Object.defineProperty(exports, "VIOLIN_MODES", {
|
|
115
121
|
enumerable: true,
|
|
116
122
|
get: function () {
|
|
@@ -138,6 +144,7 @@ Object.defineProperty(exports, "ViolinControls", {
|
|
|
138
144
|
var _ObsList = require("./components/obs-list/ObsList");
|
|
139
145
|
var _ObsmList = require("./components/obsm-list/ObsmList");
|
|
140
146
|
var _VarList = require("./components/var-list/VarList");
|
|
147
|
+
var _SearchBar = require("./components/search-bar/SearchBar");
|
|
141
148
|
var _Heatmap = require("./components/heatmap/Heatmap");
|
|
142
149
|
var _Dotplot = require("./components/dotplot/Dotplot");
|
|
143
150
|
var _Scatterplot = require("./components/scatterplot/Scatterplot");
|
package/dist/utils/requests.js
CHANGED
|
@@ -11,7 +11,8 @@ var _errors = require("./errors");
|
|
|
11
11
|
async function fetchData(endpoint, params) {
|
|
12
12
|
let signal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
13
13
|
let ms = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 300000;
|
|
14
|
-
|
|
14
|
+
let apiUrl = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
15
|
+
apiUrl = apiUrl || process.env.REACT_APP_API_URL;
|
|
15
16
|
const controller = new AbortController();
|
|
16
17
|
const timeout = setTimeout(() => {
|
|
17
18
|
controller.abort(DOMException.TIMEOUT_ERR);
|
|
@@ -40,6 +41,10 @@ async function fetchData(endpoint, params) {
|
|
|
40
41
|
}
|
|
41
42
|
const useFetch = function (endpoint, params) {
|
|
42
43
|
let opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
44
|
+
let apiUrl = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
45
|
+
const {
|
|
46
|
+
enabled = true
|
|
47
|
+
} = opts;
|
|
43
48
|
const {
|
|
44
49
|
data: fetchedData,
|
|
45
50
|
isLoading: isPending,
|
|
@@ -50,7 +55,11 @@ const useFetch = function (endpoint, params) {
|
|
|
50
55
|
let {
|
|
51
56
|
signal
|
|
52
57
|
} = _ref;
|
|
53
|
-
|
|
58
|
+
if (enabled) {
|
|
59
|
+
return fetchData(endpoint, params, signal, apiUrl);
|
|
60
|
+
} else {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
54
63
|
},
|
|
55
64
|
...opts
|
|
56
65
|
});
|
|
@@ -64,6 +73,10 @@ exports.useFetch = useFetch;
|
|
|
64
73
|
const useDebouncedFetch = function (endpoint, params) {
|
|
65
74
|
let delay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;
|
|
66
75
|
let opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
76
|
+
let apiUrl = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
77
|
+
const {
|
|
78
|
+
enabled = true
|
|
79
|
+
} = opts;
|
|
67
80
|
const debouncedParams = (0, _usehooks.useDebounce)(params, delay);
|
|
68
81
|
const {
|
|
69
82
|
data: fetchedData,
|
|
@@ -75,7 +88,11 @@ const useDebouncedFetch = function (endpoint, params) {
|
|
|
75
88
|
let {
|
|
76
89
|
signal
|
|
77
90
|
} = _ref2;
|
|
78
|
-
|
|
91
|
+
if (enabled) {
|
|
92
|
+
return fetchData(endpoint, debouncedParams, signal, apiUrl);
|
|
93
|
+
} else {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
79
96
|
},
|
|
80
97
|
...opts
|
|
81
98
|
});
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useVarSearch = exports.useGetDisease = exports.useDiseaseSearch = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _DatasetContext = require("../context/DatasetContext");
|
|
9
|
+
var _requests = require("./requests");
|
|
10
|
+
const useDiseaseSearch = () => {
|
|
11
|
+
const ENDPOINT = "diseases";
|
|
12
|
+
const dataset = (0, _DatasetContext.useDataset)();
|
|
13
|
+
const [params, setParams] = (0, _react.useState)({
|
|
14
|
+
url: dataset.url,
|
|
15
|
+
diseaseDatasets: dataset.diseaseDatasets,
|
|
16
|
+
text: ""
|
|
17
|
+
});
|
|
18
|
+
const data = (0, _requests.useFetch)(ENDPOINT, params, {
|
|
19
|
+
enabled: !!params.text.length
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
params,
|
|
23
|
+
setParams,
|
|
24
|
+
data
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
exports.useDiseaseSearch = useDiseaseSearch;
|
|
28
|
+
const useVarSearch = () => {
|
|
29
|
+
const ENDPOINT = "var/names";
|
|
30
|
+
const dataset = (0, _DatasetContext.useDataset)();
|
|
31
|
+
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
32
|
+
const [params, setParams] = (0, _react.useState)({
|
|
33
|
+
url: dataset.url,
|
|
34
|
+
text: ""
|
|
35
|
+
});
|
|
36
|
+
const data = (0, _requests.useFetch)(ENDPOINT, params, {
|
|
37
|
+
enabled: !!params.text.length
|
|
38
|
+
});
|
|
39
|
+
const onSelect = item => {
|
|
40
|
+
dispatch({
|
|
41
|
+
type: "varSelected",
|
|
42
|
+
var: item
|
|
43
|
+
});
|
|
44
|
+
dispatch({
|
|
45
|
+
type: "multiVarSelected",
|
|
46
|
+
var: item
|
|
47
|
+
});
|
|
48
|
+
dispatch({
|
|
49
|
+
type: "set.colorEncoding",
|
|
50
|
+
value: "var"
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
params,
|
|
55
|
+
setParams,
|
|
56
|
+
data,
|
|
57
|
+
onSelect
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
exports.useVarSearch = useVarSearch;
|
|
61
|
+
const useGetDisease = () => {
|
|
62
|
+
var _dataset$selectedDise, _dataset$selectedDise2, _params$diseaseName;
|
|
63
|
+
const ENDPOINT = "disease/genes";
|
|
64
|
+
const dataset = (0, _DatasetContext.useDataset)();
|
|
65
|
+
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
66
|
+
const [params, setParams] = (0, _react.useState)({
|
|
67
|
+
url: dataset.url,
|
|
68
|
+
col: dataset.varNamesCol,
|
|
69
|
+
diseaseName: (_dataset$selectedDise = dataset.selectedDisease) === null || _dataset$selectedDise === void 0 ? void 0 : _dataset$selectedDise.name,
|
|
70
|
+
diseaseDatasets: dataset.diseaseDatasets
|
|
71
|
+
});
|
|
72
|
+
(0, _react.useEffect)(() => {
|
|
73
|
+
setParams(p => {
|
|
74
|
+
return {
|
|
75
|
+
...p,
|
|
76
|
+
diseaseName: dataset.selectedDisease.name
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
}, [(_dataset$selectedDise2 = dataset.selectedDisease) === null || _dataset$selectedDise2 === void 0 ? void 0 : _dataset$selectedDise2.name]);
|
|
80
|
+
const {
|
|
81
|
+
fetchedData,
|
|
82
|
+
isPending,
|
|
83
|
+
serverError
|
|
84
|
+
} = (0, _requests.useFetch)(ENDPOINT, params, {
|
|
85
|
+
enabled: !!((_params$diseaseName = params.diseaseName) !== null && _params$diseaseName !== void 0 && _params$diseaseName.length)
|
|
86
|
+
});
|
|
87
|
+
(0, _react.useEffect)(() => {
|
|
88
|
+
if (!isPending && !serverError) {
|
|
89
|
+
dispatch({
|
|
90
|
+
type: "set.disease.genes",
|
|
91
|
+
genes: fetchedData
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}, [dispatch, fetchedData, isPending, serverError]);
|
|
95
|
+
return;
|
|
96
|
+
};
|
|
97
|
+
exports.useGetDisease = useGetDisease;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haniffalab/cherita-react",
|
|
3
|
-
"version": "0.2.0-dev.2024-05-
|
|
3
|
+
"version": "0.2.0-dev.2024-05-21.ca7d726c",
|
|
4
4
|
"author": "",
|
|
5
5
|
"license": "",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"url": "https://github.com/haniffalab/cherita-react/issues"
|
|
79
79
|
},
|
|
80
80
|
"homepage": "https://github.com/haniffalab/cherita-react#readme",
|
|
81
|
-
"prereleaseSha": "
|
|
81
|
+
"prereleaseSha": "ca7d726c238e548f4db9899190cd6773f79ea5d0"
|
|
82
82
|
}
|