@haniffalab/cherita-react 0.2.0-dev.2024-04-04.2167aa53 → 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/App.scss CHANGED
@@ -1,4 +1,4 @@
1
- @import "bootstrap/scss/accordion";
1
+ @import "bootstrap/scss/bootstrap";
2
2
 
3
3
  // Theme CSS
4
4
  .cherita-container {
@@ -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.name),
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.name),
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.name)
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.name)
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.name),
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.name),
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.name),
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.name,
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
- }, initializer);
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
- getScale(dataset, values) {
14
- return _chromaJs.default.scale(_constants.CHROMA_COLORSCALES[dataset.controls.colorScale]).domain([_lodash.default.min(values), _lodash.default.max(values)]);
15
- }
16
- getColor(dataset, value) {
17
- let scale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _chromaJs.default.scale();
18
- if (dataset.colorEncoding === "var") {
19
- return scale(value).rgb();
20
- } else if (dataset.colorEncoding === "obs") {
21
- //console.log(dataset.obs[dataset.selectedObs.name].state[value]["color"]);
22
- return dataset.obs[dataset.selectedObs.name].state.hasOwnProperty(value) ? dataset.obs[dataset.selectedObs.name].state[value]["color"] : null;
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-04-04.2167aa53",
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": "2167aa53fbf527f25f71ab2e3825a3c1fe2033a6"
81
+ "prereleaseSha": "97c686f2f71b9fd317123f14ba380ca42cbbbe7f"
82
82
  }