···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56-import {ConvoItem, ConvoItemError} from '#/state/messages/convo'
7import {atoms as a, useTheme} from '#/alf'
8import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
9import {InlineLinkText} from '#/components/Link'
···3import {msg} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
56+import {ConvoItem, ConvoItemError} from '#/state/messages/convo/types'
7import {atoms as a, useTheme} from '#/alf'
8import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo'
9import {InlineLinkText} from '#/components/Link'
···11import {useLingui} from '@lingui/react'
1213import {isIOS} from '#/platform/detection'
14-import {useChat} from '#/state/messages'
15-import {ConvoItem, ConvoStatus} from '#/state/messages/convo'
16import {ScrollProvider} from 'lib/ScrollContext'
17import {isWeb} from 'platform/detection'
18import {List} from 'view/com/util/List'
···86}
8788export function MessagesList() {
89- const chat = useChat()
90 const flatListRef = useRef<FlatList>(null)
9192 // We need to keep track of when the scroll offset is at the bottom of the list to know when to scroll as new items
···153 // The check for `hasInitiallyScrolled` prevents an initial fetch on mount. FlatList triggers `onStartReached`
154 // immediately on mount, since we are in fact at an offset of zero, so we have to ignore those initial calls.
155 const onStartReached = useCallback(() => {
156- if (chat.status === ConvoStatus.Ready && hasInitiallyScrolled) {
157- chat.fetchMessageHistory()
158 }
159- }, [chat, hasInitiallyScrolled])
160161 const onSendMessage = useCallback(
162 (text: string) => {
163- if (chat.status === ConvoStatus.Ready) {
164- chat.sendMessage({
165 text,
166 })
167 }
168 },
169- [chat],
170 )
171172 const onScroll = React.useCallback(
···229 <ScrollProvider onScroll={onScroll} onMomentumEnd={onMomentumEnd}>
230 <List
231 ref={flatListRef}
232- data={chat.items}
233 renderItem={renderItem}
234 keyExtractor={keyExtractor}
235 disableVirtualization={true}
···248 onScrollToIndexFailed={onScrollToIndexFailed}
249 scrollEventThrottle={100}
250 ListHeaderComponent={
251- <MaybeLoader isLoading={chat.isFetchingHistory} />
252 }
253 />
254 </ScrollProvider>
···11import {useLingui} from '@lingui/react'
1213import {isIOS} from '#/platform/detection'
14+import {useConvo} from '#/state/messages/convo'
15+import {ConvoItem, ConvoStatus} from '#/state/messages/convo/types'
16import {ScrollProvider} from 'lib/ScrollContext'
17import {isWeb} from 'platform/detection'
18import {List} from 'view/com/util/List'
···86}
8788export function MessagesList() {
89+ const convo = useConvo()
90 const flatListRef = useRef<FlatList>(null)
9192 // We need to keep track of when the scroll offset is at the bottom of the list to know when to scroll as new items
···153 // The check for `hasInitiallyScrolled` prevents an initial fetch on mount. FlatList triggers `onStartReached`
154 // immediately on mount, since we are in fact at an offset of zero, so we have to ignore those initial calls.
155 const onStartReached = useCallback(() => {
156+ if (convo.status === ConvoStatus.Ready && hasInitiallyScrolled) {
157+ convo.fetchMessageHistory()
158 }
159+ }, [convo, hasInitiallyScrolled])
160161 const onSendMessage = useCallback(
162 (text: string) => {
163+ if (convo.status === ConvoStatus.Ready) {
164+ convo.sendMessage({
165 text,
166 })
167 }
168 },
169+ [convo],
170 )
171172 const onScroll = React.useCallback(
···229 <ScrollProvider onScroll={onScroll} onMomentumEnd={onMomentumEnd}>
230 <List
231 ref={flatListRef}
232+ data={convo.items}
233 renderItem={renderItem}
234 keyExtractor={keyExtractor}
235 disableVirtualization={true}
···248 onScrollToIndexFailed={onScrollToIndexFailed}
249 scrollEventThrottle={100}
250 ListHeaderComponent={
251+ <MaybeLoader isLoading={convo.isFetchingHistory} />
252 }
253 />
254 </ScrollProvider>