Explorar el Código

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

tags/1.8.0
lyzno1 hace 2 meses
padre
commit
05e071bf2f
No account linked to committer's email address
Se han modificado 2 ficheros con 23 adiciones y 9 borrados
  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 Ver fichero

@@ -79,6 +79,9 @@ const SwrInitializer = ({
<SWRConfig value={{
shouldRetryOnError: false,
revalidateOnFocus: false,
dedupingInterval: 60000,
focusThrottleInterval: 5000,
provider: () => new Map(),
}}>
{children}
</SWRConfig>

+ 20
- 9
web/context/app-context.tsx Ver fichero

@@ -75,7 +75,7 @@ export type AppContextProviderProps = {
}

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 [userProfile, setUserProfile] = useState<UserProfileResponse>(userProfilePlaceholder)
@@ -86,15 +86,26 @@ export const AppContextProvider: FC<AppContextProviderProps> = ({ 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()

Cargando…
Cancelar
Guardar