( sourceMessage: ChatMessageInfoItemWithHeight, initialCoordinates: LayoutCoordinates, messageListVerticalBounds: VerticalBounds, currentInputBarHeight: number, targetInputBarHeight: number, sidebarThreadInfo: ?ThreadInfo, )
| 89 | } |
| 90 | |
| 91 | function useMessageTargetParameters( |
| 92 | sourceMessage: ChatMessageInfoItemWithHeight, |
| 93 | initialCoordinates: LayoutCoordinates, |
| 94 | messageListVerticalBounds: VerticalBounds, |
| 95 | currentInputBarHeight: number, |
| 96 | targetInputBarHeight: number, |
| 97 | sidebarThreadInfo: ?ThreadInfo, |
| 98 | ): { |
| 99 | +position: number, |
| 100 | +color: string, |
| 101 | } { |
| 102 | const messageListData = useNativeMessageListData({ |
| 103 | searching: false, |
| 104 | userInfoInputArray: [], |
| 105 | threadInfo: sidebarThreadInfo, |
| 106 | }); |
| 107 | |
| 108 | const [messagesWithHeight, setMessagesWithHeight] = |
| 109 | React.useState<?$ReadOnlyArray<ChatMessageItemWithHeight>>(null); |
| 110 | const measureMessages = useHeightMeasurer(); |
| 111 | |
| 112 | React.useEffect(() => { |
| 113 | if (messageListData) { |
| 114 | measureMessages( |
| 115 | messageListData, |
| 116 | sidebarThreadInfo, |
| 117 | setMessagesWithHeight, |
| 118 | ); |
| 119 | } |
| 120 | }, [measureMessages, messageListData, sidebarThreadInfo]); |
| 121 | |
| 122 | const sourceMessageID = sourceMessage.messageInfo?.id; |
| 123 | const targetDistanceFromBottom = React.useMemo(() => { |
| 124 | if (!messagesWithHeight) { |
| 125 | return 0; |
| 126 | } |
| 127 | |
| 128 | let offset = 0; |
| 129 | for (const message of messagesWithHeight) { |
| 130 | offset += chatMessageItemHeight(message); |
| 131 | if (message.messageInfo && message.messageInfo.id === sourceMessageID) { |
| 132 | return offset; |
| 133 | } |
| 134 | } |
| 135 | |
| 136 | return ( |
| 137 | messageListVerticalBounds.height + chatMessageItemHeight(sourceMessage) |
| 138 | ); |
| 139 | }, [ |
| 140 | messageListVerticalBounds.height, |
| 141 | messagesWithHeight, |
| 142 | sourceMessage, |
| 143 | sourceMessageID, |
| 144 | ]); |
| 145 | |
| 146 | if (!sidebarThreadInfo) { |
| 147 | return { |
| 148 | position: 0, |
no test coverage detected