mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
0
fork

Configure Feed

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

at sys-log 97 lines 3.1 kB view raw
1import React from 'react' 2import {Pressable, View} from 'react-native' 3import {ScrollView} from 'react-native-gesture-handler' 4import {msg, Trans} from '@lingui/macro' 5import {useLingui} from '@lingui/react' 6 7import {ReportOption} from '#/lib/moderation/useReportOptions' 8import {useMyLabelersQuery} from '#/state/queries/preferences' 9export {useDialogControl as useReportDialogControl} from '#/components/Dialog' 10 11import {AppBskyLabelerDefs} from '@atproto/api' 12 13import {atoms as a} from '#/alf' 14import * as Dialog from '#/components/Dialog' 15import {useDelayedLoading} from '#/components/hooks/useDelayedLoading' 16import {Loader} from '#/components/Loader' 17import {Text} from '#/components/Typography' 18import {SelectLabelerView} from './SelectLabelerView' 19import {SelectReportOptionView} from './SelectReportOptionView' 20import {SubmitView} from './SubmitView' 21import {ReportDialogProps} from './types' 22 23export function ReportDialog(props: ReportDialogProps) { 24 return ( 25 <Dialog.Outer control={props.control}> 26 <Dialog.Handle /> 27 <ReportDialogInner {...props} /> 28 </Dialog.Outer> 29 ) 30} 31 32function ReportDialogInner(props: ReportDialogProps) { 33 const {_} = useLingui() 34 const { 35 isLoading: isLabelerLoading, 36 data: labelers, 37 error, 38 } = useMyLabelersQuery({excludeNonConfigurableLabelers: true}) 39 const isLoading = useDelayedLoading(500, isLabelerLoading) 40 41 const ref = React.useRef<ScrollView>(null) 42 43 return ( 44 <Dialog.ScrollableInner label={_(msg`Report dialog`)} ref={ref}> 45 {isLoading ? ( 46 <View style={[a.align_center, {height: 100}]}> 47 <Loader size="xl" /> 48 {/* Here to capture focus for a hot sec to prevent flash */} 49 <Pressable accessible={false} /> 50 </View> 51 ) : error || !labelers ? ( 52 <View> 53 <Text style={[a.text_md]}> 54 <Trans>Something went wrong, please try again.</Trans> 55 </Text> 56 </View> 57 ) : ( 58 <ReportDialogLoaded labelers={labelers} {...props} /> 59 )} 60 </Dialog.ScrollableInner> 61 ) 62} 63 64function ReportDialogLoaded( 65 props: ReportDialogProps & { 66 labelers: AppBskyLabelerDefs.LabelerViewDetailed[] 67 }, 68) { 69 const [selectedLabeler, setSelectedLabeler] = React.useState< 70 string | undefined 71 >(props.labelers.length === 1 ? props.labelers[0].creator.did : undefined) 72 const [selectedReportOption, setSelectedReportOption] = React.useState< 73 ReportOption | undefined 74 >() 75 76 if (selectedReportOption && selectedLabeler) { 77 return ( 78 <SubmitView 79 {...props} 80 selectedLabeler={selectedLabeler} 81 selectedReportOption={selectedReportOption} 82 goBack={() => setSelectedReportOption(undefined)} 83 onSubmitComplete={() => props.control.close()} 84 /> 85 ) 86 } 87 if (selectedLabeler) { 88 return ( 89 <SelectReportOptionView 90 {...props} 91 goBack={() => setSelectedLabeler(undefined)} 92 onSelectReportOption={setSelectedReportOption} 93 /> 94 ) 95 } 96 return <SelectLabelerView {...props} onSelectLabeler={setSelectedLabeler} /> 97}