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