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.Content>
65 <Button
66 label={_(msg`New list`)}
67 testID="newModListBtn"
68 color="secondary"
69 variant="solid"
70 size="small"
71 onPress={onPressNewList}>
72 <ButtonIcon icon={PlusIcon} />
73 <ButtonText>
74 <Trans context="action">New</Trans>
75 </ButtonText>
76 </Button>
77 </Layout.Header.Outer>
78 <MyLists filter="mod" style={a.flex_grow} />
79 <VerifyEmailDialog
80 reasonText={_(
81 msg`Before creating a list, you must first verify your email.`,
82 )}
83 control={control}
84 />
85 </Layout.Screen>
86 )
87}