diff --git a/src/components/ReportDialog/SelectLabelerView.tsx b/src/components/ReportDialog/SelectLabelerView.tsx
deleted file mode 100644
index 02b3244428..0000000000
--- a/src/components/ReportDialog/SelectLabelerView.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-import {View} from 'react-native'
-import {type AppBskyLabelerDefs} from '@atproto/api'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-import {getLabelingServiceTitle} from '#/lib/moderation'
-import {atoms as a, useBreakpoints, useTheme} from '#/alf'
-import {Button, useButtonContext} from '#/components/Button'
-import {Divider} from '#/components/Divider'
-import * as LabelingServiceCard from '#/components/LabelingServiceCard'
-import {Text} from '#/components/Typography'
-import {type ReportDialogProps} from './types'
-
-export function SelectLabelerView({
- ...props
-}: ReportDialogProps & {
- labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
- onSelectLabeler: (v: string) => void
-}) {
- const t = useTheme()
- const {_} = useLingui()
- const {gtMobile} = useBreakpoints()
-
- return (
-
-
-
- Select moderator
-
-
- To whom would you like to send this report?
-
-
-
-
-
-
- {props.labelers.map(labeler => {
- return (
-
- )
- })}
-
-
- )
-}
-
-function LabelerButton({
- labeler,
-}: {
- labeler: AppBskyLabelerDefs.LabelerViewDetailed
-}) {
- const t = useTheme()
- const {hovered, pressed} = useButtonContext()
- const interacted = hovered || pressed
-
- return (
-
-
-
-
-
- @{labeler.creator.handle}
-
-
-
- )
-}
diff --git a/src/components/ReportDialog/SelectReportOptionView.tsx b/src/components/ReportDialog/SelectReportOptionView.tsx
deleted file mode 100644
index 0fd321cdf8..0000000000
--- a/src/components/ReportDialog/SelectReportOptionView.tsx
+++ /dev/null
@@ -1,195 +0,0 @@
-import React from 'react'
-import {View} from 'react-native'
-import {type AppBskyLabelerDefs} from '@atproto/api'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-import {
- type ReportOption,
- useReportOptions,
-} from '#/lib/moderation/useReportOptions'
-import {Link} from '#/components/Link'
-import {DMCA_LINK} from '#/components/ReportDialog/const'
-export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
-
-import {atoms as a, useBreakpoints, useTheme} from '#/alf'
-import {
- Button,
- ButtonIcon,
- ButtonText,
- useButtonContext,
-} from '#/components/Button'
-import {Divider} from '#/components/Divider'
-import {
- ChevronLeft_Stroke2_Corner0_Rounded as ChevronLeft,
- ChevronRight_Stroke2_Corner0_Rounded as ChevronRight,
-} from '#/components/icons/Chevron'
-import {SquareArrowTopRight_Stroke2_Corner0_Rounded as SquareArrowTopRight} from '#/components/icons/SquareArrowTopRight'
-import {Text} from '#/components/Typography'
-import {type ReportDialogProps} from './types'
-
-export function SelectReportOptionView(props: {
- params: ReportDialogProps['params']
- labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
- onSelectReportOption: (reportOption: ReportOption) => void
- goBack: () => void
-}) {
- const t = useTheme()
- const {_} = useLingui()
- const {gtMobile} = useBreakpoints()
- const allReportOptions = useReportOptions()
- const reportOptions = allReportOptions[props.params.type]
-
- const i18n = React.useMemo(() => {
- let title = _(msg`Report this content`)
- let description = _(msg`Why should this content be reviewed?`)
-
- if (props.params.type === 'account') {
- title = _(msg`Report this user`)
- description = _(msg`Why should this user be reviewed?`)
- } else if (props.params.type === 'post') {
- title = _(msg`Report this post`)
- description = _(msg`Why should this post be reviewed?`)
- } else if (props.params.type === 'list') {
- title = _(msg`Report this list`)
- description = _(msg`Why should this list be reviewed?`)
- } else if (props.params.type === 'feedgen') {
- title = _(msg`Report this feed`)
- description = _(msg`Why should this feed be reviewed?`)
- } else if (props.params.type === 'starterpack') {
- title = _(msg`Report this starter pack`)
- description = _(msg`Why should this starter pack be reviewed?`)
- } else if (props.params.type === 'convoMessage') {
- title = _(msg`Report this message`)
- description = _(msg`Why should this message be reviewed?`)
- }
-
- return {
- title,
- description,
- }
- }, [_, props.params.type])
-
- return (
-
- {props.labelers?.length > 1 ? (
-
- ) : null}
-
-
- {i18n.title}
-
- {i18n.description}
-
-
-
-
-
-
- {reportOptions.map(reportOption => {
- return (
-
- )
- })}
-
- {(props.params.type === 'post' || props.params.type === 'account') && (
-
-
- Need to report a copyright violation?
-
-
-
- View details
-
-
-
-
- )}
-
-
- )
-}
-
-function ReportOptionButton({
- title,
- description,
-}: {
- title: string
- description: string
-}) {
- const t = useTheme()
- const {hovered, pressed} = useButtonContext()
- const interacted = hovered || pressed
-
- return (
-
-
-
- {title}
-
- {description}
-
-
-
-
-
-
- )
-}
diff --git a/src/components/ReportDialog/SubmitView.tsx b/src/components/ReportDialog/SubmitView.tsx
deleted file mode 100644
index 3dbb1389d2..0000000000
--- a/src/components/ReportDialog/SubmitView.tsx
+++ /dev/null
@@ -1,274 +0,0 @@
-import React from 'react'
-import {View} from 'react-native'
-import {type AppBskyLabelerDefs} from '@atproto/api'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-import {getLabelingServiceTitle} from '#/lib/moderation'
-import {type ReportOption} from '#/lib/moderation/useReportOptions'
-import {isAndroid} from '#/platform/detection'
-import {useAgent} from '#/state/session'
-import {CharProgress} from '#/view/com/composer/char-progress/CharProgress'
-import * as Toast from '#/view/com/util/Toast'
-import {atoms as a, native, useTheme} from '#/alf'
-import {Button, ButtonIcon, ButtonText} from '#/components/Button'
-import * as Dialog from '#/components/Dialog'
-import * as Toggle from '#/components/forms/Toggle'
-import {Check_Stroke2_Corner0_Rounded as Check} from '#/components/icons/Check'
-import {ChevronLeft_Stroke2_Corner0_Rounded as ChevronLeft} from '#/components/icons/Chevron'
-import {PaperPlane_Stroke2_Corner0_Rounded as SendIcon} from '#/components/icons/PaperPlane'
-import {Loader} from '#/components/Loader'
-import {Text} from '#/components/Typography'
-import {type ReportDialogProps} from './types'
-
-export function SubmitView({
- params,
- labelers,
- selectedLabeler,
- selectedReportOption,
- goBack,
- onSubmitComplete,
-}: ReportDialogProps & {
- labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
- selectedLabeler: string
- selectedReportOption: ReportOption
- goBack: () => void
- onSubmitComplete: () => void
-}) {
- const t = useTheme()
- const {_} = useLingui()
- const agent = useAgent()
- const [details, setDetails] = React.useState('')
- const [submitting, setSubmitting] = React.useState(false)
- const [selectedServices, setSelectedServices] = React.useState([
- selectedLabeler,
- ])
- const [error, setError] = React.useState('')
-
- const submit = React.useCallback(async () => {
- setSubmitting(true)
- setError('')
-
- const $type =
- params.type === 'account'
- ? 'com.atproto.admin.defs#repoRef'
- : 'com.atproto.repo.strongRef'
- const report = {
- reasonType: selectedReportOption.reason,
- subject: {
- $type,
- ...params,
- },
- reason: details,
- }
- const results = await Promise.all(
- selectedServices.map(did => {
- return agent
- .createModerationReport(report, {
- encoding: 'application/json',
- headers: {
- 'atproto-proxy': `${did}#atproto_labeler`,
- },
- })
- .then(
- _ => true,
- _ => false,
- )
- }),
- )
-
- setSubmitting(false)
-
- if (results.includes(true)) {
- Toast.show(_(msg`Thank you. Your report has been sent.`))
- onSubmitComplete()
- } else {
- setError(
- _(
- msg`There was an issue sending your report. Please check your internet connection.`,
- ),
- )
- }
- }, [
- _,
- params,
- details,
- selectedReportOption,
- selectedServices,
- onSubmitComplete,
- setError,
- agent,
- ])
-
- return (
-
-
-
-
-
-
- {selectedReportOption.title}
-
-
- {selectedReportOption.description}
-
-
-
-
-
-
-
-
- Select the moderation service(s) to report to
-
-
-
-
- {labelers.map(labeler => {
- const title = getLabelingServiceTitle({
- displayName: labeler.creator.displayName,
- handle: labeler.creator.handle,
- })
- return (
-
-
-
- )
- })}
-
-
-
-
-
- Optionally provide additional information below:
-
-
-
-
-
-
-
-
-
-
-
-
- {!selectedServices.length ||
- (error && (
-
- {error ? (
- error
- ) : (
- You must select at least one labeler for a report
- )}
-
- ))}
-
-
-
- {/* Maybe fix this later -h */}
- {isAndroid ? : null}
-
- )
-}
-
-function LabelerToggle({title}: {title: string}) {
- const t = useTheme()
- const ctx = Toggle.useItemContext()
-
- return (
-
-
-
-
- {title}
-
-
-
- )
-}
diff --git a/src/components/ReportDialog/const.ts b/src/components/ReportDialog/const.ts
deleted file mode 100644
index 30c9aff88d..0000000000
--- a/src/components/ReportDialog/const.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const DMCA_LINK = 'https://bsky.social/about/support/copyright'
diff --git a/src/components/ReportDialog/index.tsx b/src/components/ReportDialog/index.tsx
deleted file mode 100644
index 2401ab89f5..0000000000
--- a/src/components/ReportDialog/index.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import React from 'react'
-import {Pressable, View} from 'react-native'
-import {type ScrollView} from 'react-native-gesture-handler'
-import {msg, Trans} from '@lingui/macro'
-import {useLingui} from '@lingui/react'
-
-import {type ReportOption} from '#/lib/moderation/useReportOptions'
-import {useMyLabelersQuery} from '#/state/queries/preferences'
-export {useDialogControl as useReportDialogControl} from '#/components/Dialog'
-
-import {type AppBskyLabelerDefs} from '@atproto/api'
-
-import {atoms as a} from '#/alf'
-import * as Dialog from '#/components/Dialog'
-import {useDelayedLoading} from '#/components/hooks/useDelayedLoading'
-import {Loader} from '#/components/Loader'
-import {Text} from '#/components/Typography'
-import {SelectLabelerView} from './SelectLabelerView'
-import {SelectReportOptionView} from './SelectReportOptionView'
-import {SubmitView} from './SubmitView'
-import {type ReportDialogProps} from './types'
-
-export function ReportDialog(props: ReportDialogProps) {
- return (
-
-
-
-
- )
-}
-
-function ReportDialogInner(props: ReportDialogProps) {
- const {_} = useLingui()
- const {
- isLoading: isLabelerLoading,
- data: labelers,
- error,
- } = useMyLabelersQuery({excludeNonConfigurableLabelers: true})
- const isLoading = useDelayedLoading(500, isLabelerLoading)
-
- const ref = React.useRef(null)
-
- return (
-
- {isLoading ? (
-
-
- {/* Here to capture focus for a hot sec to prevent flash */}
-
-
- ) : error || !labelers ? (
-
-
- Something went wrong, please try again.
-
-
- ) : (
-
- )}
-
- )
-}
-
-function ReportDialogLoaded(
- props: ReportDialogProps & {
- labelers: AppBskyLabelerDefs.LabelerViewDetailed[]
- },
-) {
- const [selectedLabeler, setSelectedLabeler] = React.useState<
- string | undefined
- >(props.labelers.length === 1 ? props.labelers[0].creator.did : undefined)
- const [selectedReportOption, setSelectedReportOption] = React.useState<
- ReportOption | undefined
- >()
-
- if (selectedReportOption && selectedLabeler) {
- return (
- setSelectedReportOption(undefined)}
- onSubmitComplete={() => props.control.close()}
- />
- )
- }
- if (selectedLabeler) {
- return (
- setSelectedLabeler(undefined)}
- onSelectReportOption={setSelectedReportOption}
- />
- )
- }
- return
-}
diff --git a/src/components/ReportDialog/types.ts b/src/components/ReportDialog/types.ts
deleted file mode 100644
index ac9a18d6dd..0000000000
--- a/src/components/ReportDialog/types.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import type * as Dialog from '#/components/Dialog'
-
-export type ReportDialogProps = {
- control: Dialog.DialogOuterProps['control']
- params:
- | {
- type: 'post' | 'list' | 'feedgen' | 'starterpack' | 'other'
- uri: string
- cid: string
- }
- | {
- type: 'account'
- did: string
- }
- | {type: 'convoMessage'}
-}