Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 86 lines 2.8 kB view raw
1import {useCallback} from 'react' 2import {AtUri} from '@atproto/api' 3import {msg} from '@lingui/core/macro' 4import {useLingui} from '@lingui/react' 5import {Trans} from '@lingui/react/macro' 6import {useNavigation} from '@react-navigation/native' 7 8import {useRequireEmailVerification} from '#/lib/hooks/useRequireEmailVerification' 9import { 10 type CommonNavigatorParams, 11 type NativeStackScreenProps, 12 type NavigationProp, 13} from '#/lib/routes/types' 14import {MyLists} from '#/view/com/lists/MyLists' 15import {atoms as a} from '#/alf' 16import {Button, ButtonIcon, ButtonText} from '#/components/Button' 17import {useDialogControl} from '#/components/Dialog' 18import {CreateOrEditListDialog} from '#/components/dialogs/lists/CreateOrEditListDialog' 19import {PlusLarge_Stroke2_Corner0_Rounded as PlusIcon} from '#/components/icons/Plus' 20import * as Layout from '#/components/Layout' 21 22type Props = NativeStackScreenProps<CommonNavigatorParams, 'ModerationModlists'> 23export function ModerationModlistsScreen({}: Props) { 24 const {_} = useLingui() 25 const navigation = useNavigation<NavigationProp>() 26 const requireEmailVerification = useRequireEmailVerification() 27 const createListDialogControl = useDialogControl() 28 29 const onPressNewList = useCallback(() => { 30 createListDialogControl.open() 31 }, [createListDialogControl]) 32 33 const wrappedOnPressNewList = requireEmailVerification(onPressNewList, { 34 instructions: [ 35 <Trans key="modlist"> 36 Before creating a list, you must first verify your email. 37 </Trans>, 38 ], 39 }) 40 41 const onCreateList = useCallback( 42 (uri: string) => { 43 try { 44 const urip = new AtUri(uri) 45 navigation.navigate('ProfileList', { 46 name: urip.hostname, 47 rkey: urip.rkey, 48 }) 49 } catch {} 50 }, 51 [navigation], 52 ) 53 54 return ( 55 <Layout.Screen testID="moderationModlistsScreen"> 56 <Layout.Header.Outer> 57 <Layout.Header.BackButton /> 58 <Layout.Header.Content align="left"> 59 <Layout.Header.TitleText> 60 <Trans>Moderation Lists</Trans> 61 </Layout.Header.TitleText> 62 </Layout.Header.Content> 63 <Button 64 label={_(msg`New list`)} 65 testID="newModListBtn" 66 color="secondary" 67 variant="solid" 68 size="small" 69 onPress={wrappedOnPressNewList}> 70 <ButtonIcon icon={PlusIcon} /> 71 <ButtonText> 72 <Trans context="action">New</Trans> 73 </ButtonText> 74 </Button> 75 </Layout.Header.Outer> 76 77 <MyLists filter="mod" style={a.flex_grow} /> 78 79 <CreateOrEditListDialog 80 purpose="app.bsky.graph.defs#modlist" 81 control={createListDialogControl} 82 onSave={onCreateList} 83 /> 84 </Layout.Screen> 85 ) 86}