Files
lara-bermite/resources/js/utilities/form.ts
2024-03-06 09:42:12 +01:00

54 lines
1.8 KiB
TypeScript

import {AxiosError} from "axios"
export function displayFormErrors(error: AxiosError, form: HTMLElement|null = null) {
if (error.response && error.response.status === 422) {
// @ts-expect-error test axios error
const errors = error.response.data.errors
const formBase = (form) ? form : document.body
Object.entries(errors).forEach(([key, value]) => {
displayError(key, value, formBase)
})
}
}
export interface ValidationErrors {
response: {
status: number,
data: {
errors: object
message?: string,
}
},
message?: string,
}
export function displayError(key: string, message: string, form: HTMLElement|null = null) {
const formBase = (form) ? form : document
const input = formBase.querySelector(`input[name="${key}"], select[name="${key}"], textarea[name="${key}"]`)
if (input) {
const formControl = input.closest('.form-control')
if (formControl) {
formControl.classList.add('invalid-control')
const errorMessage: HTMLElement|null = formControl.querySelector('.error-message')
if (errorMessage) {
errorMessage.innerText = message
}
if(key === 'form_info') {
formControl.classList.remove('hidden')
}
}
}
}
export function cleanErrorsForm(form = null) {
const formBase = (form) ? form : document.body
const inputsErrors = formBase.querySelectorAll('.invalid-control')
inputsErrors.forEach(input => {
input.classList.remove('invalid-control')
const errorMessage: HTMLElement|null = input.querySelector('.error-message')
if (errorMessage) {
errorMessage.innerText = ''
}
})
}