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

Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
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
_russellb
I want to try my hand at web scraping. What tools/libraries do I need to use. I’m hoping to turn this into something professional so don’...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
LegitStack
I’m trying to make a websocket server in Phoenix or raw Elixir. I heard about gun, I think I could use cowboy, but since I’m not that sma...
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
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

Other popular topics Top

aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 49522 488
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod -- where is this set? Thanks.
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
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

We're in Beta

About us Mission Statement