@haniffalab/cherita-react 0.1.8 → 0.1.11
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/README.md +25 -1
- package/dist/components/dotplot/Dotplot.js +282 -0
- package/dist/components/{Dotplot.js → heatmap/Heatmap.js} +67 -61
- package/dist/components/{Heatmap.js → matrixplot/Matrixplot.js} +90 -67
- package/dist/components/obs-list/ObsList.js +130 -0
- package/dist/components/scatterplot/Scatterplot.js +258 -0
- package/dist/components/scatterplot/Toolbox.js +68 -0
- package/dist/components/{ObsList.js → var-list/VarList.js} +66 -37
- package/dist/components/violin/Violin.js +152 -0
- package/dist/constants/constants.js +44 -2
- package/dist/context/DatasetContext.js +85 -3
- package/dist/helpers/map.js +59 -0
- package/dist/helpers/zarr.js +56 -0
- package/dist/index.js +72 -15
- package/dist/utils/requests.js +53 -0
- package/package.json +25 -5
- package/dist/components/VarList.js +0 -126
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Toolbox2 = Toolbox2;
|
|
7
|
+
require("bootstrap/dist/css/bootstrap.min.css");
|
|
8
|
+
var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
|
+
var _chromaJs = _interopRequireDefault(require("chroma-js"));
|
|
12
|
+
var _react2 = _interopRequireDefault(require("@deck.gl/react"));
|
|
13
|
+
var _layers = require("@deck.gl/layers");
|
|
14
|
+
var _DatasetContext = require("../../context/DatasetContext");
|
|
15
|
+
var _constants = require("../../constants/constants");
|
|
16
|
+
var _map = require("../../helpers/map");
|
|
17
|
+
var _zarr = require("../../helpers/zarr");
|
|
18
|
+
var _layers2 = require("@nebula.gl/layers");
|
|
19
|
+
var _editModes = require("@nebula.gl/edit-modes");
|
|
20
|
+
var _editor = require("@nebula.gl/editor");
|
|
21
|
+
var _Button = _interopRequireDefault(require("react-bootstrap/Button"));
|
|
22
|
+
var _DropdownButton = _interopRequireDefault(require("react-bootstrap/DropdownButton"));
|
|
23
|
+
var _ButtonGroup = _interopRequireDefault(require("react-bootstrap/ButtonGroup"));
|
|
24
|
+
var _reactFontawesome = require("@fortawesome/react-fontawesome");
|
|
25
|
+
var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
26
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
28
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
29
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
30
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
31
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
32
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
33
|
+
window.deck.log.level = 1;
|
|
34
|
+
function Toolbox2() {
|
|
35
|
+
var dataset = (0, _DatasetContext.useDataset)();
|
|
36
|
+
var dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
37
|
+
var _useState = (0, _react.useState)(dataset.embedding),
|
|
38
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
39
|
+
active = _useState2[0],
|
|
40
|
+
setActive = _useState2[1];
|
|
41
|
+
(0, _react.useEffect)(function () {
|
|
42
|
+
setActive(dataset.embedding);
|
|
43
|
+
}, [dataset.embedding]);
|
|
44
|
+
return /*#__PURE__*/_react.React.createElement("div", {
|
|
45
|
+
className: "cherita-toolbox"
|
|
46
|
+
}, /*#__PURE__*/_react.React.createElement(_Dropdown.default, null, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Toggle, {
|
|
47
|
+
variant: "success",
|
|
48
|
+
id: "dropdown-basic"
|
|
49
|
+
}, "Dropdown Button"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Menu, null, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
|
|
50
|
+
href: "#/action-1"
|
|
51
|
+
}, "Action"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
|
|
52
|
+
href: "#/action-2"
|
|
53
|
+
}, "Another action"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
|
|
54
|
+
href: "#/action-3"
|
|
55
|
+
}, "Something else"))), /*#__PURE__*/_react.React.createElement(_ButtonGroup.default, null, /*#__PURE__*/_react.React.createElement(_Button.default, null, /*#__PURE__*/_react.React.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
56
|
+
icon: _freeSolidSvgIcons.faArrowPointer
|
|
57
|
+
}), " Mode"), /*#__PURE__*/_react.React.createElement(_Button.default, null, "2"), /*#__PURE__*/_react.React.createElement(_DropdownButton.default, {
|
|
58
|
+
as: _ButtonGroup.default,
|
|
59
|
+
title: "test" + /*#__PURE__*/_react.React.createElement(_reactFontawesome.FontAwesomeIcon, {
|
|
60
|
+
icon: _freeSolidSvgIcons.faArrowPointer
|
|
61
|
+
}),
|
|
62
|
+
id: "bg-nested-dropdown"
|
|
63
|
+
}, /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
|
|
64
|
+
eventKey: "1"
|
|
65
|
+
}, "Dropdown link"), /*#__PURE__*/_react.React.createElement(_Dropdown.default.Item, {
|
|
66
|
+
eventKey: "2"
|
|
67
|
+
}, "Dropdown link"))));
|
|
68
|
+
}
|
|
@@ -4,11 +4,12 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.VarNamesList = VarNamesList;
|
|
8
8
|
require("bootstrap/dist/css/bootstrap.min.css");
|
|
9
|
-
require("bootstrap/dist/js/bootstrap.bundle.min.js");
|
|
10
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
-
var
|
|
10
|
+
var _requests = require("../../utils/requests");
|
|
11
|
+
var _DatasetContext = require("../../context/DatasetContext");
|
|
12
|
+
var _constants = require("../../constants/constants");
|
|
12
13
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
14
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
14
15
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
@@ -17,53 +18,81 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
17
18
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
18
19
|
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
19
20
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
20
|
-
function
|
|
21
|
+
function VarNamesList(_ref) {
|
|
22
|
+
var _ref$mode = _ref.mode,
|
|
23
|
+
mode = _ref$mode === void 0 ? _constants.SELECTION_MODES.SINGLE : _ref$mode;
|
|
21
24
|
var dataset = (0, _DatasetContext.useDataset)();
|
|
22
25
|
var dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
23
26
|
var _useState = (0, _react.useState)([]),
|
|
24
27
|
_useState2 = _slicedToArray(_useState, 2),
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
var _useState3 = (0, _react.useState)(null),
|
|
28
|
+
varNames = _useState2[0],
|
|
29
|
+
setVarNames = _useState2[1];
|
|
30
|
+
var _useState3 = (0, _react.useState)(mode === _constants.SELECTION_MODES.SINGLE ? null : []),
|
|
28
31
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
29
32
|
active = _useState4[0],
|
|
30
33
|
setActive = _useState4[1];
|
|
31
34
|
(0, _react.useEffect)(function () {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
mode: "cors",
|
|
35
|
-
headers: {
|
|
36
|
-
"Content-Type": "application/json",
|
|
37
|
-
Accept: "application/json"
|
|
38
|
-
},
|
|
39
|
-
body: JSON.stringify({
|
|
40
|
-
url: dataset.url
|
|
41
|
-
})
|
|
42
|
-
}).then(function (response) {
|
|
43
|
-
return response.json();
|
|
35
|
+
(0, _requests.fetchData)("var/names", {
|
|
36
|
+
url: dataset.url
|
|
44
37
|
}).then(function (data) {
|
|
45
|
-
|
|
38
|
+
setVarNames(data);
|
|
39
|
+
}).catch(function (response) {
|
|
40
|
+
response.json().then(function (json) {
|
|
41
|
+
console.log(json.message);
|
|
42
|
+
});
|
|
46
43
|
});
|
|
47
44
|
}, [dataset.url]);
|
|
48
45
|
(0, _react.useEffect)(function () {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
46
|
+
if (mode === _constants.SELECTION_MODES.SINGLE && dataset.selectedVar) {
|
|
47
|
+
setActive(dataset.selectedVar.matrix_index);
|
|
48
|
+
}
|
|
49
|
+
}, [mode, dataset.selectedVar]);
|
|
50
|
+
(0, _react.useEffect)(function () {
|
|
51
|
+
if (mode === _constants.SELECTION_MODES.MULTIPLE) {
|
|
52
|
+
setActive(dataset.selectedMultiVar.map(function (i) {
|
|
53
|
+
return i.matrix_index;
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
}, [mode, dataset.selectedMultiVar]);
|
|
57
|
+
var varList = varNames.map(function (item) {
|
|
58
|
+
if (mode === _constants.SELECTION_MODES.SINGLE) {
|
|
59
|
+
return /*#__PURE__*/_react.default.createElement("button", {
|
|
60
|
+
type: "button",
|
|
61
|
+
key: item.matrix_index,
|
|
62
|
+
className: "list-group-item list-grou-item-action ".concat(active === item.matrix_index && "active"),
|
|
63
|
+
onClick: function onClick() {
|
|
64
|
+
dispatch({
|
|
65
|
+
type: "varSelected",
|
|
66
|
+
var: item
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}, item.name);
|
|
70
|
+
} else if (mode === _constants.SELECTION_MODES.MULTIPLE) {
|
|
71
|
+
return /*#__PURE__*/_react.default.createElement("button", {
|
|
72
|
+
type: "button",
|
|
73
|
+
key: item.matrix_index,
|
|
74
|
+
className: "list-group-item list-grou-item-action ".concat(active.includes(item.matrix_index) && "active"),
|
|
75
|
+
onClick: function onClick() {
|
|
76
|
+
if (active.includes(item.matrix_index)) {
|
|
77
|
+
dispatch({
|
|
78
|
+
type: "multiVarDeselected",
|
|
79
|
+
var: item
|
|
80
|
+
});
|
|
81
|
+
} else {
|
|
82
|
+
dispatch({
|
|
83
|
+
type: "multiVarSelected",
|
|
84
|
+
var: item
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}, item.name);
|
|
89
|
+
} else {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
63
92
|
});
|
|
64
93
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
65
|
-
className: "
|
|
66
|
-
}, /*#__PURE__*/_react.default.createElement("
|
|
94
|
+
className: ""
|
|
95
|
+
}, /*#__PURE__*/_react.default.createElement("h4", null, mode), /*#__PURE__*/_react.default.createElement("div", {
|
|
67
96
|
className: "list-group overflow-auto mh-100"
|
|
68
|
-
},
|
|
97
|
+
}, varList));
|
|
69
98
|
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.Violin = Violin;
|
|
8
|
+
exports.ViolinControls = ViolinControls;
|
|
9
|
+
require("bootstrap/dist/css/bootstrap.min.css");
|
|
10
|
+
var _Dropdown = _interopRequireDefault(require("react-bootstrap/Dropdown"));
|
|
11
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
|
|
13
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
14
|
+
var _DatasetContext = require("../../context/DatasetContext");
|
|
15
|
+
var _constants = require("../../constants/constants");
|
|
16
|
+
var _reactBootstrap = require("react-bootstrap");
|
|
17
|
+
var _requests = require("../../utils/requests");
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
22
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
24
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
25
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
26
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
27
|
+
function ViolinControls() {
|
|
28
|
+
var dataset = (0, _DatasetContext.useDataset)();
|
|
29
|
+
var dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
30
|
+
var _useState = (0, _react.useState)(dataset.controls.standardScale),
|
|
31
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
32
|
+
activeStandardScale = _useState2[0],
|
|
33
|
+
setActiveStandardScale = _useState2[1];
|
|
34
|
+
(0, _react.useEffect)(function () {
|
|
35
|
+
if (dataset.controls.standardScale) {
|
|
36
|
+
setActiveStandardScale(_constants.VIOLINPLOT_STANDARDSCALES.find(function (obs) {
|
|
37
|
+
return obs.value === dataset.controls.standardScale;
|
|
38
|
+
}).name);
|
|
39
|
+
}
|
|
40
|
+
}, [dataset.controls.standardScale]);
|
|
41
|
+
var standardScaleList = _constants.VIOLINPLOT_STANDARDSCALES.map(function (item) {
|
|
42
|
+
return /*#__PURE__*/_react.default.createElement(_Dropdown.default.Item, {
|
|
43
|
+
key: item.value,
|
|
44
|
+
active: activeStandardScale === item.value,
|
|
45
|
+
onClick: function onClick() {
|
|
46
|
+
dispatch({
|
|
47
|
+
type: "set.controls.standardScale",
|
|
48
|
+
standardScale: item.value
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}, item.name);
|
|
52
|
+
});
|
|
53
|
+
return /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonToolbar, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.ButtonGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup, null, /*#__PURE__*/_react.default.createElement(_reactBootstrap.InputGroup.Text, null, "Standard scale"), /*#__PURE__*/_react.default.createElement(_Dropdown.default, null, /*#__PURE__*/_react.default.createElement(_Dropdown.default.Toggle, {
|
|
54
|
+
id: "dropdownStandardScale",
|
|
55
|
+
variant: "light"
|
|
56
|
+
}, activeStandardScale), /*#__PURE__*/_react.default.createElement(_Dropdown.default.Menu, null, standardScaleList)))));
|
|
57
|
+
}
|
|
58
|
+
function Violin(_ref) {
|
|
59
|
+
var _ref$mode = _ref.mode,
|
|
60
|
+
mode = _ref$mode === void 0 ? _constants.VIOLIN_MODES.MULTIKEY : _ref$mode;
|
|
61
|
+
var dataset = (0, _DatasetContext.useDataset)();
|
|
62
|
+
var _useState3 = (0, _react.useState)([]),
|
|
63
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
64
|
+
data = _useState4[0],
|
|
65
|
+
setData = _useState4[1];
|
|
66
|
+
var _useState5 = (0, _react.useState)({}),
|
|
67
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
68
|
+
layout = _useState6[0],
|
|
69
|
+
setLayout = _useState6[1];
|
|
70
|
+
var _useState7 = (0, _react.useState)(false),
|
|
71
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
72
|
+
hasSelections = _useState8[0],
|
|
73
|
+
setHasSelections = _useState8[1];
|
|
74
|
+
// @TODO: set default scale
|
|
75
|
+
|
|
76
|
+
var update = (0, _react.useMemo)(function () {
|
|
77
|
+
var func = function func(abortController) {
|
|
78
|
+
if (mode === _constants.VIOLIN_MODES.MULTIKEY) {
|
|
79
|
+
if (dataset.selectedMultiVar.length) {
|
|
80
|
+
setHasSelections(true);
|
|
81
|
+
(0, _requests.fetchData)("violin", {
|
|
82
|
+
url: dataset.url,
|
|
83
|
+
keys: dataset.selectedMultiVar.map(function (i) {
|
|
84
|
+
return i.name;
|
|
85
|
+
}),
|
|
86
|
+
scale: dataset.controls.standardScale
|
|
87
|
+
}, abortController.signal).then(function (data) {
|
|
88
|
+
setData(data.data);
|
|
89
|
+
setLayout(data.layout);
|
|
90
|
+
}).catch(function (response) {
|
|
91
|
+
if (response.name !== "AbortError") {
|
|
92
|
+
response.json().then(function (json) {
|
|
93
|
+
console.log(json.message);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
} else {
|
|
98
|
+
setHasSelections(false);
|
|
99
|
+
}
|
|
100
|
+
} else if (mode === _constants.VIOLIN_MODES.GROUPBY) {
|
|
101
|
+
if (dataset.selectedObs && dataset.selectedVar) {
|
|
102
|
+
setHasSelections(true);
|
|
103
|
+
(0, _requests.fetchData)("violin", {
|
|
104
|
+
url: dataset.url,
|
|
105
|
+
keys: dataset.selectedVar.name,
|
|
106
|
+
selectedObs: dataset.selectedObs,
|
|
107
|
+
scale: dataset.controls.standardScale
|
|
108
|
+
}).then(function (data) {
|
|
109
|
+
setData(data.data);
|
|
110
|
+
setLayout(data.layout);
|
|
111
|
+
}).catch(function (response) {
|
|
112
|
+
if (response.name !== "AbortError") {
|
|
113
|
+
response.json().then(function (json) {
|
|
114
|
+
console.log(json.message);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
} else {
|
|
119
|
+
setHasSelections(false);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
// delay invoking the fetch function to avoid firing requests
|
|
124
|
+
// while dependencies might still be getting updated by the user
|
|
125
|
+
return _lodash.default.debounce(func, 500);
|
|
126
|
+
}, [mode, dataset.url, dataset.selectedObs, dataset.selectedVar, dataset.selectedMultiVar, dataset.controls.standardScale]);
|
|
127
|
+
(0, _react.useEffect)(function () {
|
|
128
|
+
// create an abort controller to pass into each fetch function
|
|
129
|
+
// to abort previous incompleted requests when a new request is fired
|
|
130
|
+
var abortController = new AbortController();
|
|
131
|
+
update(abortController);
|
|
132
|
+
return function () {
|
|
133
|
+
abortController.abort();
|
|
134
|
+
};
|
|
135
|
+
}, [update]);
|
|
136
|
+
if (hasSelections) {
|
|
137
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
138
|
+
className: "cherita-violin"
|
|
139
|
+
}, /*#__PURE__*/_react.default.createElement("h5", null, mode), /*#__PURE__*/_react.default.createElement(_reactPlotly.default, {
|
|
140
|
+
data: data,
|
|
141
|
+
layout: layout,
|
|
142
|
+
useResizeHandler: true,
|
|
143
|
+
style: {
|
|
144
|
+
maxWidth: "100%",
|
|
145
|
+
maxHeight: "100%"
|
|
146
|
+
}
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
150
|
+
className: "cherita-violin"
|
|
151
|
+
}, /*#__PURE__*/_react.default.createElement("p", null, "Select variables to plot"));
|
|
152
|
+
}
|
|
@@ -3,6 +3,48 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.PLOTLY_COLORSCALES = void 0;
|
|
6
|
+
exports.VIOLIN_MODES = exports.VIOLINPLOT_STANDARDSCALES = exports.SELECTION_MODES = exports.PLOTLY_COLORSCALES = exports.MATRIXPLOT_STANDARDSCALES = exports.EMBEDDINGS = exports.DOTPLOT_STANDARDSCALES = void 0;
|
|
7
7
|
var PLOTLY_COLORSCALES = ["Blackbody", "Bluered", "Blues", "Cividis", "Earth", "Electric", "Greens", "Greys", "Hot", "Jet", "Picnic", "Portland", "Rainbow", "RdBu", "Reds", "Viridis", "YlGnBu", "YlOrRd"];
|
|
8
|
-
exports.PLOTLY_COLORSCALES = PLOTLY_COLORSCALES;
|
|
8
|
+
exports.PLOTLY_COLORSCALES = PLOTLY_COLORSCALES;
|
|
9
|
+
var EMBEDDINGS = ["X_umap", "X_tsne"];
|
|
10
|
+
exports.EMBEDDINGS = EMBEDDINGS;
|
|
11
|
+
var SELECTION_MODES = {
|
|
12
|
+
SINGLE: "single",
|
|
13
|
+
MULTIPLE: "multiple"
|
|
14
|
+
};
|
|
15
|
+
exports.SELECTION_MODES = SELECTION_MODES;
|
|
16
|
+
var VIOLIN_MODES = {
|
|
17
|
+
MULTIKEY: "multikey",
|
|
18
|
+
GROUPBY: "groupby"
|
|
19
|
+
};
|
|
20
|
+
exports.VIOLIN_MODES = VIOLIN_MODES;
|
|
21
|
+
var MATRIXPLOT_STANDARDSCALES = [{
|
|
22
|
+
value: null,
|
|
23
|
+
name: "None"
|
|
24
|
+
}, {
|
|
25
|
+
value: "group",
|
|
26
|
+
name: "Group"
|
|
27
|
+
}, {
|
|
28
|
+
value: "var",
|
|
29
|
+
name: "Var"
|
|
30
|
+
}];
|
|
31
|
+
exports.MATRIXPLOT_STANDARDSCALES = MATRIXPLOT_STANDARDSCALES;
|
|
32
|
+
var DOTPLOT_STANDARDSCALES = [{
|
|
33
|
+
value: null,
|
|
34
|
+
name: "None"
|
|
35
|
+
}, {
|
|
36
|
+
value: "group",
|
|
37
|
+
name: "Group"
|
|
38
|
+
}, {
|
|
39
|
+
value: "var",
|
|
40
|
+
name: "Var"
|
|
41
|
+
}];
|
|
42
|
+
exports.DOTPLOT_STANDARDSCALES = DOTPLOT_STANDARDSCALES;
|
|
43
|
+
var VIOLINPLOT_STANDARDSCALES = [{
|
|
44
|
+
value: "width",
|
|
45
|
+
name: "Width"
|
|
46
|
+
}, {
|
|
47
|
+
value: "count",
|
|
48
|
+
name: "Count"
|
|
49
|
+
}];
|
|
50
|
+
exports.VIOLINPLOT_STANDARDSCALES = VIOLINPLOT_STANDARDSCALES;
|
|
@@ -39,7 +39,18 @@ function DatasetProvider(_ref) {
|
|
|
39
39
|
selectedVar: null,
|
|
40
40
|
selectedMultiObs: [],
|
|
41
41
|
selectedMultiVar: [],
|
|
42
|
-
|
|
42
|
+
controls: {
|
|
43
|
+
colorScale: "Viridis",
|
|
44
|
+
colorAxis: {
|
|
45
|
+
dmin: 0,
|
|
46
|
+
dmax: 1,
|
|
47
|
+
cmin: 0,
|
|
48
|
+
cmax: 1
|
|
49
|
+
},
|
|
50
|
+
standardScale: null,
|
|
51
|
+
meanOnlyExpressed: false,
|
|
52
|
+
expressionCutoff: 0.0
|
|
53
|
+
}
|
|
43
54
|
}),
|
|
44
55
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
45
56
|
dataset = _useReducer2[0],
|
|
@@ -88,10 +99,81 @@ function datasetReducer(dataset, action) {
|
|
|
88
99
|
})
|
|
89
100
|
});
|
|
90
101
|
}
|
|
91
|
-
case "
|
|
102
|
+
case "embeddingSelected":
|
|
103
|
+
{
|
|
104
|
+
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
105
|
+
embedding: action.embedding
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
case "set.controls.colorScale":
|
|
92
109
|
{
|
|
93
110
|
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
94
|
-
|
|
111
|
+
controls: _objectSpread(_objectSpread({}, dataset.controls), {}, {
|
|
112
|
+
colorScale: action.colorScale
|
|
113
|
+
})
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
case "set.controls.colorAxis":
|
|
117
|
+
{
|
|
118
|
+
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
119
|
+
controls: _objectSpread(_objectSpread({}, dataset.controls), {}, {
|
|
120
|
+
colorAxis: action.colorAxis
|
|
121
|
+
})
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
case "set.controls.colorAxis.crange":
|
|
125
|
+
{
|
|
126
|
+
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
127
|
+
controls: _objectSpread(_objectSpread({}, dataset.controls), {}, {
|
|
128
|
+
colorAxis: _objectSpread(_objectSpread({}, dataset.controls.colorAxis), {}, {
|
|
129
|
+
cmin: action.cmin,
|
|
130
|
+
cmax: action.cmax
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
case "set.controls.colorAxis.cmin":
|
|
136
|
+
{
|
|
137
|
+
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
138
|
+
controls: _objectSpread(_objectSpread({}, dataset.controls), {}, {
|
|
139
|
+
colorAxis: _objectSpread(_objectSpread({}, dataset.controls.colorAxis), {}, {
|
|
140
|
+
cmin: action.cmin
|
|
141
|
+
})
|
|
142
|
+
})
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
case "set.controls.colorAxis.cmax":
|
|
146
|
+
{
|
|
147
|
+
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
148
|
+
controls: _objectSpread(_objectSpread({}, dataset.controls), {}, {
|
|
149
|
+
colorAxis: _objectSpread(_objectSpread({}, dataset.controls.colorAxis), {}, {
|
|
150
|
+
cmax: action.cmax
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
case "set.controls.standardScale":
|
|
156
|
+
{
|
|
157
|
+
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
158
|
+
controls: _objectSpread(_objectSpread({}, dataset.controls), {}, {
|
|
159
|
+
standardScale: action.standardScale
|
|
160
|
+
})
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
case "set.controls.meanOnlyExpressed":
|
|
164
|
+
{
|
|
165
|
+
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
166
|
+
controls: _objectSpread(_objectSpread({}, dataset.controls), {}, {
|
|
167
|
+
meanOnlyExpressed: action.meanOnlyExpressed
|
|
168
|
+
})
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
case "set.controls.expressionCutoff":
|
|
172
|
+
{
|
|
173
|
+
return _objectSpread(_objectSpread({}, dataset), {}, {
|
|
174
|
+
controls: _objectSpread(_objectSpread({}, dataset.controls), {}, {
|
|
175
|
+
expressionCutoff: action.expressionCutoff
|
|
176
|
+
})
|
|
95
177
|
});
|
|
96
178
|
}
|
|
97
179
|
default:
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MapHelper = void 0;
|
|
7
|
+
var _core = require("@deck.gl/core");
|
|
8
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
9
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
10
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
11
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
12
|
+
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; }
|
|
13
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
14
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
15
|
+
window.deck.log.level = 1;
|
|
16
|
+
var MapHelper = /*#__PURE__*/_createClass(function MapHelper() {
|
|
17
|
+
_classCallCheck(this, MapHelper);
|
|
18
|
+
_defineProperty(this, "fitBounds", function (coords) {
|
|
19
|
+
var view = new _core.WebMercatorViewport({
|
|
20
|
+
width: 600,
|
|
21
|
+
height: 400,
|
|
22
|
+
longitude: -122.45,
|
|
23
|
+
latitude: 37.78,
|
|
24
|
+
zoom: 12,
|
|
25
|
+
pitch: 30,
|
|
26
|
+
bearing: 15
|
|
27
|
+
});
|
|
28
|
+
var latMin = 90;
|
|
29
|
+
var latMax = -90;
|
|
30
|
+
var lonMin = 180;
|
|
31
|
+
var lonMax = -180;
|
|
32
|
+
coords.forEach(function (coord) {
|
|
33
|
+
var RECT_LAT_INDEX = '0';
|
|
34
|
+
var RECT_LON_INDEX = '1';
|
|
35
|
+
if (coord[RECT_LAT_INDEX] < latMin) latMin = coord[RECT_LAT_INDEX];
|
|
36
|
+
if (coord[RECT_LAT_INDEX] > latMax) latMax = coord[RECT_LAT_INDEX];
|
|
37
|
+
if (coord[RECT_LON_INDEX] < lonMin) lonMin = coord[RECT_LON_INDEX];
|
|
38
|
+
if (coord[RECT_LON_INDEX] > lonMax) lonMax = coord[RECT_LON_INDEX];
|
|
39
|
+
});
|
|
40
|
+
var bounds = [[lonMin, latMax], [lonMax, latMin]];
|
|
41
|
+
var _view$fitBounds = view.fitBounds(bounds, {
|
|
42
|
+
padding: {
|
|
43
|
+
top: 50,
|
|
44
|
+
bottom: 50,
|
|
45
|
+
left: 50,
|
|
46
|
+
right: 50
|
|
47
|
+
}
|
|
48
|
+
}),
|
|
49
|
+
longitude = _view$fitBounds.longitude,
|
|
50
|
+
latitude = _view$fitBounds.latitude,
|
|
51
|
+
zoom = _view$fitBounds.zoom;
|
|
52
|
+
return {
|
|
53
|
+
longitude: longitude,
|
|
54
|
+
latitude: latitude,
|
|
55
|
+
zoom: zoom
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
exports.MapHelper = MapHelper;
|