From 05e071bf2f2d5ff2c6b6f21abcd0c3828c11e834 Mon Sep 17 00:00:00 2001 From: lyzno1 <92089059+lyzno1@users.noreply.github.com> Date: Thu, 14 Aug 2025 19:51:28 +0800 Subject: [PATCH] fix: resolve user profile dropdown cache sync issue across layouts (#23937) --- web/app/components/swr-initializer.tsx | 3 +++ web/context/app-context.tsx | 29 ++++++++++++++++++-------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/web/app/components/swr-initializer.tsx b/web/app/components/swr-initializer.tsx index 3592a0e01..a3f6e011d 100644 --- a/web/app/components/swr-initializer.tsx +++ b/web/app/components/swr-initializer.tsx @@ -79,6 +79,9 @@ const SwrInitializer = ({ new Map(), }}> {children} diff --git a/web/context/app-context.tsx b/web/context/app-context.tsx index f941cb43b..4ba9e3492 100644 --- a/web/context/app-context.tsx +++ b/web/context/app-context.tsx @@ -75,7 +75,7 @@ export type AppContextProviderProps = { } export const AppContextProvider: FC = ({ children }) => { - const { data: userProfileResponse, mutate: mutateUserProfile } = useSWR({ url: '/account/profile', params: {} }, fetchUserProfile) + const { data: userProfileResponse, mutate: mutateUserProfile, error: userProfileError } = useSWR({ url: '/account/profile', params: {} }, fetchUserProfile) const { data: currentWorkspaceResponse, mutate: mutateCurrentWorkspace, isLoading: isLoadingCurrentWorkspace } = useSWR({ url: '/workspaces/current', params: {} }, fetchCurrentWorkspace) const [userProfile, setUserProfile] = useState(userProfilePlaceholder) @@ -86,15 +86,26 @@ export const AppContextProvider: FC = ({ children }) => const isCurrentWorkspaceEditor = useMemo(() => ['owner', 'admin', 'editor'].includes(currentWorkspace.role), [currentWorkspace.role]) const isCurrentWorkspaceDatasetOperator = useMemo(() => currentWorkspace.role === 'dataset_operator', [currentWorkspace.role]) const updateUserProfileAndVersion = useCallback(async () => { - if (userProfileResponse && !userProfileResponse.bodyUsed) { - const result = await userProfileResponse.json() - setUserProfile(result) - const current_version = userProfileResponse.headers.get('x-version') - const current_env = process.env.NODE_ENV === 'development' ? 'DEVELOPMENT' : userProfileResponse.headers.get('x-env') - const versionData = await fetchLangGeniusVersion({ url: '/version', params: { current_version } }) - setLangGeniusVersionInfo({ ...versionData, current_version, latest_version: versionData.version, current_env }) + if (userProfileResponse) { + try { + const clonedResponse = (userProfileResponse as Response).clone() + const result = await clonedResponse.json() + setUserProfile(result) + const current_version = userProfileResponse.headers.get('x-version') + const current_env = process.env.NODE_ENV === 'development' ? 'DEVELOPMENT' : userProfileResponse.headers.get('x-env') + const versionData = await fetchLangGeniusVersion({ url: '/version', params: { current_version } }) + setLangGeniusVersionInfo({ ...versionData, current_version, latest_version: versionData.version, current_env }) + } + catch (error) { + console.error('Failed to update user profile:', error) + if (userProfile.id === '') + setUserProfile(userProfilePlaceholder) + } } - }, [userProfileResponse]) + else if (userProfileError && userProfile.id === '') { + setUserProfile(userProfilePlaceholder) + } + }, [userProfileResponse, userProfileError, userProfile.id]) useEffect(() => { updateUserProfileAndVersion()