From d55cbc11b28122106f07f1a3d2e05e0a2ff13254 Mon Sep 17 00:00:00 2001 From: chahinebrini Date: Fri, 15 May 2026 21:16:34 +0200 Subject: [PATCH] fix(native): mail-sheet modal-conflict + google-oauth picker + feed-bg contrast MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mail/MailAccountSettingsSheet: handleSaveTitle + handleSavePassword now dismiss sheet FIRST, then trigger parent SuccessAlert via setTimeout(350ms). Fixes iOS "already presenting" crash + page-freeze when editing mailbox name. Also fixes double-click-needed UX bug. - stores/auth: signOut adds WebBrowser.coolDownAsync() to clear OAuth cookies. signInWithOAuth for Google adds prompt=select_account — forces account-picker on every sign-in attempt instead of auto-reusing previous account. - app/(app)/index: feed page uses colors.groupedBg instead of colors.bg — matches iOS Mail/Messages list-style, post-cards stand out clearer. Co-Authored-By: Claude Opus 4.7 --- apps/rebreak-native/app/(app)/index.tsx | 2 +- .../components/mail/MailAccountSettingsSheet.tsx | 16 ++++++++++------ apps/rebreak-native/stores/auth.ts | 11 +++++++++++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/apps/rebreak-native/app/(app)/index.tsx b/apps/rebreak-native/app/(app)/index.tsx index 712dd3b..d39d9e7 100644 --- a/apps/rebreak-native/app/(app)/index.tsx +++ b/apps/rebreak-native/app/(app)/index.tsx @@ -80,7 +80,7 @@ export default function HomeScreen() { ); return ( - + onTitleSaved(newTitle), 350); } } @@ -266,10 +270,10 @@ export function MailAccountSettingsSheet({ setLocalError(null); const result = await connect({ email: account.email, password: passwordDraft }); if (result.ok) { - setPasswordDraft(''); - setPasswordVisible(false); - onPasswordSaved(); - setMode('list'); + // Symmetrisch zu handleSaveTitle: Sheet zuerst dismissen, dann nach + // Animation-Complete Parent informieren — sonst Modal-Conflict-Crash. + handleClose(); + setTimeout(() => onPasswordSaved(), 350); } else { setLocalError(result.error ?? t('mail.connect_failed')); } diff --git a/apps/rebreak-native/stores/auth.ts b/apps/rebreak-native/stores/auth.ts index 74d5515..5f52047 100644 --- a/apps/rebreak-native/stores/auth.ts +++ b/apps/rebreak-native/stores/auth.ts @@ -73,6 +73,14 @@ export const useAuthStore = create((set) => ({ signOut: async () => { await supabase.auth.signOut(); + // Google-OAuth-Cookie in SafariViewController/Chrome Custom Tabs leeren, + // sonst springt der nächste Sign-in stillschweigend auf den vorigen Account + // statt den Account-Picker zu zeigen. + try { + await WebBrowser.coolDownAsync(); + } catch { + // ignore + } set({ session: null, user: null }); }, @@ -91,6 +99,9 @@ export const useAuthStore = create((set) => ({ options: { redirectTo: redirectUri, skipBrowserRedirect: true, + // Google: prompt=select_account erzwingt den Account-Picker, + // auch wenn der Browser noch eine aktive Google-Session hat. + ...(provider === 'google' ? { queryParams: { prompt: 'select_account' } } : {}), }, });