@haniffalab/cherita-react 1.2.0 → 1.3.0-dev.2025-05-29.ee7e9b72

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.
Files changed (91) hide show
  1. package/dist/cjs/components/controls/Controls.js +60 -0
  2. package/dist/cjs/components/dotplot/Dotplot.js +47 -38
  3. package/dist/cjs/components/dotplot/DotplotControls.js +77 -114
  4. package/dist/cjs/components/full-page/FullPage.js +29 -33
  5. package/dist/cjs/components/full-page/FullPagePseudospatial.js +30 -33
  6. package/dist/cjs/components/heatmap/Heatmap.js +33 -22
  7. package/dist/cjs/components/heatmap/HeatmapControls.js +2 -19
  8. package/dist/cjs/components/matrixplot/Matrixplot.js +35 -24
  9. package/dist/cjs/components/matrixplot/MatrixplotControls.js +4 -34
  10. package/dist/cjs/components/obs-list/ObsItem.js +63 -51
  11. package/dist/cjs/components/obs-list/ObsList.js +53 -48
  12. package/dist/cjs/components/obsm-list/ObsmList.js +17 -12
  13. package/dist/cjs/components/offcanvas/index.js +14 -11
  14. package/dist/cjs/components/pseudospatial/Pseudospatial.js +78 -68
  15. package/dist/cjs/components/pseudospatial/PseudospatialToolbar.js +27 -21
  16. package/dist/cjs/components/scatterplot/Scatterplot.js +82 -76
  17. package/dist/cjs/components/scatterplot/ScatterplotControls.js +18 -31
  18. package/dist/cjs/components/scatterplot/SpatialControls.js +53 -23
  19. package/dist/cjs/components/scatterplot/Toolbox.js +1 -18
  20. package/dist/cjs/components/search-bar/SearchBar.js +156 -59
  21. package/dist/cjs/components/search-bar/SearchInfo.js +182 -0
  22. package/dist/cjs/components/search-bar/SearchResults.js +90 -60
  23. package/dist/cjs/components/var-list/VarItem.js +52 -75
  24. package/dist/cjs/components/var-list/VarList.js +47 -172
  25. package/dist/cjs/components/var-list/VarListToolbar.js +7 -8
  26. package/dist/cjs/components/var-list/VarSet.js +66 -57
  27. package/dist/cjs/components/violin/Violin.js +54 -43
  28. package/dist/cjs/components/violin/ViolinControls.js +4 -20
  29. package/dist/cjs/context/DatasetContext.js +26 -513
  30. package/dist/cjs/context/FilterContext.js +9 -8
  31. package/dist/cjs/context/SettingsContext.js +539 -0
  32. package/dist/cjs/context/ZarrDataContext.js +1 -2
  33. package/dist/cjs/helpers/color-helper.js +8 -8
  34. package/dist/cjs/helpers/zarr-helper.js +19 -16
  35. package/dist/cjs/utils/Filter.js +25 -21
  36. package/dist/cjs/utils/Histogram.js +4 -3
  37. package/dist/cjs/utils/ImageViewer.js +1 -2
  38. package/dist/cjs/utils/Legend.js +18 -12
  39. package/dist/cjs/utils/LoadingIndicators.js +1 -1
  40. package/dist/cjs/utils/VirtualizedList.js +16 -13
  41. package/dist/cjs/utils/errors.js +20 -22
  42. package/dist/cjs/utils/requests.js +13 -10
  43. package/dist/cjs/utils/zarrData.js +31 -50
  44. package/dist/css/cherita.css +84 -24
  45. package/dist/css/cherita.css.map +1 -1
  46. package/dist/esm/components/controls/Controls.js +51 -0
  47. package/dist/esm/components/dotplot/Dotplot.js +47 -37
  48. package/dist/esm/components/dotplot/DotplotControls.js +77 -112
  49. package/dist/esm/components/full-page/FullPage.js +29 -32
  50. package/dist/esm/components/full-page/FullPagePseudospatial.js +30 -32
  51. package/dist/esm/components/heatmap/Heatmap.js +32 -20
  52. package/dist/esm/components/heatmap/HeatmapControls.js +3 -20
  53. package/dist/esm/components/matrixplot/Matrixplot.js +34 -22
  54. package/dist/esm/components/matrixplot/MatrixplotControls.js +5 -35
  55. package/dist/esm/components/obs-list/ObsItem.js +63 -49
  56. package/dist/esm/components/obs-list/ObsList.js +53 -47
  57. package/dist/esm/components/obsm-list/ObsmList.js +17 -11
  58. package/dist/esm/components/offcanvas/index.js +14 -11
  59. package/dist/esm/components/pseudospatial/Pseudospatial.js +77 -66
  60. package/dist/esm/components/pseudospatial/PseudospatialToolbar.js +27 -20
  61. package/dist/esm/components/scatterplot/Scatterplot.js +81 -74
  62. package/dist/esm/components/scatterplot/ScatterplotControls.js +18 -29
  63. package/dist/esm/components/scatterplot/SpatialControls.js +54 -23
  64. package/dist/esm/components/scatterplot/Toolbox.js +1 -18
  65. package/dist/esm/components/search-bar/SearchBar.js +156 -59
  66. package/dist/esm/components/search-bar/SearchInfo.js +173 -0
  67. package/dist/esm/components/search-bar/SearchResults.js +91 -60
  68. package/dist/esm/components/var-list/VarItem.js +53 -76
  69. package/dist/esm/components/var-list/VarList.js +47 -171
  70. package/dist/esm/components/var-list/VarListToolbar.js +6 -6
  71. package/dist/esm/components/var-list/VarSet.js +67 -57
  72. package/dist/esm/components/violin/Violin.js +53 -41
  73. package/dist/esm/components/violin/ViolinControls.js +5 -21
  74. package/dist/esm/context/DatasetContext.js +25 -510
  75. package/dist/esm/context/FilterContext.js +8 -6
  76. package/dist/esm/context/SettingsContext.js +528 -0
  77. package/dist/esm/helpers/color-helper.js +8 -8
  78. package/dist/esm/helpers/zarr-helper.js +19 -16
  79. package/dist/esm/utils/Filter.js +25 -21
  80. package/dist/esm/utils/Histogram.js +4 -3
  81. package/dist/esm/utils/Legend.js +17 -10
  82. package/dist/esm/utils/LoadingIndicators.js +1 -1
  83. package/dist/esm/utils/VirtualizedList.js +15 -11
  84. package/dist/esm/utils/errors.js +20 -22
  85. package/dist/esm/utils/requests.js +13 -10
  86. package/dist/esm/utils/zarrData.js +33 -51
  87. package/package.json +6 -3
  88. package/scss/cherita.scss +50 -9
  89. package/scss/components/layouts.scss +24 -13
  90. package/scss/components/lists.scss +10 -0
  91. package/scss/components/plots.scss +3 -5
@@ -1,13 +1,20 @@
1
- import React, { useEffect, createContext, useContext, useReducer } from "react";
1
+ const _excluded = ["dataset_url", "children"];
2
+ 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; }
3
+ 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; }
4
+ 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; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
+ 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); }
7
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
8
+ 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; }
9
+ import React, { createContext, useContext } from "react";
2
10
  import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister";
3
11
  import { QueryClient, QueryCache } from "@tanstack/react-query";
4
12
  import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client";
5
13
  import _ from "lodash";
6
14
  import { FilterProvider } from "./FilterContext";
15
+ import { SettingsProvider } from "./SettingsContext";
7
16
  import { ZarrDataProvider } from "./ZarrDataContext";
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";
9
17
  export const DatasetContext = /*#__PURE__*/createContext(null);
10
- export const DatasetDispatchContext = /*#__PURE__*/createContext(null);
11
18
  const queryClient = new QueryClient({
12
19
  defaultOptions: {
13
20
  queries: {
@@ -38,7 +45,7 @@ const persistOptions = {
38
45
  state
39
46
  } = _ref;
40
47
  if (state.status === "success") {
41
- return persistKeys.includes(queryKey?.[0]);
48
+ return persistKeys.includes(queryKey === null || queryKey === void 0 ? void 0 : queryKey[0]);
42
49
  }
43
50
  return false;
44
51
  }
@@ -46,93 +53,29 @@ const persistOptions = {
46
53
  // @TODO: add maxAge and buster (app and api version numbers as busters)
47
54
  };
48
55
  const initialDataset = {
56
+ url: null,
49
57
  varNamesCol: null,
50
- selectedObs: null,
51
- selectedObsm: null,
52
- selectedVar: null,
53
- selectedMultiObs: [],
54
- selectedMultiVar: [],
55
- colorEncoding: null,
56
- labelObs: [],
57
- varSets: [],
58
- sliceBy: {
59
- obs: false,
60
- polygons: false
61
- },
62
- controls: {
63
- colorScale: "Viridis",
64
- valueRange: [0, 1],
65
- range: [0, 1],
66
- colorAxis: {
67
- dmin: 0,
68
- dmax: 1,
69
- cmin: 0,
70
- cmax: 1
71
- },
72
- scale: {
73
- dotplot: DOTPLOT_SCALES.NONE,
74
- matrixplot: MATRIXPLOT_SCALES.NONE,
75
- violinplot: VIOLINPLOT_SCALES.WIDTH
76
- },
77
- meanOnlyExpressed: false,
78
- expressionCutoff: 0.0
79
- },
80
58
  diseaseDatasets: [],
81
- selectedDisease: null,
82
- varSort: {
83
- var: {
84
- sort: VAR_SORT.NONE,
85
- sortOrder: VAR_SORT_ORDER.ASC
86
- },
87
- disease: {
88
- sort: VAR_SORT.NONE,
89
- sortOrder: VAR_SORT_ORDER.ASC
90
- }
91
- },
92
59
  obsGroups: null,
93
60
  imageUrl: null,
94
- pseudospatial: {
95
- maskSet: null,
96
- maskValues: null,
97
- categoricalMode: PSEUDOSPATIAL_CATEGORICAL_MODES.ACROSS.value
98
- },
99
- polygons: {}
100
- };
101
- const initializer = initialState => {
102
- const localObj = (JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY)) || {})[initialState.url] || {};
103
- const keys = _.keys(initialState);
104
- const localValues = _.pick(localObj, keys);
105
- return _.assign(initialState, localValues);
61
+ defaultSettings: {},
62
+ canOverrideSettings: true
106
63
  };
107
64
  export function DatasetProvider(_ref2) {
108
65
  let {
109
- dataset_url,
110
- children,
111
- ...dataset_params
112
- } = _ref2;
113
- const [dataset, dispatch] = useReducer(datasetReducer, _.assign(initializer({
114
- url: dataset_url,
115
- ...initialDataset
116
- }), dataset_params));
117
- useEffect(() => {
118
- try {
119
- const localObj = JSON.parse(localStorage.getItem(LOCAL_STORAGE_KEY)) || {};
120
- localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify({
121
- ...localObj,
122
- [dataset.url]: dataset
123
- }));
124
- } catch (err) {
125
- if (err.code === 22 || err.code === 1014 || err.name === "QuotaExceededError" || err.name === "NS_ERROR_DOM_QUOTA_REACHED") {
126
- console.err("Browser storage quota exceeded");
127
- } else {
128
- console.err(err);
129
- }
130
- }
131
- }, [dataset]);
66
+ dataset_url,
67
+ children
68
+ } = _ref2,
69
+ dataset_params = _objectWithoutProperties(_ref2, _excluded);
70
+ const dataset = _.assign(initialDataset, _objectSpread({
71
+ url: dataset_url
72
+ }, dataset_params));
132
73
  return /*#__PURE__*/React.createElement(DatasetContext.Provider, {
133
74
  value: dataset
134
- }, /*#__PURE__*/React.createElement(DatasetDispatchContext.Provider, {
135
- value: dispatch
75
+ }, /*#__PURE__*/React.createElement(SettingsProvider, {
76
+ dataset_url: dataset.url,
77
+ defaultSettings: dataset.defaultSettings,
78
+ canOverrideSettings: dataset.canOverrideSettings
136
79
  }, /*#__PURE__*/React.createElement(PersistQueryClientProvider, {
137
80
  client: queryClient,
138
81
  persistOptions: persistOptions
@@ -140,432 +83,4 @@ export function DatasetProvider(_ref2) {
140
83
  }
141
84
  export function useDataset() {
142
85
  return useContext(DatasetContext);
143
- }
144
- export function useDatasetDispatch() {
145
- return useContext(DatasetDispatchContext);
146
- }
147
- function datasetReducer(dataset, action) {
148
- switch (action.type) {
149
- case "select.obs":
150
- {
151
- return {
152
- ...dataset,
153
- selectedObs: action.obs,
154
- controls: {
155
- ...dataset.controls,
156
- range: action.obs?.type === OBS_TYPES.CATEGORICAL ? [0, 1] : dataset.controls.range
157
- },
158
- colorEncoding: dataset.colorEncoding === COLOR_ENCODINGS.OBS && !action.obs ? null : dataset.colorEncoding,
159
- sliceBy: {
160
- ...dataset.sliceBy,
161
- obs: action.obs ? dataset.sliceBy.obs : false
162
- }
163
- };
164
- }
165
- case "select.obsm":
166
- {
167
- return {
168
- ...dataset,
169
- selectedObsm: action.obsm
170
- };
171
- }
172
- case "select.var":
173
- {
174
- return {
175
- ...dataset,
176
- selectedVar: action.var
177
- };
178
- }
179
- case "select.multivar":
180
- {
181
- if (dataset.selectedMultiVar.find(i => action.var.isSet ? i.name === action.var.name : i.matrix_index === action.var.matrix_index)) {
182
- return dataset;
183
- } else {
184
- return {
185
- ...dataset,
186
- selectedMultiVar: [...dataset.selectedMultiVar, action.var]
187
- };
188
- }
189
- }
190
- case "deselect.multivar":
191
- {
192
- return {
193
- ...dataset,
194
- selectedMultiVar: dataset.selectedMultiVar.filter(a => action.var.isSet ? a.name !== action.var.name : a.matrix_index !== action.var.matrix_index)
195
- };
196
- }
197
- case "update.multivar":
198
- {
199
- return {
200
- ...dataset,
201
- selelectedMultiVar: dataset.selectedMultiVar.map(i => {
202
- if (i.isSet) {
203
- return action.vars.find(s => s.name === i.name);
204
- }
205
- return i;
206
- })
207
- };
208
- }
209
- case "set.colorEncoding":
210
- {
211
- return {
212
- ...dataset,
213
- colorEncoding: action.value
214
- };
215
- }
216
- case "reset.multiVar":
217
- {
218
- return {
219
- ...dataset,
220
- selectedMultiVar: [],
221
- colorEncoding: dataset.colorEncoding === COLOR_ENCODINGS.VAR ? null : dataset.colorEncoding
222
- };
223
- }
224
- case "reset.var":
225
- {
226
- return {
227
- ...dataset,
228
- selectedVar: null,
229
- colorEncoding: dataset.colorEncoding === COLOR_ENCODINGS.VAR ? null : dataset.colorEncoding
230
- };
231
- }
232
- case "add.varSet":
233
- {
234
- return {
235
- ...dataset,
236
- varSets: [...dataset.varSets, action.varSet]
237
- };
238
- }
239
- case "remove.varSet":
240
- {
241
- return {
242
- ...dataset,
243
- varSets: dataset.varSets.filter(a => a.name !== action.varSet.name)
244
- };
245
- }
246
- case "reset.varSets":
247
- {
248
- return {
249
- ...dataset,
250
- varSets: []
251
- };
252
- }
253
- case "add.varSet.var":
254
- {
255
- const varSet = dataset.varSets.find(s => s.name === action.varSet.name);
256
- if (varSet.vars.find(v => _.isEqual(v, action.var))) {
257
- return dataset;
258
- } else {
259
- return {
260
- ...dataset,
261
- varSets: dataset.varSets.map(s => {
262
- if (s.name === varSet.name) {
263
- return {
264
- ...s,
265
- vars: [...s.vars, action.var]
266
- };
267
- } else {
268
- return s;
269
- }
270
- })
271
- };
272
- }
273
- }
274
- case "remove.varSet.var":
275
- {
276
- const varSet = dataset.varSets.find(s => s.name === action.varSet.name);
277
- return {
278
- ...dataset,
279
- varSets: dataset.varSets.map(s => {
280
- if (s.name === varSet.name) {
281
- return {
282
- ...s,
283
- vars: s.vars.filter(v => v.name !== action.var.name)
284
- };
285
- } else {
286
- return s;
287
- }
288
- })
289
- };
290
- }
291
- case "select.disease":
292
- {
293
- return {
294
- ...dataset,
295
- selectedDisease: {
296
- id: action.id,
297
- name: action.name
298
- }
299
- };
300
- }
301
- case "reset.disease":
302
- {
303
- return {
304
- ...dataset,
305
- selectedDisease: null
306
- };
307
- }
308
- case "set.controls.colorScale":
309
- {
310
- return {
311
- ...dataset,
312
- controls: {
313
- ...dataset.controls,
314
- colorScale: action.colorScale
315
- }
316
- };
317
- }
318
- case "set.controls.valueRange":
319
- {
320
- return {
321
- ...dataset,
322
- controls: {
323
- ...dataset.controls,
324
- valueRange: action.valueRange
325
- }
326
- };
327
- }
328
- case "set.controls.range":
329
- {
330
- return {
331
- ...dataset,
332
- controls: {
333
- ...dataset.controls,
334
- range: action.range
335
- }
336
- };
337
- }
338
- case "set.controls.colorAxis":
339
- {
340
- return {
341
- ...dataset,
342
- controls: {
343
- ...dataset.controls,
344
- colorAxis: action.colorAxis
345
- }
346
- };
347
- }
348
- case "set.controls.colorAxis.crange":
349
- {
350
- return {
351
- ...dataset,
352
- controls: {
353
- ...dataset.controls,
354
- colorAxis: {
355
- ...dataset.controls.colorAxis,
356
- cmin: action.cmin,
357
- cmax: action.cmax
358
- }
359
- }
360
- };
361
- }
362
- case "set.controls.colorAxis.cmin":
363
- {
364
- return {
365
- ...dataset,
366
- controls: {
367
- ...dataset.controls,
368
- colorAxis: {
369
- ...dataset.controls.colorAxis,
370
- cmin: action.cmin
371
- }
372
- }
373
- };
374
- }
375
- case "set.controls.colorAxis.cmax":
376
- {
377
- return {
378
- ...dataset,
379
- controls: {
380
- ...dataset.controls,
381
- colorAxis: {
382
- ...dataset.controls.colorAxis,
383
- cmax: action.cmax
384
- }
385
- }
386
- };
387
- }
388
- case "set.controls.scale":
389
- {
390
- return {
391
- ...dataset,
392
- controls: {
393
- ...dataset.controls,
394
- scale: {
395
- ...dataset.controls.scale,
396
- [action.plot]: action.scale
397
- }
398
- }
399
- };
400
- }
401
- case "set.controls.meanOnlyExpressed":
402
- {
403
- return {
404
- ...dataset,
405
- controls: {
406
- ...dataset.controls,
407
- meanOnlyExpressed: action.meanOnlyExpressed
408
- }
409
- };
410
- }
411
- case "set.controls.expressionCutoff":
412
- {
413
- return {
414
- ...dataset,
415
- controls: {
416
- ...dataset.controls,
417
- expressionCutoff: action.expressionCutoff
418
- }
419
- };
420
- }
421
- case "toggle.slice.obs":
422
- {
423
- if (_.isEqual(dataset.selectedObs, action.obs)) {
424
- return {
425
- ...dataset,
426
- sliceBy: {
427
- ...dataset.sliceBy,
428
- obs: !dataset.sliceBy.obs
429
- }
430
- };
431
- } else {
432
- return {
433
- ...dataset,
434
- selectedObs: action.obs,
435
- sliceBy: {
436
- ...dataset.sliceBy,
437
- obs: true
438
- }
439
- };
440
- }
441
- }
442
- case "toggle.slice.polygons":
443
- {
444
- return {
445
- ...dataset,
446
- sliceBy: {
447
- ...dataset.sliceBy,
448
- polygons: !dataset.sliceBy.polygons
449
- }
450
- };
451
- }
452
- case "disable.slice.polygons":
453
- {
454
- return {
455
- ...dataset,
456
- sliceBy: {
457
- ...dataset.sliceBy,
458
- polygons: false
459
- }
460
- };
461
- }
462
- case "add.label.obs":
463
- {
464
- if (dataset.labelObs.find(i => _.isEqual(i, action.obs))) {
465
- return dataset;
466
- } else {
467
- return {
468
- ...dataset,
469
- labelObs: [...dataset.labelObs, action.obs]
470
- };
471
- }
472
- }
473
- case "remove.label.obs":
474
- {
475
- return {
476
- ...dataset,
477
- labelObs: dataset.labelObs.filter(a => a.name !== action.obsName)
478
- };
479
- }
480
- case "reset.label.obs":
481
- {
482
- return {
483
- ...dataset,
484
- labelObs: []
485
- };
486
- }
487
- case "set.varSort":
488
- {
489
- return {
490
- ...dataset,
491
- varSort: {
492
- ...dataset.varSort,
493
- [action.var]: {
494
- sort: action.sort,
495
- sortOrder: action.sortOrder
496
- }
497
- }
498
- };
499
- }
500
- case "set.varSort.sort":
501
- {
502
- return {
503
- ...dataset,
504
- varSort: {
505
- ...dataset.varSort,
506
- [action.var]: {
507
- ...dataset.varSort[action.var],
508
- sort: action.sort
509
- }
510
- }
511
- };
512
- }
513
- case "set.varSort.sortOrder":
514
- {
515
- return {
516
- ...dataset,
517
- varSort: {
518
- ...dataset.varSort,
519
- [action.var]: {
520
- ...dataset.varSort[action.var],
521
- sortOrder: action.sortOrder
522
- }
523
- }
524
- };
525
- }
526
- case "set.polygons":
527
- {
528
- return {
529
- ...dataset,
530
- polygons: {
531
- ...dataset.polygons,
532
- [action.obsm]: action.polygons
533
- }
534
- };
535
- }
536
- case "set.pseudospatial.maskSet":
537
- {
538
- return {
539
- ...dataset,
540
- pseudospatial: {
541
- ...dataset.pseudospatial,
542
- maskSet: action.maskSet
543
- }
544
- };
545
- }
546
- case "set.pseudospatial.maskValues":
547
- {
548
- return {
549
- ...dataset,
550
- pseudospatial: {
551
- ...dataset.pseudospatial,
552
- maskValues: action.maskValues
553
- }
554
- };
555
- }
556
- case "set.pseudospatial.categoricalMode":
557
- {
558
- return {
559
- ...dataset,
560
- pseudospatial: {
561
- ...dataset.pseudospatial,
562
- categoricalMode: action.categoricalMode
563
- }
564
- };
565
- }
566
- default:
567
- {
568
- throw Error("Unknown action: " + action.type);
569
- }
570
- }
571
86
  }
@@ -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, { useReducer, createContext, useContext } from "react";
2
7
  export const FilteredDataContext = /*#__PURE__*/createContext(null);
3
8
  export const FilteredDataDispatchContext = /*#__PURE__*/createContext(null);
@@ -12,9 +17,7 @@ export function FilterProvider(_ref) {
12
17
  let {
13
18
  children
14
19
  } = _ref;
15
- const [filteredData, dispatch] = useReducer(filterReducer, {
16
- ...initialFilterData
17
- });
20
+ const [filteredData, dispatch] = useReducer(filterReducer, _objectSpread({}, initialFilterData));
18
21
  return /*#__PURE__*/React.createElement(FilteredDataContext.Provider, {
19
22
  value: filteredData
20
23
  }, /*#__PURE__*/React.createElement(FilteredDataDispatchContext.Provider, {
@@ -31,14 +34,13 @@ function filterReducer(filteredData, action) {
31
34
  switch (action.type) {
32
35
  case "set.obs.indices":
33
36
  {
34
- return {
35
- ...filteredData,
37
+ return _objectSpread(_objectSpread({}, filteredData), {}, {
36
38
  obsIndices: action.indices,
37
39
  valueMin: action.valueMin,
38
40
  valueMax: action.valueMax,
39
41
  slicedLength: action.slicedLength,
40
42
  isSliced: action.isSliced
41
- };
43
+ });
42
44
  }
43
45
  default:
44
46
  {