@haniffalab/cherita-react 0.2.0-dev.2024-09-26.775b9a06 → 0.2.0-dev.2024-09-26.1ea62883
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 +77 -8
- package/dist/components/Offcanvas/index.js +6 -2
- package/dist/components/dotplot/Dotplot.js +22 -5
- package/dist/components/dotplot/DotplotControls.js +11 -10
- package/dist/components/heatmap/Heatmap.js +22 -5
- package/dist/components/matrixplot/Matrixplot.js +22 -5
- package/dist/components/matrixplot/MatrixplotControls.js +8 -7
- package/dist/components/obs-list/ObsItem.js +394 -0
- package/dist/components/obs-list/ObsList.js +116 -299
- package/dist/components/obs-list/ObsToolbar.js +76 -0
- package/dist/components/scatterplot/Legend.js +4 -3
- package/dist/components/scatterplot/Scatterplot.js +129 -61
- package/dist/components/scatterplot/Toolbox.js +3 -2
- package/dist/components/search-bar/SearchBar.js +18 -2
- package/dist/components/search-bar/SearchResults.js +8 -8
- package/dist/components/var-list/VarItem.js +316 -0
- package/dist/components/var-list/VarList.js +167 -149
- package/dist/components/var-list/VarSet.js +214 -0
- package/dist/components/violin/Violin.js +46 -13
- package/dist/components/violin/ViolinControls.js +13 -18
- package/dist/constants/constants.js +41 -29
- package/dist/context/DatasetContext.js +91 -31
- package/dist/context/FilterContext.js +76 -0
- package/dist/helpers/map-helper.js +20 -15
- package/dist/helpers/zarr-helper.js +35 -13
- package/dist/index.js +7 -0
- package/dist/utils/VirtualizedList.js +69 -0
- package/dist/utils/requests.js +2 -2
- package/dist/utils/search.js +3 -56
- package/dist/utils/string.js +18 -0
- package/package.json +3 -2
- package/dist/components/obs-list/ObsValueList.js +0 -101
|
@@ -7,6 +7,7 @@ exports.Violin = Violin;
|
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
9
9
|
var _reactFontawesome = require("@fortawesome/react-fontawesome");
|
|
10
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
11
|
var _reactBootstrap = require("react-bootstrap");
|
|
11
12
|
var _reactPlotly = _interopRequireDefault(require("react-plotly.js"));
|
|
12
13
|
var _constants = require("../../constants/constants");
|
|
@@ -18,6 +19,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
18
19
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
19
20
|
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; }
|
|
20
21
|
function Violin(_ref) {
|
|
22
|
+
var _dataset$selectedVar, _dataset$selectedVar2, _dataset$selectedVar3, _dataset$selectedVar4, _dataset$selectedObs, _dataset$selectedObs2, _dataset$selectedObs3;
|
|
21
23
|
let {
|
|
22
24
|
mode = _constants.VIOLIN_MODES.MULTIKEY
|
|
23
25
|
} = _ref;
|
|
@@ -28,9 +30,29 @@ function Violin(_ref) {
|
|
|
28
30
|
const [hasSelections, setHasSelections] = (0, _react.useState)(false);
|
|
29
31
|
const [params, setParams] = (0, _react.useState)({
|
|
30
32
|
url: dataset.url,
|
|
31
|
-
|
|
32
|
-
scale: dataset.controls.
|
|
33
|
-
varNamesCol: dataset.varNamesCol
|
|
33
|
+
mode: mode,
|
|
34
|
+
scale: dataset.controls.scale.violinplot.value,
|
|
35
|
+
varNamesCol: dataset.varNamesCol,
|
|
36
|
+
...{
|
|
37
|
+
[_constants.VIOLIN_MODES.MULTIKEY]: {
|
|
38
|
+
varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
|
|
39
|
+
name: i.name,
|
|
40
|
+
indices: i.vars.map(v => v.index)
|
|
41
|
+
} : i.index),
|
|
42
|
+
obsKeys: [] // @TODO: implement
|
|
43
|
+
},
|
|
44
|
+
[_constants.VIOLIN_MODES.GROUPBY]: {
|
|
45
|
+
varKey: (_dataset$selectedVar = dataset.selectedVar) !== null && _dataset$selectedVar !== void 0 && _dataset$selectedVar.isSet ? {
|
|
46
|
+
name: (_dataset$selectedVar2 = dataset.selectedVar) === null || _dataset$selectedVar2 === void 0 ? void 0 : _dataset$selectedVar2.name,
|
|
47
|
+
indices: (_dataset$selectedVar3 = dataset.selectedVar) === null || _dataset$selectedVar3 === void 0 ? void 0 : _dataset$selectedVar3.vars.map(v => v.index)
|
|
48
|
+
} : (_dataset$selectedVar4 = dataset.selectedVar) === null || _dataset$selectedVar4 === void 0 ? void 0 : _dataset$selectedVar4.index,
|
|
49
|
+
obsCol: dataset.selectedObs,
|
|
50
|
+
obsValues: !((_dataset$selectedObs = dataset.selectedObs) !== null && _dataset$selectedObs !== void 0 && _dataset$selectedObs.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_dataset$selectedObs2 = dataset.selectedObs) === null || _dataset$selectedObs2 === void 0 ? void 0 : _dataset$selectedObs2.codes), (_dataset$selectedObs3 = dataset.selectedObs) === null || _dataset$selectedObs3 === void 0 ? void 0 : _dataset$selectedObs3.omit).map(c => {
|
|
51
|
+
var _dataset$selectedObs4;
|
|
52
|
+
return (_dataset$selectedObs4 = dataset.selectedObs) === null || _dataset$selectedObs4 === void 0 ? void 0 : _dataset$selectedObs4.codesMap[c];
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
}[mode]
|
|
34
56
|
});
|
|
35
57
|
// @TODO: set default scale
|
|
36
58
|
|
|
@@ -45,8 +67,12 @@ function Violin(_ref) {
|
|
|
45
67
|
return {
|
|
46
68
|
...p,
|
|
47
69
|
url: dataset.url,
|
|
48
|
-
|
|
49
|
-
|
|
70
|
+
mode: mode,
|
|
71
|
+
varKeys: dataset.selectedMultiVar.map(i => i.isSet ? {
|
|
72
|
+
name: i.name,
|
|
73
|
+
indices: i.vars.map(v => v.index)
|
|
74
|
+
} : i.index),
|
|
75
|
+
scale: dataset.controls.scale.violinplot.value,
|
|
50
76
|
varNamesCol: dataset.varNamesCol
|
|
51
77
|
};
|
|
52
78
|
});
|
|
@@ -57,23 +83,32 @@ function Violin(_ref) {
|
|
|
57
83
|
setHasSelections(false);
|
|
58
84
|
}
|
|
59
85
|
setParams(p => {
|
|
86
|
+
var _dataset$selectedVar5, _dataset$selectedVar6, _dataset$selectedVar7, _dataset$selectedVar8, _dataset$selectedObs5, _dataset$selectedObs6, _dataset$selectedObs7;
|
|
60
87
|
return {
|
|
61
88
|
...p,
|
|
62
89
|
url: dataset.url,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
90
|
+
mode: mode,
|
|
91
|
+
varKey: (_dataset$selectedVar5 = dataset.selectedVar) !== null && _dataset$selectedVar5 !== void 0 && _dataset$selectedVar5.isSet ? {
|
|
92
|
+
name: (_dataset$selectedVar6 = dataset.selectedVar) === null || _dataset$selectedVar6 === void 0 ? void 0 : _dataset$selectedVar6.name,
|
|
93
|
+
indices: (_dataset$selectedVar7 = dataset.selectedVar) === null || _dataset$selectedVar7 === void 0 ? void 0 : _dataset$selectedVar7.vars.map(v => v.index)
|
|
94
|
+
} : (_dataset$selectedVar8 = dataset.selectedVar) === null || _dataset$selectedVar8 === void 0 ? void 0 : _dataset$selectedVar8.index,
|
|
95
|
+
obsCol: dataset.selectedObs,
|
|
96
|
+
obsValues: !((_dataset$selectedObs5 = dataset.selectedObs) !== null && _dataset$selectedObs5 !== void 0 && _dataset$selectedObs5.omit.length) ? null : _lodash.default.difference(_lodash.default.values((_dataset$selectedObs6 = dataset.selectedObs) === null || _dataset$selectedObs6 === void 0 ? void 0 : _dataset$selectedObs6.codes), (_dataset$selectedObs7 = dataset.selectedObs) === null || _dataset$selectedObs7 === void 0 ? void 0 : _dataset$selectedObs7.omit).map(c => {
|
|
97
|
+
var _dataset$selectedObs8;
|
|
98
|
+
return (_dataset$selectedObs8 = dataset.selectedObs) === null || _dataset$selectedObs8 === void 0 ? void 0 : _dataset$selectedObs8.codesMap[c];
|
|
99
|
+
}),
|
|
100
|
+
scale: dataset.controls.scale.violinplot.value,
|
|
66
101
|
varNamesCol: dataset.varNamesCol
|
|
67
102
|
};
|
|
68
103
|
});
|
|
69
104
|
}
|
|
70
|
-
}, [dataset.controls.
|
|
105
|
+
}, [dataset.controls.scale.violinplot.value, dataset.selectedMultiVar, dataset.selectedObs, dataset.selectedVar, dataset.url, dataset.varNamesCol, mode]);
|
|
71
106
|
const {
|
|
72
107
|
fetchedData,
|
|
73
108
|
isPending,
|
|
74
109
|
serverError
|
|
75
110
|
} = (0, _requests.useDebouncedFetch)(ENDPOINT, params, 500, {
|
|
76
|
-
enabled: mode === _constants.VIOLIN_MODES.MULTIKEY && !!params.
|
|
111
|
+
enabled: mode === _constants.VIOLIN_MODES.MULTIKEY && (!!params.varKeys.length || !!params.obsKeys.length) || mode === _constants.VIOLIN_MODES.GROUPBY && !!params.varKey && !!params.obsCol
|
|
77
112
|
});
|
|
78
113
|
(0, _react.useEffect)(() => {
|
|
79
114
|
if (hasSelections && !isPending && !serverError) {
|
|
@@ -85,9 +120,7 @@ function Violin(_ref) {
|
|
|
85
120
|
if (hasSelections) {
|
|
86
121
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
87
122
|
className: "cherita-violin position-relative",
|
|
88
|
-
children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
89
|
-
children: mode
|
|
90
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
|
|
123
|
+
children: [isPending && /*#__PURE__*/(0, _jsxRuntime.jsx)(_LoadingIndicators.LoadingSpinner, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactPlotly.default, {
|
|
91
124
|
data: data,
|
|
92
125
|
layout: layout,
|
|
93
126
|
useResizeHandler: true,
|
|
@@ -4,44 +4,39 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.ViolinControls = ViolinControls;
|
|
7
|
-
var _react =
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
9
|
var _reactBootstrap = require("react-bootstrap");
|
|
9
10
|
var _constants = require("../../constants/constants");
|
|
10
11
|
var _DatasetContext = require("../../context/DatasetContext");
|
|
11
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
-
function
|
|
13
|
-
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; }
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
function ViolinControls() {
|
|
15
15
|
const dataset = (0, _DatasetContext.useDataset)();
|
|
16
16
|
const dispatch = (0, _DatasetContext.useDatasetDispatch)();
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
if (dataset.controls.standardScale) {
|
|
20
|
-
setActiveStandardScale(_constants.VIOLINPLOT_STANDARDSCALES.find(obs => obs.value === dataset.controls.standardScale).name);
|
|
21
|
-
}
|
|
22
|
-
}, [dataset.controls.standardScale]);
|
|
23
|
-
const standardScaleList = _constants.VIOLINPLOT_STANDARDSCALES.map(item => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
24
|
-
active: activeStandardScale === item.value,
|
|
17
|
+
const scaleList = _lodash.default.values(_constants.VIOLINPLOT_SCALES).map(scale => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Item, {
|
|
18
|
+
active: dataset.controls.scale.violinplot === scale,
|
|
25
19
|
onClick: () => {
|
|
26
20
|
dispatch({
|
|
27
|
-
type: "set.controls.
|
|
28
|
-
|
|
21
|
+
type: "set.controls.scale",
|
|
22
|
+
plot: "violinplot",
|
|
23
|
+
scale: scale
|
|
29
24
|
});
|
|
30
25
|
},
|
|
31
|
-
children:
|
|
32
|
-
},
|
|
26
|
+
children: scale.name
|
|
27
|
+
}, scale.value));
|
|
33
28
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonToolbar, {
|
|
34
29
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.ButtonGroup, {
|
|
35
30
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.InputGroup, {
|
|
36
31
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.InputGroup.Text, {
|
|
37
|
-
children: "
|
|
32
|
+
children: "Scale"
|
|
38
33
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactBootstrap.Dropdown, {
|
|
39
34
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Toggle, {
|
|
40
35
|
id: "dropdownStandardScale",
|
|
41
36
|
variant: "light",
|
|
42
|
-
children:
|
|
37
|
+
children: dataset.controls.scale.violinplot.name
|
|
43
38
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactBootstrap.Dropdown.Menu, {
|
|
44
|
-
children:
|
|
39
|
+
children: scaleList
|
|
45
40
|
})]
|
|
46
41
|
})]
|
|
47
42
|
})
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.VIOLIN_MODES = exports.
|
|
6
|
+
exports.VIOLIN_MODES = exports.VIOLINPLOT_SCALES = exports.UNSELECTED_POLYGON_FILLCOLOR = exports.SELECTION_MODES = exports.SELECTED_POLYGON_FILLCOLOR = exports.OBS_TYPES = exports.MATRIXPLOT_SCALES = exports.LOCAL_STORAGE_KEY = exports.DOTPLOT_SCALES = exports.COLOR_ENCODINGS = void 0;
|
|
7
7
|
const LOCAL_STORAGE_KEY = exports.LOCAL_STORAGE_KEY = "CHERITA";
|
|
8
8
|
const COLOR_ENCODINGS = exports.COLOR_ENCODINGS = {
|
|
9
9
|
VAR: "var",
|
|
@@ -12,7 +12,8 @@ const COLOR_ENCODINGS = exports.COLOR_ENCODINGS = {
|
|
|
12
12
|
const OBS_TYPES = exports.OBS_TYPES = {
|
|
13
13
|
CATEGORICAL: "categorical",
|
|
14
14
|
DISCRETE: "discrete",
|
|
15
|
-
CONTINUOUS: "continuous"
|
|
15
|
+
CONTINUOUS: "continuous",
|
|
16
|
+
BOOLEAN: "boolean"
|
|
16
17
|
};
|
|
17
18
|
const SELECTED_POLYGON_FILLCOLOR = exports.SELECTED_POLYGON_FILLCOLOR = [107, 170, 209, 255 / 2];
|
|
18
19
|
const UNSELECTED_POLYGON_FILLCOLOR = exports.UNSELECTED_POLYGON_FILLCOLOR = [167, 191, 211, 255 / 3];
|
|
@@ -24,30 +25,41 @@ const VIOLIN_MODES = exports.VIOLIN_MODES = {
|
|
|
24
25
|
MULTIKEY: "multikey",
|
|
25
26
|
GROUPBY: "groupby"
|
|
26
27
|
};
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
28
|
+
const MATRIXPLOT_SCALES = exports.MATRIXPLOT_SCALES = {
|
|
29
|
+
NONE: {
|
|
30
|
+
value: null,
|
|
31
|
+
name: "None"
|
|
32
|
+
},
|
|
33
|
+
GROUP: {
|
|
34
|
+
value: "group",
|
|
35
|
+
name: "Group"
|
|
36
|
+
},
|
|
37
|
+
VAR: {
|
|
38
|
+
value: "var",
|
|
39
|
+
name: "Var"
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const DOTPLOT_SCALES = exports.DOTPLOT_SCALES = {
|
|
43
|
+
NONE: {
|
|
44
|
+
value: null,
|
|
45
|
+
name: "None"
|
|
46
|
+
},
|
|
47
|
+
GROUP: {
|
|
48
|
+
value: "group",
|
|
49
|
+
name: "Group"
|
|
50
|
+
},
|
|
51
|
+
VAR: {
|
|
52
|
+
value: "var",
|
|
53
|
+
name: "Var"
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const VIOLINPLOT_SCALES = exports.VIOLINPLOT_SCALES = {
|
|
57
|
+
WIDTH: {
|
|
58
|
+
value: "width",
|
|
59
|
+
name: "Width"
|
|
60
|
+
},
|
|
61
|
+
COUNT: {
|
|
62
|
+
value: "count",
|
|
63
|
+
name: "Count"
|
|
64
|
+
}
|
|
65
|
+
};
|
|
@@ -12,6 +12,7 @@ var _querySyncStoragePersister = require("@tanstack/query-sync-storage-persister
|
|
|
12
12
|
var _reactQuery = require("@tanstack/react-query");
|
|
13
13
|
var _reactQueryPersistClient = require("@tanstack/react-query-persist-client");
|
|
14
14
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
+
var _FilterContext = require("./FilterContext");
|
|
15
16
|
var _constants = require("../constants/constants");
|
|
16
17
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -27,12 +28,12 @@ const queryClient = new _reactQuery.QueryClient({
|
|
|
27
28
|
},
|
|
28
29
|
queryCache: new _reactQuery.QueryCache({
|
|
29
30
|
onError: (error, query) => {
|
|
30
|
-
console.error(error);
|
|
31
|
+
console.error(error, query);
|
|
31
32
|
}
|
|
32
33
|
})
|
|
33
34
|
});
|
|
34
35
|
// Type of queries to store responses
|
|
35
|
-
const persistKeys = ["obs/cols", "var/names", "obsm/keys"];
|
|
36
|
+
const persistKeys = ["obs/cols", "var/names", "obsm/keys", "var/histograms", "obs/bins", "obs/distribution"];
|
|
36
37
|
const persistOptions = {
|
|
37
38
|
persister: (0, _querySyncStoragePersister.createSyncStoragePersister)({
|
|
38
39
|
storage: window.localStorage
|
|
@@ -60,6 +61,7 @@ const initialDataset = {
|
|
|
60
61
|
selectedMultiVar: [],
|
|
61
62
|
colorEncoding: null,
|
|
62
63
|
labelObs: [],
|
|
64
|
+
varSets: [],
|
|
63
65
|
sliceBy: {
|
|
64
66
|
obs: false,
|
|
65
67
|
polygons: false
|
|
@@ -74,16 +76,16 @@ const initialDataset = {
|
|
|
74
76
|
cmin: 0,
|
|
75
77
|
cmax: 1
|
|
76
78
|
},
|
|
77
|
-
|
|
79
|
+
scale: {
|
|
80
|
+
dotplot: _constants.DOTPLOT_SCALES.NONE,
|
|
81
|
+
matrixplot: _constants.MATRIXPLOT_SCALES.NONE,
|
|
82
|
+
violinplot: _constants.VIOLINPLOT_SCALES.WIDTH
|
|
83
|
+
},
|
|
78
84
|
meanOnlyExpressed: false,
|
|
79
85
|
expressionCutoff: 0.0
|
|
80
86
|
},
|
|
81
87
|
diseaseDatasets: [],
|
|
82
|
-
selectedDisease:
|
|
83
|
-
id: null,
|
|
84
|
-
name: null,
|
|
85
|
-
genes: []
|
|
86
|
-
}
|
|
88
|
+
selectedDisease: null
|
|
87
89
|
};
|
|
88
90
|
const initializer = initialState => {
|
|
89
91
|
const localObj = (JSON.parse(localStorage.getItem(_constants.LOCAL_STORAGE_KEY)) || {})[initialState.url] || {};
|
|
@@ -123,7 +125,9 @@ function DatasetProvider(_ref2) {
|
|
|
123
125
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactQueryPersistClient.PersistQueryClientProvider, {
|
|
124
126
|
client: queryClient,
|
|
125
127
|
persistOptions: persistOptions,
|
|
126
|
-
children:
|
|
128
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FilterContext.FilterProvider, {
|
|
129
|
+
children: children
|
|
130
|
+
})
|
|
127
131
|
})
|
|
128
132
|
})
|
|
129
133
|
});
|
|
@@ -145,6 +149,11 @@ function datasetReducer(dataset, action) {
|
|
|
145
149
|
controls: {
|
|
146
150
|
...dataset.controls,
|
|
147
151
|
range: ((_action$obs = action.obs) === null || _action$obs === void 0 ? void 0 : _action$obs.type) === _constants.OBS_TYPES.CATEGORICAL ? [0, 1] : dataset.controls.range
|
|
152
|
+
},
|
|
153
|
+
colorEncoding: dataset.colorEncoding === _constants.COLOR_ENCODINGS.OBS && !action.obs ? null : dataset.colorEncoding,
|
|
154
|
+
sliceBy: {
|
|
155
|
+
...dataset.sliceBy,
|
|
156
|
+
obs: action.obs ? dataset.sliceBy.obs : false
|
|
148
157
|
}
|
|
149
158
|
};
|
|
150
159
|
}
|
|
@@ -164,7 +173,7 @@ function datasetReducer(dataset, action) {
|
|
|
164
173
|
}
|
|
165
174
|
case "select.multivar":
|
|
166
175
|
{
|
|
167
|
-
if (dataset.selectedMultiVar.find(i =>
|
|
176
|
+
if (dataset.selectedMultiVar.find(i => action.var.isSet ? i.name === action.var.name : i.matrix_index === action.var.matrix_index)) {
|
|
168
177
|
return dataset;
|
|
169
178
|
} else {
|
|
170
179
|
return {
|
|
@@ -173,19 +182,23 @@ function datasetReducer(dataset, action) {
|
|
|
173
182
|
};
|
|
174
183
|
}
|
|
175
184
|
}
|
|
176
|
-
case "deselect.
|
|
185
|
+
case "deselect.multivar":
|
|
177
186
|
{
|
|
178
187
|
return {
|
|
179
188
|
...dataset,
|
|
180
|
-
|
|
181
|
-
colorEncoding: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? null : dataset.colorEncoding
|
|
189
|
+
selectedMultiVar: dataset.selectedMultiVar.filter(a => action.var.isSet ? a.name !== action.var.name : a.matrix_index !== action.var.matrix_index)
|
|
182
190
|
};
|
|
183
191
|
}
|
|
184
|
-
case "
|
|
192
|
+
case "update.multivar":
|
|
185
193
|
{
|
|
186
194
|
return {
|
|
187
195
|
...dataset,
|
|
188
|
-
|
|
196
|
+
selelectedMultiVar: dataset.selectedMultiVar.map(i => {
|
|
197
|
+
if (i.isSet) {
|
|
198
|
+
return action.vars.find(s => s.name === i.name);
|
|
199
|
+
}
|
|
200
|
+
return i;
|
|
201
|
+
})
|
|
189
202
|
};
|
|
190
203
|
}
|
|
191
204
|
case "set.colorEncoding":
|
|
@@ -211,24 +224,72 @@ function datasetReducer(dataset, action) {
|
|
|
211
224
|
colorEncoding: dataset.colorEncoding === _constants.COLOR_ENCODINGS.VAR ? null : dataset.colorEncoding
|
|
212
225
|
};
|
|
213
226
|
}
|
|
214
|
-
case "
|
|
227
|
+
case "add.varSet":
|
|
215
228
|
{
|
|
216
229
|
return {
|
|
217
230
|
...dataset,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
231
|
+
varSets: [...dataset.varSets, action.varSet]
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
case "remove.varSet":
|
|
235
|
+
{
|
|
236
|
+
return {
|
|
237
|
+
...dataset,
|
|
238
|
+
varSets: dataset.varSets.filter(a => a.name !== action.varSet.name)
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
case "reset.varSets":
|
|
242
|
+
{
|
|
243
|
+
return {
|
|
244
|
+
...dataset,
|
|
245
|
+
varSets: []
|
|
223
246
|
};
|
|
224
247
|
}
|
|
225
|
-
case "
|
|
248
|
+
case "add.varSet.var":
|
|
249
|
+
{
|
|
250
|
+
const varSet = dataset.varSets.find(s => s.name === action.varSet.name);
|
|
251
|
+
if (varSet.vars.find(v => _lodash.default.isEqual(v, action.var))) {
|
|
252
|
+
return dataset;
|
|
253
|
+
} else {
|
|
254
|
+
return {
|
|
255
|
+
...dataset,
|
|
256
|
+
varSets: dataset.varSets.map(s => {
|
|
257
|
+
if (s.name === varSet.name) {
|
|
258
|
+
return {
|
|
259
|
+
...s,
|
|
260
|
+
vars: [...s.vars, action.var]
|
|
261
|
+
};
|
|
262
|
+
} else {
|
|
263
|
+
return s;
|
|
264
|
+
}
|
|
265
|
+
})
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
case "remove.varSet.var":
|
|
270
|
+
{
|
|
271
|
+
const varSet = dataset.varSets.find(s => s.name === action.varSet.name);
|
|
272
|
+
return {
|
|
273
|
+
...dataset,
|
|
274
|
+
varSets: dataset.varSets.map(s => {
|
|
275
|
+
if (s.name === varSet.name) {
|
|
276
|
+
return {
|
|
277
|
+
...s,
|
|
278
|
+
vars: s.vars.filter(v => v.name !== action.var.name)
|
|
279
|
+
};
|
|
280
|
+
} else {
|
|
281
|
+
return s;
|
|
282
|
+
}
|
|
283
|
+
})
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
case "select.disease":
|
|
226
287
|
{
|
|
227
288
|
return {
|
|
228
289
|
...dataset,
|
|
229
290
|
selectedDisease: {
|
|
230
|
-
|
|
231
|
-
|
|
291
|
+
id: action.id,
|
|
292
|
+
name: action.name
|
|
232
293
|
}
|
|
233
294
|
};
|
|
234
295
|
}
|
|
@@ -236,11 +297,7 @@ function datasetReducer(dataset, action) {
|
|
|
236
297
|
{
|
|
237
298
|
return {
|
|
238
299
|
...dataset,
|
|
239
|
-
selectedDisease:
|
|
240
|
-
id: null,
|
|
241
|
-
name: null,
|
|
242
|
-
genes: []
|
|
243
|
-
}
|
|
300
|
+
selectedDisease: null
|
|
244
301
|
};
|
|
245
302
|
}
|
|
246
303
|
case "set.controls.colorScale":
|
|
@@ -323,13 +380,16 @@ function datasetReducer(dataset, action) {
|
|
|
323
380
|
}
|
|
324
381
|
};
|
|
325
382
|
}
|
|
326
|
-
case "set.controls.
|
|
383
|
+
case "set.controls.scale":
|
|
327
384
|
{
|
|
328
385
|
return {
|
|
329
386
|
...dataset,
|
|
330
387
|
controls: {
|
|
331
388
|
...dataset.controls,
|
|
332
|
-
|
|
389
|
+
scale: {
|
|
390
|
+
...dataset.controls.scale,
|
|
391
|
+
[action.plot]: action.scale
|
|
392
|
+
}
|
|
333
393
|
}
|
|
334
394
|
};
|
|
335
395
|
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FilterProvider = FilterProvider;
|
|
7
|
+
exports.FilteredDataDispatchContext = exports.FilteredDataContext = void 0;
|
|
8
|
+
exports.useFilteredData = useFilteredData;
|
|
9
|
+
exports.useFilteredDataDispatch = useFilteredDataDispatch;
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
13
|
+
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; }
|
|
14
|
+
const FilteredDataContext = exports.FilteredDataContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
15
|
+
const FilteredDataDispatchContext = exports.FilteredDataDispatchContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
16
|
+
const initialFilterData = {
|
|
17
|
+
obsIndices: [],
|
|
18
|
+
varIndices: []
|
|
19
|
+
};
|
|
20
|
+
function FilterProvider(_ref) {
|
|
21
|
+
let {
|
|
22
|
+
children
|
|
23
|
+
} = _ref;
|
|
24
|
+
const [filteredData, dispatch] = (0, _react.useReducer)(filterReducer, {
|
|
25
|
+
...initialFilterData
|
|
26
|
+
});
|
|
27
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(FilteredDataContext.Provider, {
|
|
28
|
+
value: filteredData,
|
|
29
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(FilteredDataDispatchContext.Provider, {
|
|
30
|
+
value: dispatch,
|
|
31
|
+
children: children
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function useFilteredData() {
|
|
36
|
+
return (0, _react.useContext)(FilteredDataContext);
|
|
37
|
+
}
|
|
38
|
+
function useFilteredDataDispatch() {
|
|
39
|
+
return (0, _react.useContext)(FilteredDataDispatchContext);
|
|
40
|
+
}
|
|
41
|
+
function filterReducer(filteredData, action) {
|
|
42
|
+
switch (action.type) {
|
|
43
|
+
case "set.obs.indices":
|
|
44
|
+
{
|
|
45
|
+
return {
|
|
46
|
+
...filteredData,
|
|
47
|
+
obsIndices: action.indices
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
case "reset.obs.indices":
|
|
51
|
+
{
|
|
52
|
+
return {
|
|
53
|
+
...filteredData,
|
|
54
|
+
obsIndices: []
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
case "set.var.indices":
|
|
58
|
+
{
|
|
59
|
+
return {
|
|
60
|
+
...filteredData,
|
|
61
|
+
varIndices: action.indices
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
case "reset.var.indices":
|
|
65
|
+
{
|
|
66
|
+
return {
|
|
67
|
+
...filteredData,
|
|
68
|
+
varIndices: []
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
default:
|
|
72
|
+
{
|
|
73
|
+
throw Error("Unknown action: " + action.type);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -7,28 +7,33 @@ exports.MapHelper = void 0;
|
|
|
7
7
|
var _core = require("@deck.gl/core");
|
|
8
8
|
class MapHelper {
|
|
9
9
|
fitBounds(coords) {
|
|
10
|
+
let {
|
|
11
|
+
width = 400,
|
|
12
|
+
height = 600
|
|
13
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
14
|
+
width: 400,
|
|
15
|
+
height: 600
|
|
16
|
+
};
|
|
10
17
|
let view = new _core.WebMercatorViewport({
|
|
11
|
-
width:
|
|
12
|
-
height:
|
|
13
|
-
longitude:
|
|
14
|
-
latitude:
|
|
15
|
-
zoom: 12
|
|
16
|
-
pitch: 30,
|
|
17
|
-
bearing: 15
|
|
18
|
+
width: width,
|
|
19
|
+
height: height,
|
|
20
|
+
longitude: 0,
|
|
21
|
+
latitude: 0,
|
|
22
|
+
zoom: 12
|
|
18
23
|
});
|
|
19
|
-
let latMin =
|
|
20
|
-
let latMax = -
|
|
21
|
-
let lonMin =
|
|
22
|
-
let lonMax = -
|
|
24
|
+
let latMin = Infinity;
|
|
25
|
+
let latMax = -Infinity;
|
|
26
|
+
let lonMin = Infinity;
|
|
27
|
+
let lonMax = -Infinity;
|
|
28
|
+
const RECT_LON_INDEX = 0;
|
|
29
|
+
const RECT_LAT_INDEX = 1;
|
|
23
30
|
coords.forEach(function (coord) {
|
|
24
|
-
const RECT_LAT_INDEX = "0";
|
|
25
|
-
const RECT_LON_INDEX = "1";
|
|
26
31
|
if (coord[RECT_LAT_INDEX] < latMin) latMin = coord[RECT_LAT_INDEX];
|
|
27
32
|
if (coord[RECT_LAT_INDEX] > latMax) latMax = coord[RECT_LAT_INDEX];
|
|
28
33
|
if (coord[RECT_LON_INDEX] < lonMin) lonMin = coord[RECT_LON_INDEX];
|
|
29
34
|
if (coord[RECT_LON_INDEX] > lonMax) lonMax = coord[RECT_LON_INDEX];
|
|
30
35
|
});
|
|
31
|
-
const bounds = [[lonMin,
|
|
36
|
+
const bounds = [[lonMin, latMin], [lonMax, latMax]];
|
|
32
37
|
const {
|
|
33
38
|
longitude,
|
|
34
39
|
latitude,
|
|
@@ -36,7 +41,7 @@ class MapHelper {
|
|
|
36
41
|
} = view.fitBounds(bounds, {
|
|
37
42
|
padding: {
|
|
38
43
|
top: 50,
|
|
39
|
-
bottom:
|
|
44
|
+
bottom: 70,
|
|
40
45
|
left: 50,
|
|
41
46
|
right: 50
|
|
42
47
|
}
|