@@ -5,38 +5,53 @@ import { ClientSideErrorTypes } from "@src/utils/constants";
55import { useRouter } from "next/navigation" ;
66import { useEffect } from "react" ;
77
8- const supressConsole = ( process . env . NEXT_PUBLIC_SUPRESS_CONSOLE ?? "true" ) !== "false" ;
98let router ;
109
1110const reportClientSideUnhandledError = ( errorEvent : ErrorEvent ) => {
12- if ( supressConsole ) errorEvent . preventDefault ( ) ;
11+ errorEvent . preventDefault ( ) ;
12+
13+ logClientSideError ( ClientSideErrorTypes . UNHANDLED_ERROR )
14+ . then ( ( logOnClientConsole : boolean ) => {
15+ if ( logOnClientConsole ) {
16+ console . log ( "Unhandled error event" , errorEvent ) ;
17+ }
18+ } )
19+ . catch ( ( ) => {
20+ // do not show anything to the user; catching prevents an infinite loop if the logger itself throws an error which is unhandled
21+ } ) ;
1322
14- logClientSideError ( ClientSideErrorTypes . UNHANDLED_ERROR ) . catch ( ( err : Error ) => {
15- if ( ! supressConsole ) console . error ( err . message ) ;
16- // do not show anything to the user; catching prevents an infinite loop if the logger itself throws an error which is unhandled
17- } ) ;
1823 router . push ( "/service-failure" ) ;
1924} ;
2025
21- const reportClientSideUnhandledPromiseRejectionError = ( ) => {
22- logClientSideError ( ClientSideErrorTypes . UNHANDLED_PROMISE_REJECT_ERROR ) . catch ( ( err : Error ) => {
23- if ( ! supressConsole ) console . error ( err . message ) ;
24- // do not show anything to the user; catching prevents an infinite loop if the logger itself throws an error which is unhandled
25- } ) ;
26+ const reportClientSideUnhandledPromiseRejectionError = ( promiseRejectionEvent : PromiseRejectionEvent ) => {
27+ promiseRejectionEvent . preventDefault ( ) ;
28+
29+ logClientSideError ( ClientSideErrorTypes . UNHANDLED_PROMISE_REJECT_ERROR )
30+ . then ( ( logOnClientConsole : boolean ) => {
31+ if ( logOnClientConsole ) {
32+ console . log ( "Unhandled promise rejection event" , promiseRejectionEvent ) ;
33+ }
34+ } )
35+ . catch ( ( ) => {
36+ // do not show anything to the user; catching prevents an infinite loop if the logger itself throws an error which is unhandled
37+ } ) ;
38+
2639 router . push ( "/service-failure" ) ;
2740} ;
2841
2942const ClientUnhandledErrorLogger = ( ) : undefined => {
3043 router = useRouter ( ) ;
3144
3245 useEffect ( ( ) => {
33- window . addEventListener ( "unhandledrejection" , reportClientSideUnhandledPromiseRejectionError ) ;
34- window . addEventListener ( "error" , ( event : ErrorEvent ) => reportClientSideUnhandledError ( event ) ) ;
46+ window . addEventListener ( "unhandledrejection" , ( event ) => reportClientSideUnhandledPromiseRejectionError ( event ) ) ;
47+ window . addEventListener ( "error" , ( event ) => reportClientSideUnhandledError ( event ) ) ;
3548
3649 // on component unmount
3750 return ( ) => {
38- window . removeEventListener ( "unhandledrejection" , reportClientSideUnhandledPromiseRejectionError ) ;
39- window . removeEventListener ( "error" , ( event : ErrorEvent ) => reportClientSideUnhandledError ( event ) ) ;
51+ window . removeEventListener ( "unhandledrejection" , ( event ) =>
52+ reportClientSideUnhandledPromiseRejectionError ( event ) ,
53+ ) ;
54+ window . removeEventListener ( "error" , ( event ) => reportClientSideUnhandledError ( event ) ) ;
4055 } ;
4156 } , [ ] ) ;
4257} ;
0 commit comments