import React, {useState} from 'react' import {StyleSheet, TouchableOpacity, View} from 'react-native' import {ComAtprotoModerationDefs} from '@atproto/api' import {ScrollView, TextInput} from './util' import {Text} from '../util/text/Text' import {s, colors} from 'lib/styles' import {usePalette} from 'lib/hooks/usePalette' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useModalControls} from '#/state/modals' import {CharProgress} from '../composer/char-progress/CharProgress' import {getAgent} from '#/state/session' import * as Toast from '../util/Toast' import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' export const snapPoints = ['40%'] type ReportComponentProps = | { uri: string cid: string } | { did: string } export function Component(props: ReportComponentProps) { const pal = usePalette('default') const [details, setDetails] = useState('') const {_} = useLingui() const {closeModal} = useModalControls() const {isMobile} = useWebMediaQueries() const isAccountReport = 'did' in props const submit = async () => { try { const $type = !isAccountReport ? 'com.atproto.repo.strongRef' : 'com.atproto.admin.defs#repoRef' await getAgent().createModerationReport({ reasonType: ComAtprotoModerationDefs.REASONAPPEAL, subject: { $type, ...props, }, reason: details, }) Toast.show(_(msg`We'll look into your appeal promptly.`)) } finally { closeModal() } } return ( Appeal Content Warning Submit ) } const styles = StyleSheet.create({ detailsInputContainer: { borderRadius: 8, marginBottom: 8, }, detailsInput: { paddingHorizontal: 12, paddingTop: 12, paddingBottom: 12, borderRadius: 8, minHeight: 100, fontSize: 16, }, detailsInputBottomBar: { alignSelf: 'flex-end', }, charCounter: { flexDirection: 'row', alignItems: 'center', paddingRight: 10, paddingBottom: 8, }, btn: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', borderRadius: 32, padding: 14, backgroundColor: colors.blue3, }, })