From d99b35bf4c8f47046074cfc6803b6c43df3e2fa3 Mon Sep 17 00:00:00 2001 From: ayangweb <75017711+ayangweb@users.noreply.github.com> Date: Fri, 14 Nov 2025 15:42:56 +0800 Subject: [PATCH] fix: prevent duplicate login success messages (#977) * fix: prevent duplicate login success messages * refactor: i18n * refactor: update * docs: update changelog --- docs/content.en/docs/release-notes/_index.md | 1 + src/components/Cloud/ServiceAuth.tsx | 22 +++++++++++--------- src/locales/en/translation.json | 5 ++++- src/locales/zh/translation.json | 5 ++++- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/docs/content.en/docs/release-notes/_index.md b/docs/content.en/docs/release-notes/_index.md index 1fc6e8dd..61a0e83e 100644 --- a/docs/content.en/docs/release-notes/_index.md +++ b/docs/content.en/docs/release-notes/_index.md @@ -37,6 +37,7 @@ fix: fix page rapidly flickering issue #935 fix(view extension): broken search bar UI when opening extensions via hotkey #938 fix: allow deletion after selecting all text #943 fix: prevent shaking when switching between chat and search pages #955 +fix: prevent duplicate login success messages #977 ### ✈️ Improvements diff --git a/src/components/Cloud/ServiceAuth.tsx b/src/components/Cloud/ServiceAuth.tsx index 28d6e819..d3014a36 100644 --- a/src/components/Cloud/ServiceAuth.tsx +++ b/src/components/Cloud/ServiceAuth.tsx @@ -2,6 +2,7 @@ import { FC, memo, useCallback, useEffect, useState } from "react"; import { Copy } from "lucide-react"; import { useTranslation } from "react-i18next"; import { v4 as uuidv4 } from "uuid"; +import { useDebounceFn } from "ahooks"; import { UserProfile } from "./UserProfile"; import { OpenURLWithBrowser } from "@/utils"; @@ -20,7 +21,6 @@ const ServiceAuth = memo( ({ setRefreshLoading, refreshClick }: ServiceAuthProps) => { const { t } = useTranslation(); - const language = useAppStore((state) => state.language); const addError = useAppStore((state) => state.addError); const ssoRequestID = useAppStore((state) => state.ssoRequestID); const setSSORequestID = useAppStore((state) => state.setSSORequestID); @@ -61,19 +61,21 @@ const ServiceAuth = memo( [logoutServer] ); + const { run: debouncedAuthSuccess } = useDebounceFn((event) => { + const { serverId } = event.payload; + if (serverId) { + refreshClick(serverId, () => { + setLoading(false); + }); + addError(t("cloud.connect.hints.loginSuccess"), "info"); + } + }); + // handle oauth success event useEffect(() => { const unlistenOAuth = platformAdapter.listenEvent( "oauth_success", - (event) => { - const { serverId } = event.payload; - if (serverId) { - refreshClick(serverId, () => { - setLoading(false); - }); - addError(language === "zh" ? "登录成功" : "Login Success", "info"); - } - } + debouncedAuthSuccess ); return () => { diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 11ee846f..f46ce2e0 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -494,7 +494,10 @@ "serverPlaceholder": "For example: https://coco.infini.cloud/", "connecting": "Connecting...", "connect": "Connect", - "closeError": "Close error message" + "closeError": "Close error message", + "hints": { + "loginSuccess": "Login Successful" + } }, "dataSource": { "title": "Data Source", diff --git a/src/locales/zh/translation.json b/src/locales/zh/translation.json index e006719b..a871aa7a 100644 --- a/src/locales/zh/translation.json +++ b/src/locales/zh/translation.json @@ -494,7 +494,10 @@ "serverPlaceholder": "例如:https://coco.infini.cloud/", "connecting": "连接中...", "connect": "连接", - "closeError": "关闭错误提示" + "closeError": "关闭错误提示", + "hints": { + "loginSuccess": "登录成功" + } }, "dataSource": { "title": "数据源",