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