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()