diff --git a/native/chat/message-result.react.js b/native/chat/message-result.react.js --- a/native/chat/message-result.react.js +++ b/native/chat/message-result.react.js @@ -13,6 +13,7 @@ import type { NavigationRoute } from '../navigation/route-names'; import { useStyles } from '../themes/colors.js'; import type { ChatMessageInfoItemWithHeight } from '../types/chat-types.js'; +import type { VerticalBounds } from '../types/layout-types.js'; type MessageResultProps = { +item: ChatMessageInfoItemWithHeight, @@ -23,6 +24,7 @@ +route: | NavigationRoute<'TogglePinModal'> | NavigationRoute<'MessageResultsScreen'>, + +messageVerticalBounds: ?VerticalBounds, }; function MessageResult(props: MessageResultProps): React.Node { @@ -40,7 +42,7 @@ navigation={props.navigation} route={props.route} toggleFocus={onToggleFocus} - verticalBounds={null} + verticalBounds={props.messageVerticalBounds} /> {longAbsoluteDate(props.item.messageInfo.time)} diff --git a/native/chat/message-results-screen.react.js b/native/chat/message-results-screen.react.js --- a/native/chat/message-results-screen.react.js +++ b/native/chat/message-results-screen.react.js @@ -35,6 +35,10 @@ const measureMessages = useHeightMeasurer(); const [measuredMessages, setMeasuredMessages] = React.useState([]); + const [messageVerticalBounds, setMessageVerticalBounds] = + React.useState(null); + const ref = React.useRef(null); + const callFetchPinnedMessages = useServerCall(fetchPinnedMessages); const userInfos = useSelector(state => state.userStore.userInfos); @@ -147,6 +151,15 @@ }); }, [measuredMessages]); + const onLayout = React.useCallback(() => { + ref.current?.measure((x, y, width, height, pageX, pageY) => { + setMessageVerticalBounds({ + height, + y: pageY, + }); + }); + }, []); + const messageResultsToDisplay = React.useMemo(() => { return modifiedItems.map(item => { return ( @@ -156,12 +169,17 @@ threadInfo={threadInfo} navigation={navigation} route={route} + messageVerticalBounds={messageVerticalBounds} /> ); }); - }, [modifiedItems, threadInfo, navigation, route]); + }, [modifiedItems, threadInfo, navigation, route, messageVerticalBounds]); - return {messageResultsToDisplay}; + return ( + + {messageResultsToDisplay} + + ); } export default MessageResultsScreen;