@haniffalab/cherita-react 1.4.1 → 1.4.2-dev.2025-10-29.81a6b906
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 +1 -1
- package/dist/cjs/components/controls/Controls.js +38 -30
- package/dist/cjs/components/dotplot/Dotplot.js +67 -69
- package/dist/cjs/components/dotplot/DotplotControls.js +103 -83
- package/dist/cjs/components/full-page/FullPage.js +100 -74
- package/dist/cjs/components/full-page/PlotAlert.js +45 -0
- package/dist/cjs/components/full-page/PlotTypeSelector.js +89 -44
- package/dist/cjs/components/heatmap/Heatmap.js +65 -65
- package/dist/cjs/components/heatmap/HeatmapControls.js +6 -3
- package/dist/cjs/components/icons/DotPlotIcon.js +64 -0
- package/dist/cjs/components/icons/HeatmapIcon.js +45 -0
- package/dist/cjs/components/icons/MatrixPlotIcon.1.js +57 -0
- package/dist/cjs/components/icons/MatrixPlotIcon.js +59 -0
- package/dist/cjs/components/icons/ScatterplotIcon.1.js +164 -0
- package/dist/cjs/components/icons/ScatterplotIcon.js +144 -0
- package/dist/cjs/components/icons/ViolinPlotIcon.js +42 -0
- package/dist/cjs/components/matrixplot/Matrixplot.js +65 -66
- package/dist/cjs/components/matrixplot/MatrixplotControls.js +8 -5
- package/dist/cjs/components/obs-list/ObsItem.js +258 -210
- package/dist/cjs/components/obs-list/ObsList.js +161 -133
- package/dist/cjs/components/obs-list/ObsToolbar.js +2 -3
- package/dist/cjs/components/obsm-list/ObsmList.js +53 -38
- package/dist/cjs/components/offcanvas/index.js +61 -31
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +132 -76
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +122 -74
- package/dist/cjs/components/scatterplot/Scatterplot.js +127 -99
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +45 -31
- package/dist/cjs/components/scatterplot/SpatialControls.js +140 -113
- package/dist/cjs/components/scatterplot/Toolbox.js +41 -30
- package/dist/cjs/components/search-bar/SearchBar.js +168 -121
- package/dist/cjs/components/search-bar/SearchInfo.js +76 -50
- package/dist/cjs/components/search-bar/SearchResults.js +93 -71
- package/dist/cjs/components/toolbar/Toolbar.js +46 -37
- package/dist/cjs/components/var-list/VarItem.js +115 -88
- package/dist/cjs/components/var-list/VarList.js +85 -69
- package/dist/cjs/components/var-list/VarListToolbar.js +59 -54
- package/dist/cjs/components/var-list/VarSet.js +126 -108
- package/dist/cjs/components/violin/Violin.js +109 -107
- package/dist/cjs/components/violin/ViolinControls.js +8 -5
- package/dist/cjs/constants/colorscales.js +19 -19
- package/dist/cjs/constants/constants.js +47 -47
- package/dist/cjs/context/DatasetContext.js +24 -16
- package/dist/cjs/context/FilterContext.js +11 -9
- package/dist/cjs/context/SettingsContext.js +255 -89
- package/dist/cjs/context/ZarrDataContext.js +6 -5
- package/dist/cjs/helpers/color-helper.js +2 -2
- package/dist/cjs/helpers/zarr-helper.js +3 -3
- package/dist/cjs/utils/Filter.js +16 -11
- package/dist/cjs/utils/Histogram.js +35 -33
- package/dist/cjs/utils/ImageViewer.js +11 -8
- package/dist/cjs/utils/Legend.js +37 -30
- package/dist/cjs/utils/LoadingIndicators.js +15 -13
- package/dist/cjs/utils/Resolver.js +213 -0
- package/dist/cjs/utils/Skeleton.js +10 -10
- package/dist/cjs/utils/StyledTooltip.js +44 -0
- package/dist/cjs/utils/VirtualizedList.js +34 -27
- package/dist/cjs/utils/errors.js +15 -15
- package/dist/cjs/utils/requests.js +21 -9
- package/dist/cjs/utils/search.js +4 -4
- package/dist/cjs/utils/string.js +6 -6
- package/dist/cjs/utils/zarrData.js +20 -21
- package/dist/css/cherita.css +64 -42
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/controls/Controls.js +43 -35
- package/dist/esm/components/dotplot/Dotplot.js +77 -78
- package/dist/esm/components/dotplot/DotplotControls.js +106 -85
- package/dist/esm/components/full-page/FullPage.js +120 -93
- package/dist/esm/components/full-page/PlotAlert.js +39 -0
- package/dist/esm/components/full-page/PlotTypeSelector.js +90 -45
- package/dist/esm/components/heatmap/Heatmap.js +75 -74
- package/dist/esm/components/heatmap/HeatmapControls.js +8 -4
- package/dist/esm/components/icons/DotPlotIcon.js +58 -0
- package/dist/esm/components/icons/HeatmapIcon.js +39 -0
- package/dist/esm/components/icons/MatrixPlotIcon.1.js +51 -0
- package/dist/esm/components/icons/MatrixPlotIcon.js +53 -0
- package/dist/esm/components/icons/ScatterplotIcon.1.js +158 -0
- package/dist/esm/components/icons/ScatterplotIcon.js +138 -0
- package/dist/esm/components/icons/ViolinPlotIcon.js +36 -0
- package/dist/esm/components/matrixplot/Matrixplot.js +75 -75
- package/dist/esm/components/matrixplot/MatrixplotControls.js +10 -6
- package/dist/esm/components/obs-list/ObsItem.js +273 -222
- package/dist/esm/components/obs-list/ObsList.js +176 -147
- package/dist/esm/components/obs-list/ObsToolbar.js +3 -3
- package/dist/esm/components/obsm-list/ObsmList.js +60 -44
- package/dist/esm/components/offcanvas/index.js +67 -37
- package/dist/esm/components/pseudospatial/Pseudospatial.js +145 -88
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +127 -78
- package/dist/esm/components/scatterplot/Scatterplot.js +148 -119
- package/dist/esm/components/scatterplot/ScatterplotControls.js +50 -35
- package/dist/esm/components/scatterplot/SpatialControls.js +153 -125
- package/dist/esm/components/scatterplot/Toolbox.js +44 -32
- package/dist/esm/components/search-bar/SearchBar.js +180 -132
- package/dist/esm/components/search-bar/SearchInfo.js +86 -59
- package/dist/esm/components/search-bar/SearchResults.js +100 -77
- package/dist/esm/components/toolbar/Toolbar.js +49 -39
- package/dist/esm/components/var-list/VarItem.js +126 -98
- package/dist/esm/components/var-list/VarList.js +99 -82
- package/dist/esm/components/var-list/VarListToolbar.js +64 -58
- package/dist/esm/components/var-list/VarSet.js +134 -115
- package/dist/esm/components/violin/Violin.js +121 -118
- package/dist/esm/components/violin/ViolinControls.js +10 -6
- package/dist/esm/constants/colorscales.js +19 -19
- package/dist/esm/constants/constants.js +47 -47
- package/dist/esm/context/DatasetContext.js +31 -22
- package/dist/esm/context/FilterContext.js +11 -8
- package/dist/esm/context/SettingsContext.js +257 -90
- package/dist/esm/context/ZarrDataContext.js +8 -6
- package/dist/esm/helpers/color-helper.js +5 -5
- package/dist/esm/helpers/map-helper.js +2 -2
- package/dist/esm/helpers/zarr-helper.js +6 -6
- package/dist/esm/index.js +22 -22
- package/dist/esm/utils/Filter.js +22 -17
- package/dist/esm/utils/Histogram.js +39 -37
- package/dist/esm/utils/ImageViewer.js +12 -8
- package/dist/esm/utils/Legend.js +44 -36
- package/dist/esm/utils/LoadingIndicators.js +16 -13
- package/dist/esm/utils/Resolver.js +201 -0
- package/dist/esm/utils/Skeleton.js +11 -10
- package/dist/esm/utils/StyledTooltip.js +38 -0
- package/dist/esm/utils/VirtualizedList.js +35 -27
- package/dist/esm/utils/errors.js +15 -15
- package/dist/esm/utils/requests.js +24 -12
- package/dist/esm/utils/search.js +7 -7
- package/dist/esm/utils/string.js +7 -7
- package/dist/esm/utils/zarrData.js +27 -28
- package/package.json +21 -9
- package/scss/cherita-bootstrap.scss +2 -2
- package/scss/cherita.scss +43 -17
- package/scss/components/accordions.scss +4 -1
- package/scss/components/layouts.scss +15 -33
- package/scss/components/lists.scss +8 -4
- package/scss/components/plotly.scss +38 -26
- package/scss/components/plots.scss +14 -1
- package/dist/assets/images/plots/dotplot.svg +0 -152
- package/dist/assets/images/plots/heatmap.svg +0 -193
- package/dist/assets/images/plots/matrixplot.svg +0 -275
- package/dist/assets/images/plots/scatterplot.svg +0 -198
- package/dist/assets/images/plots/violin.svg +0 -50
|
@@ -7,12 +7,13 @@ exports.SettingsDispatchContext = exports.SettingsContext = void 0;
|
|
|
7
7
|
exports.SettingsProvider = SettingsProvider;
|
|
8
8
|
exports.useSettings = useSettings;
|
|
9
9
|
exports.useSettingsDispatch = useSettingsDispatch;
|
|
10
|
-
var _react =
|
|
10
|
+
var _react = require("react");
|
|
11
11
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
12
12
|
var _constants = require("../constants/constants");
|
|
13
|
+
var _Resolver = require("../utils/Resolver");
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
15
|
const _excluded = ["buster", "timestamp"];
|
|
14
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
16
17
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
18
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
18
19
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
@@ -22,29 +23,29 @@ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i
|
|
|
22
23
|
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
23
24
|
const SettingsContext = exports.SettingsContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
24
25
|
const SettingsDispatchContext = exports.SettingsDispatchContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
25
|
-
|
|
26
|
-
// @TODO: consider splitting constant values and dataset-resolved values
|
|
27
|
-
// e.g. store only obs name in selectedObs, and resolved obs data (counts, values, etc.) elsewhere
|
|
28
|
-
// e.g. store only var name in selectedVar, and resolved var data (index, matrix_index) elsewhere
|
|
29
|
-
// would simplify passing and validating defaultSettings and localSettings
|
|
30
26
|
const initialSettings = {
|
|
31
27
|
selectedObs: null,
|
|
28
|
+
// { name: "obs_name", omit: ["obs_item"], bins: {} }
|
|
32
29
|
selectedVar: null,
|
|
30
|
+
// { name: "var_name", isSet: false } or { name: "var_set_name", isSet: true, vars: [{ name: "var1" }, { name: "var2" }] }
|
|
33
31
|
selectedObsm: null,
|
|
34
|
-
|
|
32
|
+
// "obsm_name" (e.g. "X_umap")
|
|
35
33
|
selectedMultiVar: [],
|
|
36
|
-
|
|
34
|
+
// [{ name: "var_name", isSet: false }, { name: "var_set_name", isSet: true, vars: [{ name: "var1" }, { name: "var2" }] }]
|
|
37
35
|
labelObs: [],
|
|
36
|
+
// [ "obs_name1", "obs_name2" ]
|
|
38
37
|
vars: [],
|
|
38
|
+
// [{ name: "var_name", isSet: false }, { name: "var_set_name", isSet: true, vars: [{ name: "var1" }, { name: "var2" }] }]
|
|
39
|
+
colorEncoding: null,
|
|
39
40
|
sliceBy: {
|
|
40
41
|
obs: false,
|
|
41
42
|
polygons: false
|
|
42
43
|
},
|
|
43
44
|
polygons: {},
|
|
44
45
|
controls: {
|
|
45
|
-
colorScale:
|
|
46
|
-
valueRange: [0, 1],
|
|
46
|
+
colorScale: 'Viridis',
|
|
47
47
|
range: [0, 1],
|
|
48
|
+
// normalized
|
|
48
49
|
colorAxis: {
|
|
49
50
|
dmin: 0,
|
|
50
51
|
dmax: 1,
|
|
@@ -72,12 +73,26 @@ const initialSettings = {
|
|
|
72
73
|
pseudospatial: {
|
|
73
74
|
maskSet: null,
|
|
74
75
|
maskValues: null,
|
|
75
|
-
categoricalMode: _constants.PSEUDOSPATIAL_CATEGORICAL_MODES.ACROSS.value
|
|
76
|
+
categoricalMode: _constants.PSEUDOSPATIAL_CATEGORICAL_MODES.ACROSS.value,
|
|
77
|
+
refImg: {
|
|
78
|
+
visible: false,
|
|
79
|
+
opacity: 1
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
// dataset resolved values
|
|
83
|
+
data: {
|
|
84
|
+
// store resolved obs and vars from selectedObs, selectedVar, selectedMultiVar, vars, labelObs
|
|
85
|
+
// keys to be removed when not in any selection
|
|
86
|
+
obs: {},
|
|
87
|
+
vars: {},
|
|
88
|
+
// store maskSets and values
|
|
89
|
+
pseudospatial: {}
|
|
76
90
|
}
|
|
77
91
|
};
|
|
78
92
|
|
|
79
93
|
// validate on initialization and reducer
|
|
80
94
|
const validateSettings = settings => {
|
|
95
|
+
var _settings$selectedObs;
|
|
81
96
|
// make sure selectedVar is in vars
|
|
82
97
|
if (settings.selectedVar) {
|
|
83
98
|
const inVars = _lodash.default.some(settings.vars, v => v.name === settings.selectedVar.name);
|
|
@@ -88,7 +103,7 @@ const validateSettings = settings => {
|
|
|
88
103
|
|
|
89
104
|
// make sure selectedMultiVar are in vars
|
|
90
105
|
if (settings.selectedMultiVar) {
|
|
91
|
-
const notInVars = _lodash.default.differenceBy(settings.selectedMultiVar, settings.vars,
|
|
106
|
+
const notInVars = _lodash.default.differenceBy(settings.selectedMultiVar, settings.vars, 'name');
|
|
92
107
|
if (notInVars.length) {
|
|
93
108
|
settings.vars = [...settings.vars, ...notInVars];
|
|
94
109
|
}
|
|
@@ -110,6 +125,21 @@ const validateSettings = settings => {
|
|
|
110
125
|
settings.colorEncoding = null;
|
|
111
126
|
}
|
|
112
127
|
}
|
|
128
|
+
|
|
129
|
+
// pseudospatial
|
|
130
|
+
if (!settings.pseudospatial.maskSet && settings.pseudospatial.maskValues) {
|
|
131
|
+
settings.pseudospatial.maskValues = null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Keep only obs in use (selectedObs, labelObs) in data.obs
|
|
135
|
+
const obsNames = _lodash.default.uniq(_lodash.default.compact([(_settings$selectedObs = settings.selectedObs) === null || _settings$selectedObs === void 0 ? void 0 : _settings$selectedObs.name, ...settings.labelObs]));
|
|
136
|
+
const intersectionObs = _lodash.default.intersection(_lodash.default.keys(settings.data.obs), obsNames);
|
|
137
|
+
settings.data.obs = _lodash.default.pick(settings.data.obs, intersectionObs);
|
|
138
|
+
|
|
139
|
+
// Keep only vars in use (settings.vars) in data.vars
|
|
140
|
+
const varNames = _lodash.default.flatMap(settings.vars, v => v.isSet ? _lodash.default.map(v.vars, vv => vv.name) : v.name);
|
|
141
|
+
const intersectionVars = _lodash.default.intersection(_lodash.default.keys(settings.data.vars), varNames);
|
|
142
|
+
settings.data.vars = _lodash.default.pick(settings.data.vars, intersectionVars);
|
|
113
143
|
return settings;
|
|
114
144
|
};
|
|
115
145
|
const initializer = _ref => {
|
|
@@ -118,9 +148,12 @@ const initializer = _ref => {
|
|
|
118
148
|
defaultSettings,
|
|
119
149
|
localSettings
|
|
120
150
|
} = _ref;
|
|
121
|
-
const mergedSettings = canOverrideSettings ? _lodash.default.
|
|
151
|
+
const mergedSettings = canOverrideSettings ? _lodash.default.defaultsDeep({}, localSettings, defaultSettings, initialSettings) : _lodash.default.defaultsDeep({}, defaultSettings, initialSettings);
|
|
122
152
|
return validateSettings(mergedSettings);
|
|
123
153
|
};
|
|
154
|
+
const validate = settings => {
|
|
155
|
+
return settings ? validateSettings(settings) : null;
|
|
156
|
+
};
|
|
124
157
|
function SettingsProvider(_ref2) {
|
|
125
158
|
let {
|
|
126
159
|
dataset_url,
|
|
@@ -140,35 +173,50 @@ function SettingsProvider(_ref2) {
|
|
|
140
173
|
|
|
141
174
|
// If the buster is not set or does not match the current package version,
|
|
142
175
|
// reset localSettings to avoid stale data
|
|
143
|
-
if (!buster || buster !== "1.4.
|
|
176
|
+
if (!buster || buster !== "1.4.2-dev.2025-10-29.81a6b906") {
|
|
144
177
|
localSettings = {};
|
|
145
178
|
}
|
|
146
|
-
const
|
|
179
|
+
const initSettings = (0, _react.useRef)(initializer({
|
|
147
180
|
canOverrideSettings,
|
|
148
181
|
defaultSettings,
|
|
149
182
|
localSettings
|
|
150
|
-
}
|
|
183
|
+
}));
|
|
184
|
+
const resolvedSettings = (0, _Resolver.useResolver)(initSettings.current);
|
|
185
|
+
const [settings, dispatch] = (0, _react.useReducer)(settingsReducer, resolvedSettings, validate);
|
|
151
186
|
(0, _react.useEffect)(() => {
|
|
152
|
-
|
|
187
|
+
// If resolvedSettings is null, do not update settings
|
|
188
|
+
if (resolvedSettings) {
|
|
189
|
+
const validatedSettings = validateSettings(resolvedSettings);
|
|
190
|
+
console.log('Initial settings:', validatedSettings);
|
|
191
|
+
dispatch({
|
|
192
|
+
type: 'init',
|
|
193
|
+
settings: validatedSettings
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}, [resolvedSettings]);
|
|
197
|
+
(0, _react.useEffect)(() => {
|
|
198
|
+
if (canOverrideSettings && settings) {
|
|
153
199
|
try {
|
|
154
200
|
localStorage.setItem(DATASET_STORAGE_KEY, JSON.stringify(_objectSpread({
|
|
155
|
-
buster: "1.4.
|
|
201
|
+
buster: "1.4.2-dev.2025-10-29.81a6b906" || '0.0.0',
|
|
156
202
|
timestamp: Date.now()
|
|
157
|
-
}, settings)));
|
|
203
|
+
}, _lodash.default.omit(settings, 'data'))));
|
|
158
204
|
} catch (err) {
|
|
159
|
-
if (err.code === 22 || err.code === 1014 || err.name ===
|
|
160
|
-
console.err(
|
|
205
|
+
if (err.code === 22 || err.code === 1014 || err.name === 'QuotaExceededError' || err.name === 'NS_ERROR_DOM_QUOTA_REACHED') {
|
|
206
|
+
console.err('Browser storage quota exceeded');
|
|
161
207
|
} else {
|
|
162
208
|
console.err(err);
|
|
163
209
|
}
|
|
164
210
|
}
|
|
165
211
|
}
|
|
166
212
|
}, [DATASET_STORAGE_KEY, canOverrideSettings, settings]);
|
|
167
|
-
return /*#__PURE__*/
|
|
168
|
-
value: settings
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
213
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(SettingsContext.Provider, {
|
|
214
|
+
value: settings,
|
|
215
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(SettingsDispatchContext.Provider, {
|
|
216
|
+
value: dispatch,
|
|
217
|
+
children: settings && children
|
|
218
|
+
})
|
|
219
|
+
});
|
|
172
220
|
}
|
|
173
221
|
function useSettings() {
|
|
174
222
|
return (0, _react.useContext)(SettingsContext);
|
|
@@ -176,13 +224,70 @@ function useSettings() {
|
|
|
176
224
|
function useSettingsDispatch() {
|
|
177
225
|
return (0, _react.useContext)(SettingsDispatchContext);
|
|
178
226
|
}
|
|
227
|
+
const OBS_DATA_KEYS = ['name', 'type',
|
|
228
|
+
// categorical and numerical
|
|
229
|
+
'codes', 'codesMap', 'values', 'n_values', 'value_counts',
|
|
230
|
+
// numerical
|
|
231
|
+
'bins', 'min', 'max', 'mean', 'median', 'n_unique'];
|
|
232
|
+
const splitObs = obs => {
|
|
233
|
+
if (!obs) return {
|
|
234
|
+
settings: null,
|
|
235
|
+
data: {}
|
|
236
|
+
};
|
|
237
|
+
const settings = _lodash.default.pick(obs, ['name', 'omit', 'bins']);
|
|
238
|
+
const data = obs ? {
|
|
239
|
+
[obs.name]: _lodash.default.pick(obs, OBS_DATA_KEYS)
|
|
240
|
+
} : {};
|
|
241
|
+
return {
|
|
242
|
+
settings,
|
|
243
|
+
data
|
|
244
|
+
};
|
|
245
|
+
};
|
|
246
|
+
const splitVar = v => {
|
|
247
|
+
if (!v) return {
|
|
248
|
+
settings: null,
|
|
249
|
+
data: {}
|
|
250
|
+
};
|
|
251
|
+
let settings, data;
|
|
252
|
+
if (v.isSet) {
|
|
253
|
+
settings = _objectSpread(_objectSpread({}, _lodash.default.pick(v, ['name', 'isSet'])), {}, {
|
|
254
|
+
vars: _lodash.default.map(v.vars, vv => ({
|
|
255
|
+
name: vv.name
|
|
256
|
+
}))
|
|
257
|
+
});
|
|
258
|
+
data = _lodash.default.fromPairs(_lodash.default.map(v.vars, vv => [vv.name, _lodash.default.pick(vv, ['name', 'index', 'matrix_index'])]));
|
|
259
|
+
} else {
|
|
260
|
+
settings = _lodash.default.pick(v, ['name', 'isSet']);
|
|
261
|
+
data = {
|
|
262
|
+
[v.name]: _lodash.default.pick(v, ['name', 'index', 'matrix_index'])
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
settings,
|
|
267
|
+
data
|
|
268
|
+
};
|
|
269
|
+
};
|
|
179
270
|
function settingsReducer(settings, action) {
|
|
180
271
|
switch (action.type) {
|
|
181
|
-
case
|
|
272
|
+
case 'init':
|
|
273
|
+
{
|
|
274
|
+
return action.settings;
|
|
275
|
+
}
|
|
276
|
+
case 'select.obs':
|
|
182
277
|
{
|
|
183
278
|
var _action$obs;
|
|
184
|
-
|
|
185
|
-
|
|
279
|
+
const {
|
|
280
|
+
settings: obsSettings,
|
|
281
|
+
data: obsData
|
|
282
|
+
} = splitObs(action.obs);
|
|
283
|
+
return _objectSpread(_objectSpread(_objectSpread({}, settings), action.obs ? {
|
|
284
|
+
selectedObs: obsSettings,
|
|
285
|
+
data: _objectSpread(_objectSpread({}, settings.data), {}, {
|
|
286
|
+
obs: _objectSpread(_objectSpread({}, settings.data.obs), obsData)
|
|
287
|
+
})
|
|
288
|
+
} : {
|
|
289
|
+
selectedObs: null
|
|
290
|
+
}), {}, {
|
|
186
291
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
187
292
|
range: ((_action$obs = action.obs) === null || _action$obs === void 0 ? void 0 : _action$obs.type) === _constants.OBS_TYPES.CATEGORICAL ? [0, 1] : settings.controls.range
|
|
188
293
|
}),
|
|
@@ -192,36 +297,50 @@ function settingsReducer(settings, action) {
|
|
|
192
297
|
})
|
|
193
298
|
});
|
|
194
299
|
}
|
|
195
|
-
case
|
|
300
|
+
case 'select.obsm':
|
|
196
301
|
{
|
|
197
302
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
198
303
|
selectedObsm: action.obsm
|
|
199
304
|
});
|
|
200
305
|
}
|
|
201
|
-
case
|
|
306
|
+
case 'select.var':
|
|
202
307
|
{
|
|
308
|
+
const {
|
|
309
|
+
settings: varSettings,
|
|
310
|
+
data: varData
|
|
311
|
+
} = splitVar(action.var);
|
|
203
312
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
204
|
-
selectedVar:
|
|
313
|
+
selectedVar: varSettings,
|
|
314
|
+
data: _objectSpread(_objectSpread({}, settings.data), {}, {
|
|
315
|
+
vars: _objectSpread(_objectSpread({}, settings.data.vars), varData)
|
|
316
|
+
})
|
|
205
317
|
}));
|
|
206
318
|
}
|
|
207
|
-
case
|
|
319
|
+
case 'select.multivar':
|
|
208
320
|
{
|
|
209
321
|
const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
|
|
210
322
|
if (inMultiVar) {
|
|
211
323
|
return validateSettings(_objectSpread({}, settings));
|
|
212
324
|
} else {
|
|
325
|
+
const {
|
|
326
|
+
settings: varSettings,
|
|
327
|
+
data: varData
|
|
328
|
+
} = splitVar(action.var);
|
|
213
329
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
214
|
-
selectedMultiVar: [...settings.selectedMultiVar,
|
|
330
|
+
selectedMultiVar: [...settings.selectedMultiVar, varSettings],
|
|
331
|
+
data: _objectSpread(_objectSpread({}, settings.data), {}, {
|
|
332
|
+
vars: _objectSpread(_objectSpread({}, settings.data.vars), varData)
|
|
333
|
+
})
|
|
215
334
|
}));
|
|
216
335
|
}
|
|
217
336
|
}
|
|
218
|
-
case
|
|
337
|
+
case 'deselect.multivar':
|
|
219
338
|
{
|
|
220
339
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
221
340
|
selectedMultiVar: settings.selectedMultiVar.filter(v => v !== action.var.name)
|
|
222
341
|
}));
|
|
223
342
|
}
|
|
224
|
-
case
|
|
343
|
+
case 'toggle.multivar':
|
|
225
344
|
{
|
|
226
345
|
const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
|
|
227
346
|
if (inMultiVar) {
|
|
@@ -229,18 +348,25 @@ function settingsReducer(settings, action) {
|
|
|
229
348
|
selectedMultiVar: settings.selectedMultiVar.filter(v => v.name !== action.var.name)
|
|
230
349
|
}));
|
|
231
350
|
} else {
|
|
351
|
+
const {
|
|
352
|
+
settings: varSettings,
|
|
353
|
+
data: varData
|
|
354
|
+
} = splitVar(action.var);
|
|
232
355
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
233
|
-
selectedMultiVar: [...settings.selectedMultiVar,
|
|
356
|
+
selectedMultiVar: [...settings.selectedMultiVar, varSettings],
|
|
357
|
+
data: _objectSpread(_objectSpread({}, settings.data), {}, {
|
|
358
|
+
vars: _objectSpread(_objectSpread({}, settings.data.vars), varData)
|
|
359
|
+
})
|
|
234
360
|
}));
|
|
235
361
|
}
|
|
236
362
|
}
|
|
237
|
-
case
|
|
363
|
+
case 'set.colorEncoding':
|
|
238
364
|
{
|
|
239
365
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
240
366
|
colorEncoding: action.value
|
|
241
367
|
}));
|
|
242
368
|
}
|
|
243
|
-
case
|
|
369
|
+
case 'reset.vars':
|
|
244
370
|
{
|
|
245
371
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
246
372
|
vars: [],
|
|
@@ -248,29 +374,36 @@ function settingsReducer(settings, action) {
|
|
|
248
374
|
selectedMultiVar: []
|
|
249
375
|
}));
|
|
250
376
|
}
|
|
251
|
-
case
|
|
377
|
+
case 'reset.multiVar':
|
|
252
378
|
{
|
|
253
379
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
254
380
|
selectedMultiVar: []
|
|
255
381
|
}));
|
|
256
382
|
}
|
|
257
|
-
case
|
|
383
|
+
case 'reset.var':
|
|
258
384
|
{
|
|
259
385
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
260
386
|
selectedVar: null
|
|
261
387
|
}));
|
|
262
388
|
}
|
|
263
|
-
case
|
|
389
|
+
case 'add.var':
|
|
264
390
|
{
|
|
265
391
|
if (settings.vars.find(v => v.name === action.var.name)) {
|
|
266
392
|
return settings;
|
|
267
393
|
} else {
|
|
394
|
+
const {
|
|
395
|
+
settings: varSettings,
|
|
396
|
+
data: varData
|
|
397
|
+
} = splitVar(action.var);
|
|
268
398
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
269
|
-
vars: [...settings.vars,
|
|
399
|
+
vars: [...settings.vars, varSettings],
|
|
400
|
+
data: _objectSpread(_objectSpread({}, settings.data), {}, {
|
|
401
|
+
vars: _objectSpread(_objectSpread({}, settings.data.vars), varData)
|
|
402
|
+
})
|
|
270
403
|
});
|
|
271
404
|
}
|
|
272
405
|
}
|
|
273
|
-
case
|
|
406
|
+
case 'remove.var':
|
|
274
407
|
{
|
|
275
408
|
var _settings$selectedVar;
|
|
276
409
|
const selectedVar = ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name) === action.var.name ? null : settings.selectedVar;
|
|
@@ -281,7 +414,7 @@ function settingsReducer(settings, action) {
|
|
|
281
414
|
selectedMultiVar: selectedMultiVar
|
|
282
415
|
}));
|
|
283
416
|
}
|
|
284
|
-
case
|
|
417
|
+
case 'add.varSet.var':
|
|
285
418
|
{
|
|
286
419
|
const varSet = settings.vars.find(s => s.isSet && s.name === action.varSet.name);
|
|
287
420
|
if (!varSet) {
|
|
@@ -291,7 +424,11 @@ function settingsReducer(settings, action) {
|
|
|
291
424
|
return settings;
|
|
292
425
|
} else {
|
|
293
426
|
var _settings$selectedVar2;
|
|
294
|
-
const
|
|
427
|
+
const {
|
|
428
|
+
settings: varSettings,
|
|
429
|
+
data: varData
|
|
430
|
+
} = splitVar(action.var);
|
|
431
|
+
const varSetVars = [...varSet.vars, varSettings];
|
|
295
432
|
const vars = settings.vars.map(v => {
|
|
296
433
|
if (v.name === varSet.name) {
|
|
297
434
|
return _objectSpread(_objectSpread({}, v), {}, {
|
|
@@ -316,11 +453,14 @@ function settingsReducer(settings, action) {
|
|
|
316
453
|
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
317
454
|
vars: vars,
|
|
318
455
|
selectedVar: selectedVar,
|
|
319
|
-
selectedMultiVar: selectedMultiVar
|
|
456
|
+
selectedMultiVar: selectedMultiVar,
|
|
457
|
+
data: _objectSpread(_objectSpread({}, settings.data), {}, {
|
|
458
|
+
vars: _objectSpread(_objectSpread({}, settings.data.vars), varData)
|
|
459
|
+
})
|
|
320
460
|
}));
|
|
321
461
|
}
|
|
322
462
|
}
|
|
323
|
-
case
|
|
463
|
+
case 'remove.varSet.var':
|
|
324
464
|
{
|
|
325
465
|
const varSet = settings.vars.find(s => s.isSet && s.name === action.varSet.name);
|
|
326
466
|
if (!varSet) {
|
|
@@ -372,7 +512,7 @@ function settingsReducer(settings, action) {
|
|
|
372
512
|
}
|
|
373
513
|
}
|
|
374
514
|
}
|
|
375
|
-
case
|
|
515
|
+
case 'set.controls.colorScale':
|
|
376
516
|
{
|
|
377
517
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
378
518
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -380,15 +520,7 @@ function settingsReducer(settings, action) {
|
|
|
380
520
|
})
|
|
381
521
|
});
|
|
382
522
|
}
|
|
383
|
-
case
|
|
384
|
-
{
|
|
385
|
-
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
386
|
-
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
387
|
-
valueRange: action.valueRange
|
|
388
|
-
})
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
case "set.controls.range":
|
|
523
|
+
case 'set.controls.range':
|
|
392
524
|
{
|
|
393
525
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
394
526
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -396,7 +528,7 @@ function settingsReducer(settings, action) {
|
|
|
396
528
|
})
|
|
397
529
|
});
|
|
398
530
|
}
|
|
399
|
-
case
|
|
531
|
+
case 'set.controls.colorAxis':
|
|
400
532
|
{
|
|
401
533
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
402
534
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -404,7 +536,7 @@ function settingsReducer(settings, action) {
|
|
|
404
536
|
})
|
|
405
537
|
});
|
|
406
538
|
}
|
|
407
|
-
case
|
|
539
|
+
case 'set.controls.colorAxis.crange':
|
|
408
540
|
{
|
|
409
541
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
410
542
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -415,7 +547,7 @@ function settingsReducer(settings, action) {
|
|
|
415
547
|
})
|
|
416
548
|
});
|
|
417
549
|
}
|
|
418
|
-
case
|
|
550
|
+
case 'set.controls.colorAxis.cmin':
|
|
419
551
|
{
|
|
420
552
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
421
553
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -425,7 +557,7 @@ function settingsReducer(settings, action) {
|
|
|
425
557
|
})
|
|
426
558
|
});
|
|
427
559
|
}
|
|
428
|
-
case
|
|
560
|
+
case 'set.controls.colorAxis.cmax':
|
|
429
561
|
{
|
|
430
562
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
431
563
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -435,7 +567,7 @@ function settingsReducer(settings, action) {
|
|
|
435
567
|
})
|
|
436
568
|
});
|
|
437
569
|
}
|
|
438
|
-
case
|
|
570
|
+
case 'set.controls.scale':
|
|
439
571
|
{
|
|
440
572
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
441
573
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -445,7 +577,7 @@ function settingsReducer(settings, action) {
|
|
|
445
577
|
})
|
|
446
578
|
});
|
|
447
579
|
}
|
|
448
|
-
case
|
|
580
|
+
case 'set.controls.meanOnlyExpressed':
|
|
449
581
|
{
|
|
450
582
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
451
583
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -453,7 +585,7 @@ function settingsReducer(settings, action) {
|
|
|
453
585
|
})
|
|
454
586
|
});
|
|
455
587
|
}
|
|
456
|
-
case
|
|
588
|
+
case 'set.controls.expressionCutoff':
|
|
457
589
|
{
|
|
458
590
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
459
591
|
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
@@ -461,24 +593,31 @@ function settingsReducer(settings, action) {
|
|
|
461
593
|
})
|
|
462
594
|
});
|
|
463
595
|
}
|
|
464
|
-
case
|
|
596
|
+
case 'toggle.slice.obs':
|
|
465
597
|
{
|
|
466
|
-
if (
|
|
598
|
+
if (settings.selectedObs && settings.selectedObs.name === action.obs.name) {
|
|
467
599
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
468
600
|
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
469
601
|
obs: !settings.sliceBy.obs
|
|
470
602
|
})
|
|
471
603
|
});
|
|
472
604
|
} else {
|
|
605
|
+
const {
|
|
606
|
+
settings: obsSettings,
|
|
607
|
+
data: obsData
|
|
608
|
+
} = splitObs(action.obs);
|
|
473
609
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
474
|
-
selectedObs:
|
|
610
|
+
selectedObs: obsSettings,
|
|
611
|
+
data: _objectSpread(_objectSpread({}, settings.data), {}, {
|
|
612
|
+
obs: _objectSpread(_objectSpread({}, settings.data.obs), obsData)
|
|
613
|
+
}),
|
|
475
614
|
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
476
615
|
obs: true
|
|
477
616
|
})
|
|
478
617
|
});
|
|
479
618
|
}
|
|
480
619
|
}
|
|
481
|
-
case
|
|
620
|
+
case 'toggle.slice.polygons':
|
|
482
621
|
{
|
|
483
622
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
484
623
|
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
@@ -486,7 +625,7 @@ function settingsReducer(settings, action) {
|
|
|
486
625
|
})
|
|
487
626
|
});
|
|
488
627
|
}
|
|
489
|
-
case
|
|
628
|
+
case 'disable.slice.polygons':
|
|
490
629
|
{
|
|
491
630
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
492
631
|
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
@@ -494,29 +633,36 @@ function settingsReducer(settings, action) {
|
|
|
494
633
|
})
|
|
495
634
|
});
|
|
496
635
|
}
|
|
497
|
-
case
|
|
636
|
+
case 'add.label.obs':
|
|
498
637
|
{
|
|
499
|
-
if (
|
|
638
|
+
if (_lodash.default.includes(settings.labelObs, action.obs.name)) {
|
|
500
639
|
return settings;
|
|
501
640
|
} else {
|
|
641
|
+
const {
|
|
642
|
+
settings: obsSettings,
|
|
643
|
+
data: obsData
|
|
644
|
+
} = splitObs(action.obs);
|
|
502
645
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
503
|
-
labelObs: [...settings.labelObs,
|
|
646
|
+
labelObs: [...settings.labelObs, obsSettings.name],
|
|
647
|
+
data: _objectSpread(_objectSpread({}, settings.data), {}, {
|
|
648
|
+
obs: _objectSpread(_objectSpread({}, settings.data.obs), obsData)
|
|
649
|
+
})
|
|
504
650
|
});
|
|
505
651
|
}
|
|
506
652
|
}
|
|
507
|
-
case
|
|
653
|
+
case 'remove.label.obs':
|
|
508
654
|
{
|
|
509
|
-
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
510
|
-
labelObs: settings.labelObs.filter(a => a
|
|
511
|
-
});
|
|
655
|
+
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
656
|
+
labelObs: settings.labelObs.filter(a => a !== action.obsName)
|
|
657
|
+
}));
|
|
512
658
|
}
|
|
513
|
-
case
|
|
659
|
+
case 'reset.label.obs':
|
|
514
660
|
{
|
|
515
|
-
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
661
|
+
return validateSettings(_objectSpread(_objectSpread({}, settings), {}, {
|
|
516
662
|
labelObs: []
|
|
517
|
-
});
|
|
663
|
+
}));
|
|
518
664
|
}
|
|
519
|
-
case
|
|
665
|
+
case 'set.varSort':
|
|
520
666
|
{
|
|
521
667
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
522
668
|
varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
|
|
@@ -527,7 +673,7 @@ function settingsReducer(settings, action) {
|
|
|
527
673
|
})
|
|
528
674
|
});
|
|
529
675
|
}
|
|
530
|
-
case
|
|
676
|
+
case 'set.varSort.sort':
|
|
531
677
|
{
|
|
532
678
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
533
679
|
varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
|
|
@@ -537,7 +683,7 @@ function settingsReducer(settings, action) {
|
|
|
537
683
|
})
|
|
538
684
|
});
|
|
539
685
|
}
|
|
540
|
-
case
|
|
686
|
+
case 'set.varSort.sortOrder':
|
|
541
687
|
{
|
|
542
688
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
543
689
|
varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
|
|
@@ -547,7 +693,7 @@ function settingsReducer(settings, action) {
|
|
|
547
693
|
})
|
|
548
694
|
});
|
|
549
695
|
}
|
|
550
|
-
case
|
|
696
|
+
case 'set.polygons':
|
|
551
697
|
{
|
|
552
698
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
553
699
|
polygons: _objectSpread(_objectSpread({}, settings.polygons), {}, {
|
|
@@ -555,7 +701,7 @@ function settingsReducer(settings, action) {
|
|
|
555
701
|
})
|
|
556
702
|
});
|
|
557
703
|
}
|
|
558
|
-
case
|
|
704
|
+
case 'set.pseudospatial.maskSet':
|
|
559
705
|
{
|
|
560
706
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
561
707
|
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
@@ -563,7 +709,7 @@ function settingsReducer(settings, action) {
|
|
|
563
709
|
})
|
|
564
710
|
});
|
|
565
711
|
}
|
|
566
|
-
case
|
|
712
|
+
case 'set.pseudospatial.maskValues':
|
|
567
713
|
{
|
|
568
714
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
569
715
|
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
@@ -571,7 +717,7 @@ function settingsReducer(settings, action) {
|
|
|
571
717
|
})
|
|
572
718
|
});
|
|
573
719
|
}
|
|
574
|
-
case
|
|
720
|
+
case 'set.pseudospatial.categoricalMode':
|
|
575
721
|
{
|
|
576
722
|
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
577
723
|
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
@@ -579,9 +725,29 @@ function settingsReducer(settings, action) {
|
|
|
579
725
|
})
|
|
580
726
|
});
|
|
581
727
|
}
|
|
728
|
+
case 'toggle.pseudospatial.refImg.visible':
|
|
729
|
+
{
|
|
730
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
731
|
+
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
732
|
+
refImg: _objectSpread(_objectSpread({}, settings.pseudospatial.refImg), {}, {
|
|
733
|
+
visible: !settings.pseudospatial.refImg.visible
|
|
734
|
+
})
|
|
735
|
+
})
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
case 'set.pseudospatial.refImg.opacity':
|
|
739
|
+
{
|
|
740
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
741
|
+
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
742
|
+
refImg: _objectSpread(_objectSpread({}, settings.pseudospatial.refImg), {}, {
|
|
743
|
+
opacity: action.opacity
|
|
744
|
+
})
|
|
745
|
+
})
|
|
746
|
+
});
|
|
747
|
+
}
|
|
582
748
|
default:
|
|
583
749
|
{
|
|
584
|
-
throw Error(
|
|
750
|
+
throw Error('Unknown action: ' + action.type);
|
|
585
751
|
}
|
|
586
752
|
}
|
|
587
753
|
}
|