Page MenuHomePhorge

D9184.1768600547.diff
No OneTemporary

Size
5 KB
Referenced Files
None
Subscribers
None

D9184.1768600547.diff

diff --git a/native/chat/chat-thread-list.react.js b/native/chat/chat-thread-list.react.js
--- a/native/chat/chat-thread-list.react.js
+++ b/native/chat/chat-thread-list.react.js
@@ -28,11 +28,7 @@
import type { SetState } from 'lib/types/hook-types.js';
import { threadTypes } from 'lib/types/thread-types-enum.js';
import type { ThreadInfo } from 'lib/types/thread-types.js';
-import type {
- GlobalAccountUserInfo,
- UserInfo,
- LoggedInUserInfo,
-} from 'lib/types/user-types.js';
+import type { GlobalAccountUserInfo, UserInfo } from 'lib/types/user-types.js';
import { useServerCall } from 'lib/utils/action-utils.js';
import { ChatThreadListItem } from './chat-thread-list-item.react.js';
@@ -52,11 +48,7 @@
} from '../navigation/route-names.js';
import type { TabNavigationProp } from '../navigation/tab-navigator.react.js';
import { useSelector } from '../redux/redux-utils.js';
-import {
- type IndicatorStyle,
- indicatorStyleSelector,
- useStyles,
-} from '../themes/colors.js';
+import { indicatorStyleSelector, useStyles } from '../themes/colors.js';
import type { ScrollEvent } from '../types/react-native.js';
import { AnimatedView, type AnimatedStyleObj } from '../types/styles.js';
import { animateTowards } from '../utils/animation-utils.js';
@@ -93,24 +85,13 @@
type Props = {
...BaseProps,
// Redux state
- +loggedInUserInfo: ?LoggedInUserInfo,
- +styles: typeof unboundStyles,
- +indicatorStyle: IndicatorStyle,
+searchText: string,
+searchStatus: SearchStatus,
- +openedSwipeableID: string,
+setNumItemsToDisplay: SetState<number>,
+searchCancelButtonOpen: Value,
+scrollPos: { current: number },
- +onScroll: (event: ScrollEvent) => void,
- +renderSearch: (
- additionalProps?: $Shape<React.ElementConfig<typeof Search>>,
- ) => React.Node,
+hardwareBack: () => boolean,
- +renderItem: (row: { item: Item, ... }) => React.Node,
- +partialListData: $ReadOnlyArray<Item>,
- +onEndReached: () => void,
- +floatingAction: React.Node,
+ +chatThreadList: React.Node,
};
class ChatThreadList extends React.PureComponent<Props> {
@@ -198,39 +179,7 @@
};
render() {
- let fixedSearch;
- const { searchStatus } = this.props;
- if (searchStatus === 'active') {
- fixedSearch = this.props.renderSearch({ autoFocus: true });
- }
- const scrollEnabled =
- searchStatus === 'inactive' || searchStatus === 'active';
- // viewerID is in extraData since it's used by MessagePreview
- // within ChatThreadListItem
- const viewerID = this.props.loggedInUserInfo?.id;
- const extraData = `${viewerID || ''} ${this.props.openedSwipeableID}`;
- return (
- <View style={this.props.styles.container}>
- {fixedSearch}
- <FlatList
- data={this.props.partialListData}
- renderItem={this.props.renderItem}
- keyExtractor={keyExtractor}
- getItemLayout={getItemLayout}
- extraData={extraData}
- initialNumToRender={11}
- keyboardShouldPersistTaps="handled"
- onScroll={this.props.onScroll}
- style={this.props.styles.flatList}
- indicatorStyle={this.props.indicatorStyle}
- scrollEnabled={scrollEnabled}
- onEndReached={this.props.onEndReached}
- onEndReachedThreshold={1}
- ref={this.flatListRef}
- />
- {this.props.floatingAction}
- </View>
- );
+ return this.props.chatThreadList;
}
flatListRef = (flatList: ?FlatList<Item>) => {
@@ -560,28 +509,71 @@
);
}, [composeThread]);
+ const fixedSearch = React.useMemo(
+ () =>
+ searchStatus === 'active' ? renderSearch({ autoFocus: true }) : null,
+ [renderSearch, searchStatus],
+ );
+
+ const scrollEnabled =
+ searchStatus === 'inactive' || searchStatus === 'active';
+ // viewerID is in extraData since it's used by MessagePreview
+ // within ChatThreadListItem
+ const viewerID = loggedInUserInfo?.id;
+ const extraData = `${viewerID || ''} ${openedSwipeableID}`;
+
+ const flatListRef = React.useRef();
+ const chatThreadList = React.useMemo(
+ () => (
+ <View style={styles.container}>
+ {fixedSearch}
+ <FlatList
+ data={partialListData}
+ renderItem={renderItem}
+ keyExtractor={keyExtractor}
+ getItemLayout={getItemLayout}
+ extraData={extraData}
+ initialNumToRender={11}
+ keyboardShouldPersistTaps="handled"
+ onScroll={onScroll}
+ style={styles.flatList}
+ indicatorStyle={indicatorStyle}
+ scrollEnabled={scrollEnabled}
+ onEndReached={onEndReached}
+ onEndReachedThreshold={1}
+ ref={flatListRef}
+ />
+ {floatingAction}
+ </View>
+ ),
+ [
+ extraData,
+ fixedSearch,
+ floatingAction,
+ indicatorStyle,
+ onEndReached,
+ onScroll,
+ partialListData,
+ renderItem,
+ scrollEnabled,
+ styles.container,
+ styles.flatList,
+ ],
+ );
+
return (
<ChatThreadList
navigation={navigation}
route={route}
filterThreads={filterThreads}
emptyItem={emptyItem}
- loggedInUserInfo={loggedInUserInfo}
- styles={styles}
- indicatorStyle={indicatorStyle}
searchText={searchText}
searchStatus={searchStatus}
- openedSwipeableID={openedSwipeableID}
setNumItemsToDisplay={setNumItemsToDisplay}
searchCancelButtonOpen={searchCancelButtonOpen}
scrollPos={scrollPos}
- onScroll={onScroll}
- renderSearch={renderSearch}
hardwareBack={hardwareBack}
- renderItem={renderItem}
- partialListData={partialListData}
- onEndReached={onEndReached}
- floatingAction={floatingAction}
+ chatThreadList={chatThreadList}
/>
);
}

File Metadata

Mime Type
text/plain
Expires
Fri, Jan 16, 9:55 PM (2 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5946222
Default Alt Text
D9184.1768600547.diff (5 KB)

Event Timeline