mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
1import React from 'react'
2import {AtUri} from '@atproto/api'
3import {msg, Trans} from '@lingui/macro'
4import {useLingui} from '@lingui/react'
5import {useFocusEffect, useNavigation} from '@react-navigation/native'
6
7import {useEmail} from '#/lib/hooks/useEmail'
8import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types'
9import {NavigationProp} from '#/lib/routes/types'
10import {useModalControls} from '#/state/modals'
11import {useSetMinimalShellMode} from '#/state/shell'
12import {MyLists} from '#/view/com/lists/MyLists'
13import {atoms as a} from '#/alf'
14import {Button, ButtonIcon, ButtonText} from '#/components/Button'
15import {useDialogControl} from '#/components/Dialog'
16import {VerifyEmailDialog} from '#/components/dialogs/VerifyEmailDialog'
17import {PlusLarge_Stroke2_Corner0_Rounded as PlusIcon} from '#/components/icons/Plus'
18import * as Layout from '#/components/Layout'
19
20type Props = NativeStackScreenProps<CommonNavigatorParams, 'ModerationModlists'>
21export function ModerationModlistsScreen({}: Props) {
22 const {_} = useLingui()
23 const setMinimalShellMode = useSetMinimalShellMode()
24 const navigation = useNavigation<NavigationProp>()
25 const {openModal} = useModalControls()
26 const {needsEmailVerification} = useEmail()
27 const control = useDialogControl()
28
29 useFocusEffect(
30 React.useCallback(() => {
31 setMinimalShellMode(false)
32 }, [setMinimalShellMode]),
33 )
34
35 const onPressNewList = React.useCallback(() => {
36 if (needsEmailVerification) {
37 control.open()
38 return
39 }
40
41 openModal({
42 name: 'create-or-edit-list',
43 purpose: 'app.bsky.graph.defs#modlist',
44 onSave: (uri: string) => {
45 try {
46 const urip = new AtUri(uri)
47 navigation.navigate('ProfileList', {
48 name: urip.hostname,
49 rkey: urip.rkey,
50 })
51 } catch {}
52 },
53 })
54 }, [needsEmailVerification, control, openModal, navigation])
55
56 return (
57 <Layout.Screen testID="moderationModlistsScreen">
58 <Layout.Header.Outer>
59 <Layout.Header.BackButton />
60 <Layout.Header.Content align="left">
61 <Layout.Header.TitleText>
62 <Trans>Moderation Lists</Trans>
63 </Layout.Header.TitleText>
64 <Layout.Header.SubtitleText>
65 <Trans>
66 Public, shareable lists of users to mute or block in bulk.
67 </Trans>
68 </Layout.Header.SubtitleText>
69 </Layout.Header.Content>
70 <Button
71 label={_(msg`New list`)}
72 testID="newModListBtn"
73 color="secondary"
74 variant="solid"
75 size="small"
76 onPress={onPressNewList}>
77 <ButtonIcon icon={PlusIcon} />
78 <ButtonText>
79 <Trans context="action">New</Trans>
80 </ButtonText>
81 </Button>
82 </Layout.Header.Outer>
83 <MyLists filter="mod" style={a.flex_grow} />
84 <VerifyEmailDialog
85 reasonText={_(
86 msg`Before creating a list, you must first verify your email.`,
87 )}
88 control={control}
89 />
90 </Layout.Screen>
91 )
92}