@@ -112,6 +112,7 @@ const columnOffsets = reactive<Record<string, number>>({});
112112const columnEmptyResultsCount = reactive <Record <string , number >>({});
113113const columnsWithErrors = ref <Record <string , string >>({});
114114const isValidating = ref (false );
115+ const isValid = ref (true );
115116
116117const columnError = (column : AdminForthResourceColumnCommon ) => {
117118 const val = computed (() => {
@@ -351,21 +352,31 @@ function checkIfColumnHasError(column: AdminForthResourceColumnCommon) {
351352 }
352353}
353354
354- const isValid = computed (async () => {
355+ const checkIfAnyColumnHasErrors = () => {
356+ return Object .keys (columnsWithErrors .value ).length > 0 ? false : true ;
357+ }
358+
359+ const debouncedValidation = debounce (async (columns : AdminForthResourceColumnCommon []) => {
360+ await mutex .runExclusive (async () => {
361+ await validateUsingUserValidationFunction (columns );
362+ });
363+ isValidating .value = false ;
364+ isValid .value = checkIfAnyColumnHasErrors ();
365+ }, 500 );
366+
367+ watch (() => [editableColumns .value , props .validating ], async () => {
355368 editableColumns .value ?.forEach (column => {
356369 checkIfColumnHasError (column );
357370 });
358371
359372 isValidating .value = true ;
360- let isValid = true ;
361373 if (props .validating ) {
362374 // Here I need to add debounce
363- await mutex .runExclusive (async () => {
364- isValid = await validateUsingUserValidationFunction (editableColumns .value );
365- });
375+ debouncedValidation (editableColumns .value );
376+ } else {
377+ isValidating .value = false ;
378+ isValid .value = checkIfAnyColumnHasErrors ();
366379 }
367- isValidating .value = false ;
368- return Object .keys (columnsWithErrors .value ).length > 0 ? false : true ;
369380});
370381
371382
@@ -417,7 +428,7 @@ watch(() => isValid.value, async (value) => {
417428 emit (' update:isValid' , resolvedValue );
418429});
419430
420- async function validateUsingUserValidationFunction(editableColumnsInner : AdminForthResourceColumnCommon []): Promise <boolean > {
431+ async function validateUsingUserValidationFunction(editableColumnsInner : AdminForthResourceColumnCommon []): Promise <void > {
421432 const doesUserHaveCustomValidation = props .resource .columns .some (column => column .validation && column .validation .some ((val : any ) => val .customValidator ));
422433 if (doesUserHaveCustomValidation ) {
423434 try {
@@ -450,10 +461,8 @@ async function validateUsingUserValidationFunction(editableColumnsInner: AdminFo
450461
451462 } catch (e ) {
452463 console .error (' Error during custom validation' , e );
453- return false ;
454464 }
455465 }
456- return true ;
457466}
458467
459468defineExpose ({
0 commit comments