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 utm-source 148 lines 5.3 kB view raw
1import {useCallback} from 'react' 2import {View} from 'react-native' 3import {msg, Trans} from '@lingui/macro' 4import {useLingui} from '@lingui/react' 5import {NativeStackScreenProps} from '@react-navigation/native-stack' 6 7import {CommonNavigatorParams} from '#/lib/routes/types' 8import {isNative} from '#/platform/detection' 9import {useUpdateActorDeclaration} from '#/state/queries/messages/actor-declaration' 10import {useProfileQuery} from '#/state/queries/profile' 11import {useSession} from '#/state/session' 12import * as Toast from '#/view/com/util/Toast' 13import {ViewHeader} from '#/view/com/util/ViewHeader' 14import {ScrollView} from '#/view/com/util/Views' 15import {atoms as a} from '#/alf' 16import {Admonition} from '#/components/Admonition' 17import {Divider} from '#/components/Divider' 18import * as Toggle from '#/components/forms/Toggle' 19import * as Layout from '#/components/Layout' 20import {Text} from '#/components/Typography' 21import {useBackgroundNotificationPreferences} from '../../../modules/expo-background-notification-handler/src/BackgroundNotificationHandlerProvider' 22 23type AllowIncoming = 'all' | 'none' | 'following' 24 25type Props = NativeStackScreenProps<CommonNavigatorParams, 'MessagesSettings'> 26export function MessagesSettingsScreen({}: Props) { 27 const {_} = useLingui() 28 const {currentAccount} = useSession() 29 const {data: profile} = useProfileQuery({ 30 did: currentAccount!.did, 31 }) 32 const {preferences, setPref} = useBackgroundNotificationPreferences() 33 34 const {mutate: updateDeclaration} = useUpdateActorDeclaration({ 35 onError: () => { 36 Toast.show(_(msg`Failed to update settings`), 'xmark') 37 }, 38 }) 39 40 const onSelectMessagesFrom = useCallback( 41 (keys: string[]) => { 42 const key = keys[0] 43 if (!key) return 44 updateDeclaration(key as AllowIncoming) 45 }, 46 [updateDeclaration], 47 ) 48 49 const onSelectSoundSetting = useCallback( 50 (keys: string[]) => { 51 const key = keys[0] 52 if (!key) return 53 setPref('playSoundChat', key === 'enabled') 54 }, 55 [setPref], 56 ) 57 58 return ( 59 <Layout.Screen testID="messagesSettingsScreen"> 60 <ScrollView stickyHeaderIndices={[0]}> 61 <ViewHeader title={_(msg`Chat Settings`)} showOnDesktop showBorder /> 62 <View style={[a.p_lg, a.gap_md]}> 63 <Text style={[a.text_lg, a.font_bold]}> 64 <Trans>Allow new messages from</Trans> 65 </Text> 66 <Toggle.Group 67 label={_(msg`Allow new messages from`)} 68 type="radio" 69 values={[ 70 (profile?.associated?.chat?.allowIncoming as AllowIncoming) ?? 71 'following', 72 ]} 73 onChange={onSelectMessagesFrom}> 74 <View> 75 <Toggle.Item 76 name="all" 77 label={_(msg`Everyone`)} 78 style={[a.justify_between, a.py_sm]}> 79 <Toggle.LabelText> 80 <Trans>Everyone</Trans> 81 </Toggle.LabelText> 82 <Toggle.Radio /> 83 </Toggle.Item> 84 <Toggle.Item 85 name="following" 86 label={_(msg`Users I follow`)} 87 style={[a.justify_between, a.py_sm]}> 88 <Toggle.LabelText> 89 <Trans>Users I follow</Trans> 90 </Toggle.LabelText> 91 <Toggle.Radio /> 92 </Toggle.Item> 93 <Toggle.Item 94 name="none" 95 label={_(msg`No one`)} 96 style={[a.justify_between, a.py_sm]}> 97 <Toggle.LabelText> 98 <Trans>No one</Trans> 99 </Toggle.LabelText> 100 <Toggle.Radio /> 101 </Toggle.Item> 102 </View> 103 </Toggle.Group> 104 <Admonition type="tip"> 105 <Trans> 106 You can continue ongoing conversations regardless of which setting 107 you choose. 108 </Trans> 109 </Admonition> 110 {isNative && ( 111 <> 112 <Divider style={a.my_md} /> 113 <Text style={[a.text_lg, a.font_bold]}> 114 <Trans>Notification Sounds</Trans> 115 </Text> 116 <Toggle.Group 117 label={_(msg`Notification sounds`)} 118 type="radio" 119 values={[preferences.playSoundChat ? 'enabled' : 'disabled']} 120 onChange={onSelectSoundSetting}> 121 <View> 122 <Toggle.Item 123 name="enabled" 124 label={_(msg`Enabled`)} 125 style={[a.justify_between, a.py_sm]}> 126 <Toggle.LabelText> 127 <Trans>Enabled</Trans> 128 </Toggle.LabelText> 129 <Toggle.Radio /> 130 </Toggle.Item> 131 <Toggle.Item 132 name="disabled" 133 label={_(msg`Disabled`)} 134 style={[a.justify_between, a.py_sm]}> 135 <Toggle.LabelText> 136 <Trans>Disabled</Trans> 137 </Toggle.LabelText> 138 <Toggle.Radio /> 139 </Toggle.Item> 140 </View> 141 </Toggle.Group> 142 </> 143 )} 144 </View> 145 </ScrollView> 146 </Layout.Screen> 147 ) 148}