Skip to content

Commit 1d86e33

Browse files
authored
Merge pull request #116 from Kitware/fix-data-available-triggers
Fix onDataAvailable triggers
2 parents ae5e18a + 353b78a commit 1d86e33

4 files changed

+25
-9
lines changed

src/core/Geometry2DRepresentation.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { IDownstream, IRepresentation } from '../types';
2020
import { compareShallowObject } from '../utils/comparators';
2121
import useBooleanAccumulator from '../utils/useBooleanAccumulator';
2222
import useComparableEffect from '../utils/useComparableEffect';
23+
import useLatest from '../utils/useLatest';
2324
import {
2425
DownstreamContext,
2526
RepresentationContext,
@@ -153,13 +154,15 @@ export default forwardRef(function Geometry2DRepresentation(
153154

154155
// --- events --- //
155156

156-
const { onDataAvailable } = props;
157+
const onDataAvailable = useLatest(props.onDataAvailable);
157158
useEffect(() => {
158159
if (dataAvailable) {
159160
// trigger onDataAvailable after making updates to the actor and mapper
160-
onDataAvailable?.();
161+
onDataAvailable.current?.();
161162
}
162-
}, [dataAvailable, onDataAvailable]);
163+
// onDataAvailable is a ref
164+
// eslint-disable-next-line react-hooks/exhaustive-deps
165+
}, [dataAvailable]);
163166

164167
// --- //
165168

src/core/GeometryRepresentation.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { IDownstream, IRepresentation } from '../types';
1818
import { compareShallowObject } from '../utils/comparators';
1919
import useBooleanAccumulator from '../utils/useBooleanAccumulator';
2020
import useComparableEffect from '../utils/useComparableEffect';
21+
import useLatest from '../utils/useLatest';
2122
import {
2223
DownstreamContext,
2324
RepresentationContext,
@@ -166,13 +167,15 @@ export default forwardRef(function GeometryRepresentation(
166167

167168
// --- events --- //
168169

169-
const { onDataAvailable } = props;
170+
const onDataAvailable = useLatest(props.onDataAvailable);
170171
useEffect(() => {
171172
if (dataAvailable) {
172173
// trigger onDataAvailable after making updates to the actor and mapper
173-
onDataAvailable?.();
174+
onDataAvailable.current?.();
174175
}
175-
}, [dataAvailable, onDataAvailable]);
176+
// onDataAvailable is a ref
177+
// eslint-disable-next-line react-hooks/exhaustive-deps
178+
}, [dataAvailable]);
176179

177180
// --- //
178181

src/core/SliceRepresentation.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { IDownstream, IRepresentation } from '../types';
2323
import { compareShallowObject } from '../utils/comparators';
2424
import useBooleanAccumulator from '../utils/useBooleanAccumulator';
2525
import useComparableEffect from '../utils/useComparableEffect';
26+
import useLatest from '../utils/useLatest';
2627
import {
2728
DownstreamContext,
2829
RepresentationContext,
@@ -253,13 +254,15 @@ export default forwardRef(function SliceRepresentation(
253254

254255
// --- events --- //
255256

256-
const { onDataAvailable } = props;
257+
const onDataAvailable = useLatest(props.onDataAvailable);
257258
useEffect(() => {
258259
if (dataAvailable) {
259260
// trigger onDataAvailable after making updates to the actor and mapper
260-
onDataAvailable?.();
261+
onDataAvailable.current?.();
261262
}
262-
}, [dataAvailable, onDataAvailable]);
263+
// onDataAvailable is a ref
264+
// eslint-disable-next-line react-hooks/exhaustive-deps
265+
}, [dataAvailable]);
263266

264267
// --- //
265268

src/utils/useLatest.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { useRef } from 'react';
2+
3+
export default function useLatest<T>(val: T) {
4+
const ref = useRef(val);
5+
ref.current = val;
6+
return ref;
7+
}

0 commit comments

Comments
 (0)