Packages
moon
2.86.0
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Current section
Files
Jump to
Current section
Files
lib/moon/components/input_group/input_group.ex
defmodule Moon.Components.InputGroup.Error do
@moduledoc false
defstruct field: nil, message: nil
end
defmodule Moon.Components.InputGroup do
@moduledoc false
use Moon.StatelessComponent
alias Moon.Components.InputGroup.Container
alias Moon.Components.ErrorTag
alias Moon.Components.InputGroup.Error
prop(orientation, :string,
default: "horizontal",
values: ["horizontal", "vertical"]
)
prop(has_fields, :boolean, default: false)
prop(included_fields, :list, default: [])
prop(use_error_tag, :boolean, default: true)
data(form, :form, from_context: {Surface.Components.Form, :form})
slot(default, required: true)
def render(assigns) do
~F"""
<Container orientation={@orientation} is_error={has_error(@form, @included_fields)}>
<#slot />
</Container>
<div
class="inline-block mt-2 text-moon-12"
:if={@use_error_tag && has_error(@form, @included_fields)}
>
<ErrorTag :for={item <- get_errors(@form, @included_fields)} field={item.field} />
</div>
"""
end
defp get_errors(form, fields) do
list =
for field <- fields, Keyword.has_key?(form.errors, field) do
found = Enum.at(Keyword.get_values(form.errors, field), 0)
message = elem(found, 0)
%Error{message: message, field: field}
end
list
end
defp has_error(form, fields) do
Enum.count(get_errors(form, fields)) > 0
end
end