diff --git a/src/components/PostControls/ShareMenu/RecentChats.tsx b/src/components/PostControls/ShareMenu/RecentChats.tsx index 9fbff9d092..bab3cbfded 100644 --- a/src/components/PostControls/ShareMenu/RecentChats.tsx +++ b/src/components/PostControls/ShareMenu/RecentChats.tsx @@ -36,7 +36,10 @@ export function RecentChats({ const ax = useAnalytics() const control = useDialogContext() const {currentAccount} = useSession() - const {data} = useListConvosQuery({status: 'accepted'}) + const {data} = useListConvosQuery({ + status: 'accepted', + lockStatus: 'unlocked', + }) const convos = data?.pages[0]?.convos?.slice(0, 10) const moderationOpts = useModerationOpts() const navigation = useNavigation() diff --git a/src/components/dialogs/SearchablePeopleList.tsx b/src/components/dialogs/SearchablePeopleList.tsx index 31e48cc799..fe8af56b88 100644 --- a/src/components/dialogs/SearchablePeopleList.tsx +++ b/src/components/dialogs/SearchablePeopleList.tsx @@ -114,6 +114,7 @@ export function SearchablePeopleList({ const {data: convos} = useListConvosQuery({ enabled: showRecentConvos, status: 'accepted', + lockStatus: 'unlocked', }) const items = useMemo(() => { diff --git a/src/screens/Messages/components/ChatListItem.tsx b/src/screens/Messages/components/ChatListItem.tsx index 5ac1d0701d..307aa53b11 100644 --- a/src/screens/Messages/components/ChatListItem.tsx +++ b/src/screens/Messages/components/ChatListItem.tsx @@ -41,6 +41,7 @@ import {type ConvoWithDetails, parseConvoView} from '#/components/dms/util' import {Bell2Off_Filled_Corner0_Rounded as BellStroke} from '#/components/icons/Bell2' import {type Props as SVGIconProps} from '#/components/icons/common' import {Envelope_Open_Stroke2_Corner0_Rounded as EnvelopeOpen} from '#/components/icons/EnveopeOpen' +import {Lock_Stroke2_Corner2_Rounded as LockIcon} from '#/components/icons/Lock' import {Trash_Stroke2_Corner0_Rounded} from '#/components/icons/Trash' import {Link} from '#/components/Link' import {useMenuControl} from '#/components/Menu' @@ -265,10 +266,7 @@ function BaseChatItem({ const hasUnread = convo.view.unreadCount > 0 && !isDeletedAccount && - !( - convo.kind === 'group' && - convo.details.lockStatus === 'locked-permanently' - ) + (convo.kind !== 'group' || convo.details.lockStatus === 'unlocked') const blockInfo = useMemo(() => { if (!primaryProfileModeration) return {listBlocks: [], userBlock: undefined} @@ -355,6 +353,12 @@ function BaseChatItem({ } } + // Chat locked - override message + if (convo.kind === 'group' && convo.details.lockStatus !== 'unlocked') { + lastMessage = l`This chat is locked` + LastMessageIcon = LockIcon + } + return { lastMessage, LastMessageIcon, diff --git a/src/state/queries/messages/list-conversations.tsx b/src/state/queries/messages/list-conversations.tsx index 61d646a0b4..53a35c427c 100644 --- a/src/state/queries/messages/list-conversations.tsx +++ b/src/state/queries/messages/list-conversations.tsx @@ -29,8 +29,13 @@ export const RQKEY = ( status: 'accepted' | 'request' | 'all', readState: 'all' | 'unread' = 'all', kind: 'all' | 'group' | 'direct' = 'all', + lockStatus: + | 'unlocked' + | 'locked' + | 'locked-permanently' + | undefined = undefined, limit?: number, -) => [RQKEY_ROOT, status, readState, kind, limit] +) => [RQKEY_ROOT, status, readState, kind, lockStatus, limit] type RQPageParam = string | undefined export function useListConvosQuery({ @@ -39,18 +44,20 @@ export function useListConvosQuery({ readState = 'all', kind = 'all', limit = DEFAULT_LIMIT, + lockStatus, }: { enabled?: boolean status?: 'request' | 'accepted' readState?: 'all' | 'unread' kind?: 'all' | 'group' | 'direct' limit?: number + lockStatus?: 'unlocked' | 'locked' | 'locked-permanently' } = {}) { const agent = useAgent() return useInfiniteQuery({ enabled, - queryKey: RQKEY(status ?? 'all', readState, kind, limit), + queryKey: RQKEY(status ?? 'all', readState, kind, lockStatus, limit), queryFn: async ({pageParam}) => { const {data} = await agent.chat.bsky.convo.listConvos( { @@ -58,6 +65,7 @@ export function useListConvosQuery({ cursor: pageParam, readState: readState === 'unread' ? 'unread' : undefined, kind: kind === 'all' ? undefined : kind, + lockStatus, status, }, {headers: DM_SERVICE_HEADERS}, @@ -106,6 +114,7 @@ export function ListConvosProviderInner({ const {refetch, data} = useListConvosQuery({ readState: 'unread', limit: UNREAD_LIMIT, + lockStatus: 'unlocked', }) const messagesBus = useMessagesEventBus() const queryClient = useQueryClient()