Current section
Files
Jump to
Current section
Files
lib/phx_frontend/components.ex
defmodule PhxFrontend.Components do
use Phoenix.Component
attr(:id, :string, required: true)
attr(:name, :string, required: true)
attr(:props, :map, default: %{})
attr(:callbacks, :map, default: %{})
attr(:tag_name, :string, default: "div")
attr(:rest, :global)
def js_app(assigns) do
json_lib = Phoenix.json_library()
data_props = json_lib.encode!(assigns.props)
data_callbacks = json_lib.encode!(assigns.callbacks)
assigns = assigns |> assign(data_props: data_props, data_callbacks: data_callbacks)
~H"""
<.dynamic_tag
name={@tag_name}
id={@id}
phx-hook="jsApp"
phx-update="ignore"
data-name={@name}
data-props={@data_props}
data-callbacks={@data_callbacks}
{@rest}
></.dynamic_tag>
"""
end
end