diff --git a/packages/shared/src/react/hooks/createCacheKeys.ts b/packages/shared/src/react/hooks/createCacheKeys.ts index e7b6ac7ad09..392d7736507 100644 --- a/packages/shared/src/react/hooks/createCacheKeys.ts +++ b/packages/shared/src/react/hooks/createCacheKeys.ts @@ -9,6 +9,12 @@ export function createCacheKeys< U extends Record | undefined = undefined, >(params: { stablePrefix: ResourceCacheStableKey | __internal_ResourceCacheStableKey; + /** + * Describes queries that will contain data that require a user to be authenticated. + * + * `authenticated` should be not be resolved at runtime. + * When`authenticated: true` use it with `useClearQueriesOnSignOut` to automatically clear the cache entries associated with the cache key when a user signs out. + */ authenticated: boolean; tracked: T; untracked: U extends { args: Params } ? U : never; diff --git a/packages/shared/src/react/hooks/useOrganizationCreationDefaults.shared.ts b/packages/shared/src/react/hooks/useOrganizationCreationDefaults.shared.ts index 6a840f30309..d273d8bf8ab 100644 --- a/packages/shared/src/react/hooks/useOrganizationCreationDefaults.shared.ts +++ b/packages/shared/src/react/hooks/useOrganizationCreationDefaults.shared.ts @@ -8,9 +8,9 @@ export function useOrganizationCreationDefaultsCacheKeys(params: { userId: strin return useMemo(() => { return createCacheKeys({ stablePrefix: STABLE_KEYS.ORGANIZATION_CREATION_DEFAULTS_KEY, - authenticated: Boolean(userId), + authenticated: true, tracked: { - userId: userId ?? null, + userId, }, untracked: { args: {}, diff --git a/packages/shared/src/react/hooks/useOrganizationCreationDefaults.tsx b/packages/shared/src/react/hooks/useOrganizationCreationDefaults.tsx index a8182b4f723..8d9dbf985e0 100644 --- a/packages/shared/src/react/hooks/useOrganizationCreationDefaults.tsx +++ b/packages/shared/src/react/hooks/useOrganizationCreationDefaults.tsx @@ -1,3 +1,5 @@ +import { useClearQueriesOnSignOut } from '@/react/hooks/useClearQueriesOnSignOut'; + import { eventMethodCalled } from '../../telemetry/events/method-called'; import type { EnvironmentResource } from '../../types/environment'; import { defineKeepPreviousDataFn } from '../clerk-rq/keep-previous-data'; @@ -50,7 +52,13 @@ export function useOrganizationCreationDefaults( clerk.telemetry?.record(eventMethodCalled(HOOK_NAME)); - const { queryKey } = useOrganizationCreationDefaultsCacheKeys({ userId: user?.id ?? null }); + const { queryKey, authenticated, stableKey } = useOrganizationCreationDefaultsCacheKeys({ userId: user?.id ?? null }); + + useClearQueriesOnSignOut({ + isSignedOut: user === null, // works with the transitive state + authenticated, + stableKeys: stableKey, + }); const queryEnabled = Boolean(user) && enabled && featureEnabled && clerk.loaded;