ream88

ream88

Weird LiveView behavior with native dialog element

I’m currently experiencing a very strange problem. I have a LiveView that displays a dialog (using the native <dialog> element) which allows users of my app to set up OTP.

This is my handle_event/3 callback:

def handle_event("enable_mfa", %{"confirm" => "true"} = params, socket) do
  %{"current_password" => password, "user" => user_params} = params
  user_params = Map.put(user_params, "otp_secret", socket.assigns.mfa_form_secret)
  user = socket.assigns.current_user

  case Users.enable_user_mfa(user, password, user_params) do
    {:ok, _user} ->
      socket
      |> put_flash(:info, "Two-factor authentication is now enabled for your account.")
      |> redirect(to: ~p"/settings/security")
      |> noreply()

    {:error, changeset} ->
      socket
      |> assign(mfa_form: to_form(changeset))
      |> noreply()
  end
end 

When I submit the form with invalid data and reassign it with the new changeset, the dialog suddenly closes. Additionally, the UI becomes unclickable afterward.

However, if I return noreply(socket) from the handle_event/3 callback, the dialog remains open, but it doesn’t display validation errors.

It’s very odd. If I don’t update the form assignment, this issue doesn’t occur, so it must be related to the form’s re-rendering.

Marked As Solved

woylie

woylie

Can you post your template? I assume you use the show() or showModal() method. When you update the assigns, the dialog gets re-rendered and loses the open state. I think you’ll need to copy over the state. See:

Also Liked

ream88

ream88

Omg, the second link was the solution! And the sad part is, I already saw this issue a while ago while working on a different problem. Well stupid me, and THANK YOU for posting it!

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
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" =&gt; #BSON.ObjectId&lt;58eb1a7a9ad169198c3dXXXX&gt;, "email" =&gt; ...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
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
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" =&gt; #BSON.ObjectId&lt;58eb1a7a9ad169198c3dXXXX&gt;, "email" =&gt; ...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
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
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New

We're in Beta

About us Mission Statement