Pass whole object to MessageItem for clarity

This commit is contained in:
Eric Bailey
2024-05-15 10:10:34 -05:00
parent 2121b5f86f
commit 693fb151e9
2 changed files with 18 additions and 27 deletions
+17 -20
View File
@@ -4,6 +4,7 @@ import {ChatBskyConvoDefs, RichText as RichTextAPI} from '@atproto/api'
import {msg} from '@lingui/macro' import {msg} from '@lingui/macro'
import {useLingui} from '@lingui/react' import {useLingui} from '@lingui/react'
import {ConvoItem} from '#/state/messages/convo/types'
import {useSession} from '#/state/session' import {useSession} from '#/state/session'
import {TimeElapsed} from 'view/com/util/TimeElapsed' import {TimeElapsed} from 'view/com/util/TimeElapsed'
import {atoms as a, useTheme} from '#/alf' import {atoms as a, useTheme} from '#/alf'
@@ -13,28 +14,24 @@ import {RichText} from '../RichText'
let MessageItem = ({ let MessageItem = ({
item, item,
next,
pending,
}: { }: {
item: ChatBskyConvoDefs.MessageView item: ConvoItem & {type: 'message' | 'pending-message'}
next:
| ChatBskyConvoDefs.MessageView
| ChatBskyConvoDefs.DeletedMessageView
| null
pending?: boolean
}): React.ReactNode => { }): React.ReactNode => {
const t = useTheme() const t = useTheme()
const {currentAccount} = useSession() const {currentAccount} = useSession()
const isFromSelf = item.sender?.did === currentAccount?.did const {message, nextMessage} = item
const pending = item.type === 'pending-message'
const isFromSelf = message.sender?.did === currentAccount?.did
const isNextFromSelf = const isNextFromSelf =
ChatBskyConvoDefs.isMessageView(next) && ChatBskyConvoDefs.isMessageView(nextMessage) &&
next.sender?.did === currentAccount?.did nextMessage.sender?.did === currentAccount?.did
const isLastInGroup = useMemo(() => { const isLastInGroup = useMemo(() => {
// TODO this means it's a placeholder. Let's figure out the right way to do this though! // TODO this means it's a placeholder. Let's figure out the right way to do this though!
if (item.id.length > 13) { if (message.id.length > 13) {
return false return false
} }
@@ -44,9 +41,9 @@ let MessageItem = ({
} }
// or, if there's a 3 minute gap between this message and the next // or, if there's a 3 minute gap between this message and the next
if (ChatBskyConvoDefs.isMessageView(next)) { if (ChatBskyConvoDefs.isMessageView(nextMessage)) {
const thisDate = new Date(item.sentAt) const thisDate = new Date(message.sentAt)
const nextDate = new Date(next.sentAt) const nextDate = new Date(nextMessage.sentAt)
const diff = nextDate.getTime() - thisDate.getTime() const diff = nextDate.getTime() - thisDate.getTime()
@@ -55,7 +52,7 @@ let MessageItem = ({
} }
return true return true
}, [item, next, isFromSelf, isNextFromSelf]) }, [message, nextMessage, isFromSelf, isNextFromSelf])
const lastInGroupRef = useRef(isLastInGroup) const lastInGroupRef = useRef(isLastInGroup)
if (lastInGroupRef.current !== isLastInGroup) { if (lastInGroupRef.current !== isLastInGroup) {
@@ -67,12 +64,12 @@ let MessageItem = ({
t.name === 'light' ? t.palette.primary_200 : t.palette.primary_800 t.name === 'light' ? t.palette.primary_200 : t.palette.primary_800
const rt = useMemo(() => { const rt = useMemo(() => {
return new RichTextAPI({text: item.text, facets: item.facets}) return new RichTextAPI({text: message.text, facets: message.facets})
}, [item.text, item.facets]) }, [message.text, message.facets])
return ( return (
<View> <View>
<ActionsWrapper isFromSelf={isFromSelf} message={item}> <ActionsWrapper isFromSelf={isFromSelf} message={message}>
<View <View
style={[ style={[
a.py_sm, a.py_sm,
@@ -106,7 +103,7 @@ let MessageItem = ({
</View> </View>
</ActionsWrapper> </ActionsWrapper>
<MessageItemMetadata <MessageItemMetadata
message={item} message={message}
isLastInGroup={isLastInGroup} isLastInGroup={isLastInGroup}
style={isFromSelf ? a.text_right : a.text_left} style={isFromSelf ? a.text_right : a.text_left}
/> />
@@ -35,13 +35,7 @@ function MaybeLoader({isLoading}: {isLoading: boolean}) {
function renderItem({item}: {item: ConvoItem}) { function renderItem({item}: {item: ConvoItem}) {
if (item.type === 'message' || item.type === 'pending-message') { if (item.type === 'message' || item.type === 'pending-message') {
return ( return <MessageItem item={item} />
<MessageItem
item={item.message}
next={item.nextMessage}
pending={item.type === 'pending-message'}
/>
)
} else if (item.type === 'deleted-message') { } else if (item.type === 'deleted-message') {
return <Text>Deleted message</Text> return <Text>Deleted message</Text>
} else if (item.type === 'error-recoverable') { } else if (item.type === 'error-recoverable') {