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}