mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
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}