diff --git a/src/components/Menu/index.tsx b/src/components/Menu/index.tsx index d1f2fb969c..3f1e641baf 100644 --- a/src/components/Menu/index.tsx +++ b/src/components/Menu/index.tsx @@ -1,4 +1,12 @@ -import {cloneElement, Fragment, isValidElement, useMemo, useRef} from 'react' +import { + cloneElement, + Fragment, + isValidElement, + useEffect, + useMemo, + useRef, + useState, +} from 'react' import { findNodeHandle, Pressable, @@ -106,9 +114,14 @@ export function Outer({ }>) { const context = useMenuContext() const {_} = useLingui() - const sourceViewTag = enableTransition - ? (findNodeHandle(context.triggerRef.current) ?? undefined) - : undefined + const [sourceViewTag, setSourceViewTag] = useState() + + useEffect(() => { + if (enableTransition && context.triggerRef.current) { + const tag = findNodeHandle(context.triggerRef.current) + if (tag != null) setSourceViewTag(tag) + } + }, [enableTransition, context.triggerRef]) return ( (null) + const [sourceViewTag, setSourceViewTag] = useState() + + const btnRef = (node: View | null) => { + if (node) { + const tag = findNodeHandle(node) + if (tag != null) setSourceViewTag(tag) + } + } const hasLabel = labels.length > 0 @@ -80,7 +87,7 @@ export function LabelsBtn({ control={control} nativeOptions={{ preventExpansion: true, - sourceViewTag: findNodeHandle(btnRef.current) ?? undefined, + sourceViewTag, }}> (null) + const [sourceViewTag, setSourceViewTag] = useState() + const btnRef = (node: View | null) => { + if (node) { + const tag = findNodeHandle(node) + if (tag != null) setSourceViewTag(tag) + } + } const [threadgateNudged, setThreadgateNudged] = useThreadgateNudged() const [showTooltip, setShowTooltip] = useState(false) const [tooltipWasShown] = useState(!threadgateNudged) @@ -175,7 +181,7 @@ export function ThreadgateBtn({ { if (persist) { persistChanges({