From 57646523fbe07ed7764e5eb604981083a32f9a1d Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Wed, 7 Jan 2026 18:05:28 -0600 Subject: [PATCH] Add report dialog to LiveStatus dialog --- src/components/live/LiveStatusDialog.tsx | 43 ++++++++++++++++--- .../moderation/ReportDialog/action.ts | 1 + .../moderation/ReportDialog/copy.ts | 6 +++ .../moderation/ReportDialog/types.ts | 7 +++ .../ReportDialog/utils/parseReportSubject.ts | 16 +++++++ 5 files changed, 66 insertions(+), 7 deletions(-) diff --git a/src/components/live/LiveStatusDialog.tsx b/src/components/live/LiveStatusDialog.tsx index f15650e485..2d84275478 100644 --- a/src/components/live/LiveStatusDialog.tsx +++ b/src/components/live/LiveStatusDialog.tsx @@ -17,6 +17,12 @@ import {unstableCacheProfileView} from '#/state/queries/profile' import {android, atoms as a, platform, tokens, useTheme, web} from '#/alf' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' +import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfoIcon} from '#/components/icons/CircleInfo' +import {createStaticClick, SimpleInlineLinkText} from '#/components/Link' +import { + ReportDialog, + useReportDialogControl, +} from '#/components/moderation/ReportDialog' import * as ProfileCard from '#/components/ProfileCard' import {Text} from '#/components/Typography' import type * as bsky from '#/types/bsky' @@ -94,6 +100,7 @@ export function LiveStatus({ const queryClient = useQueryClient() const openLink = useOpenLink() const moderationOpts = useModerationOpts() + const reportDialogControl = useReportDialogControl() return ( <> @@ -205,16 +212,38 @@ export function LiveStatus({ )} - - Live feature is in beta testing - + + + + Live feature is in beta + + + { + reportDialogControl.open() + })} + style={[a.text_sm, a.underline, t.atoms.text_contrast_medium]}> + Report + + + + ) } diff --git a/src/components/moderation/ReportDialog/action.ts b/src/components/moderation/ReportDialog/action.ts index 1c35bd0494..e7e88ac265 100644 --- a/src/components/moderation/ReportDialog/action.ts +++ b/src/components/moderation/ReportDialog/action.ts @@ -70,6 +70,7 @@ export function useSubmitReportMutation() { } break } + case 'status': case 'post': case 'list': case 'feed': diff --git a/src/components/moderation/ReportDialog/copy.ts b/src/components/moderation/ReportDialog/copy.ts index 1027673b12..5fb2ad326d 100644 --- a/src/components/moderation/ReportDialog/copy.ts +++ b/src/components/moderation/ReportDialog/copy.ts @@ -14,6 +14,12 @@ export function useCopyForSubject(subject: ParsedReportSubject) { subtitle: _(msg`Why should this user be reviewed?`), } } + case 'status': { + return { + title: _(msg`Report this livestream`), + subtitle: _(msg`Why should this livestream be reviewed?`), + } + } case 'post': { return { title: _(msg`Report this post`), diff --git a/src/components/moderation/ReportDialog/types.ts b/src/components/moderation/ReportDialog/types.ts index 6df3a82ff6..42fcf7c25e 100644 --- a/src/components/moderation/ReportDialog/types.ts +++ b/src/components/moderation/ReportDialog/types.ts @@ -18,6 +18,7 @@ export type ReportSubject = | $Typed | $Typed | $Typed + | $Typed | $Typed | $Typed | $Typed @@ -38,6 +39,12 @@ export type ParsedReportSubject = quote: boolean } } + | { + type: 'status' + uri: string + cid: string + nsid: string + } | { type: 'list' uri: string diff --git a/src/components/moderation/ReportDialog/utils/parseReportSubject.ts b/src/components/moderation/ReportDialog/utils/parseReportSubject.ts index 0abfe1d9fd..70db23900e 100644 --- a/src/components/moderation/ReportDialog/utils/parseReportSubject.ts +++ b/src/components/moderation/ReportDialog/utils/parseReportSubject.ts @@ -1,5 +1,6 @@ import { AppBskyActorDefs, + AppBskyActorStatus, AppBskyFeedDefs, AppBskyFeedPost, AppBskyGraphDefs, @@ -33,6 +34,21 @@ export function parseReportSubject( did: subject.did, nsid: 'app.bsky.actor.profile', } + } else if (AppBskyActorDefs.isStatusView(subject)) { + const record = subject.record + if ( + bsky.dangerousIsType( + record, + AppBskyActorStatus.isRecord, + ) + ) { + return { + type: 'status', + uri: subject.uri, + cid: subject.cid, + nsid: 'app.bsky.actor.status', + } + } } else if (AppBskyGraphDefs.isListView(subject)) { return { type: 'list',