11import { Options } from "." ;
22
3+ const errorCallbacks = new Map < string , Function > ( ) ;
4+
35export abstract class ENGrid {
46 constructor ( ) {
57 if ( ! ENGrid . enForm ) {
@@ -492,6 +494,7 @@ export abstract class ENGrid {
492494 } else {
493495 errorMessageElement . innerHTML = errorMessage ;
494496 }
497+ errorCallbacks . forEach ( ( callback ) => callback ( ) ) ;
495498 }
496499 }
497500 static removeError ( element : string | HTMLElement ) {
@@ -592,8 +595,31 @@ export abstract class ENGrid {
592595 const errorElement = document . querySelector (
593596 ".en__errorList"
594597 ) as HTMLUListElement ;
598+ const callbackType = ENGrid . getErrorCallbackKey ( callback ) ;
599+
600+ // Register callback so setError can trigger it too
601+ if ( ! errorCallbacks . has ( callbackType ) ) {
602+ errorCallbacks . set ( callbackType , callback ) ;
603+ }
604+
605+ if ( errorElement && ! errorElement . dataset [ callbackType ] ) {
606+ errorElement . dataset [ callbackType ] = "true" ;
607+
608+ const observer = new MutationObserver ( function ( mutations ) {
609+ mutations . forEach ( function ( mutation ) {
610+ if ( mutation . type === "childList" && mutation . addedNodes . length > 0 ) {
611+ callback ( ) ;
612+ }
613+ } ) ;
614+ } ) ;
615+ observer . observe ( errorElement , { childList : true } ) ;
616+ }
617+ }
618+
619+ private static getErrorCallbackKey ( callback : Function ) : string {
595620 const capitalize = ( word : string ) =>
596621 word . charAt ( 0 ) . toUpperCase ( ) + word . slice ( 1 ) ;
622+
597623 // Avoid duplicate callbacks
598624 let callbackType = callback . toString ( ) ;
599625 if ( callbackType . indexOf ( "function" ) === 0 ) {
@@ -606,19 +632,7 @@ export abstract class ENGrid {
606632 callbackType = callbackType . replace ( / [ ^ a - z A - Z 0 - 9 ] / g, "" ) ;
607633 // Limit to 20 characters and add prefix
608634 callbackType = callbackType . substring ( 0 , 20 ) ;
609- callbackType = "engrid" + capitalize ( callbackType ) ;
610- if ( errorElement && ! errorElement . dataset [ callbackType ] ) {
611- errorElement . dataset [ callbackType ] = "true" ;
612-
613- const observer = new MutationObserver ( function ( mutations ) {
614- mutations . forEach ( function ( mutation ) {
615- if ( mutation . type === "childList" && mutation . addedNodes . length > 0 ) {
616- callback ( ) ;
617- }
618- } ) ;
619- } ) ;
620- observer . observe ( errorElement , { childList : true } ) ;
621- }
635+ return "engrid" + capitalize ( callbackType ) ;
622636 }
623637 // Get the Payment Type
624638 static getPaymentType ( ) : string {
0 commit comments