Frontend-Common/form/FormStore.ts

80 lines
1.5 KiB
TypeScript

import { observable, action } from 'mobx'
import logger from 'lib/logger'
class FormStore {
@observable dirty: boolean = false
@observable errors: boolean = false
@observable submitError: Nullable<string> = null
@observable valid: boolean = true
@observable submitted: boolean = false
@observable submitting: boolean = false
@observable touched: boolean = false
@observable loading: boolean = false
@action
setDirty(dirty: boolean) {
this.dirty = dirty
}
@action
setErrors(errors: boolean) {
this.errors = errors
}
@action
setSubmitError(submitError: Nullable<string>) {
this.submitError = submitError
}
@action
setSubmitted(isSubmitted: boolean) {
this.submitted = isSubmitted
}
@action
setTouched(isTouched: boolean) {
this.touched = isTouched
}
@action
setSubmitting(isSubmitting: boolean) {
this.submitting = isSubmitting
}
@action
setValid(isValid: boolean) {
this.valid = isValid
}
@action
setLoading(isLoading = true) {
this.loading = isLoading
}
async handleSubmit(fn: () => void) {
try {
this.setTouched(true)
this.setLoading()
this.setSubmitError(null)
await fn?.()
this.setSubmitting(false)
this.setLoading(false)
} catch (e: unknown) {
if (e instanceof Error) {
logger.error(e.message)
this.setSubmitError(e.message)
this.setLoading(false)
}
else {
logger.error('Unknown error form store')
}
}
}
}
export default FormStore