Changeset View
Changeset View
Standalone View
Standalone View
native/chat/message-results-screen.react.js
Show First 20 Lines • Show All 110 Lines • ▼ Show 20 Lines | React.useEffect(() => { | ||||
); | ); | ||||
}, [ | }, [ | ||||
measureCallback, | measureCallback, | ||||
measureMessages, | measureMessages, | ||||
sortedUniqueChatMessageInfoItems, | sortedUniqueChatMessageInfoItems, | ||||
threadInfo, | threadInfo, | ||||
]); | ]); | ||||
const modifiedItems = React.useMemo( | |||||
() => | |||||
measuredMessages.map(item => { | |||||
invariant(item.itemType !== 'loader', 'should not be loader'); | |||||
invariant( | |||||
item.messageShapeType !== 'robotext', | |||||
'should not be robotext', | |||||
); | |||||
if (item.messageShapeType === 'multimedia') { | |||||
return { | |||||
...item, | |||||
startsConversation: false, | |||||
startsCluster: true, | |||||
endsCluster: true, | |||||
messageInfo: { | |||||
...item.messageInfo, | |||||
creator: { | |||||
...item.messageInfo.creator, | |||||
isViewer: false, | |||||
}, | |||||
}, | |||||
}; | |||||
} | |||||
return { | |||||
...item, | |||||
startsConversation: false, | |||||
startsCluster: true, | |||||
endsCluster: true, | |||||
messageInfo: { | |||||
...item.messageInfo, | |||||
creator: { | |||||
...item.messageInfo.creator, | |||||
isViewer: false, | |||||
}, | |||||
}, | |||||
}; | |||||
}), | |||||
[measuredMessages], | |||||
); | |||||
const onLayout = React.useCallback(() => { | const onLayout = React.useCallback(() => { | ||||
scrollViewContainerRef.current?.measure( | scrollViewContainerRef.current?.measure( | ||||
(x, y, width, height, pageX, pageY) => { | (x, y, width, height, pageX, pageY) => { | ||||
if ( | if ( | ||||
height === null || | height === null || | ||||
height === undefined || | height === undefined || | ||||
pageY === null || | pageY === null || | ||||
pageY === undefined | pageY === undefined | ||||
) { | ) { | ||||
return; | return; | ||||
} | } | ||||
setMessageVerticalBounds({ height, y: pageY }); | setMessageVerticalBounds({ height, y: pageY }); | ||||
}, | }, | ||||
); | ); | ||||
}, []); | }, []); | ||||
const messageResultsToDisplay = React.useMemo( | const messageResultsToDisplay = React.useMemo( | ||||
() => | () => | ||||
modifiedItems.map(item => ( | measuredMessages.map(item => { | ||||
invariant(item.itemType !== 'loader', 'should not be loader'); | |||||
return ( | |||||
<MessageResult | <MessageResult | ||||
key={item.messageInfo.id} | key={item.messageInfo.id} | ||||
item={item} | item={item} | ||||
threadInfo={threadInfo} | threadInfo={threadInfo} | ||||
navigation={navigation} | navigation={navigation} | ||||
route={route} | route={route} | ||||
messageVerticalBounds={messageVerticalBounds} | messageVerticalBounds={messageVerticalBounds} | ||||
/> | /> | ||||
)), | ); | ||||
[modifiedItems, threadInfo, navigation, route, messageVerticalBounds], | }), | ||||
[measuredMessages, threadInfo, navigation, route, messageVerticalBounds], | |||||
); | ); | ||||
return ( | return ( | ||||
<View ref={scrollViewContainerRef} onLayout={onLayout}> | <View ref={scrollViewContainerRef} onLayout={onLayout}> | ||||
<ScrollView>{messageResultsToDisplay}</ScrollView> | <ScrollView>{messageResultsToDisplay}</ScrollView> | ||||
</View> | </View> | ||||
); | ); | ||||
} | } | ||||
export default MessageResultsScreen; | export default MessageResultsScreen; |