feat: show presence status badges in member list panels

Add online/offline/idle presence dots next to verification shields in
both the room members drawer and the common-settings members list.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-23 20:13:08 -04:00
parent 6bbed6e2e8
commit 3f4c90f56a
2 changed files with 15 additions and 0 deletions
@@ -58,6 +58,14 @@ import { useRoomCreators } from '../../../hooks/useRoomCreators';
import { getMouseEventCords } from '../../../utils/dom';
import { useCrossSigningActive } from '../../../hooks/useCrossSigning';
import { MemberVerificationBadge } from '../../../components/MemberVerificationBadge';
import { useUserPresence } from '../../../hooks/useUserPresence';
import { PresenceBadge } from '../../../components/presence';
function MemberPresenceBadge({ userId }: { userId: string }) {
const presence = useUserPresence(userId);
if (!presence) return null;
return <PresenceBadge presence={presence.presence} status={presence.status} size="300" />;
}
const SEARCH_OPTIONS: UseAsyncSearchOptions = {
limit: 1000,
@@ -333,6 +341,7 @@ export function Members({ requestClose }: MembersProps) {
useAuthentication={useAuthentication}
after={
<>
<MemberPresenceBadge userId={tagOrMember.userId} />
{showEncryption && (
<MemberVerificationBadge userId={tagOrMember.userId} />
)}
+6
View File
@@ -61,6 +61,8 @@ import { useFlattenPowerTagMembers, useGetMemberPowerTag } from '../../hooks/use
import { useRoomCreators } from '../../hooks/useRoomCreators';
import { useCrossSigningActive } from '../../hooks/useCrossSigning';
import { MemberVerificationBadge } from '../../components/MemberVerificationBadge';
import { useUserPresence } from '../../hooks/useUserPresence';
import { PresenceBadge } from '../../components/presence';
type MemberDrawerHeaderProps = {
room: Room;
@@ -131,6 +133,7 @@ function MemberItem({
const avatarUrl = avatarMxcUrl
? mx.mxcUrlToHttp(avatarMxcUrl, 100, 100, 'crop', undefined, false, useAuthentication)
: undefined;
const presence = useUserPresence(member.userId);
return (
<MenuItem
@@ -152,6 +155,9 @@ function MemberItem({
}
after={
<>
{presence && (
<PresenceBadge presence={presence.presence} status={presence.status} size="300" />
)}
{showEncryption && <MemberVerificationBadge userId={member.userId} />}
{typing && (
<Badge size="300" variant="Secondary" fill="Soft" radii="Pill" outlined>