Packages
surface
0.3.1
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha.0
A component based library for Phoenix LiveView
Current section
Files
Jump to
Current section
Files
lib/surface/components/form/select.ex
defmodule Surface.Components.Form.Select do
@moduledoc """
Defines a select.
Provides a wrapper for Phoenix.HTML.Form's `select/4` function.
All options passed via `opts` will be sent to `select/4`, `class` can
be set directly and will override anything in `opts`.
"""
use Surface.Component
import Phoenix.HTML.Form, only: [select: 4]
import Surface.Components.Form.Utils
alias Surface.Components.Form.Input.InputContext
@doc "The form identifier"
prop form, :form
@doc "The field name"
prop field, :string
@doc "The id of the corresponding select field"
prop id, :string
@doc "The name of the corresponding select field"
prop name, :string
@doc "The CSS class for the underlying tag"
prop class, :css_class
@doc "The options in the select"
prop options, :any, default: []
@doc "An option to include at the top of the options with the given prompt text"
prop prompt, :string
@doc "The default value to use when none was sent as parameter"
prop selected, :any
@doc "Options list"
prop opts, :keyword, default: []
def render(assigns) do
helper_opts = props_to_opts(assigns, [:prompt, :selected])
attr_opts = props_to_attr_opts(assigns, class: get_config(:default_class))
~H"""
<InputContext assigns={{ assigns }} :let={{ form: form, field: field }}>
{{ select(form, field, @options, helper_opts ++ attr_opts ++ @opts) }}
</InputContext>
"""
end
end