Browse Source

fix: resolve user profile dropdown cache sync issue across layouts (#23937)

tags/1.8.0
lyzno1 2 months ago
parent
commit
05e071bf2f
No account linked to committer's email address
2 changed files with 23 additions and 9 deletions
  1. 3
    0
      web/app/components/swr-initializer.tsx
  2. 20
    9
      web/context/app-context.tsx

+ 3
- 0
web/app/components/swr-initializer.tsx View File

<SWRConfig value={{ <SWRConfig value={{
shouldRetryOnError: false, shouldRetryOnError: false,
revalidateOnFocus: false, revalidateOnFocus: false,
dedupingInterval: 60000,
focusThrottleInterval: 5000,
provider: () => new Map(),
}}> }}>
{children} {children}
</SWRConfig> </SWRConfig>

+ 20
- 9
web/context/app-context.tsx View File

} }


export const AppContextProvider: FC<AppContextProviderProps> = ({ children }) => { export const AppContextProvider: FC<AppContextProviderProps> = ({ 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 { data: currentWorkspaceResponse, mutate: mutateCurrentWorkspace, isLoading: isLoadingCurrentWorkspace } = useSWR({ url: '/workspaces/current', params: {} }, fetchCurrentWorkspace)


const [userProfile, setUserProfile] = useState<UserProfileResponse>(userProfilePlaceholder) const [userProfile, setUserProfile] = useState<UserProfileResponse>(userProfilePlaceholder)
const isCurrentWorkspaceEditor = useMemo(() => ['owner', 'admin', 'editor'].includes(currentWorkspace.role), [currentWorkspace.role]) const isCurrentWorkspaceEditor = useMemo(() => ['owner', 'admin', 'editor'].includes(currentWorkspace.role), [currentWorkspace.role])
const isCurrentWorkspaceDatasetOperator = useMemo(() => currentWorkspace.role === 'dataset_operator', [currentWorkspace.role]) const isCurrentWorkspaceDatasetOperator = useMemo(() => currentWorkspace.role === 'dataset_operator', [currentWorkspace.role])
const updateUserProfileAndVersion = useCallback(async () => { 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(() => { useEffect(() => {
updateUserProfileAndVersion() updateUserProfileAndVersion()

Loading…
Cancel
Save