refactor(chat): launch external browser without dialog

This commit is contained in:
2026-07-09 14:25:20 +08:00
parent 0106fba877
commit 0659e52d29
5 changed files with 19 additions and 164 deletions
@@ -1,6 +1,6 @@
"use client";
import { useCallback, useEffect, useRef, useState } from "react";
import { useEffect, useRef } from "react";
import {
openChatInExternalBrowser,
@@ -15,18 +15,11 @@ import {
const EXTERNAL_BROWSER_PROMPT_DELAY_MS = 3000;
export interface ExternalBrowserPromptController {
open: boolean;
close: () => void;
confirm: () => Promise<void>;
}
export function useExternalBrowserPrompt({
hasInitialized,
isLoading,
loginStatus,
}: ExternalBrowserPromptState): ExternalBrowserPromptController {
const [open, setOpen] = useState(false);
}: ExternalBrowserPromptState): void {
const promptShownRef = useRef(false);
useEffect(() => {
@@ -52,8 +45,22 @@ export function useExternalBrowserPrompt({
promptShownRef.current = true;
timer = window.setTimeout(() => {
if (!mounted) return;
setOpen(true);
void recordExternalBrowserPromptShown(eligibility.today);
void (async () => {
try {
await recordExternalBrowserPromptShown(eligibility.today);
} catch (error) {
console.warn(
"[chat] Failed to record external browser auto launch",
error,
);
}
if (!mounted) return;
try {
await openChatInExternalBrowser();
} catch (error) {
console.warn("[chat] Failed to open external browser", error);
}
})();
}, EXTERNAL_BROWSER_PROMPT_DELAY_MS);
};
@@ -65,18 +72,4 @@ export function useExternalBrowserPrompt({
};
}, [hasInitialized, isLoading, loginStatus]);
const close = useCallback(() => {
setOpen(false);
}, []);
const confirm = useCallback(async () => {
setOpen(false);
await openChatInExternalBrowser();
}, []);
return {
open,
close,
confirm,
};
}