Changeset View
Changeset View
Standalone View
Standalone View
native/chat/message-list-container.react.js
// @flow | // @flow | ||||
import { useNavigationState } from '@react-navigation/native'; | import { useNavigationState } from '@react-navigation/native'; | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { View } from 'react-native'; | import { View } from 'react-native'; | ||||
import genesis from 'lib/facts/genesis.js'; | import genesis from 'lib/facts/genesis.js'; | ||||
import { | |||||
type ChatMessageItem, | |||||
useMessageListData, | |||||
} from 'lib/selectors/chat-selectors.js'; | |||||
import { threadInfoSelector } from 'lib/selectors/thread-selectors.js'; | import { threadInfoSelector } from 'lib/selectors/thread-selectors.js'; | ||||
import { | import { | ||||
userInfoSelectorForPotentialMembers, | userInfoSelectorForPotentialMembers, | ||||
userSearchIndexForPotentialMembers, | userSearchIndexForPotentialMembers, | ||||
} from 'lib/selectors/user-selectors.js'; | } from 'lib/selectors/user-selectors.js'; | ||||
import { getPotentialMemberItems } from 'lib/shared/search-utils.js'; | import { getPotentialMemberItems } from 'lib/shared/search-utils.js'; | ||||
import { | import { | ||||
useExistingThreadInfoFinder, | useExistingThreadInfoFinder, | ||||
pendingThreadType, | pendingThreadType, | ||||
} from 'lib/shared/thread-utils.js'; | } from 'lib/shared/thread-utils.js'; | ||||
import type { ThreadInfo } from 'lib/types/thread-types.js'; | import type { ThreadInfo } from 'lib/types/thread-types.js'; | ||||
import type { AccountUserInfo, UserListItem } from 'lib/types/user-types.js'; | import type { AccountUserInfo, UserListItem } from 'lib/types/user-types.js'; | ||||
import { type MessagesMeasurer, useHeightMeasurer } from './chat-context.js'; | import { type MessagesMeasurer, useHeightMeasurer } from './chat-context.js'; | ||||
import { ChatInputBar } from './chat-input-bar.react.js'; | import { ChatInputBar } from './chat-input-bar.react.js'; | ||||
import type { ChatNavigationProp } from './chat.react.js'; | import type { ChatNavigationProp } from './chat.react.js'; | ||||
import { | |||||
type NativeChatMessageItem, | |||||
useNativeMessageListData, | |||||
} from './message-data.react.js'; | |||||
import MessageListThreadSearch from './message-list-thread-search.react.js'; | import MessageListThreadSearch from './message-list-thread-search.react.js'; | ||||
import { MessageListContextProvider } from './message-list-types.js'; | import { MessageListContextProvider } from './message-list-types.js'; | ||||
import MessageList from './message-list.react.js'; | import MessageList from './message-list.react.js'; | ||||
import ParentThreadHeader from './parent-thread-header.react.js'; | import ParentThreadHeader from './parent-thread-header.react.js'; | ||||
import ContentLoading from '../components/content-loading.react.js'; | import ContentLoading from '../components/content-loading.react.js'; | ||||
import { InputStateContext } from '../input/input-state.js'; | import { InputStateContext } from '../input/input-state.js'; | ||||
import { | import { | ||||
OverlayContext, | OverlayContext, | ||||
Show All 16 Lines | type Props = { | ||||
+updateUsernameInput: (text: string) => void, | +updateUsernameInput: (text: string) => void, | ||||
+userInfoInputArray: $ReadOnlyArray<AccountUserInfo>, | +userInfoInputArray: $ReadOnlyArray<AccountUserInfo>, | ||||
+updateTagInput: (items: $ReadOnlyArray<AccountUserInfo>) => void, | +updateTagInput: (items: $ReadOnlyArray<AccountUserInfo>) => void, | ||||
+resolveToUser: (user: AccountUserInfo) => void, | +resolveToUser: (user: AccountUserInfo) => void, | ||||
+otherUserInfos: { [id: string]: AccountUserInfo }, | +otherUserInfos: { [id: string]: AccountUserInfo }, | ||||
+userSearchResults: $ReadOnlyArray<UserListItem>, | +userSearchResults: $ReadOnlyArray<UserListItem>, | ||||
+threadInfo: ThreadInfo, | +threadInfo: ThreadInfo, | ||||
+genesisThreadInfo: ?ThreadInfo, | +genesisThreadInfo: ?ThreadInfo, | ||||
+messageListData: ?$ReadOnlyArray<ChatMessageItem>, | +messageListData: ?$ReadOnlyArray<NativeChatMessageItem>, | ||||
+colors: Colors, | +colors: Colors, | ||||
+styles: typeof unboundStyles, | +styles: typeof unboundStyles, | ||||
// withOverlayContext | // withOverlayContext | ||||
+overlayContext: ?OverlayContextType, | +overlayContext: ?OverlayContextType, | ||||
+measureMessages: MessagesMeasurer, | +measureMessages: MessagesMeasurer, | ||||
}; | }; | ||||
type State = { | type State = { | ||||
+listDataWithHeights: ?$ReadOnlyArray<ChatMessageItemWithHeight>, | +listDataWithHeights: ?$ReadOnlyArray<ChatMessageItemWithHeight>, | ||||
▲ Show 20 Lines • Show All 260 Lines • ▼ Show 20 Lines | const resolveToUser = React.useCallback( | ||||
); | ); | ||||
addReply(''); | addReply(''); | ||||
setBaseThreadInfo(resolvedThreadInfo); | setBaseThreadInfo(resolvedThreadInfo); | ||||
setParams({ searching: false, threadInfo: resolvedThreadInfo }); | setParams({ searching: false, threadInfo: resolvedThreadInfo }); | ||||
}, | }, | ||||
[setParams, existingThreadInfoFinder, addReply], | [setParams, existingThreadInfoFinder, addReply], | ||||
); | ); | ||||
const messageListData = useMessageListData({ | const messageListData = useNativeMessageListData({ | ||||
searching: isSearching, | searching: isSearching, | ||||
userInfoInputArray, | userInfoInputArray, | ||||
threadInfo, | threadInfo, | ||||
}); | }); | ||||
const colors = useColors(); | const colors = useColors(); | ||||
const styles = useStyles(unboundStyles); | const styles = useStyles(unboundStyles); | ||||
const overlayContext = React.useContext(OverlayContext); | const overlayContext = React.useContext(OverlayContext); | ||||
const measureMessages = useHeightMeasurer(); | const measureMessages = useHeightMeasurer(); | ||||
Show All 29 Lines |