Skip to content

Commit 14bdf25

Browse files
committed
refactor: enhance validation logic by introducing block setting for custom validation
1 parent bf3ea7b commit 14bdf25

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

adminforth/spa/src/components/ResourceForm.vue

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ const columnOffsets = reactive<Record<string, number>>({});
111111
const columnEmptyResultsCount = reactive<Record<string, number>>({});
112112
const columnsWithErrors = ref<Record<string, string>>({});
113113
const isValidating = ref(false);
114+
const blockSettingIsValidating = ref(false);
114115
const isValid = ref(true);
116+
const doesUserHaveCustomValidation = computed(() => props.resource.columns.some(column => column.validation && column.validation.some((val) => val.validator)));
115117
116118
const columnError = (column: AdminForthResourceColumnCommon) => {
117119
const val = computed(() => {
@@ -359,25 +361,31 @@ const debouncedValidation = debounce(async (columns: AdminForthResourceColumnCom
359361
await mutex.runExclusive(async () => {
360362
await validateUsingUserValidationFunction(columns);
361363
});
362-
isValidating.value = false;
364+
setIsValidatingValue(false);
363365
isValid.value = checkIfAnyColumnHasErrors();
364366
}, 500);
365367
366368
watch(() => [editableColumns.value, props.validatingMode], async () => {
367-
isValidating.value = true;
369+
setIsValidatingValue(true);
368370
369371
editableColumns.value?.forEach(column => {
370372
checkIfColumnHasError(column);
371373
});
372374
373-
if (props.validatingMode) {
375+
if (props.validatingMode && doesUserHaveCustomValidation.value) {
374376
debouncedValidation(editableColumns.value);
375377
} else {
376-
isValidating.value = false;
378+
setIsValidatingValue(false);
377379
isValid.value = checkIfAnyColumnHasErrors();
378380
}
379381
});
380382
383+
const setIsValidatingValue = (value: boolean) => {
384+
if (!blockSettingIsValidating.value) {
385+
isValidating.value = value;
386+
}
387+
}
388+
381389
382390
const groups = computed(() => {
383391
let fieldGroupType;
@@ -427,9 +435,9 @@ watch(() => isValid.value, (value) => {
427435
});
428436
429437
async function validateUsingUserValidationFunction(editableColumnsInner: AdminForthResourceColumnCommon[]): Promise<void> {
430-
const doesUserHaveCustomValidation = props.resource.columns.some(column => column.validation && column.validation.some((val) => val.validator));
431-
if (doesUserHaveCustomValidation) {
438+
if (doesUserHaveCustomValidation.value) {
432439
try {
440+
blockSettingIsValidating.value = true;
433441
const res = await callAdminForthApi({
434442
method: 'POST',
435443
path: '/validate_columns',
@@ -456,9 +464,10 @@ async function validateUsingUserValidationFunction(editableColumnsInner: AdminFo
456464
checkIfColumnHasError(column);
457465
});
458466
}
459-
467+
blockSettingIsValidating.value = false;
460468
} catch (e) {
461469
console.error('Error during custom validation', e);
470+
blockSettingIsValidating.value = false;
462471
}
463472
}
464473
}

0 commit comments

Comments
 (0)