@vitessce/vit-s 4.0.7 → 4.0.8

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/index.js CHANGED
@@ -33260,7 +33260,8 @@ const ViewType$1 = {
33260
33260
  DUAL_SCATTERPLOT: "dualScatterplot",
33261
33261
  TREEMAP: "treemap",
33262
33262
  SAMPLE_SET_PAIR_MANAGER: "sampleSetPairManager",
33263
- FEATURE_STATS_TABLE: "featureStatsTable"
33263
+ FEATURE_STATS_TABLE: "featureStatsTable",
33264
+ SINGLE_OBS_SET_SELECTOR: "singleObsSetSelector"
33264
33265
  };
33265
33266
  const DataType$1 = {
33266
33267
  OBS_LABELS: "obsLabels",
@@ -34462,6 +34463,11 @@ const AUTO_INDEPENDENT_COORDINATION_TYPES = [
34462
34463
  CoordinationType$1.FEATURE_POINT_FOLD_CHANGE_THRESHOLD,
34463
34464
  CoordinationType$1.FEATURE_LABEL_FOLD_CHANGE_THRESHOLD
34464
34465
  ],
34466
+ [ViewType$1.SINGLE_OBS_SET_SELECTOR]: [
34467
+ CoordinationType$1.OBS_TYPE,
34468
+ CoordinationType$1.OBS_SET_COLOR,
34469
+ CoordinationType$1.OBS_SET_SELECTION
34470
+ ],
34465
34471
  [ViewType$1.OBS_SET_COMPOSITION_BAR_PLOT]: [
34466
34472
  CoordinationType$1.DATASET,
34467
34473
  CoordinationType$1.OBS_TYPE,
@@ -34556,7 +34562,7 @@ const AUTO_INDEPENDENT_COORDINATION_TYPES = [
34556
34562
  CoordinationType$1.HIERARCHY_LEVELS
34557
34563
  ]
34558
34564
  });
34559
- const version = "4.0.7";
34565
+ const version = "4.0.8";
34560
34566
  const META_VERSION = {
34561
34567
  version
34562
34568
  };
@@ -46009,31 +46015,44 @@ function useWindowDimensions() {
46009
46015
  }, []);
46010
46016
  return windowDimensions;
46011
46017
  }
46018
+ const EMPTY_SIZE = { width: void 0, height: void 0 };
46012
46019
  function useGridItemSize() {
46013
46020
  const containerRef = useRef();
46014
- const [height2, setHeight] = useState();
46015
- const [width2, setWidth] = useState();
46016
- const resizeCount = useGridResize();
46017
- const incrementResizeCount = useEmitGridResize();
46021
+ const observerRef = useRef(null);
46022
+ const observedRef = useRef(null);
46023
+ const [size2, setSize] = useState(EMPTY_SIZE);
46018
46024
  useEffect(() => {
46019
- function onWindowResize() {
46020
- incrementResizeCount();
46025
+ if (typeof ResizeObserver === "undefined") {
46026
+ return () => {
46027
+ };
46021
46028
  }
46022
- const onResizeDebounced = debounce(onWindowResize, 100, { trailing: true });
46023
- window.addEventListener("resize", onResizeDebounced);
46024
- onWindowResize();
46029
+ const observer = new ResizeObserver(([entry]) => {
46030
+ if (!entry) return;
46031
+ const { width: width2, height: height2 } = entry.target.getBoundingClientRect();
46032
+ setSize((prevSize) => prevSize.width === width2 && prevSize.height === height2 ? prevSize : { width: width2, height: height2 });
46033
+ });
46034
+ observerRef.current = observer;
46025
46035
  return () => {
46026
- window.removeEventListener("resize", onResizeDebounced);
46036
+ observer.disconnect();
46037
+ observerRef.current = null;
46038
+ observedRef.current = null;
46027
46039
  };
46028
- }, [incrementResizeCount]);
46040
+ }, []);
46029
46041
  useEffect(() => {
46030
- if (!containerRef.current) return;
46031
- const container = containerRef.current;
46032
- const containerRect = container.getBoundingClientRect();
46033
- setHeight(containerRect.height);
46034
- setWidth(containerRect.width);
46035
- }, [resizeCount]);
46036
- return [width2, height2, containerRef];
46042
+ const observer = observerRef.current;
46043
+ const element = containerRef.current ?? null;
46044
+ if (!observer || element === observedRef.current) {
46045
+ return;
46046
+ }
46047
+ if (observedRef.current) {
46048
+ observer.unobserve(observedRef.current);
46049
+ }
46050
+ observedRef.current = element;
46051
+ if (element) {
46052
+ observer.observe(element);
46053
+ }
46054
+ });
46055
+ return [size2.width, size2.height, containerRef];
46037
46056
  }
46038
46057
  function useDeckCanvasSize() {
46039
46058
  const deckRef = useRef();
@@ -6,7 +6,12 @@ export function useVitessceContainer(ref: any): any;
6
6
  */
7
7
  export function useWindowDimensions(): array;
8
8
  /**
9
- * Custom hook, subscribes to GRID_RESIZE and window resize events.
9
+ * Custom hook, observes the size of a grid item's container element.
10
+ *
11
+ * The size is obtained from a ResizeObserver on the container element itself,
12
+ * so it stays in sync with window resizes, react-grid-layout resizes, and any
13
+ * other layout change, without the view needing to listen for those events or
14
+ * to broadcast anything to sibling views.
10
15
  * @returns {array} `[width, height, containerRef]` where width and height
11
16
  * are numbers and containerRef is a React ref.
12
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.js"],"names":[],"mappings":"AAsBA,oDAOC;AAED;;;;GAIG;AACH,uCAHa,KAAK,CAmBjB;AAED;;;;GAIG;AACH,mCAHa,KAAK,CAoCjB;AAED;;;;;GAKG;AACH,qCAJa,KAAK,CAqCjB;AAED;;;;;;GAMG;AACH,uCAHW,MAAM,EAAE,GACN,OAAO,CAOnB;AAED;;;;GAIG;AACH,8BAHW,CAAC,IAAI,GAAC,MAAM,EAAE,CAAC,EAAE,GACf,KAAK,CAYjB;AAED;;;;;;GAMG;AACH,qDAJW,GAAG,sBACD,KAAK,CA0BjB;AAED;;;;;;;;;;GAUG;AACH,+DARG;IAAuB,gBAAgB,EAA/B,MAAM;CAEd,GAAU,KAAK,CAmBjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,yDAbW,YAAY,EAAE,GAAG,IAAI,GAInB;IACZ,QAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACjC,OAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IACtC,OAAU,EAAE,MAAM,EAAE,CAAA;CACjB,CAwBH;AAMD;;;;QAyCC;AAED,iEAOC;AAED,kHA4BC;AAED;;;;;;;;;;GAUG;AACH,yDALW,MAAM,oBACN,gBAAI,IAAI,iBAEN;IAAE,kBAAkB,EAAE,OAAO,CAAA;CAAE,GAAC,IAAI,CAkChD;AAED;;;;;;;GAOG;AACH,6CALW,GAAC,YACD,CAAC,OAAO,CAAC,GAEP,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8BlC"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.js"],"names":[],"mappings":"AAsBA,oDAOC;AAED;;;;GAIG;AACH,uCAHa,KAAK,CAmBjB;AAID;;;;;;;;;GASG;AACH,mCAHa,KAAK,CA6DjB;AAED;;;;;GAKG;AACH,qCAJa,KAAK,CAqCjB;AAED;;;;;;GAMG;AACH,uCAHW,MAAM,EAAE,GACN,OAAO,CAOnB;AAED;;;;GAIG;AACH,8BAHW,CAAC,IAAI,GAAC,MAAM,EAAE,CAAC,EAAE,GACf,KAAK,CAYjB;AAED;;;;;;GAMG;AACH,qDAJW,GAAG,sBACD,KAAK,CA0BjB;AAED;;;;;;;;;;GAUG;AACH,+DARG;IAAuB,gBAAgB,EAA/B,MAAM;CAEd,GAAU,KAAK,CAmBjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,yDAbW,YAAY,EAAE,GAAG,IAAI,GAInB;IACZ,QAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACjC,OAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IACtC,OAAU,EAAE,MAAM,EAAE,CAAA;CACjB,CAwBH;AAMD;;;;QAyCC;AAED,iEAOC;AAED,kHA4BC;AAED;;;;;;;;;;GAUG;AACH,yDALW,MAAM,oBACN,gBAAI,IAAI,iBAEN;IAAE,kBAAkB,EAAE,OAAO,CAAA;CAAE,GAAC,IAAI,CAkChD;AAED;;;;;;;GAOG;AACH,6CALW,GAAC,YACD,CAAC,OAAO,CAAC,GAEP,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8BlC"}
package/dist-tsc/hooks.js CHANGED
@@ -40,40 +40,70 @@ export function useWindowDimensions() {
40
40
  }, []);
41
41
  return windowDimensions;
42
42
  }
43
+ const EMPTY_SIZE = { width: undefined, height: undefined };
43
44
  /**
44
- * Custom hook, subscribes to GRID_RESIZE and window resize events.
45
+ * Custom hook, observes the size of a grid item's container element.
46
+ *
47
+ * The size is obtained from a ResizeObserver on the container element itself,
48
+ * so it stays in sync with window resizes, react-grid-layout resizes, and any
49
+ * other layout change, without the view needing to listen for those events or
50
+ * to broadcast anything to sibling views.
45
51
  * @returns {array} `[width, height, containerRef]` where width and height
46
52
  * are numbers and containerRef is a React ref.
47
53
  */
48
54
  export function useGridItemSize() {
49
55
  const containerRef = useRef();
50
- const [height, setHeight] = useState();
51
- const [width, setWidth] = useState();
52
- const resizeCount = useGridResize();
53
- const incrementResizeCount = useEmitGridResize();
54
- // On window resize events, increment the grid resize count.
56
+ const observerRef = useRef(null);
57
+ const observedRef = useRef(null);
58
+ const [size, setSize] = useState(EMPTY_SIZE);
59
+ // Create one ResizeObserver for the lifetime of the component.
55
60
  useEffect(() => {
56
- function onWindowResize() {
57
- incrementResizeCount();
61
+ if (typeof ResizeObserver === 'undefined') {
62
+ // Environments without a ResizeObserver implementation (such as jsdom)
63
+ // do not receive size updates.
64
+ return () => { };
58
65
  }
59
- const onResizeDebounced = debounce(onWindowResize, 100, { trailing: true });
60
- window.addEventListener('resize', onResizeDebounced);
61
- onWindowResize();
66
+ const observer = new ResizeObserver(([entry]) => {
67
+ if (!entry)
68
+ return;
69
+ // Prefer getBoundingClientRect over the ResizeObserver entry's box sizes,
70
+ // so that the result accounts for CSS transforms on ancestor elements.
71
+ const { width, height } = entry.target.getBoundingClientRect();
72
+ // Bail out when the size is unchanged, both to avoid a wasted re-render
73
+ // and to guarantee that a callback cannot feed back into itself.
74
+ setSize(prevSize => (prevSize.width === width && prevSize.height === height
75
+ ? prevSize
76
+ : { width, height }));
77
+ });
78
+ observerRef.current = observer;
62
79
  return () => {
63
- window.removeEventListener('resize', onResizeDebounced);
80
+ observer.disconnect();
81
+ observerRef.current = null;
82
+ observedRef.current = null;
64
83
  };
65
- }, [incrementResizeCount]);
66
- // On new grid resize counts, re-compute the component
67
- // width/height.
84
+ }, []);
85
+ // The container element is not necessarily mounted on the first render, and
86
+ // some views swap it out or assign containerRef.current imperatively, so
87
+ // re-check which element to observe after every render rather than only once.
68
88
  useEffect(() => {
69
- if (!containerRef.current)
89
+ const observer = observerRef.current;
90
+ const element = containerRef.current ?? null;
91
+ if (!observer || element === observedRef.current) {
70
92
  return;
71
- const container = containerRef.current;
72
- const containerRect = container.getBoundingClientRect();
73
- setHeight(containerRect.height);
74
- setWidth(containerRect.width);
75
- }, [resizeCount]);
76
- return [width, height, containerRef];
93
+ }
94
+ if (observedRef.current) {
95
+ observer.unobserve(observedRef.current);
96
+ }
97
+ observedRef.current = element;
98
+ if (element) {
99
+ // ResizeObserver invokes its callback once upon observe(),
100
+ // which provides the initial measurement.
101
+ observer.observe(element);
102
+ }
103
+ // Deliberately no dependency array: the effect body is a cheap
104
+ // identity comparison in the common case where nothing changed.
105
+ });
106
+ return [size.width, size.height, containerRef];
77
107
  }
78
108
  /**
79
109
  * Custom hook, subscribes to GRID_RESIZE and window resize events.
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.js"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { renderHook } from '@testing-library/react';
3
- import { useExpressionValueGetter } from './hooks.js';
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
4
+ import { renderHook, render, act } from '@testing-library/react';
5
+ import { useExpressionValueGetter, useGridItemSize } from './hooks.js';
6
+ import { useGridResize } from './state/hooks.js';
4
7
  describe('useExpressionValueGetter', () => {
5
8
  const expressionData = [new Uint8Array([10, 20, 30])];
6
9
  it('reads by position when the instance and matrix indices are the same array', () => {
@@ -33,4 +36,98 @@ describe('useExpressionValueGetter', () => {
33
36
  expect(noData.current(null, { index: 0 })).toEqual(0);
34
37
  });
35
38
  });
39
+ describe('useGridItemSize', () => {
40
+ let observers;
41
+ let rect;
42
+ let originalResizeObserver;
43
+ function GridItem(props) {
44
+ const { sizes, withContainer = true } = props;
45
+ const [width, height, containerRef] = useGridItemSize();
46
+ sizes.push([width, height]);
47
+ return withContainer ? _jsx("div", { ref: containerRef }) : null;
48
+ }
49
+ beforeEach(() => {
50
+ observers = [];
51
+ rect = { width: 0, height: 0 };
52
+ // eslint-disable-next-line no-undef
53
+ originalResizeObserver = globalThis.ResizeObserver;
54
+ // jsdom does not implement ResizeObserver.
55
+ // eslint-disable-next-line no-undef
56
+ globalThis.ResizeObserver = class {
57
+ constructor(callback) {
58
+ this.callback = callback;
59
+ this.element = null;
60
+ observers.push(this);
61
+ }
62
+ observe(element) {
63
+ this.element = element;
64
+ // The real ResizeObserver invokes its callback once upon observe().
65
+ this.callback([{ target: element }], this);
66
+ }
67
+ unobserve() {
68
+ this.element = null;
69
+ }
70
+ disconnect() {
71
+ this.element = null;
72
+ }
73
+ };
74
+ vi.spyOn(HTMLElement.prototype, 'getBoundingClientRect')
75
+ .mockImplementation(() => ({ ...rect }));
76
+ });
77
+ afterEach(() => {
78
+ // eslint-disable-next-line no-undef
79
+ globalThis.ResizeObserver = originalResizeObserver;
80
+ vi.restoreAllMocks();
81
+ });
82
+ it('measures the container element on mount and on subsequent resizes', () => {
83
+ rect = { width: 300, height: 200 };
84
+ const sizes = [];
85
+ render(_jsx(GridItem, { sizes: sizes }));
86
+ expect(sizes.at(-1)).toEqual([300, 200]);
87
+ // A later element resize is picked up without any window or grid event.
88
+ rect = { width: 320, height: 180 };
89
+ act(() => {
90
+ observers[0].callback([{ target: observers[0].element }], observers[0]);
91
+ });
92
+ expect(sizes.at(-1)).toEqual([320, 180]);
93
+ });
94
+ it('stops re-rendering when the observed size is unchanged', () => {
95
+ rect = { width: 300, height: 200 };
96
+ const sizes = [];
97
+ render(_jsx(GridItem, { sizes: sizes }));
98
+ const renderCount = sizes.length;
99
+ // Repeated callbacks reporting the same size must not keep re-rendering,
100
+ // otherwise a ResizeObserver callback could feed back into itself.
101
+ for (let i = 0; i < 5; i += 1) {
102
+ // eslint-disable-next-line no-loop-func
103
+ act(() => {
104
+ observers[0].callback([{ target: observers[0].element }], observers[0]);
105
+ });
106
+ }
107
+ // React may still render once before bailing out on the unchanged state.
108
+ expect(sizes.length).toBeLessThanOrEqual(renderCount + 1);
109
+ expect(sizes.at(-1)).toEqual([300, 200]);
110
+ });
111
+ it('observes a container element which only mounts after the first render', () => {
112
+ rect = { width: 300, height: 200 };
113
+ const sizes = [];
114
+ const { rerender } = render(_jsx(GridItem, { sizes: sizes, withContainer: false }));
115
+ expect(sizes.at(-1)).toEqual([undefined, undefined]);
116
+ rerender(_jsx(GridItem, { sizes: sizes, withContainer: true }));
117
+ expect(sizes.at(-1)).toEqual([300, 200]);
118
+ });
119
+ it('does not notify sibling views when it mounts', () => {
120
+ // Regression test: emitting a global grid-resize event on mount caused
121
+ // every other view in the grid to re-render (and DeckGL views to re-measure)
122
+ // whenever any view mounted.
123
+ const resizeCounts = [];
124
+ function Sibling() {
125
+ resizeCounts.push(useGridResize());
126
+ return null;
127
+ }
128
+ const { rerender } = render(_jsx(_Fragment, { children: _jsx(Sibling, {}) }));
129
+ rerender(_jsxs(_Fragment, { children: [_jsx(Sibling, {}), _jsx(GridItem, { sizes: [] })] }));
130
+ expect(new Set(resizeCounts).size).toEqual(1);
131
+ });
132
+ });
36
133
  //# sourceMappingURL=hooks.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.test.js","sourceRoot":"","sources":["../src/hooks.test.jsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.test.js","sourceRoot":"","sources":["../src/hooks.test.jsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitessce/vit-s",
3
- "version": "4.0.7",
3
+ "version": "4.0.8",
4
4
  "author": "HIDIVE Lab at HMS",
5
5
  "homepage": "http://vitessce.io",
6
6
  "repository": {
@@ -31,17 +31,17 @@
31
31
  "react-error-boundary": "^5.0.0",
32
32
  "@placemarkio/flat-drop-files": "^1.0.2",
33
33
  "zarrita": "0.7.5",
34
- "@vitessce/styles": "4.0.7",
35
- "@vitessce/abstract": "4.0.7",
36
- "@vitessce/constants-internal": "4.0.7",
37
- "@vitessce/plugins": "4.0.7",
38
- "@vitessce/utils": "4.0.7",
39
- "@vitessce/sets-utils": "4.0.7",
40
- "@vitessce/zarr-utils": "4.0.7",
41
- "@vitessce/config": "4.0.7",
42
- "@vitessce/globals": "4.0.7",
43
- "@vitessce/schemas": "4.0.7",
44
- "@vitessce/error": "4.0.7"
34
+ "@vitessce/styles": "4.0.8",
35
+ "@vitessce/abstract": "4.0.8",
36
+ "@vitessce/error": "4.0.8",
37
+ "@vitessce/constants-internal": "4.0.8",
38
+ "@vitessce/plugins": "4.0.8",
39
+ "@vitessce/schemas": "4.0.8",
40
+ "@vitessce/sets-utils": "4.0.8",
41
+ "@vitessce/zarr-utils": "4.0.8",
42
+ "@vitessce/config": "4.0.8",
43
+ "@vitessce/utils": "4.0.8",
44
+ "@vitessce/globals": "4.0.8"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@testing-library/jest-dom": "^6.6.3",
@@ -50,7 +50,7 @@
50
50
  "react-dom": "19.2.6",
51
51
  "vite": "^7.0.0",
52
52
  "vitest": "^3.1.4",
53
- "@vitessce/types": "4.0.7"
53
+ "@vitessce/types": "4.0.8"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
package/src/hooks.js CHANGED
@@ -52,44 +52,76 @@ export function useWindowDimensions() {
52
52
  return windowDimensions;
53
53
  }
54
54
 
55
+ const EMPTY_SIZE = { width: undefined, height: undefined };
56
+
55
57
  /**
56
- * Custom hook, subscribes to GRID_RESIZE and window resize events.
58
+ * Custom hook, observes the size of a grid item's container element.
59
+ *
60
+ * The size is obtained from a ResizeObserver on the container element itself,
61
+ * so it stays in sync with window resizes, react-grid-layout resizes, and any
62
+ * other layout change, without the view needing to listen for those events or
63
+ * to broadcast anything to sibling views.
57
64
  * @returns {array} `[width, height, containerRef]` where width and height
58
65
  * are numbers and containerRef is a React ref.
59
66
  */
60
67
  export function useGridItemSize() {
61
68
  const containerRef = useRef();
69
+ const observerRef = useRef(null);
70
+ const observedRef = useRef(null);
62
71
 
63
- const [height, setHeight] = useState();
64
- const [width, setWidth] = useState();
65
-
66
- const resizeCount = useGridResize();
67
- const incrementResizeCount = useEmitGridResize();
72
+ const [size, setSize] = useState(EMPTY_SIZE);
68
73
 
69
- // On window resize events, increment the grid resize count.
74
+ // Create one ResizeObserver for the lifetime of the component.
70
75
  useEffect(() => {
71
- function onWindowResize() {
72
- incrementResizeCount();
76
+ if (typeof ResizeObserver === 'undefined') {
77
+ // Environments without a ResizeObserver implementation (such as jsdom)
78
+ // do not receive size updates.
79
+ return () => {};
73
80
  }
74
- const onResizeDebounced = debounce(onWindowResize, 100, { trailing: true });
75
- window.addEventListener('resize', onResizeDebounced);
76
- onWindowResize();
81
+ const observer = new ResizeObserver(([entry]) => {
82
+ if (!entry) return;
83
+ // Prefer getBoundingClientRect over the ResizeObserver entry's box sizes,
84
+ // so that the result accounts for CSS transforms on ancestor elements.
85
+ const { width, height } = entry.target.getBoundingClientRect();
86
+ // Bail out when the size is unchanged, both to avoid a wasted re-render
87
+ // and to guarantee that a callback cannot feed back into itself.
88
+ setSize(prevSize => (
89
+ prevSize.width === width && prevSize.height === height
90
+ ? prevSize
91
+ : { width, height }
92
+ ));
93
+ });
94
+ observerRef.current = observer;
77
95
  return () => {
78
- window.removeEventListener('resize', onResizeDebounced);
96
+ observer.disconnect();
97
+ observerRef.current = null;
98
+ observedRef.current = null;
79
99
  };
80
- }, [incrementResizeCount]);
100
+ }, []);
81
101
 
82
- // On new grid resize counts, re-compute the component
83
- // width/height.
102
+ // The container element is not necessarily mounted on the first render, and
103
+ // some views swap it out or assign containerRef.current imperatively, so
104
+ // re-check which element to observe after every render rather than only once.
84
105
  useEffect(() => {
85
- if (!containerRef.current) return;
86
- const container = containerRef.current;
87
- const containerRect = container.getBoundingClientRect();
88
- setHeight(containerRect.height);
89
- setWidth(containerRect.width);
90
- }, [resizeCount]);
106
+ const observer = observerRef.current;
107
+ const element = containerRef.current ?? null;
108
+ if (!observer || element === observedRef.current) {
109
+ return;
110
+ }
111
+ if (observedRef.current) {
112
+ observer.unobserve(observedRef.current);
113
+ }
114
+ observedRef.current = element;
115
+ if (element) {
116
+ // ResizeObserver invokes its callback once upon observe(),
117
+ // which provides the initial measurement.
118
+ observer.observe(element);
119
+ }
120
+ // Deliberately no dependency array: the effect body is a cheap
121
+ // identity comparison in the common case where nothing changed.
122
+ });
91
123
 
92
- return [width, height, containerRef];
124
+ return [size.width, size.height, containerRef];
93
125
  }
94
126
 
95
127
  /**
@@ -1,6 +1,10 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { renderHook } from '@testing-library/react';
3
- import { useExpressionValueGetter } from './hooks.js';
1
+ import React from 'react';
2
+ import {
3
+ describe, it, expect, vi, beforeEach, afterEach,
4
+ } from 'vitest';
5
+ import { renderHook, render, act } from '@testing-library/react';
6
+ import { useExpressionValueGetter, useGridItemSize } from './hooks.js';
7
+ import { useGridResize } from './state/hooks.js';
4
8
 
5
9
  describe('useExpressionValueGetter', () => {
6
10
  const expressionData = [new Uint8Array([10, 20, 30])];
@@ -37,3 +41,110 @@ describe('useExpressionValueGetter', () => {
37
41
  expect(noData.current(null, { index: 0 })).toEqual(0);
38
42
  });
39
43
  });
44
+
45
+ describe('useGridItemSize', () => {
46
+ let observers;
47
+ let rect;
48
+ let originalResizeObserver;
49
+
50
+ function GridItem(props) {
51
+ const { sizes, withContainer = true } = props;
52
+ const [width, height, containerRef] = useGridItemSize();
53
+ sizes.push([width, height]);
54
+ return withContainer ? <div ref={containerRef} /> : null;
55
+ }
56
+
57
+ beforeEach(() => {
58
+ observers = [];
59
+ rect = { width: 0, height: 0 };
60
+ // eslint-disable-next-line no-undef
61
+ originalResizeObserver = globalThis.ResizeObserver;
62
+ // jsdom does not implement ResizeObserver.
63
+ // eslint-disable-next-line no-undef
64
+ globalThis.ResizeObserver = class {
65
+ constructor(callback) {
66
+ this.callback = callback;
67
+ this.element = null;
68
+ observers.push(this);
69
+ }
70
+
71
+ observe(element) {
72
+ this.element = element;
73
+ // The real ResizeObserver invokes its callback once upon observe().
74
+ this.callback([{ target: element }], this);
75
+ }
76
+
77
+ unobserve() {
78
+ this.element = null;
79
+ }
80
+
81
+ disconnect() {
82
+ this.element = null;
83
+ }
84
+ };
85
+ vi.spyOn(HTMLElement.prototype, 'getBoundingClientRect')
86
+ .mockImplementation(() => ({ ...rect }));
87
+ });
88
+
89
+ afterEach(() => {
90
+ // eslint-disable-next-line no-undef
91
+ globalThis.ResizeObserver = originalResizeObserver;
92
+ vi.restoreAllMocks();
93
+ });
94
+
95
+ it('measures the container element on mount and on subsequent resizes', () => {
96
+ rect = { width: 300, height: 200 };
97
+ const sizes = [];
98
+ render(<GridItem sizes={sizes} />);
99
+ expect(sizes.at(-1)).toEqual([300, 200]);
100
+
101
+ // A later element resize is picked up without any window or grid event.
102
+ rect = { width: 320, height: 180 };
103
+ act(() => {
104
+ observers[0].callback([{ target: observers[0].element }], observers[0]);
105
+ });
106
+ expect(sizes.at(-1)).toEqual([320, 180]);
107
+ });
108
+
109
+ it('stops re-rendering when the observed size is unchanged', () => {
110
+ rect = { width: 300, height: 200 };
111
+ const sizes = [];
112
+ render(<GridItem sizes={sizes} />);
113
+ const renderCount = sizes.length;
114
+ // Repeated callbacks reporting the same size must not keep re-rendering,
115
+ // otherwise a ResizeObserver callback could feed back into itself.
116
+ for (let i = 0; i < 5; i += 1) {
117
+ // eslint-disable-next-line no-loop-func
118
+ act(() => {
119
+ observers[0].callback([{ target: observers[0].element }], observers[0]);
120
+ });
121
+ }
122
+ // React may still render once before bailing out on the unchanged state.
123
+ expect(sizes.length).toBeLessThanOrEqual(renderCount + 1);
124
+ expect(sizes.at(-1)).toEqual([300, 200]);
125
+ });
126
+
127
+ it('observes a container element which only mounts after the first render', () => {
128
+ rect = { width: 300, height: 200 };
129
+ const sizes = [];
130
+ const { rerender } = render(<GridItem sizes={sizes} withContainer={false} />);
131
+ expect(sizes.at(-1)).toEqual([undefined, undefined]);
132
+
133
+ rerender(<GridItem sizes={sizes} withContainer />);
134
+ expect(sizes.at(-1)).toEqual([300, 200]);
135
+ });
136
+
137
+ it('does not notify sibling views when it mounts', () => {
138
+ // Regression test: emitting a global grid-resize event on mount caused
139
+ // every other view in the grid to re-render (and DeckGL views to re-measure)
140
+ // whenever any view mounted.
141
+ const resizeCounts = [];
142
+ function Sibling() {
143
+ resizeCounts.push(useGridResize());
144
+ return null;
145
+ }
146
+ const { rerender } = render(<><Sibling /></>);
147
+ rerender(<><Sibling /><GridItem sizes={[]} /></>);
148
+ expect(new Set(resizeCounts).size).toEqual(1);
149
+ });
150
+ });