mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import React from 'react'
2import {StyleProp, View, ViewStyle} from 'react-native'
3import {ModerationUI, ModerationCause} from '@atproto/api'
4
5import {useModerationCauseDescription} from '#/lib/moderation/useModerationCauseDescription'
6import {getModerationCauseKey} from '#/lib/moderation'
7
8import {atoms as a} from '#/alf'
9import {Button, ButtonText, ButtonIcon} from '#/components/Button'
10import {
11 ModerationDetailsDialog,
12 useModerationDetailsDialogControl,
13} from '#/components/moderation/ModerationDetailsDialog'
14
15export function PostAlerts({
16 modui,
17 style,
18}: {
19 modui: ModerationUI
20 includeMute?: boolean
21 style?: StyleProp<ViewStyle>
22}) {
23 if (!modui.alert && !modui.inform) {
24 return null
25 }
26
27 return (
28 <View style={[a.flex_col, a.gap_xs, style]}>
29 <View style={[a.flex_row, a.flex_wrap, a.gap_xs]}>
30 {modui.alerts.map(cause => (
31 <PostLabel key={getModerationCauseKey(cause)} cause={cause} />
32 ))}
33 {modui.informs.map(cause => (
34 <PostLabel key={getModerationCauseKey(cause)} cause={cause} />
35 ))}
36 </View>
37 </View>
38 )
39}
40
41function PostLabel({cause}: {cause: ModerationCause}) {
42 const control = useModerationDetailsDialogControl()
43 const desc = useModerationCauseDescription(cause)
44
45 return (
46 <>
47 <Button
48 label={desc.name}
49 variant="solid"
50 color="secondary"
51 size="small"
52 shape="default"
53 onPress={() => {
54 control.open()
55 }}
56 style={[a.px_sm, a.py_xs, a.gap_xs]}>
57 <ButtonIcon icon={desc.icon} position="left" />
58 <ButtonText style={[a.text_left, a.leading_snug]}>
59 {desc.name}
60 </ButtonText>
61 </Button>
62
63 <ModerationDetailsDialog control={control} modcause={cause} />
64 </>
65 )
66}