@@ -4,12 +4,16 @@ import {
44 isValidIncomingTestBoxMessage ,
55 sendMessageToTestBox ,
66} from "./messaging" ;
7- import { routeMessage , TestBoxEventRouter } from "./router" ;
7+ import { routeMessage } from "./router" ;
88import { INITIALIZE_REQUEST } from "./messaging/outgoing" ;
9- import { IncomingEventHandlers , IncomingEventMap } from "./messaging/incoming" ;
9+ import { LoginEvent , NavigateEvent } from "./messaging/incoming" ;
1010
1111let tbxStarted = false ;
12- let messageHandlers : TestBoxEventRouter = { } ;
12+
13+ export let navigateHandler : ( data : NavigateEvent ) => void ;
14+ export let loginHandler : (
15+ data : LoginEvent
16+ ) => Promise < string | boolean > = async ( ) => false ;
1317
1418export function startTestBox ( config ?: TestBoxConfig ) {
1519 if ( tbxStarted ) {
@@ -18,18 +22,16 @@ export function startTestBox(config?: TestBoxConfig) {
1822
1923 window . __tbxConfig = config ;
2024
21- if ( window . __tbxConfig . onNavigate ) {
22- messageHandlers [ "navigate" ] = [ window . __tbxConfig . onNavigate ] ;
25+ if ( window . __tbxConfig . navigateHandler ) {
26+ navigateHandler = window . __tbxConfig . navigateHandler ;
2327 } else {
24- messageHandlers [ "navigate" ] = [
25- ( data ) => {
26- window . location . href = data . url ;
27- } ,
28- ] ;
28+ navigateHandler = ( data ) => {
29+ window . location . href = data . url ;
30+ } ;
2931 }
3032
31- if ( window . __tbxConfig . onLogin ) {
32- messageHandlers [ "login" ] = [ window . __tbxConfig . onLogin ] ;
33+ if ( window . __tbxConfig . loginHandler ) {
34+ loginHandler = window . __tbxConfig . loginHandler ;
3335 }
3436
3537 window . addEventListener ( "message" , ( ev ) => {
@@ -49,7 +51,10 @@ export function startTestBox(config?: TestBoxConfig) {
4951 return ;
5052 }
5153
52- routeMessage ( data , messageHandlers ) ;
54+ routeMessage ( data , {
55+ navigate : navigateHandler ,
56+ login : loginHandler ,
57+ } ) ;
5358 } ) ;
5459
5560 sendMessageToTestBox ( INITIALIZE_REQUEST ) ;
@@ -58,16 +63,4 @@ export function startTestBox(config?: TestBoxConfig) {
5863
5964export const start = startTestBox ;
6065
61- export function on < K extends keyof IncomingEventHandlers > (
62- message : K ,
63- handler : IncomingEventHandlers [ K ]
64- ) {
65- if ( message in messageHandlers ) {
66- messageHandlers [ message ] . push ( handler ) ;
67- } else {
68- // TODO: TypeScript narrowing does not work here. See if we can fix.
69- messageHandlers [ message ] = [ handler as any ] ;
70- }
71- }
72-
7366export { TestBoxConfig } ;
0 commit comments