pwightman

pwightman

Reset form validation error state in a LiveView form

Context: I have a multi-step form (10+ steps) made in LiveView (Surface, technically, but I think this question is not Surface-specific). Each step contains some form inputs, on submission the data is validated, saved to the DB, then state in the LiveView is updated to show the next step (user remains at the same URL for each step).

Everything works great for the first rendered step, form errors show when the user has filled something out wrong, but not until they’ve entered something in the field.

My problem is that subsequent steps have their errors showing immediately. I know this has to do with phx-no-feedback, which as far as I can tell is a stateful thing handled on the client and I don’t see how I can tell it to “reset” back to a clean state.

I have worked around this by doing a push_redirect to the same URL, causing the liveview to remount on each step, however this means I can no longer easily send push_events because it’s swallowed by the redirect. I’d like to just fix the core issue of form errors showing up when I don’t want them to.

push_patch to a new URL for each step (which I don’t want to do) such as forms/:id?step=:step_id also has the same behavior (pictured below).

Any ideas/workarounds?

Marked As Solved

LostKobrakai

LostKobrakai

Are the steps all one form? I’d probably suggest using separate forms. But you can also “reset” a form by updating its id attribute.

Also Liked

pwightman

pwightman

Each step is using the same custom form wrapper component, which uses the same hard-coded id. Changing the id per step totally worked! Thank you!

KP123

KP123

Is ID updating the best method for resetting forms in July 2024? I have a form that’s always visible and needs to be reset after submit and there are a number of proposed methods for how this could best be done:

  1. don’t use forms. Just map form input to LV assigns and update assigns on change and submit
  2. Use a Phx hook to reset the fields in JS after receiving an event from the server
  3. update the ID of the form. This requires me to track the ID of the form somewhere so that I can reuse it on updates but ensure it’s changed on submits
  4. Use a button[type=reset] and do my submission validations in the reset handler. But then there’s a flash of empty form → previous form with errors when submission fails

It would be nice if we could set changeset actions to :reset or some other convenience since same page form resetting is a pretty common task.

Where Next?

Popular in Questions Top

rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

Other popular topics Top

KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36820 110
New
JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New

We're in Beta

About us Mission Statement