From 9da75af6e515cde169eaa185c4baf828e92358ed Mon Sep 17 00:00:00 2001 From: panteliselef Date: Sat, 31 Jan 2026 18:24:48 +0100 Subject: [PATCH] fix(shared): Use static value for `authenticated` in `useOrganizationCreationDefaultsCacheKeys` Adds comments that better describe the intended use of `authenticated` in `createCacheKeys`. Then intention is to have all "authenticated queries" (queries that depend on user or org) to be cleared from the cache in order to avoid rendering stale data about the user after they have signed out. --- packages/shared/src/react/hooks/createCacheKeys.ts | 6 ++++++ .../hooks/useOrganizationCreationDefaults.shared.ts | 4 ++-- .../react/hooks/useOrganizationCreationDefaults.tsx | 10 +++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) 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;