Once a form's fields have been validated, submitting doesn't trigger a rerun of the validation. Is there a way I can trigger a rerun of the validation when the form is submitted?
I have a form field whose value can become invalid if it's not submitted within a particular timeframe. It's not async; I'm just trying to cover a scenario in which the user doesn't click submit for a while, and when they eventually do, the value would have become invalid. Final form remembers the result of the validation that happens immediately after the value is changed, which means that the unchanged value remains valid regardless of how much time passes between the validation and the submission. This is the behavior I want to hook into and change; the intervening time matters in my use case. I have tried using the beforeSubmit
listener from the final-form-submit-listener
package but it only gives access to the FormApi
object. I tried using the pauseValidation
and resumeValidation
functions from FormApi
but they couldn't achieve what I want, or maybe I'm not using them correctly. I have a feeling it's painfully obvious how to do this, but I can't figure it out. π©
I created this Sandbox to demonstrate what I mean.
Thanks!
UPDATE: Some additional information:
- This is for a time picker. If you're picking times for today, you may pick a time that is 15 minutes from now. It's valid now because it's currently in the future. If you don't touch the form for the next 20 minutes then click submit, the submission should be prevented because your selected time is now 5 minutes in the past.
- I have considered just adding the validation directly in the submit handler. Two answers here do this. However, it is not ideal for me because Final Form doesn't receive the errors and pass them to the
meta
object for the form fields. My codebase is complex and relies heavily upon themeta
object to display error messages. Trying to replicate that functionality in the submit handler may work but it's hacky and goes against the convention used throughout the codebase.