From 0d9ee44eee6b28a6e133a1a6809d5f4829d5ca73 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:27:39 +0100 Subject: [PATCH] feat: add federation badges to mobile surfaces Globe/amber badge on federated space icons, @domain on federated DM users, home instance on the You screen profile card. --- .../src/components/layout/MobileDmsScreen.tsx | 8 ++++++++ .../components/layout/MobileSpacesScreen.tsx | 19 +++++++++++++++++++ .../src/components/layout/MobileYouScreen.tsx | 6 ++++++ 3 files changed, 33 insertions(+) diff --git a/packages/web/src/components/layout/MobileDmsScreen.tsx b/packages/web/src/components/layout/MobileDmsScreen.tsx index cfc9dc19..5a3c8090 100644 --- a/packages/web/src/components/layout/MobileDmsScreen.tsx +++ b/packages/web/src/components/layout/MobileDmsScreen.tsx @@ -9,6 +9,7 @@ import { Avatar } from '../ui/Avatar'; import { Mascot } from '../ui/Mascot'; import { resolveAssetUrl } from '../../utils/assetUrls'; import { useNavigate } from 'react-router-dom'; +import { parseFederatedUsername } from '../../utils/identity'; export function MobileDmsScreen() { const pushMobileScreen = useUIStore((s) => s.pushMobileScreen); @@ -195,6 +196,13 @@ export function MobileDmsScreen() { )} + {(() => { + const mainUser = otherMembers[0]; + if (!mainUser) return null; + const { domain } = parseFederatedUsername(mainUser.username); + if (!domain) return null; + return
{previewSender && previewSender.id !== authUser?.id diff --git a/packages/web/src/components/layout/MobileSpacesScreen.tsx b/packages/web/src/components/layout/MobileSpacesScreen.tsx index b6a0b34d..11c35121 100644 --- a/packages/web/src/components/layout/MobileSpacesScreen.tsx +++ b/packages/web/src/components/layout/MobileSpacesScreen.tsx @@ -13,6 +13,7 @@ import type { Channel } from '@backspace/shared'; import { Mascot } from '../ui/Mascot'; import { ConfirmDialog } from '../ui/ConfirmDialog'; import { TransferOwnershipModal } from '../modals/TransferOwnershipModal'; +import { useInstanceStore } from '../../stores/instanceStore'; export function MobileSpacesScreen() { const spaces = useSpaceStore((s) => s.spaces); @@ -466,6 +467,24 @@ export function MobileSpacesScreen() { )} + {(() => { + const origin = (space as TaggedSpace)._instanceOrigin; + if (!origin) return null; + const instances = useInstanceStore.getState().instances; + const inst = instances.find(i => i.origin === origin); + const isDisconnected = inst ? !inst.connected : false; + return ( +
@{user.username}
+ {(() => { + const { domain } = parseFederatedUsername(user.username); + if (!domain) return null; + return{user.customStatus}
)}