Packages
surface
0.6.0
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/utils.ex
defmodule Surface.Components.Form.Utils do
@moduledoc false
import Surface, only: [prop_to_attr_opts: 2]
def props_to_opts(assigns, props \\ []) do
# `id` and `name` props are common in all the form components
props = [:id, :name] ++ props
for prop <- props,
{key, value} = prop_value(assigns, prop),
value != nil do
{key, value}
end
end
defmacro props_to_attr_opts(assigns, props) do
quote do
Enum.reduce(unquote(props), [], fn prop, acc ->
{key, value} = unquote(__MODULE__).prop_value(unquote(assigns), prop)
prop_to_attr_opts(value, key) ++ acc
end)
end
end
def prop_value(assigns, {prop, default}) when is_list(default) do
{prop, assigns[prop] || default}
end
def prop_value(assigns, {prop, default}) do
{prop, assigns[prop] || [default]}
end
def prop_value(assigns, prop) do
{prop, assigns[prop]}
end
@doc false
def parse_css_class_for(props, field) do
parse_css_class_for(props, field, props[field][:class])
end
defp parse_css_class_for(props, field, class) when is_list(class) do
put_in(props, [field, :class], Surface.css_class(class))
end
defp parse_css_class_for(props, _field, _class), do: props
end