[Chat] Centralize conversation report-subject resolution (#10754)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@ import {EMOJI_REACTION_LIMIT} from '#/lib/constants'
|
||||
import {logger} from '#/logger'
|
||||
import {type Shadow} from '#/state/cache/profile-shadow'
|
||||
import {type ConvoState, ConvoStatus} from '#/state/messages/convo/types'
|
||||
import {type ReportSubject} from '#/components/moderation/ReportDialog/types'
|
||||
import * as bsky from '#/types/bsky'
|
||||
|
||||
export const MESSAGE_GAP_THRESHOLD_MS = 60 * 60 * 1000
|
||||
@@ -240,3 +241,41 @@ export function parseConvoView(
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves the report subject for a conversation-level "Report conversation"
|
||||
* action (as opposed to reporting an individual message, which always reports
|
||||
* that message + its sender).
|
||||
*
|
||||
* - group: always report the whole convo, targeting the owner. Returns null if
|
||||
* the owner has left, in which case there is nothing to report against.
|
||||
* - direct: report the last reportable message if there is one (i.e. the last
|
||||
* message exists and wasn't sent by us), otherwise report the whole convo
|
||||
* targeting the other user.
|
||||
*/
|
||||
export function getConvoReportSubject(
|
||||
convo: ConvoWithDetails,
|
||||
ownDid: string | undefined,
|
||||
): ReportSubject | null {
|
||||
if (convo.kind === 'group') {
|
||||
if (!convo.primaryMember) return null
|
||||
return {convoId: convo.view.id, did: convo.primaryMember.did}
|
||||
}
|
||||
|
||||
const lastMessage = convo.view.lastMessage
|
||||
const reportableMessage =
|
||||
ChatBskyConvoDefs.isMessageView(lastMessage) &&
|
||||
lastMessage.sender?.did !== ownDid
|
||||
? lastMessage
|
||||
: null
|
||||
|
||||
if (reportableMessage) {
|
||||
return {
|
||||
view: 'convo',
|
||||
convoId: convo.view.id,
|
||||
message: reportableMessage,
|
||||
}
|
||||
}
|
||||
|
||||
return {convoId: convo.view.id, did: convo.primaryMember.did}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user