Submit
The FormBuilder
and FormGenerator
components create a new instance of the Form
class that contains a state. This state informs the form of its current status, for example, to display an alert message or hide fields when sending the form. To manage this - due to Vue.js restrictions - you need to create a FormSubmitter
class. This class handles various sending methods and alters the form status when necessary. A default FormSubmitter
class is provided when generating a form. Custom submitter classes can be created based on the FormSubmitter
interface.
Default
The default FormSubmitter
provides a submit method that handles multiple statuses:
export class DefaultFormSubmitter implements FormSubmitter {
public form: FormForSubmitter
constructor(form: FormForSubmitter) {
this.form = form
}
public async submit(){
const { data, error } = await useFetch(this.form.action, {
key: String(new Date().getTime()),
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
watch: false,
body: this.form.data.state,
onRequest: () => {
this.form.mutateState('submitting')
},
onResponseError: () => {
this.form.mutateState('error', 'unknown')
},
onResponse: () => {
this.form.mutateState('submitted')
}
})
return { data, error }
}
}
Custom
You can create a custom FormSubmitter
and pass it to the submitter
props of FormBuilder
and FormGenerator
.
export class CustomFormSubmitter implements FormSubmiter {
public form: Form
constructor(form: Form) {
this.form = form
}
public async submit(){
// Submit method
}
}
With this, you can now access all the functionalities of the Form
class, like mutateState(status, errorType)
See Builder for details.
Then add it to your FromBuilder
<script lang="ts" setup>
import CustomFormSubmitter from ...
</script>
<template>
<FormBuilder action="..." :submitter="CustomFormSubmitter">
...
<FormSubmit>
Submit
</FormSubmit>
</FormBuilder>
</template>