@@ -82,7 +82,7 @@ export type ValidationProvider = (value: string, element: ValidatableElement, pa
82
82
export type ValidatedCallback = ( success : boolean ) => void ;
83
83
84
84
interface ValidationEventCallback < TEvent extends Event = Event > {
85
- ( e ?: TEvent , callback ?: ValidatedCallback ) : void ;
85
+ ( e ?: TEvent , callback ?: ValidatedCallback ) : Promise < boolean > ;
86
86
debounced ?: ( e ?: TEvent , callback ?: ValidatedCallback ) => void ;
87
87
remove ?: ( ) => void ;
88
88
}
@@ -729,29 +729,29 @@ export class ValidationService {
729
729
* Fires off validation for elements within the provided form and then calls the callback
730
730
* @param form The form to validate.
731
731
* @param callback Receives true or false indicating validity after all validation is complete.
732
+ * @returns Promise that resolves to true or false indicating validity after all validation is complete.
732
733
*/
733
- validateForm = ( form : HTMLFormElement , callback ?: ValidatedCallback ) => {
734
+ validateForm = async ( form : HTMLFormElement , callback ?: ValidatedCallback ) => {
734
735
if ( ! ( form instanceof HTMLFormElement ) ) {
735
736
throw new Error ( 'validateForm() can only be called on <form> elements' ) ;
736
737
}
737
738
let formUID = this . getElementUID ( form ) ;
738
739
let formValidationEvent = this . formEvents [ formUID ] ;
739
- if ( formValidationEvent ) {
740
- formValidationEvent ( undefined , callback ) ;
741
- }
740
+ return ! formValidationEvent ||
741
+ await formValidationEvent ( undefined , callback ) ;
742
742
}
743
743
744
744
/**
745
745
* Fires off validation for the provided element and then calls the callback
746
746
* @param field The element to validate.
747
747
* @param callback Receives true or false indicating validity after all validation is complete.
748
+ * @returns Promise that resolves to true or false indicating validity after all validation is complete
748
749
*/
749
- validateField = ( field : ValidatableElement , callback ?: ValidatedCallback ) => {
750
+ validateField = async ( field : ValidatableElement , callback ?: ValidatedCallback ) => {
750
751
let fieldUID = this . getElementUID ( field ) ;
751
752
let fieldValidationEvent = this . inputEvents [ fieldUID ] ;
752
- if ( fieldValidationEvent ) {
753
- fieldValidationEvent ( undefined , callback ) ;
754
- }
753
+ return ! fieldValidationEvent ||
754
+ await fieldValidationEvent ( undefined , callback ) ;
755
755
}
756
756
757
757
/**
@@ -931,11 +931,11 @@ export class ValidationService {
931
931
let cb : ValidationEventCallback < SubmitEvent > = ( e , callback ) => {
932
932
// Prevent recursion
933
933
if ( validationTask ) {
934
- return ;
934
+ return validationTask ;
935
935
}
936
936
937
937
if ( ! this . shouldValidate ( e ) ) {
938
- return ;
938
+ return Promise . resolve ( true ) ;
939
939
}
940
940
941
941
validationTask = this . getFormValidationTask ( formUID ) ;
@@ -947,11 +947,11 @@ export class ValidationService {
947
947
948
948
this . logger . log ( 'Validating' , form ) ;
949
949
950
- validationTask . then ( async success => {
950
+ return validationTask . then ( async success => {
951
951
this . logger . log ( 'Validated (success = %s)' , success , form ) ;
952
952
if ( callback ) {
953
953
callback ( success ) ;
954
- return ;
954
+ return success ;
955
955
}
956
956
957
957
const validationEvent = new CustomEvent ( 'validation' ,
@@ -963,8 +963,10 @@ export class ValidationService {
963
963
// Firefox fix: redispatch 'submit' after finished handling this event
964
964
await new Promise ( resolve => setTimeout ( resolve , 0 ) ) ;
965
965
this . handleValidated ( form , success , e ) ;
966
+ return success ;
966
967
} ) . catch ( error => {
967
968
this . logger . log ( 'Validation error' , error ) ;
969
+ return false ;
968
970
} ) . finally ( ( ) => {
969
971
validationTask = null ;
970
972
} ) ;
@@ -1062,15 +1064,17 @@ export class ValidationService {
1062
1064
1063
1065
const cb : ValidationEventCallback = async ( event , callback ) => {
1064
1066
let validate = this . validators [ uid ] ;
1065
- if ( ! validate ) return ;
1067
+ if ( ! validate ) return true ;
1066
1068
1067
1069
this . logger . log ( 'Validating' , { event } ) ;
1068
1070
try {
1069
1071
const success = await validate ( ) ;
1070
1072
callback ( success ) ;
1073
+ return success ;
1071
1074
}
1072
1075
catch ( error ) {
1073
1076
this . logger . log ( 'Validation error' , error ) ;
1077
+ return false ;
1074
1078
}
1075
1079
} ;
1076
1080
0 commit comments