mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at verify-code 2.7 kB view raw
1import React from 'react' 2import {View} from 'react-native' 3import {AppBskyLabelerDefs} from '@atproto/api' 4import {msg, Trans} from '@lingui/macro' 5import {useLingui} from '@lingui/react' 6 7export {useDialogControl as useReportDialogControl} from '#/components/Dialog' 8import {getLabelingServiceTitle} from '#/lib/moderation' 9import {atoms as a, useBreakpoints, useTheme} from '#/alf' 10import {Button, useButtonContext} from '#/components/Button' 11import {Divider} from '#/components/Divider' 12import * as LabelingServiceCard from '#/components/LabelingServiceCard' 13import {Text} from '#/components/Typography' 14import {ReportDialogProps} from './types' 15 16export function SelectLabelerView({ 17 ...props 18}: ReportDialogProps & { 19 labelers: AppBskyLabelerDefs.LabelerViewDetailed[] 20 onSelectLabeler: (v: string) => void 21}) { 22 const t = useTheme() 23 const {_} = useLingui() 24 const {gtMobile} = useBreakpoints() 25 26 return ( 27 <View style={[a.gap_lg]}> 28 <View style={[a.justify_center, gtMobile ? a.gap_sm : a.gap_xs]}> 29 <Text style={[a.text_2xl, a.font_bold]}> 30 <Trans>Select moderator</Trans> 31 </Text> 32 <Text style={[a.text_md, t.atoms.text_contrast_medium]}> 33 <Trans>To whom would you like to send this report?</Trans> 34 </Text> 35 </View> 36 37 <Divider /> 38 39 <View style={[a.gap_sm]}> 40 {props.labelers.map(labeler => { 41 return ( 42 <Button 43 key={labeler.creator.did} 44 label={_(msg`Send report to ${labeler.creator.displayName}`)} 45 onPress={() => props.onSelectLabeler(labeler.creator.did)}> 46 <LabelerButton labeler={labeler} /> 47 </Button> 48 ) 49 })} 50 </View> 51 </View> 52 ) 53} 54 55function LabelerButton({ 56 labeler, 57}: { 58 labeler: AppBskyLabelerDefs.LabelerViewDetailed 59}) { 60 const t = useTheme() 61 const {hovered, pressed} = useButtonContext() 62 const interacted = hovered || pressed 63 64 return ( 65 <LabelingServiceCard.Outer 66 style={[ 67 a.p_md, 68 a.rounded_sm, 69 t.atoms.bg_contrast_25, 70 interacted && t.atoms.bg_contrast_50, 71 ]}> 72 <LabelingServiceCard.Avatar avatar={labeler.creator.avatar} /> 73 <LabelingServiceCard.Content> 74 <LabelingServiceCard.Title 75 value={getLabelingServiceTitle({ 76 displayName: labeler.creator.displayName, 77 handle: labeler.creator.handle, 78 })} 79 /> 80 <Text 81 style={[t.atoms.text_contrast_medium, a.text_sm, a.font_semibold]}> 82 @{labeler.creator.handle} 83 </Text> 84 </LabelingServiceCard.Content> 85 </LabelingServiceCard.Outer> 86 ) 87}