Packages
surface
0.8.3
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/date_select.ex
defmodule Surface.Components.Form.DateSelect do
@moduledoc """
Generates select tags for date.
Provides a wrapper for Phoenix.HTML.Form's `date_select/3` function.
All options passed via `opts` will be sent to `date_select/3`,
`value`, `default`, `year`, `month`, `day` and `builder`
can be set directly and will override anything in `opts`.
## Examples
```
<DateSelect form="user" field="born_at" />
<Form for={:user}>
<DateSelect field={:born_at} />
</Form>
```
"""
use Surface.Component
import Phoenix.HTML.Form, only: [date_select: 3]
import Surface.Components.Form.Utils
@doc "The form identifier"
prop form, :form, from_context: {Surface.Components.Form, :form}
@doc "The id prefix for underlying select fields"
prop id, :string
@doc "The name prefix for underlying select fields"
prop name, :string
@doc "The field name"
prop field, :any, from_context: {Surface.Components.Form.Field, :field}
@doc "Value to pre-populate the select"
prop value, :any
@doc "Default value to use when none was given in 'value' and none is available in the form data"
prop default, :any
@doc "Options passed to the underlying 'year' select"
prop year, :keyword
@doc "Options passed to the underlying 'month' select"
prop month, :keyword
@doc "Options passed to the underlying 'day' select"
prop day, :keyword
@doc """
Specify how the select can be build. It must be a function that receives a builder
that should be invoked with the select name and a set of options.
"""
prop builder, :fun
@doc "Options list"
prop opts, :keyword, default: []
def render(assigns) do
helper_opts =
assigns
|> props_to_opts([:value, :default, :year, :month, :day, :builder])
|> parse_css_class_for(:year)
|> parse_css_class_for(:month)
|> parse_css_class_for(:day)
opts =
assigns.opts
|> Keyword.merge(helper_opts)
assigns = assign(assigns, opts: opts)
~F[{date_select(@form, @field, @opts)}]
end
end