import React, {useState, useMemo} from 'react' import { ActivityIndicator, StyleSheet, TouchableOpacity, View, } from 'react-native' import {ComAtprotoModerationDefs} from '@atproto/api' import LinearGradient from 'react-native-linear-gradient' import {useStores} from 'state/index' import {s, colors, gradients} from 'lib/styles' import {RadioGroup, RadioGroupItem} from '../util/forms/RadioGroup' import {Text} from '../util/text/Text' import * as Toast from '../util/Toast' import {ErrorMessage} from '../util/error/ErrorMessage' import {cleanError} from 'lib/strings/errors' import {usePalette} from 'lib/hooks/usePalette' import {isDesktopWeb} from 'platform/detection' export const snapPoints = ['50%'] export function Component({did}: {did: string}) { const store = useStores() const pal = usePalette('default') const [isProcessing, setIsProcessing] = useState(false) const [error, setError] = useState('') const [issue, setIssue] = useState('') const onSelectIssue = (v: string) => setIssue(v) const ITEMS: RadioGroupItem[] = useMemo( () => [ { key: ComAtprotoModerationDefs.REASONMISLEADING, label: ( Misleading Account Impersonation or false claims about identity or affiliation ), }, { key: ComAtprotoModerationDefs.REASONSPAM, label: ( Frequently Posts Unwanted Content Spam; excessive mentions or replies ), }, ], [pal], ) const onPress = async () => { setError('') if (!issue) { return } setIsProcessing(true) try { await store.agent.com.atproto.moderation.createReport({ reasonType: issue, subject: { $type: 'com.atproto.admin.defs#repoRef', did, }, }) Toast.show("Thank you for your report! We'll look into it promptly.") store.shell.closeModal() return } catch (e: any) { setError(cleanError(e)) setIsProcessing(false) } } return ( Report account What is the issue with this account? For other issues, please report specific posts. {error ? ( ) : undefined} {isProcessing ? ( ) : issue ? ( Send Report ) : undefined} ) } const styles = StyleSheet.create({ container: { flex: 1, paddingHorizontal: isDesktopWeb ? 0 : 10, }, title: { textAlign: 'center', fontWeight: 'bold', marginBottom: 12, }, description: { textAlign: 'center', paddingHorizontal: 22, marginBottom: 10, }, btn: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', width: '100%', borderRadius: 32, padding: 14, backgroundColor: colors.gray1, }, })