diff --git a/CLIENT_EVENTS.md b/CLIENT_EVENTS.md index c45e60824..be19f5f03 100644 --- a/CLIENT_EVENTS.md +++ b/CLIENT_EVENTS.md @@ -129,6 +129,7 @@ createComment.error - showSharePopover - showUserPopover - signOut +- signedIn - unfeatureComment - updateNotificationSettings - updateStorySettings @@ -538,6 +539,7 @@ createComment.error }; } ``` +- **signedIn**: This event is emitted when the viewer signed in (not applicable for SSO). - **unfeatureComment.success**, **unfeatureComment.error**: This event is emitted when the viewer unfeatures a comment. ```ts { diff --git a/src/core/client/stream/App/listeners/OnPostMessageSetAccessToken.spec.tsx b/src/core/client/stream/App/listeners/OnPostMessageSetAccessToken.spec.tsx index e35c90120..72f12ccfc 100644 --- a/src/core/client/stream/App/listeners/OnPostMessageSetAccessToken.spec.tsx +++ b/src/core/client/stream/App/listeners/OnPostMessageSetAccessToken.spec.tsx @@ -14,6 +14,13 @@ it("Listens to event and sets access token", () => { }, }; + let emittedEventName = ""; + const eventEmitter: any = { + emit: (name: string, values: any) => { + emittedEventName = name; + }, + }; + const setAccessToken = createSinonStub( (s) => s.throws(), (s) => s.withArgs({ accessToken: token }).returns(null) @@ -21,9 +28,11 @@ it("Listens to event and sets access token", () => { createRenderer().render( ); expect(setAccessToken.calledOnce); + expect(emittedEventName).toBe("signedIn"); }); diff --git a/src/core/client/stream/App/listeners/OnPostMessageSetAccessToken.ts b/src/core/client/stream/App/listeners/OnPostMessageSetAccessToken.ts index 405fae245..4aeafbe35 100644 --- a/src/core/client/stream/App/listeners/OnPostMessageSetAccessToken.ts +++ b/src/core/client/stream/App/listeners/OnPostMessageSetAccessToken.ts @@ -3,9 +3,11 @@ import { Component } from "react"; import { CoralContext, withContext } from "coral-framework/lib/bootstrap"; import { MutationProp, withMutation } from "coral-framework/lib/relay"; import { SetAccessTokenMutation } from "coral-framework/mutations"; +import { SignedInEvent } from "coral-stream/events"; interface Props { postMessage: CoralContext["postMessage"]; + eventEmitter: CoralContext["eventEmitter"]; setAccessToken: MutationProp; } @@ -15,6 +17,7 @@ export class OnPostMessageSetAccessToken extends Component { // Auth popup will use this to handle a successful login. props.postMessage.on("setAccessToken", (accessToken: string) => { props.setAccessToken({ accessToken }); + SignedInEvent.emit(props.eventEmitter); }); } @@ -23,7 +26,8 @@ export class OnPostMessageSetAccessToken extends Component { } } -const enhanced = withContext(({ postMessage }) => ({ postMessage }))( - withMutation(SetAccessTokenMutation)(OnPostMessageSetAccessToken) -); +const enhanced = withContext(({ postMessage, eventEmitter }) => ({ + postMessage, + eventEmitter, +}))(withMutation(SetAccessTokenMutation)(OnPostMessageSetAccessToken)); export default enhanced; diff --git a/src/core/client/stream/events.ts b/src/core/client/stream/events.ts index 708076b3e..8e5a04d0c 100644 --- a/src/core/client/stream/events.ts +++ b/src/core/client/stream/events.ts @@ -194,6 +194,12 @@ export const SignOutEvent = createViewerNetworkEvent<{ }; }>("signOut"); +/** + * This event is emitted when the viewer + * signed in (not applicable for SSO). + */ +export const SignedInEvent = createViewerEvent("signedIn"); + /** * This event is emitted when the viewer updates its * notification settings.