import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {type NativeStackScreenProps} from '@react-navigation/native-stack' import {type CommonNavigatorParams} from '#/lib/routes/types' import {useModalControls} from '#/state/modals' import {useSession} from '#/state/session' import * as SettingsList from '#/screens/Settings/components/SettingsList' import {atoms as a, useTheme} from '#/alf' import {AgeAssuranceAccountCard} from '#/components/ageAssurance/AgeAssuranceAccountCard' import {useDialogControl} from '#/components/Dialog' import {BirthDateSettingsDialog} from '#/components/dialogs/BirthDateSettings' import { EmailDialogScreenID, useEmailDialogControl, } from '#/components/dialogs/EmailDialog' import {At_Stroke2_Corner2_Rounded as AtIcon} from '#/components/icons/At' import {BirthdayCake_Stroke2_Corner2_Rounded as BirthdayCakeIcon} from '#/components/icons/BirthdayCake' import {Car_Stroke2_Corner2_Rounded as CarIcon} from '#/components/icons/Car' import {Envelope_Stroke2_Corner2_Rounded as EnvelopeIcon} from '#/components/icons/Envelope' import {Freeze_Stroke2_Corner2_Rounded as FreezeIcon} from '#/components/icons/Freeze' import {Lock_Stroke2_Corner2_Rounded as LockIcon} from '#/components/icons/Lock' import {PencilLine_Stroke2_Corner2_Rounded as PencilIcon} from '#/components/icons/Pencil' import {ShieldCheck_Stroke2_Corner0_Rounded as ShieldIcon} from '#/components/icons/Shield' import {Trash_Stroke2_Corner2_Rounded} from '#/components/icons/Trash' import * as Layout from '#/components/Layout' import {ChangeHandleDialog} from './components/ChangeHandleDialog' import {ChangePasswordDialog} from './components/ChangePasswordDialog' import {DeactivateAccountDialog} from './components/DeactivateAccountDialog' import {ExportCarDialog} from './components/ExportCarDialog' type Props = NativeStackScreenProps export function AccountSettingsScreen({}: Props) { const t = useTheme() const {_} = useLingui() const {currentAccount} = useSession() const {openModal} = useModalControls() const emailDialogControl = useEmailDialogControl() const birthdayControl = useDialogControl() const changeHandleControl = useDialogControl() const changePasswordControl = useDialogControl() const exportCarControl = useDialogControl() const deactivateAccountControl = useDialogControl() return ( Account {/* Tricky flexbox situation here: we want the email to truncate, but by default it will make the "Email" text wrap instead. For numberOfLines to work, we need flex: 1 on the BadgeText, but that means it goes to width: 50% because the ItemText is also flex: 1. So we need to set flex: 0 on the ItemText to prevent it from growing, but if we did that everywhere it wouldn't push the BadgeText/Chevron/whatever to the right. TODO: find a general solution for this. workaround in this case is to set the ItemText to flex: 1 and BadgeText to flex: 0 -sfn */} Email {currentAccount && ( <> {currentAccount.email || (no email)} {currentAccount.emailConfirmed && ( )} )} {currentAccount && !currentAccount.emailConfirmed && ( emailDialogControl.open({ id: EmailDialogScreenID.Verify, }) } style={[ a.my_xs, a.mx_lg, a.rounded_md, {backgroundColor: t.palette.primary_50}, ]} hoverStyle={[{backgroundColor: t.palette.primary_100}]} contentContainerStyle={[a.rounded_md, a.px_lg]}> Verify your email )} emailDialogControl.open({ id: EmailDialogScreenID.Update, }) }> Update email changePasswordControl.open()}> Password changeHandleControl.open()}> Handle Birthday birthdayControl.open()} /> exportCarControl.open()}> Export my data deactivateAccountControl.open()} destructive> Deactivate account openModal({name: 'delete-account'})} destructive> Delete account ) }