defmodule MoonWeb.Examples.Design.Form.DropdownExample.Custom do
@moduledoc false
use Moon.StatefulComponent
use MoonWeb, :example
alias MoonWeb.Schema.User
alias Moon.Design.Form
alias Moon.Design.Dropdown
prop(roles, :list, default: User.available_roles_with_icon())
prop(changeset1, :any, default: User.changeset(%User{}))
prop(changeset2, :any, default: User.changeset(%User{}))
def handle_event("change" <> num, params, socket) do
changeset = User.changeset(%User{}, Map.get(params, "user", %{}))
{:noreply, assign(socket, "changeset#{num}": changeset)}
end
defp icon_and_title(assigns = %{option: nil}), do: ~F"{@prompt}"
defp icon_and_title(assigns), do: ~F" {@option[:key]}"
def render(assigns) do
~F"""
<:option :let={option: option}>
{option[:key] || "Please select role"}
[<.icon_and_title
option={Enum.find(@roles, &(&1[:value] == to_form(@changeset1)[:role].value))}
prompt="Select role"
/>]
<.icon_and_title option={o} />
"""
end
def code() do
"""
alias MoonWeb.Schema.User
alias Moon.Design.Form
alias Moon.Design.Dropdown
prop(roles, :list, default: User.available_roles_with_icon())
prop(changeset1, :any, default: User.changeset(%User{}))
prop(changeset2, :any, default: User.changeset(%User{}))
def handle_event("change" <> num, params, socket) do
changeset = User.changeset(%User{}, Map.get(params, "user", %{}))
{:noreply, assign(socket, "changeset\#{num}": changeset)}
end
defp icon_and_title(assigns = %{option: nil}), do: ~F"{@prompt}"
defp icon_and_title(assigns), do: ~F" {@option[:key]}"
def render(assigns) do
~F\"""
<:option :let={option: option}>
{option[:key] || "Please select role"}
[<.icon_and_title
option={Enum.find(@roles, &(&1[:value] == to_form(@changeset1)[:role].value))}
prompt="Select role"
/>]
<.icon_and_title option={o} />
\"""
end
"""
end
end