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
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}