feat: extend verification badge to user profile and settings members list
CI / Build & Quality Checks (push) Successful in 10m22s

Extract MemberVerificationBadge into a shared component and render it in:
- UserRoomProfile: shield badge beside the display name on the profile card
- common-settings Members: badge next to each member in the room/space
  settings members page (accessible from the lobby)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-23 12:53:33 -04:00
parent 1ae286ee74
commit 2f7f933350
4 changed files with 56 additions and 35 deletions
@@ -56,6 +56,8 @@ import { useSpaceOptionally } from '../../../hooks/useSpace';
import { useFlattenPowerTagMembers, useGetMemberPowerTag } from '../../../hooks/useMemberPowerTag';
import { useRoomCreators } from '../../../hooks/useRoomCreators';
import { getMouseEventCords } from '../../../utils/dom';
import { useCrossSigningActive } from '../../../hooks/useCrossSigning';
import { MemberVerificationBadge } from '../../../components/MemberVerificationBadge';
const SEARCH_OPTIONS: UseAsyncSearchOptions = {
limit: 1000,
@@ -79,6 +81,8 @@ export function Members({ requestClose }: MembersProps) {
const useAuthentication = useMediaAuthentication();
const room = useRoom();
const members = useRoomMembers(mx, room.roomId);
const crossSigningActive = useCrossSigningActive();
const showEncryption = room.hasEncryptionStateEvent() && crossSigningActive;
const fetchingMembers = members.length < room.getJoinedMemberCount();
const openProfile = useOpenUserRoomProfile();
const profileUser = useUserRoomProfileState();
@@ -328,11 +332,16 @@ export function Members({ requestClose }: MembersProps) {
member={tagOrMember}
useAuthentication={useAuthentication}
after={
server && (
<Box as="span" shrink="No" alignSelf="End">
<ServerBadge server={server} fill="None" />
</Box>
)
<>
{showEncryption && (
<MemberVerificationBadge userId={tagOrMember.userId} />
)}
{server && (
<Box as="span" shrink="No" alignSelf="End">
<ServerBadge server={server} fill="None" />
</Box>
)}
</>
}
/>
</div>