From 03706f51bcafc4790e4698ccc174b6789d9b83fa Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Fri, 24 Mar 2023 16:43:43 +0200 Subject: [PATCH] fix(clerk-react): Memoize useAuth.getToken and useAuth.signOut --- packages/react/jest.config.js | 2 +- packages/react/src/hooks/useAuth.ts | 5 +++-- packages/react/src/hooks/utils.ts | 20 +++++++++++--------- packages/react/src/isomorphicClerk.ts | 1 - 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/react/jest.config.js b/packages/react/jest.config.js index 8ae856412e6..74d9059d6bf 100644 --- a/packages/react/jest.config.js +++ b/packages/react/jest.config.js @@ -11,6 +11,6 @@ module.exports = { '^.+\\.m?tsx?$': ['ts-jest', { tsconfig: 'tsconfig.test.json', diagnostics: false }], }, - testRegex: ['/ui/.*/__tests__/.*.test.[jt]sx?$', '/(core|utils)/.*.test.[jt]sx?$'], + testRegex: ['/ui/.*/__tests__/.*.test.[jt]sx?$', '/(core|utils|hooks)/.*.test.[jt]sx?$'], testPathIgnorePatterns: ['/node_modules/'], }; diff --git a/packages/react/src/hooks/useAuth.ts b/packages/react/src/hooks/useAuth.ts index 85723404c92..293639e92d6 100644 --- a/packages/react/src/hooks/useAuth.ts +++ b/packages/react/src/hooks/useAuth.ts @@ -1,4 +1,5 @@ import type { ActJWTClaim, GetToken, MembershipRole, SignOut } from '@clerk/types'; +import { useCallback } from 'react'; import { useAuthContext } from '../contexts/AuthContext'; import { useIsomorphicClerkContext } from '../contexts/IsomorphicClerkContext'; @@ -101,8 +102,8 @@ export const useAuth: UseAuth = () => { const { sessionId, userId, actor, orgId, orgRole, orgSlug } = useAuthContext(); const isomorphicClerk = useIsomorphicClerkContext() as unknown as IsomorphicClerk; - const getToken: GetToken = createGetToken(isomorphicClerk); - const signOut: SignOut = createSignOut(isomorphicClerk); + const getToken: GetToken = useCallback(createGetToken(isomorphicClerk), [isomorphicClerk]); + const signOut: SignOut = useCallback(createSignOut(isomorphicClerk), [isomorphicClerk]); if (sessionId === undefined && userId === undefined) { return { diff --git a/packages/react/src/hooks/utils.ts b/packages/react/src/hooks/utils.ts index 65ffeb88b5f..28b7cab86a2 100644 --- a/packages/react/src/hooks/utils.ts +++ b/packages/react/src/hooks/utils.ts @@ -15,20 +15,22 @@ const clerkLoaded = (isomorphicClerk: IsomorphicClerk) => { /** * @internal */ -export const createGetToken = (isomorphicClerk: IsomorphicClerk) => async (options: any) => { - await clerkLoaded(isomorphicClerk); - if (!isomorphicClerk.session) { - return null; - } - return isomorphicClerk.session.getToken(options); +export const createGetToken = (isomorphicClerk: IsomorphicClerk) => { + return async (options: any) => { + await clerkLoaded(isomorphicClerk); + if (!isomorphicClerk.session) { + return null; + } + return isomorphicClerk.session.getToken(options); + }; }; /** * @internal */ -export const createSignOut = - (isomorphicClerk: IsomorphicClerk) => - async (...args: any) => { +export const createSignOut = (isomorphicClerk: IsomorphicClerk) => { + return async (...args: any) => { await clerkLoaded(isomorphicClerk); return isomorphicClerk.signOut(...args); }; +}; diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 2b56d3dacde..03afc00b327 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -251,7 +251,6 @@ export default class IsomorphicClerk { get session(): ActiveSessionResource | undefined | null { if (this.clerkjs) { return this.clerkjs.session; - // TODO: add ssr condition } else { return undefined; }