I do that like below.
@impl true
def handle_event("event", %{"data" => data}, socket) do
your_params = %{...}
data_params =
socket.assigns.form.source.params
|> Map.merge(your_params)
form =
DataParams.changeset(%DataParams{}, data_params)
|> to_form(as: :data)
|> Map.put(:action, :validate)
socket = socket |> assigns(:form, form)
{:noreply, socket}
end
To make it easily, I made a simple helper library.