diff options
Diffstat (limited to 'src/view')
-rw-r--r-- | src/view/com/modals/DeleteAccount.tsx | 54 | ||||
-rw-r--r-- | src/view/screens/Settings/index.tsx | 29 | ||||
-rw-r--r-- | src/view/shell/createNativeStackNavigatorWithAuth.tsx | 8 |
3 files changed, 88 insertions, 3 deletions
diff --git a/src/view/com/modals/DeleteAccount.tsx b/src/view/com/modals/DeleteAccount.tsx index 06f1e111a..6dd248ca7 100644 --- a/src/view/com/modals/DeleteAccount.tsx +++ b/src/view/com/modals/DeleteAccount.tsx @@ -18,7 +18,13 @@ import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {cleanError} from 'lib/strings/errors' import {colors, gradients, s} from 'lib/styles' import {useTheme} from 'lib/ThemeContext' -import {isAndroid} from 'platform/detection' +import {isAndroid, isWeb} from 'platform/detection' +import {DeactivateAccountDialog} from '#/screens/Settings/components/DeactivateAccountDialog' +import {atoms as a, useTheme as useNewTheme} from '#/alf' +import {useDialogControl} from '#/components/Dialog' +import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo' +import {InlineLinkText} from '#/components/Link' +import {Text as NewText} from '#/components/Typography' import {resetToTab} from '../../../Navigation' import {ErrorMessage} from '../util/error/ErrorMessage' import {Text} from '../util/text/Text' @@ -30,6 +36,7 @@ export const snapPoints = isAndroid ? ['90%'] : ['55%'] export function Component({}: {}) { const pal = usePalette('default') const theme = useTheme() + const t = useNewTheme() const {currentAccount} = useSession() const agent = useAgent() const {removeAccount} = useSessionApi() @@ -41,6 +48,7 @@ export function Component({}: {}) { const [password, setPassword] = React.useState<string>('') const [isProcessing, setIsProcessing] = React.useState<boolean>(false) const [error, setError] = React.useState<string>('') + const deactivateAccountControl = useDialogControl() const onPressSendEmail = async () => { setError('') setIsProcessing(true) @@ -168,6 +176,50 @@ export function Component({}: {}) { </TouchableOpacity> </> )} + + <View style={[!isWeb && a.px_xl]}> + <View + style={[ + a.w_full, + a.flex_row, + a.gap_sm, + a.mt_lg, + a.p_lg, + a.rounded_sm, + t.atoms.bg_contrast_25, + ]}> + <CircleInfo + size="md" + style={[ + a.relative, + { + top: -1, + }, + ]} + /> + + <NewText style={[a.leading_snug, a.flex_1]}> + <Trans> + You can also temporarily deactivate your account instead, + and reactivate it at any time. + </Trans>{' '} + <InlineLinkText + label={_( + msg`Click here for more information on deactivating your account`, + )} + to="#" + onPress={e => { + e.preventDefault() + deactivateAccountControl.open() + return false + }}> + <Trans>Click here for more information.</Trans> + </InlineLinkText> + </NewText> + </View> + </View> + + <DeactivateAccountDialog control={deactivateAccountControl} /> </> ) : ( <> diff --git a/src/view/screens/Settings/index.tsx b/src/view/screens/Settings/index.tsx index a647ea902..d075cc696 100644 --- a/src/view/screens/Settings/index.tsx +++ b/src/view/screens/Settings/index.tsx @@ -60,6 +60,7 @@ import {Text} from 'view/com/util/text/Text' import * as Toast from 'view/com/util/Toast' import {UserAvatar} from 'view/com/util/UserAvatar' import {ScrollView} from 'view/com/util/Views' +import {DeactivateAccountDialog} from '#/screens/Settings/components/DeactivateAccountDialog' import {useTheme} from '#/alf' import {useDialogControl} from '#/components/Dialog' import {BirthDateSettingsDialog} from '#/components/dialogs/BirthDateSettings' @@ -307,6 +308,11 @@ export function SettingsScreen({}: Props) { Toast.show(_(msg`Legacy storage cleared, you need to restart the app now.`)) }, [_]) + const deactivateAccountControl = useDialogControl() + const onPressDeactivateAccount = React.useCallback(() => { + deactivateAccountControl.open() + }, [deactivateAccountControl]) + const {mutate: onPressDeleteChatDeclaration} = useDeleteActorDeclaration() return ( @@ -791,6 +797,29 @@ export function SettingsScreen({}: Props) { <Trans>Export My Data</Trans> </Text> </TouchableOpacity> + + <TouchableOpacity + style={[pal.view, styles.linkCard]} + onPress={onPressDeactivateAccount} + accessible={true} + accessibilityRole="button" + accessibilityLabel={_(msg`Deactivate account`)} + accessibilityHint={_( + msg`Opens modal for account deactivation confirmation`, + )}> + <View style={[styles.iconContainer, dangerBg]}> + <FontAwesomeIcon + icon={'users-slash'} + style={dangerText as FontAwesomeIconStyle} + size={18} + /> + </View> + <Text type="lg" style={dangerText}> + <Trans>Deactivate my account</Trans> + </Text> + </TouchableOpacity> + <DeactivateAccountDialog control={deactivateAccountControl} /> + <TouchableOpacity style={[pal.view, styles.linkCard]} onPress={onPressDeleteAccount} diff --git a/src/view/shell/createNativeStackNavigatorWithAuth.tsx b/src/view/shell/createNativeStackNavigatorWithAuth.tsx index 882fdbe6e..3c611351d 100644 --- a/src/view/shell/createNativeStackNavigatorWithAuth.tsx +++ b/src/view/shell/createNativeStackNavigatorWithAuth.tsx @@ -32,6 +32,7 @@ import { import {isWeb} from 'platform/detection' import {Deactivated} from '#/screens/Deactivated' import {Onboarding} from '#/screens/Onboarding' +import {SignupQueued} from '#/screens/SignupQueued' import {LoggedOut} from '../com/auth/LoggedOut' import {BottomBarWeb} from './bottom-bar/BottomBarWeb' import {DesktopLeftNav} from './desktop/LeftNav' @@ -102,12 +103,15 @@ function NativeStackNavigator({ if ((!PWI_ENABLED || activeRouteRequiresAuth) && !hasSession) { return <LoggedOut /> } - if (hasSession && currentAccount?.deactivated) { - return <Deactivated /> + if (hasSession && currentAccount?.signupQueued) { + return <SignupQueued /> } if (showLoggedOut) { return <LoggedOut onDismiss={() => setShowLoggedOut(false)} /> } + if (currentAccount?.status === 'deactivated') { + return <Deactivated /> + } if (onboardingState.isActive) { return <Onboarding /> } |