@haniffalab/cherita-react 0.2.0-dev.2024-04-04.0af834c7 → 0.2.0-dev.2024-05-09.97c686f2
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/dotplot/Dotplot.js +7 -5
- package/dist/components/heatmap/Heatmap.js +5 -3
- package/dist/components/matrixplot/Matrixplot.js +7 -5
- package/dist/components/scatterplot/Legend.js +4 -4
- package/dist/components/scatterplot/Scatterplot.js +6 -7
- package/dist/components/var-list/VarList.js +5 -3
- package/dist/components/violin/Violin.js +24 -6
- package/dist/context/DatasetContext.js +4 -2
- package/dist/helpers/color-helper.js +15 -12
- package/package.json +2 -2
|
@@ -209,10 +209,11 @@ function Dotplot() {
|
|
|
209
209
|
const [params, setParams] = (0, _react.useState)({
|
|
210
210
|
url: dataset.url,
|
|
211
211
|
selectedObs: dataset.selectedObs,
|
|
212
|
-
selectedMultiVar: dataset.selectedMultiVar.map(i => i.
|
|
212
|
+
selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
|
|
213
213
|
standardScale: dataset.controls.standardScale,
|
|
214
214
|
meanOnlyExpressed: dataset.controls.meanOnlyExpressed,
|
|
215
|
-
expressionCutoff: dataset.controls.expressionCutoff
|
|
215
|
+
expressionCutoff: dataset.controls.expressionCutoff,
|
|
216
|
+
varNamesCol: dataset.varNamesCol
|
|
216
217
|
});
|
|
217
218
|
// @TODO: set default scale
|
|
218
219
|
|
|
@@ -227,13 +228,14 @@ function Dotplot() {
|
|
|
227
228
|
...p,
|
|
228
229
|
url: dataset.url,
|
|
229
230
|
selectedObs: dataset.selectedObs,
|
|
230
|
-
selectedMultiVar: dataset.selectedMultiVar.map(i => i.
|
|
231
|
+
selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
|
|
231
232
|
standardScale: dataset.controls.standardScale,
|
|
232
233
|
meanOnlyExpressed: dataset.controls.meanOnlyExpressed,
|
|
233
|
-
expressionCutoff: dataset.controls.expressionCutoff
|
|
234
|
+
expressionCutoff: dataset.controls.expressionCutoff,
|
|
235
|
+
varNamesCol: dataset.varNamesCol
|
|
234
236
|
};
|
|
235
237
|
});
|
|
236
|
-
}, [dataset.url, dataset.selectedObs, dataset.selectedMultiVar, dataset.controls.standardScale, dataset.controls.meanOnlyExpressed, dataset.controls.expressionCutoff]);
|
|
238
|
+
}, [dataset.url, dataset.selectedObs, dataset.selectedMultiVar, dataset.controls.standardScale, dataset.controls.meanOnlyExpressed, dataset.controls.expressionCutoff, dataset.varNamesCol]);
|
|
237
239
|
const updateColorscale = (0, _react.useCallback)(colorscale => {
|
|
238
240
|
setLayout(l => {
|
|
239
241
|
return {
|
|
@@ -50,7 +50,8 @@ function Heatmap() {
|
|
|
50
50
|
const [params, setParams] = (0, _react.useState)({
|
|
51
51
|
url: dataset.url,
|
|
52
52
|
selectedObs: dataset.selectedObs,
|
|
53
|
-
selectedMultiVar: dataset.selectedMultiVar.map(i => i.
|
|
53
|
+
selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
|
|
54
|
+
varNamesCol: dataset.varNamesCol
|
|
54
55
|
});
|
|
55
56
|
(0, _react.useEffect)(() => {
|
|
56
57
|
if (dataset.selectedObs && dataset.selectedMultiVar.length) {
|
|
@@ -63,10 +64,11 @@ function Heatmap() {
|
|
|
63
64
|
...p,
|
|
64
65
|
url: dataset.url,
|
|
65
66
|
selectedObs: dataset.selectedObs,
|
|
66
|
-
selectedMultiVar: dataset.selectedMultiVar.map(i => i.
|
|
67
|
+
selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
|
|
68
|
+
varNamesCol: dataset.varNamesCol
|
|
67
69
|
};
|
|
68
70
|
});
|
|
69
|
-
}, [dataset.selectedMultiVar, dataset.selectedObs, dataset.url]);
|
|
71
|
+
}, [dataset.selectedMultiVar, dataset.selectedObs, dataset.url, dataset.varNamesCol]);
|
|
70
72
|
const updateColorscale = (0, _react.useCallback)(colorscale => {
|
|
71
73
|
setLayout(l => {
|
|
72
74
|
return {
|
|
@@ -78,8 +78,9 @@ function Matrixplot() {
|
|
|
78
78
|
const [params, setParams] = (0, _react.useState)({
|
|
79
79
|
url: dataset.url,
|
|
80
80
|
selectedObs: dataset.selectedObs,
|
|
81
|
-
selectedMultiVar: dataset.selectedMultiVar.map(i => i.
|
|
82
|
-
standardScale: dataset.controls.standardScale
|
|
81
|
+
selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
|
|
82
|
+
standardScale: dataset.controls.standardScale,
|
|
83
|
+
varNamesCol: dataset.varNamesCol
|
|
83
84
|
});
|
|
84
85
|
(0, _react.useEffect)(() => {
|
|
85
86
|
if (dataset.selectedObs && dataset.selectedMultiVar.length) {
|
|
@@ -92,11 +93,12 @@ function Matrixplot() {
|
|
|
92
93
|
...p,
|
|
93
94
|
url: dataset.url,
|
|
94
95
|
selectedObs: dataset.selectedObs,
|
|
95
|
-
selectedMultiVar: dataset.selectedMultiVar.map(i => i.
|
|
96
|
-
standardScale: dataset.controls.standardScale
|
|
96
|
+
selectedMultiVar: dataset.selectedMultiVar.map(i => i.index),
|
|
97
|
+
standardScale: dataset.controls.standardScale,
|
|
98
|
+
varNamesCol: dataset.varNamesCol
|
|
97
99
|
};
|
|
98
100
|
});
|
|
99
|
-
}, [dataset.controls.standardScale, dataset.selectedMultiVar, dataset.selectedObs, dataset.url]);
|
|
101
|
+
}, [dataset.controls.standardScale, dataset.selectedMultiVar, dataset.selectedObs, dataset.url, dataset.varNamesCol]);
|
|
100
102
|
const updateColorscale = (0, _react.useCallback)(colorscale => {
|
|
101
103
|
setLayout(l => {
|
|
102
104
|
return {
|
|
@@ -43,7 +43,7 @@ function Legend(_ref) {
|
|
|
43
43
|
style: {
|
|
44
44
|
backgroundColor: color.hex()
|
|
45
45
|
}
|
|
46
|
-
}));
|
|
46
|
+
}, i));
|
|
47
47
|
}
|
|
48
48
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
49
49
|
className: "cherita-legend",
|
|
@@ -51,13 +51,13 @@ function Legend(_ref) {
|
|
|
51
51
|
className: "gradient",
|
|
52
52
|
children: [legendList, /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
53
53
|
className: "domain-min",
|
|
54
|
-
children: dmin
|
|
54
|
+
children: dmin.toString()
|
|
55
55
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
56
56
|
className: "domain-med",
|
|
57
|
-
children: (dmin + dmax) * 0.5
|
|
57
|
+
children: ((dmin + dmax) * 0.5).toString()
|
|
58
58
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
59
59
|
className: "domain-max",
|
|
60
|
-
children: dmax
|
|
60
|
+
children: dmax.toString()
|
|
61
61
|
})]
|
|
62
62
|
})
|
|
63
63
|
});
|
|
@@ -7,8 +7,6 @@ exports.Scatterplot = Scatterplot;
|
|
|
7
7
|
exports.ScatterplotControls = ScatterplotControls;
|
|
8
8
|
require("bootstrap/dist/css/bootstrap.min.css");
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
|
-
var _chromaJs = _interopRequireDefault(require("chroma-js"));
|
|
12
10
|
var _react2 = _interopRequireDefault(require("@deck.gl/react"));
|
|
13
11
|
var _layers = require("@deck.gl/layers");
|
|
14
12
|
var _layers2 = require("@nebula.gl/layers");
|
|
@@ -76,18 +74,19 @@ function Scatterplot(_ref) {
|
|
|
76
74
|
(0, _react.useEffect)(() => {
|
|
77
75
|
setData(function (prevState, props) {
|
|
78
76
|
const colorHelper = new _colorHelper.ColorHelper();
|
|
79
|
-
let scale = dataset.colorEncoding === "var" ? colorHelper.getScale(dataset, values) : null;
|
|
77
|
+
let scale = dataset.colorEncoding === "var" ? colorHelper.getScale(dataset.controls.colorScale, values) : null;
|
|
80
78
|
var data = position.map(function (e, i) {
|
|
79
|
+
var _dataset$obs$dataset$, _dataset$selectedObs;
|
|
81
80
|
return {
|
|
82
81
|
index: i,
|
|
83
82
|
position: [position[i][0], position[i][1]],
|
|
84
83
|
value: values[i],
|
|
85
|
-
color: colorHelper.getColor(dataset, values[i], scale)
|
|
84
|
+
color: colorHelper.getColor(dataset.colorEncoding, (_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 ? void 0 : _dataset$obs$dataset$.state, values[i], scale)
|
|
86
85
|
};
|
|
87
86
|
});
|
|
88
87
|
return data;
|
|
89
88
|
});
|
|
90
|
-
}, [position, values, dataset.controls.colorScale]);
|
|
89
|
+
}, [position, values, dataset.controls.colorScale, dataset.colorEncoding, dataset.obs, dataset.selectedObs]);
|
|
91
90
|
(0, _react.useEffect)(() => {
|
|
92
91
|
if (dataset.selectedObsm) {
|
|
93
92
|
const helper = new _mapHelper.MapHelper();
|
|
@@ -129,7 +128,7 @@ function Scatterplot(_ref) {
|
|
|
129
128
|
};
|
|
130
129
|
fetchData().catch(console.error);
|
|
131
130
|
}
|
|
132
|
-
}, [dataset.url, dataset.selectedVar]);
|
|
131
|
+
}, [dataset.url, dataset.selectedVar, dispatch]);
|
|
133
132
|
(0, _react.useEffect)(() => {
|
|
134
133
|
if (dataset.selectedObs) {
|
|
135
134
|
const zarrHelper = new _zarrHelper.ZarrHelper();
|
|
@@ -145,7 +144,7 @@ function Scatterplot(_ref) {
|
|
|
145
144
|
};
|
|
146
145
|
fetchData().catch(console.error);
|
|
147
146
|
}
|
|
148
|
-
}, [dataset.url, dataset.selectedObs]);
|
|
147
|
+
}, [dataset.url, dataset.selectedObs, dispatch]);
|
|
149
148
|
const layers = [new _layers.ScatterplotLayer({
|
|
150
149
|
id: "cherita-layer-scatterplot",
|
|
151
150
|
data,
|
|
@@ -96,16 +96,18 @@ function VarNamesList(_ref2) {
|
|
|
96
96
|
const [varButtons, setVarButtons] = (0, _react.useState)(mode ? mode === _constants.SELECTION_MODES.SINGLE ? [dataset.selectVar] : dataset.selectedMultiVar : []);
|
|
97
97
|
const [active, setActive] = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? dataset.selectVar : dataset.selectedMultiVar);
|
|
98
98
|
const [params, setParams] = (0, _react.useState)({
|
|
99
|
-
url: dataset.url
|
|
99
|
+
url: dataset.url,
|
|
100
|
+
col: dataset.varNamesCol
|
|
100
101
|
});
|
|
101
102
|
(0, _react.useEffect)(() => {
|
|
102
103
|
setParams(p => {
|
|
103
104
|
return {
|
|
104
105
|
...p,
|
|
105
|
-
url: dataset.url
|
|
106
|
+
url: dataset.url,
|
|
107
|
+
col: dataset.varNamesCol
|
|
106
108
|
};
|
|
107
109
|
});
|
|
108
|
-
}, [dataset.url]);
|
|
110
|
+
}, [dataset.url, dataset.varNamesCol]);
|
|
109
111
|
const {
|
|
110
112
|
fetchedData,
|
|
111
113
|
isPending,
|
|
@@ -7,6 +7,8 @@ exports.Violin = Violin;
|
|
|
7
7
|
exports.ViolinControls = ViolinControls;
|
|
8
8
|
require("bootstrap/dist/css/bootstrap.min.css");
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _reactFontawesome = require("@fortawesome/react-fontawesome");
|
|
11
|
+
var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
10
12
|
var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
|
|
11
13
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
12
14
|
var _constants = require("../../constants/constants");
|
|
@@ -66,7 +68,8 @@ function Violin(_ref) {
|
|
|
66
68
|
const [params, setParams] = (0, _react.useState)({
|
|
67
69
|
url: dataset.url,
|
|
68
70
|
keys: [],
|
|
69
|
-
scale: dataset.controls.standardScale
|
|
71
|
+
scale: dataset.controls.standardScale,
|
|
72
|
+
varNamesCol: dataset.varNamesCol
|
|
70
73
|
});
|
|
71
74
|
// @TODO: set default scale
|
|
72
75
|
|
|
@@ -81,8 +84,9 @@ function Violin(_ref) {
|
|
|
81
84
|
return {
|
|
82
85
|
...p,
|
|
83
86
|
url: dataset.url,
|
|
84
|
-
keys: dataset.selectedMultiVar.map(i => i.
|
|
85
|
-
scale: dataset.controls.standardScale
|
|
87
|
+
keys: dataset.selectedMultiVar.map(i => i.index),
|
|
88
|
+
scale: dataset.controls.standardScale,
|
|
89
|
+
varNamesCol: dataset.varNamesCol
|
|
86
90
|
};
|
|
87
91
|
});
|
|
88
92
|
} else if (mode === _constants.VIOLIN_MODES.GROUPBY) {
|
|
@@ -95,13 +99,14 @@ function Violin(_ref) {
|
|
|
95
99
|
return {
|
|
96
100
|
...p,
|
|
97
101
|
url: dataset.url,
|
|
98
|
-
keys: dataset.selectedVar.
|
|
102
|
+
keys: dataset.selectedVar.index,
|
|
99
103
|
selectedObs: dataset.selectedObs,
|
|
100
|
-
scale: dataset.controls.standardScale
|
|
104
|
+
scale: dataset.controls.standardScale,
|
|
105
|
+
varNamesCol: dataset.varNamesCol
|
|
101
106
|
};
|
|
102
107
|
});
|
|
103
108
|
}
|
|
104
|
-
}, [dataset.controls.standardScale, dataset.selectedMultiVar, dataset.selectedObs, dataset.selectedVar, dataset.url, mode]);
|
|
109
|
+
}, [dataset.controls.standardScale, dataset.selectedMultiVar, dataset.selectedObs, dataset.selectedVar, dataset.url, dataset.varNamesCol, mode]);
|
|
105
110
|
const {
|
|
106
111
|
fetchedData,
|
|
107
112
|
isPending,
|
|
@@ -129,6 +134,19 @@ function Violin(_ref) {
|
|
|
129
134
|
maxWidth: "100%",
|
|
130
135
|
maxHeight: "100%"
|
|
131
136
|
}
|
|
137
|
+
}), (fetchedData === null || fetchedData === void 0 ? void 0 : fetchedData.resampled) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Alert, {
|
|
138
|
+
variant: "warning",
|
|
139
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("b", {
|
|
140
|
+
children: "Warning:"
|
|
141
|
+
}), " For performance reasons this plot was generated with resampled data. It will not be exactly the same as one produced with the entire dataset. \xA0", /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.OverlayTrigger, {
|
|
142
|
+
placement: "top",
|
|
143
|
+
overlay: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Tooltip, {
|
|
144
|
+
children: "Resampled to 100K values following a Monte Carlo style approach to help ensure resampled data is a good representation of the original dataset's distribution."
|
|
145
|
+
}),
|
|
146
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactFontawesome.FontAwesomeIcon, {
|
|
147
|
+
icon: _freeSolidSvgIcons.faCircleInfo
|
|
148
|
+
})
|
|
149
|
+
})]
|
|
132
150
|
})]
|
|
133
151
|
});
|
|
134
152
|
}
|
|
@@ -53,6 +53,7 @@ const persistOptions = {
|
|
|
53
53
|
};
|
|
54
54
|
const initialDataset = {
|
|
55
55
|
obs: {},
|
|
56
|
+
varNamesCol: null,
|
|
56
57
|
selectedObs: null,
|
|
57
58
|
selectedObsm: null,
|
|
58
59
|
selectedVar: null,
|
|
@@ -84,12 +85,13 @@ const initializer = initialState => {
|
|
|
84
85
|
function DatasetProvider(_ref2) {
|
|
85
86
|
let {
|
|
86
87
|
dataset_url,
|
|
88
|
+
dataset_params = null,
|
|
87
89
|
children
|
|
88
90
|
} = _ref2;
|
|
89
|
-
const [dataset, dispatch] = (0, _react.useReducer)(datasetReducer, {
|
|
91
|
+
const [dataset, dispatch] = (0, _react.useReducer)(datasetReducer, _lodash.default.assign(initializer({
|
|
90
92
|
url: dataset_url,
|
|
91
93
|
...initialDataset
|
|
92
|
-
},
|
|
94
|
+
}), dataset_params));
|
|
93
95
|
(0, _react.useEffect)(() => {
|
|
94
96
|
try {
|
|
95
97
|
localStorage.setItem(_constants.LOCAL_STORAGE_KEY, JSON.stringify({
|
|
@@ -7,20 +7,23 @@ exports.ColorHelper = 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
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
12
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
13
|
+
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); }
|
|
12
14
|
class ColorHelper {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
constructor() {
|
|
16
|
+
_defineProperty(this, "getScale", (colorScale, values) => {
|
|
17
|
+
return _chromaJs.default.scale(_constants.CHROMA_COLORSCALES[colorScale]).domain([_lodash.default.min(values), _lodash.default.max(values)]);
|
|
18
|
+
});
|
|
19
|
+
_defineProperty(this, "getColor", function (colorEncoding, state, value) {
|
|
20
|
+
let scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _chromaJs.default.scale();
|
|
21
|
+
if (colorEncoding === "var") {
|
|
22
|
+
return scale(value).rgb();
|
|
23
|
+
} else if (colorEncoding === "obs") {
|
|
24
|
+
return state.hasOwnProperty(value) ? state[value]["color"] : null;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
exports.ColorHelper = ColorHelper;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haniffalab/cherita-react",
|
|
3
|
-
"version": "0.2.0-dev.2024-
|
|
3
|
+
"version": "0.2.0-dev.2024-05-09.97c686f2",
|
|
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": "97c686f2f71b9fd317123f14ba380ca42cbbbe7f"
|
|
82
82
|
}
|