Seems reasonable to me, .form automatically sets the :for assign to %{} by default when it’s not explicitly given.
If you wanted to show which option is currently selected, you could then explicitly set a form assign so that the input component can pull the field value off of the form when generating the options via <%= Phoenix.HTML.Form.options_for_select(@options, @value) %>.
<.form
let={f}
for={@form}
id="time-sort-form"
phx-target={@myself}
phx-change="update">
<.input
type="select"
field={f[:time]}
options={@time_options}
/>
</.form>
</div>
defmodule MyApp.SortLive.FormComponent do
use MyApp, :live_component
def mount(socket) do
time_form = to_form(%{"time" => "today"}
time_options = [{"Today", "today"}, ..., {"All Time", "all time"}]
{:ok,
socket
|> assign(:sort, "popular")
|> assign(:time_form, time_form)
|> assign(:time_options, time_options)}
end
def handle_event("update", %{"time" => time}, socket) do
username = socket.assigns.user.username
sort = socket.assigns.sort
time_form = to_form(%{"time" => time})
{:noreply,
socket
|> assign(:time_form, time_form)
|> push_patch(to: ~p"/user/#{username}/?#{[sort: sort, time: time]}")}
end
end






















