forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 💫
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}