[Chat] Handle moderation lock override in group chats (#10835)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user