diff --git a/.changeset/bright-carpets-beam.md b/.changeset/bright-carpets-beam.md new file mode 100644 index 00000000000..5150f46903b --- /dev/null +++ b/.changeset/bright-carpets-beam.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Fix a bug where the the Clerk event listener was not emitting updates when a Session's user data changes. diff --git a/packages/clerk-js/src/utils/memoizeStateListenerCallback.ts b/packages/clerk-js/src/utils/memoizeStateListenerCallback.ts index a021cb343f9..4980ea861af 100644 --- a/packages/clerk-js/src/utils/memoizeStateListenerCallback.ts +++ b/packages/clerk-js/src/utils/memoizeStateListenerCallback.ts @@ -32,7 +32,8 @@ function sessionChanged(prev: SessionResource, next: SessionResource): boolean { prev.id !== next.id || prev.updatedAt.getTime() < next.updatedAt.getTime() || sessionFVAChanged(prev, next) || - sessionUserMembershipPermissionsChanged(prev, next) + sessionUserMembershipPermissionsChanged(prev, next) || + sessionUserChanged(prev, next) ); } @@ -59,6 +60,13 @@ function sessionFVAChanged(prev: SessionResource, next: SessionResource): boolea return prevFVA !== nextFVA; } +function sessionUserChanged(prev: SessionResource, next: SessionResource): boolean { + if (!!prev.user !== !!next.user) { + return true; + } + return !!prev.user && !!next.user && userChanged(prev.user, next.user); +} + function sessionUserMembershipPermissionsChanged(prev: SessionResource, next: SessionResource): boolean { if (prev.lastActiveOrganizationId !== next.lastActiveOrganizationId) { return true;