diff --git a/src/components/moderation/ReportDialog/index.tsx b/src/components/moderation/ReportDialog/index.tsx
index c45047d328..a264d12bc2 100644
--- a/src/components/moderation/ReportDialog/index.tsx
+++ b/src/components/moderation/ReportDialog/index.tsx
@@ -113,6 +113,13 @@ function Inner(props: ReportDialogProps) {
const [isPending, setPending] = React.useState(false)
const [isSuccess, setSuccess] = React.useState(false)
+ // some reasons ONLY go to Bluesky
+ const isBskyOnlyReason = state?.selectedOption?.reason
+ ? BSKY_LABELER_ONLY_REPORT_REASONS.has(state.selectedOption.reason)
+ : false
+ // some subjects (chats) only go to Bluesky
+ const isBskyOnlySubject = props.subject.type === 'convoMessage'
+
/**
* Labelers that support this `subject` and its NSID collection
*/
@@ -139,12 +146,6 @@ function Inner(props: ReportDialogProps) {
})
.filter(l => {
if (!state.selectedOption) return false
- // some reasons ONLY go to Bluesky
- const isBskyOnlyReason = BSKY_LABELER_ONLY_REPORT_REASONS.has(
- state.selectedOption.reason,
- )
- // some subjects (chats) only go to Bluesky
- const isBskyOnlySubject = props.subject.type === 'convoMessage'
if (isBskyOnlyReason || isBskyOnlySubject) {
return l.creator.did === BSKY_LABELER_DID
}
@@ -159,10 +160,25 @@ function Inner(props: ReportDialogProps) {
)
)
})
- }, [props, allLabelers, state.selectedOption])
+ }, [
+ props,
+ allLabelers,
+ state.selectedOption,
+ isBskyOnlyReason,
+ isBskyOnlySubject,
+ ])
const hasSupportedLabelers = !!supportedLabelers.length
const hasSingleSupportedLabeler = supportedLabelers.length === 1
+ /**
+ * We skip the select labeler step if there's only one possible labeler, and
+ * that labeler is Bluesky (which is the case for chat reports and certain
+ * reason types). We'll use this below to adjust the indexing and skip the
+ * step in the UI.
+ */
+ const isAlwaysBskyLabeler =
+ hasSingleSupportedLabeler && (isBskyOnlyReason || isBskyOnlySubject)
+
const onSubmit = React.useCallback(async () => {
dispatch({type: 'clearError'})
@@ -376,88 +392,104 @@ function Inner(props: ReportDialogProps) {
) : null}
-
- !state.selectedLabeler}
+ callback={() => {
+ dispatch({
+ type: 'selectLabeler',
+ labeler: supportedLabelers[0],
+ })
+ }}
/>
- {state.activeStepIndex1 >= 3 && (
- <>
- {state.selectedLabeler ? (
- <>
- {hasSingleSupportedLabeler ? (
-
- ) : (
-
-
-
+ ) : (
+
+
+ {state.activeStepIndex1 >= 3 && (
+ <>
+ {state.selectedLabeler ? (
+ <>
+ {hasSingleSupportedLabeler ? (
+
+ ) : (
+
+
+
+
+
-
-
- )}
- >
- ) : (
- <>
- {hasSupportedLabelers ? (
-
- {hasSingleSupportedLabeler ? (
- <>
-
- !state.selectedLabeler}
- callback={() => {
- dispatch({
- type: 'selectLabeler',
- labeler: supportedLabelers[0],
- })
- }}
- />
- >
- ) : (
- <>
- {supportedLabelers.map(l => (
- {
- dispatch({type: 'selectLabeler', labeler: l})
+ )}
+ >
+ ) : (
+ <>
+ {hasSupportedLabelers ? (
+
+ {hasSingleSupportedLabeler ? (
+ <>
+
+ !state.selectedLabeler}
+ callback={() => {
+ dispatch({
+ type: 'selectLabeler',
+ labeler: supportedLabelers[0],
+ })
}}
/>
- ))}
- >
- )}
-
- ) : (
- // should never happen in our app
-
-
- Unfortunately, none of your subscribed labelers supports
- this report type.
-
-
- )}
- >
- )}
- >
- )}
-
+ >
+ ) : (
+ <>
+ {supportedLabelers.map(l => (
+ {
+ dispatch({type: 'selectLabeler', labeler: l})
+ }}
+ />
+ ))}
+ >
+ )}
+
+ ) : (
+ // should never happen in our app
+
+
+ Unfortunately, none of your subscribed labelers
+ supports this report type.
+
+
+ )}
+ >
+ )}
+ >
+ )}
+
+ )}
{state.activeStepIndex1 === 4 && (
<>