Skip to content

Commit a87a18d

Browse files
authored
fix(desktop): do not try closing the page in app running prompt (#5870)
fix(desktop): scripts may close only the windows that were opened by them Signed-off-by: Nixieboluo <[email protected]>
1 parent 56730df commit a87a18d

File tree

2 files changed

+10
-19
lines changed

2 files changed

+10
-19
lines changed

frontend/desktop/src/components/account/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ import {
3838
} from 'lucide-react';
3939
import AccountCenter from './AccountCenter';
4040
import { useLanguageSwitcher } from '@/hooks/useLanguageSwitcher';
41-
import { CopyIcon } from '@sealos/ui';
4241
import { useGuideModalStore } from '@/stores/guideModal';
4342
import SecondaryLinks from '../SecondaryLinks';
43+
import { useAppsRunningPromptStore } from '@/stores/appsRunningPrompt';
4444

4545
const baseItemStyle = {
4646
minW: '36px',
@@ -65,6 +65,7 @@ export default function Account() {
6565
const showDisclosure = useDisclosure();
6666
const [notificationAmount, setNotificationAmount] = useState(0);
6767
const { installedApps, openApp, openDesktopApp } = useAppStore();
68+
const { setBlockingPageUnload } = useAppsRunningPromptStore();
6869
const { colorMode, toggleColorMode } = useColorMode();
6970
const { openGuideModal, setInitGuide, initGuide } = useGuideModalStore();
7071
const { toggleLanguage, currentLanguage } = useLanguageSwitcher();
@@ -73,6 +74,8 @@ export default function Account() {
7374

7475
const logout = (e: React.MouseEvent<HTMLElement>) => {
7576
e.preventDefault();
77+
// We clear session data before unloading the page, running apps data can not be fetched at that time.
78+
setBlockingPageUnload(false);
7679
delSession();
7780
queryclient.clear();
7881
router.replace('/signin');

frontend/desktop/src/components/desktop_content/AppsRunningPrompt.tsx

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,21 @@ const AppsRunningPrompt = () => {
3737
const { isOpen, onOpen, onClose } = useDisclosure();
3838
const { dontShowAgain, setDontShowAgain, blockingPageUnload } = useAppsRunningPromptStore();
3939
const cancelRef = React.useRef<HTMLButtonElement>(null);
40-
const [allowClose, setAllowClose] = useState(false);
4140

4241
const runningApps = useQuery({
4342
queryKey: ['getRunningApps'],
4443
queryFn: getRunningApps,
4544
enabled: false, // We fetch manually
46-
refetchOnWindowFocus: false
45+
refetchOnWindowFocus: false,
46+
refetchOnMount: false,
47+
refetchOnReconnect: false
4748
});
4849

4950
const checkRunningApps = useCallback(async (): Promise<boolean> => {
5051
try {
5152
const result = await runningApps.refetch();
5253

53-
if (result.isError) {
54+
if (!result.isSuccess) {
5455
// On error, assume no running apps to avoid blocking page close
5556
return false;
5657
}
@@ -71,7 +72,7 @@ const AppsRunningPrompt = () => {
7172

7273
useEffect(() => {
7374
const handleBeforeUnload = (event: BeforeUnloadEvent) => {
74-
if (dontShowAgain || !blockingPageUnload || allowClose) {
75+
if (dontShowAgain || !blockingPageUnload) {
7576
return; // Don't prevent unload
7677
}
7778

@@ -85,23 +86,10 @@ const AppsRunningPrompt = () => {
8586
if (hasRunningApps) {
8687
// Show dialog if there are running apps
8788
setTimeout(() => onOpen(), 100);
88-
} else {
89-
// No running apps, allow future closes
90-
setAllowClose(true);
91-
// Trigger close again
92-
setTimeout(() => {
93-
window.close();
94-
}, 100);
9589
}
9690
})
9791
.catch((error) => {
9892
console.error('Error checking running apps:', error);
99-
// On error, allow future closes
100-
setAllowClose(true);
101-
// Trigger close again
102-
setTimeout(() => {
103-
window.close();
104-
}, 100);
10593
});
10694
};
10795

@@ -110,7 +98,7 @@ const AppsRunningPrompt = () => {
11098
return () => {
11199
window.removeEventListener('beforeunload', handleBeforeUnload);
112100
};
113-
}, [dontShowAgain, allowClose, onOpen, checkRunningApps, setAllowClose, blockingPageUnload]);
101+
}, [dontShowAgain, onOpen, checkRunningApps, blockingPageUnload]);
114102

115103
const appsToCheck: RunningApp[] = [
116104
{

0 commit comments

Comments
 (0)