about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorHailey <me@haileyok.com>2024-05-18 16:45:46 -0700
committerGitHub <noreply@github.com>2024-05-18 16:45:46 -0700
commit1ac13abf4d7e294c34114e4c433f0b81742d5ed0 (patch)
tree3ece5f2d52cbb1d943ea75912bbba6d5f761240d /src
parent5343910570e91743ed385305cc4800695736425a (diff)
downloadvoidsky-1ac13abf4d7e294c34114e4c433f0b81742d5ed0.tar.zst
[🐴] Minor nits (#4102)
* set a better size for `initialNumToRender`

* memo list items

* scroll to end on both platforms

* rev
Diffstat (limited to 'src')
-rw-r--r--src/screens/Messages/Conversation/MessagesList.tsx11
-rw-r--r--src/screens/Messages/List/ChatListItem.tsx11
-rw-r--r--src/screens/Messages/List/index.tsx2
3 files changed, 18 insertions, 6 deletions
diff --git a/src/screens/Messages/Conversation/MessagesList.tsx b/src/screens/Messages/Conversation/MessagesList.tsx
index f099e267a..b0723c020 100644
--- a/src/screens/Messages/Conversation/MessagesList.tsx
+++ b/src/screens/Messages/Conversation/MessagesList.tsx
@@ -1,8 +1,8 @@
 import React, {useCallback, useRef} from 'react'
 import {FlatList, View} from 'react-native'
 import Animated, {
-  dispatchCommand,
   runOnJS,
+  scrollTo,
   useAnimatedKeyboard,
   useAnimatedReaction,
   useAnimatedRef,
@@ -229,9 +229,14 @@ export function MessagesList({
         return
       }
 
-      // Only call this on every frame while _opening_ the keyboard
+      // We are setting some arbitrarily high number here to ensure that we end up scrolling to the bottom. There is not
+      // any other way to synchronously scroll to the bottom of the list, since we cannot get the content size of the
+      // scrollview synchronously.
+      // On iOS we could have used `dispatchCommand('scrollToEnd', [])` since the underlying view has a `scrollToEnd`
+      // method. It doesn't exist on Android though. That's probably why `scrollTo` which is implemented in Reanimated
+      // doesn't support a `scrollToEnd`.
       if (prev && now > 0 && now >= prev) {
-        dispatchCommand(flatListRef, 'scrollToEnd', [false])
+        scrollTo(flatListRef, 0, 1e7, false)
       }
 
       // We want to store the full keyboard height after it fully opens so we can make some
diff --git a/src/screens/Messages/List/ChatListItem.tsx b/src/screens/Messages/List/ChatListItem.tsx
index 791dc82c0..9a9a78ba7 100644
--- a/src/screens/Messages/List/ChatListItem.tsx
+++ b/src/screens/Messages/List/ChatListItem.tsx
@@ -25,12 +25,17 @@ import {Bell2Off_Filled_Corner0_Rounded as BellStroke} from '#/components/icons/
 import {useMenuControl} from '#/components/Menu'
 import {Text} from '#/components/Typography'
 
-export function ChatListItem({convo}: {convo: ChatBskyConvoDefs.ConvoView}) {
+export let ChatListItem = ({
+  convo,
+}: {
+  convo: ChatBskyConvoDefs.ConvoView
+}): React.ReactNode => {
   const {currentAccount} = useSession()
+  const moderationOpts = useModerationOpts()
+
   const otherUser = convo.members.find(
     member => member.did !== currentAccount?.did,
   )
-  const moderationOpts = useModerationOpts()
 
   if (!otherUser || !moderationOpts) {
     return null
@@ -45,6 +50,8 @@ export function ChatListItem({convo}: {convo: ChatBskyConvoDefs.ConvoView}) {
   )
 }
 
+ChatListItem = React.memo(ChatListItem)
+
 function ChatListItemReady({
   convo,
   profile: profileUnshadowed,
diff --git a/src/screens/Messages/List/index.tsx b/src/screens/Messages/List/index.tsx
index c198d44c4..6de0ca0b0 100644
--- a/src/screens/Messages/List/index.tsx
+++ b/src/screens/Messages/List/index.tsx
@@ -73,7 +73,7 @@ export function MessagesScreen({navigation, route}: Props) {
     )
   }, [_, t])
 
-  const initialNumToRender = useInitialNumToRender()
+  const initialNumToRender = useInitialNumToRender(80)
   const [isPTRing, setIsPTRing] = useState(false)
 
   const {