From a2fa061a757aaa18e8150ca2183daec1fac1b2a2 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Wed, 7 Jan 2026 10:13:15 +0000 Subject: [PATCH] fix: prevent window.close() from closing PWA on Android Prevents the app from closing when running as a PWA/standalone app on Android by checking isPWA() before calling window.close(). This affects three pages: - callback.tsx - error.tsx - popup/notifications/enable.tsx Fixes #1499 Co-authored-by: Chris Bongers --- packages/webapp/pages/callback.tsx | 5 ++++- packages/webapp/pages/error.tsx | 6 ++++-- packages/webapp/pages/popup/notifications/enable.tsx | 6 ++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/webapp/pages/callback.tsx b/packages/webapp/pages/callback.tsx index f38a59d008..9bbf476b45 100644 --- a/packages/webapp/pages/callback.tsx +++ b/packages/webapp/pages/callback.tsx @@ -1,6 +1,7 @@ import { broadcastMessage, postWindowMessage, + isPWA, } from '@dailydotdev/shared/src/lib/func'; import { AuthEvent } from '@dailydotdev/shared/src/lib/kratos'; import type { ReactElement } from 'react'; @@ -66,7 +67,9 @@ function CallbackPage(): ReactElement { postWindowMessage(eventKey, params); } - window.close(); + if (!isPWA()) { + window.close(); + } } catch (err) { const url = `${process.env.NEXT_PUBLIC_WEBAPP_URL}?${search}`; window.location.replace(url); diff --git a/packages/webapp/pages/error.tsx b/packages/webapp/pages/error.tsx index 0f0c93fd14..bbd7481a7b 100644 --- a/packages/webapp/pages/error.tsx +++ b/packages/webapp/pages/error.tsx @@ -1,4 +1,4 @@ -import { postWindowMessage } from '@dailydotdev/shared/src/lib/func'; +import { postWindowMessage, isPWA } from '@dailydotdev/shared/src/lib/func'; import { AuthEvent } from '@dailydotdev/shared/src/lib/kratos'; import type { ReactElement } from 'react'; import { useEffect } from 'react'; @@ -8,7 +8,9 @@ function ErrorPage(): ReactElement { const urlSearchParams = new URLSearchParams(window.location.search); const params = Object.fromEntries(urlSearchParams.entries()); postWindowMessage(AuthEvent.Error, params); - window.close(); + if (!isPWA()) { + window.close(); + } }, []); return null; diff --git a/packages/webapp/pages/popup/notifications/enable.tsx b/packages/webapp/pages/popup/notifications/enable.tsx index 9da45d2fdc..aa9c418b24 100644 --- a/packages/webapp/pages/popup/notifications/enable.tsx +++ b/packages/webapp/pages/popup/notifications/enable.tsx @@ -3,7 +3,7 @@ import React, { useEffect } from 'react'; import classNames from 'classnames'; import NotificationToggleIcon from '@dailydotdev/shared/src/components/icons/NotificationToggle/primary.svg'; import classed from '@dailydotdev/shared/src/lib/classed'; -import { postWindowMessage } from '@dailydotdev/shared/src/lib/func'; +import { postWindowMessage, isPWA } from '@dailydotdev/shared/src/lib/func'; import { ENABLE_NOTIFICATION_WINDOW_KEY } from '@dailydotdev/shared/src/hooks/useNotificationPermissionPopup'; import { useRouter } from 'next/router'; import type { NotificationPromptSource } from '@dailydotdev/shared/src/lib/log'; @@ -52,7 +52,9 @@ function Enable(): React.ReactElement { const checkPermission = async () => { const closeWindow = () => { sendBeacon(); - window.close(); + if (!isPWA()) { + window.close(); + } }; if (isSubscribed) {