[Chat] Handle moderation lock override in group chats (#10835)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Samuel Newman
2026-06-10 21:57:12 +03:00
committed by GitHub
parent 3b5ede37f7
commit 8db30c7d31
8 changed files with 62 additions and 16 deletions
+5 -1
View File
@@ -1087,7 +1087,10 @@ export class Convo {
this.commit()
}
updateLockStatus(lockStatus: ChatBskyConvoDefs.ConvoLockStatus) {
updateLockStatus(
lockStatus: ChatBskyConvoDefs.ConvoLockStatus,
lockStatusModerationOverride: boolean,
) {
if (this.convo?.kind !== 'group') {
throw new Error('updateLockStatus can only be called on group convo')
}
@@ -1096,6 +1099,7 @@ export class Convo {
kind: {
...this.convo.details,
lockStatus,
lockStatusModerationOverride,
},
})
+9 -2
View File
@@ -151,8 +151,15 @@ export function ConvoProvider({
if (data.kind.joinLink !== convo.convo.details.joinLink) {
convo.updateJoinLink(data.kind.joinLink)
}
if (data.kind.lockStatus !== convo.convo.details.lockStatus) {
convo.updateLockStatus(data.kind.lockStatus)
if (
data.kind.lockStatus !== convo.convo.details.lockStatus ||
data.kind.lockStatusModerationOverride !==
convo.convo.details.lockStatusModerationOverride
) {
convo.updateLockStatus(
data.kind.lockStatus,
data.kind.lockStatusModerationOverride,
)
}
}
if (
@@ -532,12 +532,22 @@ export function ListConvosProviderInner({
}
return {...convo, rev: log.rev}
})
// The log event doesn't say whether the lock is forced by a
// moderation override, so refetch to pick up the flag.
void queryClient.invalidateQueries({
queryKey: CONVO_KEY(log.convoId),
})
} else if (ChatBskyConvoDefs.isLogUnlockConvo(log)) {
mutateConvoView(log.convoId, convo => {
if (ChatBskyConvoDefs.isGroupConvo(convo.kind)) {
return {
...convo,
kind: {...convo.kind, lockStatus: 'unlocked'},
kind: {
...convo.kind,
lockStatus: 'unlocked',
// An unlocked convo cannot be moderation-locked.
lockStatusModerationOverride: false,
},
rev: log.rev,
}
}