diff --git a/packages/twenty-front/src/modules/auth/states/currentUserState.ts b/packages/twenty-front/src/modules/auth/states/currentUserState.ts index 9bca9860fd..c684882e81 100644 --- a/packages/twenty-front/src/modules/auth/states/currentUserState.ts +++ b/packages/twenty-front/src/modules/auth/states/currentUserState.ts @@ -18,4 +18,6 @@ export type CurrentUser = Pick< export const currentUserState = createAtomState({ key: 'currentUserState', defaultValue: null, + useLocalStorage: true, + localStorageOptions: { getOnInit: true }, }); diff --git a/packages/twenty-front/src/modules/auth/states/currentUserWorkspaceState.ts b/packages/twenty-front/src/modules/auth/states/currentUserWorkspaceState.ts index c15d50e1ce..0e735c1c4f 100644 --- a/packages/twenty-front/src/modules/auth/states/currentUserWorkspaceState.ts +++ b/packages/twenty-front/src/modules/auth/states/currentUserWorkspaceState.ts @@ -13,4 +13,6 @@ export const currentUserWorkspaceState = createAtomState({ key: 'currentUserWorkspaceState', defaultValue: null, + useLocalStorage: true, + localStorageOptions: { getOnInit: true }, }); diff --git a/packages/twenty-front/src/modules/auth/states/currentWorkspaceMemberState.ts b/packages/twenty-front/src/modules/auth/states/currentWorkspaceMemberState.ts index e844d1615c..be5bcbda30 100644 --- a/packages/twenty-front/src/modules/auth/states/currentWorkspaceMemberState.ts +++ b/packages/twenty-front/src/modules/auth/states/currentWorkspaceMemberState.ts @@ -10,4 +10,6 @@ export const currentWorkspaceMemberState = createAtomState({ key: 'currentWorkspaceMemberState', defaultValue: null, + useLocalStorage: true, + localStorageOptions: { getOnInit: true }, }); diff --git a/packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts b/packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts index 3d318e6463..e6382bc043 100644 --- a/packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts +++ b/packages/twenty-front/src/modules/auth/states/currentWorkspaceState.ts @@ -54,4 +54,6 @@ export type CurrentWorkspace = Pick< export const currentWorkspaceState = createAtomState({ key: 'currentWorkspaceState', defaultValue: null, + useLocalStorage: true, + localStorageOptions: { getOnInit: true }, }); diff --git a/packages/twenty-front/src/modules/auth/utils/clearSessionLocalStorageKeys.ts b/packages/twenty-front/src/modules/auth/utils/clearSessionLocalStorageKeys.ts index df316a554e..8b5116080d 100644 --- a/packages/twenty-front/src/modules/auth/utils/clearSessionLocalStorageKeys.ts +++ b/packages/twenty-front/src/modules/auth/utils/clearSessionLocalStorageKeys.ts @@ -5,6 +5,10 @@ const SESSION_KEYS_TO_CLEAR = [ 'lastVisitedViewPerObjectMetadataItemState', 'ai/agentChatDraftsByThreadIdState', 'locale', + 'currentUserState', + 'currentWorkspaceState', + 'currentWorkspaceMemberState', + 'currentUserWorkspaceState', ]; export const clearSessionLocalStorageKeys = () => { diff --git a/packages/twenty-front/src/modules/metadata-store/effect-components/MinimalMetadataLoadEffect.tsx b/packages/twenty-front/src/modules/metadata-store/effect-components/MinimalMetadataLoadEffect.tsx index 5e683446a2..2f11cd147c 100644 --- a/packages/twenty-front/src/modules/metadata-store/effect-components/MinimalMetadataLoadEffect.tsx +++ b/packages/twenty-front/src/modules/metadata-store/effect-components/MinimalMetadataLoadEffect.tsx @@ -1,4 +1,5 @@ import { useHasAccessTokenPair } from '@/auth/hooks/useHasAccessTokenPair'; +import { currentUserState } from '@/auth/states/currentUserState'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { isCurrentUserLoadedState } from '@/auth/states/isCurrentUserLoadedState'; import { useLoadMinimalMetadata } from '@/metadata-store/hooks/useLoadMinimalMetadata'; @@ -6,11 +7,13 @@ import { useLoadStaleMetadataEntities } from '@/metadata-store/hooks/useLoadStal import { metadataLoadedVersionState } from '@/metadata-store/states/metadataLoadedVersionState'; import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useEffect, useState } from 'react'; +import { isDefined } from 'twenty-shared/utils'; import { isWorkspaceActiveOrSuspended } from 'twenty-shared/workspace'; export const MinimalMetadataLoadEffect = () => { const hasAccessTokenPair = useHasAccessTokenPair(); const isCurrentUserLoaded = useAtomStateValue(isCurrentUserLoadedState); + const currentUser = useAtomStateValue(currentUserState); const currentWorkspace = useAtomStateValue(currentWorkspaceState); const metadataLoadedVersion = useAtomStateValue(metadataLoadedVersionState); const [lastLoadedVersion, setLastLoadedVersion] = useState(-1); @@ -22,7 +25,7 @@ export const MinimalMetadataLoadEffect = () => { const shouldLoadRealMetadata = hasAccessTokenPair && isActiveWorkspace; useEffect(() => { - if (!isCurrentUserLoaded) { + if (!isCurrentUserLoaded && !isDefined(currentUser)) { return; } @@ -47,6 +50,7 @@ export const MinimalMetadataLoadEffect = () => { performLoad(); }, [ isCurrentUserLoaded, + currentUser, shouldLoadRealMetadata, lastLoadedVersion, metadataLoadedVersion, diff --git a/packages/twenty-front/src/modules/metadata-store/effect-components/UserMetadataProviderInitialEffect.tsx b/packages/twenty-front/src/modules/metadata-store/effect-components/UserMetadataProviderInitialEffect.tsx index 1ff6fddf9d..853dafe72c 100644 --- a/packages/twenty-front/src/modules/metadata-store/effect-components/UserMetadataProviderInitialEffect.tsx +++ b/packages/twenty-front/src/modules/metadata-store/effect-components/UserMetadataProviderInitialEffect.tsx @@ -9,7 +9,6 @@ import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { isCurrentUserLoadedState } from '@/auth/states/isCurrentUserLoadedState'; import { useInitializeFormatPreferences } from '@/localization/hooks/useInitializeFormatPreferences'; import { getDateFnsLocale } from '@/ui/field/display/utils/getDateFnsLocale'; -import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; import { type ColorScheme } from '@/workspace-member/types/WorkspaceMember'; import { enUS } from 'date-fns/locale'; @@ -28,7 +27,6 @@ import { dynamicActivate } from '~/utils/i18n/dynamicActivate'; export const UserMetadataProviderInitialEffect = () => { const hasAccessTokenPair = useHasAccessTokenPair(); - const currentUser = useAtomStateValue(currentUserState); const store = useStore(); const [isInitialized, setIsInitialized] = useState(false); @@ -65,12 +63,13 @@ export const UserMetadataProviderInitialEffect = () => { [store], ); - const shouldSkipUserQuery = !hasAccessTokenPair || isDefined(currentUser); + const shouldSkipUserQuery = !hasAccessTokenPair; const { data: userQueryData, loading: userQueryLoading } = useQuery( GetCurrentUserDocument, { skip: shouldSkipUserQuery, + fetchPolicy: 'network-only', }, );