mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at ruby-v 3.1 kB view raw
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}