Using:
defp deps do
[
#...
{:phoenix, "~> 1.7.7"},
{:phoenix_html, "~> 3.3"},
{:phoenix_live_view, "~> 0.20.1"},
#...
]
When defining a function component that has multiple phx-value-* defined using raw elixir types (e.g. phx-value-id={@element.id}, phx-value-name={@element.name}
), only a single value is passed to the handle_event
params.
However, if I use raw strings or even string templates(?) (e.g. phx-value-id={"#{@element.id}"}
this is not an issue.
Here is my case:
#...
<.button
class="btn-error"
phx-click="toggle-disabled"
phx-value-id={@element.id}}
phx-value-disabled={@element.disabled}
data-confirm="Are you sure?">
Toggle
</.button>
#...
Passes %{"id" => "1", "value"=>""}
to params
Whereas:
#...
<.button
class="btn-error"
phx-click="toggle-disabled"
phx-value-id={"#{@element.id}"}
phx-value-disabled={"#{@element.disabled}"}
data-confirm="Are you sure?">
Toggle
</.button>
#...
Passes the data as expected. This also works if I only use string literals. phx-value is affected by this as well and stays empty if I define a phx-value-* using an elixir type(? not sure if this is the root cause).
This is defined inside a function component, not a live component. Not sure if that changes this either.
While I have solved my issue by using templates, I’m not sure if this is a bug that should be reported, or expected behaviour.