Packages

spike_surface helps you build stateul forms / UIs with Surface UI

Current section

Files

Jump to
spike_surface lib spike surface errors.ex
Raw

lib/spike/surface/errors.ex

defmodule Spike.Surface.Errors do
use Surface.Component
prop(errors, :map, required: true)
prop(dirty_fields, :map, required: false)
prop(form_data, :struct, required: true)
prop(key, :atom, required: true)
slot(default, args: [:field_errors])
def render(assigns) do
assigns =
assigns
|> assign_new(:dirty_fields, fn -> Spike.dirty_fields(assigns.form_data) end)
if field_errors(assigns) != [] do
~F"""
<#slot :args={field_errors: field_errors(assigns)} />
"""
else
~F"""
"""
end
end
defp field_errors(%{errors: errors, form_data: form_data, key: key, dirty_fields: dirty_fields}) do
if errors[form_data.ref] && errors[form_data.ref] |> Map.get(key) &&
dirty_fields[form_data.ref] && key in dirty_fields[form_data.ref] do
errors[form_data.ref][key]
else
[]
end
end
end