diff --git a/.changeset/calm-refs-rest.md b/.changeset/calm-refs-rest.md new file mode 100644 index 0000000000..82977e2e91 --- /dev/null +++ b/.changeset/calm-refs-rest.md @@ -0,0 +1,5 @@ +--- +"@sanity/ui": patch +--- + +fix: prevent stateful element refs from updating during Suspense and Activity detach cycles diff --git a/apps/docs/src/lib/arcade/ArcadeFrame.tsx b/apps/docs/src/lib/arcade/ArcadeFrame.tsx index 078040a5a5..49cf8a81ff 100644 --- a/apps/docs/src/lib/arcade/ArcadeFrame.tsx +++ b/apps/docs/src/lib/arcade/ArcadeFrame.tsx @@ -22,6 +22,9 @@ export function ArcadeFrame({ const [frame, setFrame] = useState(null) const [ready, setReady] = useState(false) const msgQueueRef = useRef([]) + const handleFrameRef = useCallback((element: HTMLIFrameElement | null) => { + if (element) setFrame(element) + }, []) // Handle messages from frame useEffect(() => { @@ -73,5 +76,5 @@ export function ArcadeFrame({ [hookCode, jsxCode, postMessage], ) - return + return } diff --git a/packages/ui/src/core/components/autocomplete/autocomplete.tsx b/packages/ui/src/core/components/autocomplete/autocomplete.tsx index 6639dff94e..52dfa8f9c7 100644 --- a/packages/ui/src/core/components/autocomplete/autocomplete.tsx +++ b/packages/ui/src/core/components/autocomplete/autocomplete.tsx @@ -23,6 +23,7 @@ import { import {EMPTY_ARRAY, EMPTY_RECORD} from '../../constants' import {_raf} from '../../helpers/animation' import {_hasFocus, focusFirstDescendant} from '../../helpers/focus' +import {useConnectedRef} from '../../hooks/useConnectedRef' import {Box, BoxProps} from '../../primitives/box/box' import {Button} from '../../primitives/button/button' import {Card} from '../../primitives/card/card' @@ -202,9 +203,10 @@ export function Autocomplete