@haniffalab/cherita-react 1.2.0-dev.2025-05-21.31931945 → 1.2.0-dev.2025-05-21.e57ef5f2
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/cjs/components/dotplot/Dotplot.js +26 -19
- package/dist/cjs/components/dotplot/DotplotControls.js +17 -19
- package/dist/cjs/components/full-page/FullPage.js +9 -7
- package/dist/cjs/components/full-page/FullPagePseudospatial.js +9 -7
- package/dist/cjs/components/heatmap/Heatmap.js +22 -13
- package/dist/cjs/components/matrixplot/Matrixplot.js +22 -13
- package/dist/cjs/components/obs-list/ObsItem.js +37 -29
- package/dist/cjs/components/obs-list/ObsList.js +47 -44
- package/dist/cjs/components/obsm-list/ObsmList.js +9 -6
- package/dist/cjs/components/offcanvas/index.js +13 -9
- package/dist/cjs/components/pseudospatial/Pseudospatial.js +61 -53
- package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +17 -11
- package/dist/cjs/components/scatterplot/Scatterplot.js +52 -52
- package/dist/cjs/components/scatterplot/ScatterplotControls.js +3 -3
- package/dist/cjs/components/scatterplot/SpatialControls.js +4 -4
- package/dist/cjs/components/search-bar/SearchBar.js +12 -10
- package/dist/cjs/components/search-bar/SearchInfo.js +14 -13
- package/dist/cjs/components/search-bar/SearchResults.js +16 -14
- package/dist/cjs/components/var-list/VarItem.js +37 -120
- package/dist/cjs/components/var-list/VarList.js +16 -13
- package/dist/cjs/components/var-list/VarListToolbar.js +1 -2
- package/dist/cjs/components/var-list/VarSet.js +17 -29
- package/dist/cjs/components/violin/Violin.js +44 -35
- package/dist/cjs/context/DatasetContext.js +17 -11
- package/dist/cjs/context/FilterContext.js +9 -8
- package/dist/cjs/context/SettingsContext.js +169 -237
- package/dist/cjs/context/ZarrDataContext.js +1 -2
- package/dist/cjs/helpers/color-helper.js +3 -3
- package/dist/cjs/helpers/zarr-helper.js +15 -12
- package/dist/cjs/utils/Filter.js +13 -9
- package/dist/cjs/utils/Histogram.js +4 -3
- package/dist/cjs/utils/ImageViewer.js +1 -2
- package/dist/cjs/utils/Legend.js +3 -3
- package/dist/cjs/utils/LoadingIndicators.js +1 -1
- package/dist/cjs/utils/VirtualizedList.js +16 -13
- package/dist/cjs/utils/errors.js +20 -22
- package/dist/cjs/utils/requests.js +13 -10
- package/dist/cjs/utils/zarrData.js +12 -8
- package/dist/css/cherita.css +24 -10
- package/dist/css/cherita.css.map +1 -1
- package/dist/esm/components/dotplot/Dotplot.js +25 -17
- package/dist/esm/components/dotplot/DotplotControls.js +16 -17
- package/dist/esm/components/full-page/FullPage.js +8 -5
- package/dist/esm/components/full-page/FullPagePseudospatial.js +8 -5
- package/dist/esm/components/heatmap/Heatmap.js +21 -11
- package/dist/esm/components/matrixplot/Matrixplot.js +21 -11
- package/dist/esm/components/obs-list/ObsItem.js +36 -27
- package/dist/esm/components/obs-list/ObsList.js +46 -42
- package/dist/esm/components/obsm-list/ObsmList.js +8 -4
- package/dist/esm/components/offcanvas/index.js +13 -9
- package/dist/esm/components/pseudospatial/Pseudospatial.js +60 -51
- package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +16 -9
- package/dist/esm/components/scatterplot/Scatterplot.js +51 -50
- package/dist/esm/components/scatterplot/ScatterplotControls.js +2 -1
- package/dist/esm/components/scatterplot/SpatialControls.js +3 -2
- package/dist/esm/components/search-bar/SearchBar.js +11 -8
- package/dist/esm/components/search-bar/SearchInfo.js +13 -11
- package/dist/esm/components/search-bar/SearchResults.js +15 -12
- package/dist/esm/components/var-list/VarItem.js +36 -117
- package/dist/esm/components/var-list/VarList.js +15 -11
- package/dist/esm/components/var-list/VarSet.js +17 -28
- package/dist/esm/components/violin/Violin.js +43 -33
- package/dist/esm/context/DatasetContext.js +16 -9
- package/dist/esm/context/FilterContext.js +8 -6
- package/dist/esm/context/SettingsContext.js +168 -235
- package/dist/esm/helpers/color-helper.js +3 -3
- package/dist/esm/helpers/zarr-helper.js +15 -12
- package/dist/esm/utils/Filter.js +13 -9
- package/dist/esm/utils/Histogram.js +4 -3
- package/dist/esm/utils/Legend.js +2 -1
- package/dist/esm/utils/LoadingIndicators.js +1 -1
- package/dist/esm/utils/VirtualizedList.js +15 -11
- package/dist/esm/utils/errors.js +20 -22
- package/dist/esm/utils/requests.js +13 -10
- package/dist/esm/utils/zarrData.js +12 -8
- package/package.json +4 -2
- package/scss/cherita.scss +5 -0
- package/scss/components/layouts.scss +4 -0
- package/scss/components/lists.scss +4 -5
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
1
6
|
import React, { createContext, useContext, useEffect, useReducer } from "react";
|
|
2
7
|
import _ from "lodash";
|
|
3
8
|
import { COLOR_ENCODINGS, DOTPLOT_SCALES, LOCAL_STORAGE_KEY, MATRIXPLOT_SCALES, OBS_TYPES, PSEUDOSPATIAL_CATEGORICAL_MODES, VAR_SORT, VAR_SORT_ORDER, VIOLINPLOT_SCALES } from "../constants/constants";
|
|
@@ -66,7 +71,7 @@ export function SettingsProvider(_ref2) {
|
|
|
66
71
|
canOverrideSettings,
|
|
67
72
|
children
|
|
68
73
|
} = _ref2;
|
|
69
|
-
const DATASET_STORAGE_KEY =
|
|
74
|
+
const DATASET_STORAGE_KEY = "".concat(LOCAL_STORAGE_KEY, "-").concat(dataset_url);
|
|
70
75
|
// Use localStorage directly instead of useLocalStorage due to unnecessary re-renders
|
|
71
76
|
// https://github.com/uidotdev/usehooks/issues/157
|
|
72
77
|
const localSettings = JSON.parse(localStorage.getItem(DATASET_STORAGE_KEY)) || {};
|
|
@@ -104,133 +109,118 @@ function settingsReducer(settings, action) {
|
|
|
104
109
|
switch (action.type) {
|
|
105
110
|
case "select.obs":
|
|
106
111
|
{
|
|
107
|
-
|
|
108
|
-
|
|
112
|
+
var _action$obs;
|
|
113
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
109
114
|
selectedObs: action.obs,
|
|
110
|
-
controls: {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
},
|
|
115
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
116
|
+
range: ((_action$obs = action.obs) === null || _action$obs === void 0 ? void 0 : _action$obs.type) === OBS_TYPES.CATEGORICAL ? [0, 1] : settings.controls.range
|
|
117
|
+
}),
|
|
114
118
|
colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.OBS && !action.obs ? null : settings.colorEncoding,
|
|
115
|
-
sliceBy: {
|
|
116
|
-
...settings.sliceBy,
|
|
119
|
+
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
117
120
|
obs: action.obs ? settings.sliceBy.obs : false
|
|
118
|
-
}
|
|
119
|
-
};
|
|
121
|
+
})
|
|
122
|
+
});
|
|
120
123
|
}
|
|
121
124
|
case "select.obsm":
|
|
122
125
|
{
|
|
123
|
-
return {
|
|
124
|
-
...settings,
|
|
126
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
125
127
|
selectedObsm: action.obsm
|
|
126
|
-
};
|
|
128
|
+
});
|
|
127
129
|
}
|
|
128
130
|
case "select.var":
|
|
129
131
|
{
|
|
130
132
|
if (settings.vars.find(v => _.isEqual(v, action.var))) {
|
|
131
|
-
return {
|
|
132
|
-
...settings,
|
|
133
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
133
134
|
selectedVar: action.var
|
|
134
|
-
};
|
|
135
|
+
});
|
|
135
136
|
} else {
|
|
136
|
-
return {
|
|
137
|
-
...settings,
|
|
137
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
138
138
|
selectedVar: action.var,
|
|
139
139
|
vars: [...settings.vars, action.var]
|
|
140
|
-
};
|
|
140
|
+
});
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
case "select.multivar":
|
|
144
144
|
{
|
|
145
145
|
const vars = settings.vars.find(v => _.isEqual(v, action.var)) ? settings.vars : [...settings.vars, action.var];
|
|
146
146
|
if (settings.selectedMultiVar.find(v => _.isEqual(v, action.var))) {
|
|
147
|
-
return {
|
|
148
|
-
...settings,
|
|
147
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
149
148
|
vars: vars
|
|
150
|
-
};
|
|
149
|
+
});
|
|
151
150
|
} else {
|
|
152
|
-
return {
|
|
153
|
-
...settings,
|
|
151
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
154
152
|
selectedMultiVar: [...settings.selectedMultiVar, action.var],
|
|
155
153
|
vars: vars
|
|
156
|
-
};
|
|
154
|
+
});
|
|
157
155
|
}
|
|
158
156
|
}
|
|
159
157
|
case "deselect.multivar":
|
|
160
158
|
{
|
|
161
|
-
return {
|
|
162
|
-
...settings,
|
|
159
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
163
160
|
selectedMultiVar: settings.selectedMultiVar.filter(v => v !== action.var.name)
|
|
164
|
-
};
|
|
161
|
+
});
|
|
165
162
|
}
|
|
166
163
|
case "toggle.multivar":
|
|
167
164
|
{
|
|
168
165
|
const inMultiVar = settings.selectedMultiVar.some(v => v.name === action.var.name);
|
|
169
166
|
if (inMultiVar) {
|
|
170
|
-
return {
|
|
171
|
-
...settings,
|
|
167
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
172
168
|
selectedMultiVar: settings.selectedMultiVar.filter(v => v.name !== action.var.name)
|
|
173
|
-
};
|
|
169
|
+
});
|
|
174
170
|
} else {
|
|
175
|
-
return {
|
|
176
|
-
...settings,
|
|
171
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
177
172
|
selectedMultiVar: [...settings.selectedMultiVar, action.var]
|
|
178
|
-
};
|
|
173
|
+
});
|
|
179
174
|
}
|
|
180
175
|
}
|
|
181
176
|
case "set.colorEncoding":
|
|
182
177
|
{
|
|
183
|
-
return {
|
|
184
|
-
...settings,
|
|
178
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
185
179
|
colorEncoding: action.value
|
|
186
|
-
};
|
|
180
|
+
});
|
|
187
181
|
}
|
|
188
182
|
case "reset.vars":
|
|
189
183
|
{
|
|
190
|
-
return {
|
|
191
|
-
...settings,
|
|
184
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
192
185
|
vars: [],
|
|
193
186
|
selectedVar: null,
|
|
194
187
|
selectedMultiVar: []
|
|
195
|
-
};
|
|
188
|
+
});
|
|
196
189
|
}
|
|
197
190
|
case "reset.multiVar":
|
|
198
191
|
{
|
|
199
|
-
return {
|
|
200
|
-
...settings,
|
|
192
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
201
193
|
selectedMultiVar: [],
|
|
202
194
|
colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
|
|
203
|
-
};
|
|
195
|
+
});
|
|
204
196
|
}
|
|
205
197
|
case "reset.var":
|
|
206
198
|
{
|
|
207
|
-
return {
|
|
208
|
-
...settings,
|
|
199
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
209
200
|
selectedVar: null,
|
|
210
201
|
colorEncoding: settings.colorEncoding === COLOR_ENCODINGS.VAR ? null : settings.colorEncoding
|
|
211
|
-
};
|
|
202
|
+
});
|
|
212
203
|
}
|
|
213
204
|
case "add.var":
|
|
214
205
|
{
|
|
215
206
|
if (settings.vars.find(v => v.name === action.var.name)) {
|
|
216
207
|
return settings;
|
|
217
208
|
} else {
|
|
218
|
-
return {
|
|
219
|
-
...settings,
|
|
209
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
220
210
|
vars: [...settings.vars, action.var]
|
|
221
|
-
};
|
|
211
|
+
});
|
|
222
212
|
}
|
|
223
213
|
}
|
|
224
214
|
case "remove.var":
|
|
225
215
|
{
|
|
226
|
-
|
|
216
|
+
var _settings$selectedVar;
|
|
217
|
+
const selectedVar = ((_settings$selectedVar = settings.selectedVar) === null || _settings$selectedVar === void 0 ? void 0 : _settings$selectedVar.name) === action.var.name ? null : settings.selectedVar;
|
|
227
218
|
const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.var.name);
|
|
228
|
-
return {
|
|
229
|
-
...settings,
|
|
219
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
230
220
|
vars: settings.vars.filter(a => a.name !== action.var.name),
|
|
231
221
|
selectedVar: selectedVar,
|
|
232
222
|
selectedMultiVar: selectedMultiVar
|
|
233
|
-
};
|
|
223
|
+
});
|
|
234
224
|
}
|
|
235
225
|
case "add.varSet.var":
|
|
236
226
|
{
|
|
@@ -241,37 +231,34 @@ function settingsReducer(settings, action) {
|
|
|
241
231
|
if (varSet.vars.some(v => v.name === action.var.name)) {
|
|
242
232
|
return settings;
|
|
243
233
|
} else {
|
|
234
|
+
var _settings$selectedVar2;
|
|
244
235
|
const varSetVars = [...varSet.vars, action.var];
|
|
245
236
|
const vars = settings.vars.map(v => {
|
|
246
237
|
if (v.name === varSet.name) {
|
|
247
|
-
return {
|
|
248
|
-
...v,
|
|
238
|
+
return _objectSpread(_objectSpread({}, v), {}, {
|
|
249
239
|
vars: varSetVars
|
|
250
|
-
};
|
|
240
|
+
});
|
|
251
241
|
} else {
|
|
252
242
|
return v;
|
|
253
243
|
}
|
|
254
244
|
});
|
|
255
|
-
const selectedVar = settings.selectedVar
|
|
256
|
-
...varSet,
|
|
245
|
+
const selectedVar = ((_settings$selectedVar2 = settings.selectedVar) === null || _settings$selectedVar2 === void 0 ? void 0 : _settings$selectedVar2.name) === action.varSet.name ? _objectSpread(_objectSpread({}, varSet), {}, {
|
|
257
246
|
vars: varSetVars
|
|
258
|
-
} : settings.selectedVar;
|
|
247
|
+
}) : settings.selectedVar;
|
|
259
248
|
const selectedMultiVar = settings.selectedMultiVar.map(v => {
|
|
260
249
|
if (v.name === varSet.name) {
|
|
261
|
-
return {
|
|
262
|
-
...v,
|
|
250
|
+
return _objectSpread(_objectSpread({}, v), {}, {
|
|
263
251
|
vars: varSetVars
|
|
264
|
-
};
|
|
252
|
+
});
|
|
265
253
|
} else {
|
|
266
254
|
return v;
|
|
267
255
|
}
|
|
268
256
|
});
|
|
269
|
-
return {
|
|
270
|
-
...settings,
|
|
257
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
271
258
|
vars: vars,
|
|
272
259
|
selectedVar: selectedVar,
|
|
273
260
|
selectedMultiVar: selectedMultiVar
|
|
274
|
-
};
|
|
261
|
+
});
|
|
275
262
|
}
|
|
276
263
|
}
|
|
277
264
|
case "remove.varSet.var":
|
|
@@ -286,306 +273,252 @@ function settingsReducer(settings, action) {
|
|
|
286
273
|
const varSetVars = varSet.vars.filter(v => v.name !== action.var.name);
|
|
287
274
|
const vars = settings.vars.map(v => {
|
|
288
275
|
if (v.name === varSet.name) {
|
|
289
|
-
return {
|
|
290
|
-
...v,
|
|
276
|
+
return _objectSpread(_objectSpread({}, v), {}, {
|
|
291
277
|
vars: varSetVars
|
|
292
|
-
};
|
|
278
|
+
});
|
|
293
279
|
} else {
|
|
294
280
|
return v;
|
|
295
281
|
}
|
|
296
282
|
});
|
|
297
283
|
// Remove from selected if varSet vars is empty
|
|
298
284
|
if (!varSetVars.length) {
|
|
299
|
-
|
|
285
|
+
var _settings$selectedVar3;
|
|
286
|
+
const selectedVar = ((_settings$selectedVar3 = settings.selectedVar) === null || _settings$selectedVar3 === void 0 ? void 0 : _settings$selectedVar3.name) === action.varSet.name ? null : settings.selectedVar;
|
|
300
287
|
const selectedMultiVar = settings.selectedMultiVar.filter(v => v.name !== action.varSet.name);
|
|
301
|
-
return {
|
|
302
|
-
...settings,
|
|
288
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
303
289
|
vars: vars,
|
|
304
290
|
selectedVar: selectedVar,
|
|
305
291
|
selectedMultiVar: selectedMultiVar
|
|
306
|
-
};
|
|
292
|
+
});
|
|
307
293
|
} else {
|
|
294
|
+
var _settings$selectedVar4;
|
|
308
295
|
// Update selected if varSet is selected
|
|
309
|
-
const selectedVar = settings.selectedVar
|
|
310
|
-
...varSet,
|
|
296
|
+
const selectedVar = ((_settings$selectedVar4 = settings.selectedVar) === null || _settings$selectedVar4 === void 0 ? void 0 : _settings$selectedVar4.name) === action.varSet.name ? _objectSpread(_objectSpread({}, varSet), {}, {
|
|
311
297
|
vars: varSetVars
|
|
312
|
-
} : settings.selectedVar;
|
|
298
|
+
}) : settings.selectedVar;
|
|
313
299
|
const selectedMultiVar = settings.selectedMultiVar.map(v => {
|
|
314
300
|
if (v.name === varSet.name) {
|
|
315
|
-
return {
|
|
316
|
-
...v,
|
|
301
|
+
return _objectSpread(_objectSpread({}, v), {}, {
|
|
317
302
|
vars: varSetVars
|
|
318
|
-
};
|
|
303
|
+
});
|
|
319
304
|
} else {
|
|
320
305
|
return v;
|
|
321
306
|
}
|
|
322
307
|
});
|
|
323
|
-
return {
|
|
324
|
-
...settings,
|
|
308
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
325
309
|
vars: vars,
|
|
326
310
|
selectedVar: selectedVar,
|
|
327
311
|
selectedMultiVar: selectedMultiVar
|
|
328
|
-
};
|
|
312
|
+
});
|
|
329
313
|
}
|
|
330
314
|
}
|
|
331
315
|
}
|
|
332
316
|
case "set.controls.colorScale":
|
|
333
317
|
{
|
|
334
|
-
return {
|
|
335
|
-
|
|
336
|
-
controls: {
|
|
337
|
-
...settings.controls,
|
|
318
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
319
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
338
320
|
colorScale: action.colorScale
|
|
339
|
-
}
|
|
340
|
-
};
|
|
321
|
+
})
|
|
322
|
+
});
|
|
341
323
|
}
|
|
342
324
|
case "set.controls.valueRange":
|
|
343
325
|
{
|
|
344
|
-
return {
|
|
345
|
-
|
|
346
|
-
controls: {
|
|
347
|
-
...settings.controls,
|
|
326
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
327
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
348
328
|
valueRange: action.valueRange
|
|
349
|
-
}
|
|
350
|
-
};
|
|
329
|
+
})
|
|
330
|
+
});
|
|
351
331
|
}
|
|
352
332
|
case "set.controls.range":
|
|
353
333
|
{
|
|
354
|
-
return {
|
|
355
|
-
|
|
356
|
-
controls: {
|
|
357
|
-
...settings.controls,
|
|
334
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
335
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
358
336
|
range: action.range
|
|
359
|
-
}
|
|
360
|
-
};
|
|
337
|
+
})
|
|
338
|
+
});
|
|
361
339
|
}
|
|
362
340
|
case "set.controls.colorAxis":
|
|
363
341
|
{
|
|
364
|
-
return {
|
|
365
|
-
|
|
366
|
-
controls: {
|
|
367
|
-
...settings.controls,
|
|
342
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
343
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
368
344
|
colorAxis: action.colorAxis
|
|
369
|
-
}
|
|
370
|
-
};
|
|
345
|
+
})
|
|
346
|
+
});
|
|
371
347
|
}
|
|
372
348
|
case "set.controls.colorAxis.crange":
|
|
373
349
|
{
|
|
374
|
-
return {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
...settings.controls,
|
|
378
|
-
colorAxis: {
|
|
379
|
-
...settings.controls.colorAxis,
|
|
350
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
351
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
352
|
+
colorAxis: _objectSpread(_objectSpread({}, settings.controls.colorAxis), {}, {
|
|
380
353
|
cmin: action.cmin,
|
|
381
354
|
cmax: action.cmax
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
};
|
|
355
|
+
})
|
|
356
|
+
})
|
|
357
|
+
});
|
|
385
358
|
}
|
|
386
359
|
case "set.controls.colorAxis.cmin":
|
|
387
360
|
{
|
|
388
|
-
return {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
...settings.controls,
|
|
392
|
-
colorAxis: {
|
|
393
|
-
...settings.controls.colorAxis,
|
|
361
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
362
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
363
|
+
colorAxis: _objectSpread(_objectSpread({}, settings.controls.colorAxis), {}, {
|
|
394
364
|
cmin: action.cmin
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
};
|
|
365
|
+
})
|
|
366
|
+
})
|
|
367
|
+
});
|
|
398
368
|
}
|
|
399
369
|
case "set.controls.colorAxis.cmax":
|
|
400
370
|
{
|
|
401
|
-
return {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
...settings.controls,
|
|
405
|
-
colorAxis: {
|
|
406
|
-
...settings.controls.colorAxis,
|
|
371
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
372
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
373
|
+
colorAxis: _objectSpread(_objectSpread({}, settings.controls.colorAxis), {}, {
|
|
407
374
|
cmax: action.cmax
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
};
|
|
375
|
+
})
|
|
376
|
+
})
|
|
377
|
+
});
|
|
411
378
|
}
|
|
412
379
|
case "set.controls.scale":
|
|
413
380
|
{
|
|
414
|
-
return {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
...settings.controls,
|
|
418
|
-
scale: {
|
|
419
|
-
...settings.controls.scale,
|
|
381
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
382
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
383
|
+
scale: _objectSpread(_objectSpread({}, settings.controls.scale), {}, {
|
|
420
384
|
[action.plot]: action.scale
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
};
|
|
385
|
+
})
|
|
386
|
+
})
|
|
387
|
+
});
|
|
424
388
|
}
|
|
425
389
|
case "set.controls.meanOnlyExpressed":
|
|
426
390
|
{
|
|
427
|
-
return {
|
|
428
|
-
|
|
429
|
-
controls: {
|
|
430
|
-
...settings.controls,
|
|
391
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
392
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
431
393
|
meanOnlyExpressed: action.meanOnlyExpressed
|
|
432
|
-
}
|
|
433
|
-
};
|
|
394
|
+
})
|
|
395
|
+
});
|
|
434
396
|
}
|
|
435
397
|
case "set.controls.expressionCutoff":
|
|
436
398
|
{
|
|
437
|
-
return {
|
|
438
|
-
|
|
439
|
-
controls: {
|
|
440
|
-
...settings.controls,
|
|
399
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
400
|
+
controls: _objectSpread(_objectSpread({}, settings.controls), {}, {
|
|
441
401
|
expressionCutoff: action.expressionCutoff
|
|
442
|
-
}
|
|
443
|
-
};
|
|
402
|
+
})
|
|
403
|
+
});
|
|
444
404
|
}
|
|
445
405
|
case "toggle.slice.obs":
|
|
446
406
|
{
|
|
447
407
|
if (_.isEqual(settings.selectedObs, action.obs)) {
|
|
448
|
-
return {
|
|
449
|
-
|
|
450
|
-
sliceBy: {
|
|
451
|
-
...settings.sliceBy,
|
|
408
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
409
|
+
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
452
410
|
obs: !settings.sliceBy.obs
|
|
453
|
-
}
|
|
454
|
-
};
|
|
411
|
+
})
|
|
412
|
+
});
|
|
455
413
|
} else {
|
|
456
|
-
return {
|
|
457
|
-
...settings,
|
|
414
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
458
415
|
selectedObs: action.obs,
|
|
459
|
-
sliceBy: {
|
|
460
|
-
...settings.sliceBy,
|
|
416
|
+
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
461
417
|
obs: true
|
|
462
|
-
}
|
|
463
|
-
};
|
|
418
|
+
})
|
|
419
|
+
});
|
|
464
420
|
}
|
|
465
421
|
}
|
|
466
422
|
case "toggle.slice.polygons":
|
|
467
423
|
{
|
|
468
|
-
return {
|
|
469
|
-
|
|
470
|
-
sliceBy: {
|
|
471
|
-
...settings.sliceBy,
|
|
424
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
425
|
+
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
472
426
|
polygons: !settings.sliceBy.polygons
|
|
473
|
-
}
|
|
474
|
-
};
|
|
427
|
+
})
|
|
428
|
+
});
|
|
475
429
|
}
|
|
476
430
|
case "disable.slice.polygons":
|
|
477
431
|
{
|
|
478
|
-
return {
|
|
479
|
-
|
|
480
|
-
sliceBy: {
|
|
481
|
-
...settings.sliceBy,
|
|
432
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
433
|
+
sliceBy: _objectSpread(_objectSpread({}, settings.sliceBy), {}, {
|
|
482
434
|
polygons: false
|
|
483
|
-
}
|
|
484
|
-
};
|
|
435
|
+
})
|
|
436
|
+
});
|
|
485
437
|
}
|
|
486
438
|
case "add.label.obs":
|
|
487
439
|
{
|
|
488
440
|
if (settings.labelObs.find(i => _.isEqual(i, action.obs))) {
|
|
489
441
|
return settings;
|
|
490
442
|
} else {
|
|
491
|
-
return {
|
|
492
|
-
...settings,
|
|
443
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
493
444
|
labelObs: [...settings.labelObs, action.obs]
|
|
494
|
-
};
|
|
445
|
+
});
|
|
495
446
|
}
|
|
496
447
|
}
|
|
497
448
|
case "remove.label.obs":
|
|
498
449
|
{
|
|
499
|
-
return {
|
|
500
|
-
...settings,
|
|
450
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
501
451
|
labelObs: settings.labelObs.filter(a => a.name !== action.obsName)
|
|
502
|
-
};
|
|
452
|
+
});
|
|
503
453
|
}
|
|
504
454
|
case "reset.label.obs":
|
|
505
455
|
{
|
|
506
|
-
return {
|
|
507
|
-
...settings,
|
|
456
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
508
457
|
labelObs: []
|
|
509
|
-
};
|
|
458
|
+
});
|
|
510
459
|
}
|
|
511
460
|
case "set.varSort":
|
|
512
461
|
{
|
|
513
|
-
return {
|
|
514
|
-
|
|
515
|
-
varSort: {
|
|
516
|
-
...settings.varSort,
|
|
462
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
463
|
+
varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
|
|
517
464
|
[action.var]: {
|
|
518
465
|
sort: action.sort,
|
|
519
466
|
sortOrder: action.sortOrder
|
|
520
467
|
}
|
|
521
|
-
}
|
|
522
|
-
};
|
|
468
|
+
})
|
|
469
|
+
});
|
|
523
470
|
}
|
|
524
471
|
case "set.varSort.sort":
|
|
525
472
|
{
|
|
526
|
-
return {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
...settings.varSort,
|
|
530
|
-
[action.var]: {
|
|
531
|
-
...settings.varSort[action.var],
|
|
473
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
474
|
+
varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
|
|
475
|
+
[action.var]: _objectSpread(_objectSpread({}, settings.varSort[action.var]), {}, {
|
|
532
476
|
sort: action.sort
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
};
|
|
477
|
+
})
|
|
478
|
+
})
|
|
479
|
+
});
|
|
536
480
|
}
|
|
537
481
|
case "set.varSort.sortOrder":
|
|
538
482
|
{
|
|
539
|
-
return {
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
...settings.varSort,
|
|
543
|
-
[action.var]: {
|
|
544
|
-
...settings.varSort[action.var],
|
|
483
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
484
|
+
varSort: _objectSpread(_objectSpread({}, settings.varSort), {}, {
|
|
485
|
+
[action.var]: _objectSpread(_objectSpread({}, settings.varSort[action.var]), {}, {
|
|
545
486
|
sortOrder: action.sortOrder
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
};
|
|
487
|
+
})
|
|
488
|
+
})
|
|
489
|
+
});
|
|
549
490
|
}
|
|
550
491
|
case "set.polygons":
|
|
551
492
|
{
|
|
552
|
-
return {
|
|
553
|
-
|
|
554
|
-
polygons: {
|
|
555
|
-
...settings.polygons,
|
|
493
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
494
|
+
polygons: _objectSpread(_objectSpread({}, settings.polygons), {}, {
|
|
556
495
|
[action.obsm]: action.polygons
|
|
557
|
-
}
|
|
558
|
-
};
|
|
496
|
+
})
|
|
497
|
+
});
|
|
559
498
|
}
|
|
560
499
|
case "set.pseudospatial.maskSet":
|
|
561
500
|
{
|
|
562
|
-
return {
|
|
563
|
-
|
|
564
|
-
pseudospatial: {
|
|
565
|
-
...settings.pseudospatial,
|
|
501
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
502
|
+
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
566
503
|
maskSet: action.maskSet
|
|
567
|
-
}
|
|
568
|
-
};
|
|
504
|
+
})
|
|
505
|
+
});
|
|
569
506
|
}
|
|
570
507
|
case "set.pseudospatial.maskValues":
|
|
571
508
|
{
|
|
572
|
-
return {
|
|
573
|
-
|
|
574
|
-
pseudospatial: {
|
|
575
|
-
...settings.pseudospatial,
|
|
509
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
510
|
+
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
576
511
|
maskValues: action.maskValues
|
|
577
|
-
}
|
|
578
|
-
};
|
|
512
|
+
})
|
|
513
|
+
});
|
|
579
514
|
}
|
|
580
515
|
case "set.pseudospatial.categoricalMode":
|
|
581
516
|
{
|
|
582
|
-
return {
|
|
583
|
-
|
|
584
|
-
pseudospatial: {
|
|
585
|
-
...settings.pseudospatial,
|
|
517
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
518
|
+
pseudospatial: _objectSpread(_objectSpread({}, settings.pseudospatial), {}, {
|
|
586
519
|
categoricalMode: action.categoricalMode
|
|
587
|
-
}
|
|
588
|
-
};
|
|
520
|
+
})
|
|
521
|
+
});
|
|
589
522
|
}
|
|
590
523
|
default:
|
|
591
524
|
{
|
|
@@ -3,9 +3,9 @@ import { COLORSCALES } from "../constants/colorscales";
|
|
|
3
3
|
import { useSettings } from "../context/SettingsContext";
|
|
4
4
|
const GRAY = [214, 212, 212];
|
|
5
5
|
const parseHexColor = color => {
|
|
6
|
-
const r = parseInt(color
|
|
7
|
-
const g = parseInt(color
|
|
8
|
-
const b = parseInt(color
|
|
6
|
+
const r = parseInt(color === null || color === void 0 ? void 0 : color.substring(1, 3), 16);
|
|
7
|
+
const g = parseInt(color === null || color === void 0 ? void 0 : color.substring(3, 5), 16);
|
|
8
|
+
const b = parseInt(color === null || color === void 0 ? void 0 : color.substring(5, 7), 16);
|
|
9
9
|
return [r, g, b];
|
|
10
10
|
};
|
|
11
11
|
const interpolateColor = (color1, color2, factor) => {
|