diff options
author | Samuel Newman <mozzius@protonmail.com> | 2024-10-29 21:14:54 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-29 21:14:54 +0000 |
commit | c8f264b78b1dfb95f68bfb820bd012828cd5fddc (patch) | |
tree | eca795959b8980d14a19169be8f0e71850bfc091 /src/screens/Settings/components/Email2FAToggle.tsx | |
parent | ab492cd77a2588c58899793d5a51c7d4dd0a4968 (diff) | |
download | voidsky-c8f264b78b1dfb95f68bfb820bd012828cd5fddc.tar.zst |
Settings revamp (#5745)
* start building storybook * add title * add some styles * try out new icons * more settings list component parts * make text do the spacing * clean up storybook * gated new settings screen * switch account * add current profile * use Layout.Screen * Layout.Header and Layout.Content * translate helpdesk text thanks @surfdude29! Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * add account settings * undo changes to export car dialog * privacy and security screen * Translate protect account stuff Thanks @surfdude29! Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * content and media settings * about settings * 2fa copy Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * a11y and appearance * use new components for appearance settings * redesign accessibility settings * Update ContentAndMediaSettings.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * add divider * remove a11y and appearance middleman screen * fix web settingslist styles * new SettingsList.Group component * explain how portal magic works * hide pwioptout in old location * Update Settings.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * replace gate with `IS_INTERNAL` * add IS_INTERNAL to app-info.web * fix profile area growing * add close button to switch account --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
Diffstat (limited to 'src/screens/Settings/components/Email2FAToggle.tsx')
-rw-r--r-- | src/screens/Settings/components/Email2FAToggle.tsx | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/screens/Settings/components/Email2FAToggle.tsx b/src/screens/Settings/components/Email2FAToggle.tsx new file mode 100644 index 000000000..d89e5f18e --- /dev/null +++ b/src/screens/Settings/components/Email2FAToggle.tsx @@ -0,0 +1,66 @@ +import React from 'react' +import {msg} from '@lingui/macro' +import {useLingui} from '@lingui/react' + +import {useModalControls} from '#/state/modals' +import {useAgent, useSession} from '#/state/session' +import {DisableEmail2FADialog} from '#/view/screens/Settings/DisableEmail2FADialog' +import {useDialogControl} from '#/components/Dialog' +import * as Prompt from '#/components/Prompt' +import * as SettingsList from './SettingsList' + +export function Email2FAToggle() { + const {_} = useLingui() + const {currentAccount} = useSession() + const {openModal} = useModalControls() + const disableDialogControl = useDialogControl() + const enableDialogControl = useDialogControl() + const agent = useAgent() + + const enableEmailAuthFactor = React.useCallback(async () => { + if (currentAccount?.email) { + await agent.com.atproto.server.updateEmail({ + email: currentAccount.email, + emailAuthFactor: true, + }) + await agent.resumeSession(agent.session!) + } + }, [currentAccount, agent]) + + const onToggle = React.useCallback(() => { + if (!currentAccount) { + return + } + if (currentAccount.emailAuthFactor) { + disableDialogControl.open() + } else { + if (!currentAccount.emailConfirmed) { + openModal({ + name: 'verify-email', + onSuccess: enableDialogControl.open, + }) + return + } + enableDialogControl.open() + } + }, [currentAccount, enableDialogControl, openModal, disableDialogControl]) + + return ( + <> + <DisableEmail2FADialog control={disableDialogControl} /> + <Prompt.Basic + control={enableDialogControl} + title={_(msg`Enable Email 2FA`)} + description={_(msg`Require an email code to log in to your account.`)} + onConfirm={enableEmailAuthFactor} + confirmButtonCta={_(msg`Enable`)} + /> + <SettingsList.BadgeButton + label={ + currentAccount?.emailAuthFactor ? _(msg`Disable`) : _(msg`Enable`) + } + onPress={onToggle} + /> + </> + ) +} |