defmodule ZoeyscomputerWeb.GistLive.Select do
use Phoenix.Component
import Phoenix.HTML.Form, only: [input_value: 2]
attr :id, :string, required: true
attr :form, :any, required: true
attr :field, :atom, required: true
attr :options, :list, required: true
attr :label, :string, default: nil
attr :prompt, :string, default: "Select an option..."
attr :class, :string, default: nil
attr :disabled, :boolean, default: false
def select(assigns) do
selected_value = input_value(assigns.form, assigns.field)
assigns = assign(assigns, :selected_value, selected_value)
~H"""
"-container"} phx-hook="SelectHook">
"""
end
defp selected_option(_options, value) when is_nil(value), do: nil
defp selected_option(options, value) do
case Enum.find(options, fn {_label, val} -> to_string(val) == to_string(value) end) do
{label, _value} -> label
_ -> nil
end
end
defp input_id(%{id: id}, field) when is_atom(field), do: "#{id}_#{field}"
defp input_name(%{name: name}, field), do: "#{name}[#{field}]"
end