Choose option 10, url patched to http://localhost:4000/test?per_page=10
Choose option 15, url patched to http://localhost:4000/test?per_page=15
Click on browser back button. I expect the browser to reload url http://localhost:4000/test?per_page=10 and see the dropdown at option 10. However the dropdown stays at option 15.
I also looked at the server logs to make sure that handle_params is indeed triggered and that options is updated
What’s happening here? Is this a limitation?
defmodule LiveViewStudioWeb.TestLive do
use LiveViewStudioWeb, :live_view
def mount(_params, _session, socket) do
{:ok, assign(socket, options: %{})}
end
def handle_params(params, _uri, socket) do
per_page = (params["per_page"] || "5") |> String.to_integer()
options = %{per_page: per_page}
IO.inspect(options)
{:noreply, assign(socket, options: options)}
end
def handle_event("submit", %{"per_page" => per_page}, socket) do
options = %{socket.assigns.options | per_page: per_page}
socket = update(socket, :options, fn _ -> options end)
{:noreply, push_patch(socket, to: ~p"/test?#{options}")}
end
def render(assigns) do
~H"""
<form phx-change="submit">
<select name="per_page" id="">
<%= Phoenix.HTML.Form.options_for_select([5,10,15], @options.per_page) %>
</select>
</form>
"""
end
end
So when hitting the back button, did the server logs show handle_params being triggered and options updated or was handle_params never hit at all? And did the url update correctly in the browser when you hit the back button?
Looks like select with focus is not updated, and all options inside are not updated as well. No idea why. But there are some closed github issues related to this which suggest workarounds:
So one of workarounds which works for your example is to add dynamic id to select and force update: