defprotocol AshPhoenix.FormData.Error do
def to_form_error(exception)
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Query.InvalidQuery do
def to_form_error(error) do
{error.field, error.message, error.vars}
end
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Query.InvalidArgument do
def to_form_error(error) do
{error.field, error.message, error.vars}
end
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Changes.InvalidAttribute do
def to_form_error(error) do
{error.field, error.message, error.vars}
end
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Changes.InvalidArgument do
def to_form_error(error) do
{error.field, error.message, error.vars}
end
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Changes.InvalidRelationship do
def to_form_error(error) do
{error.relationship, error.message, error.vars}
end
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Changes.InvalidChanges do
def to_form_error(error) do
error_fields =
case error.fields do
[] ->
[:_form]
fields ->
fields
end
fields = Enum.join(error.fields || [], ",")
for field <- error_fields || [] do
vars =
error.vars
|> Keyword.put(:fields, fields)
|> Keyword.put(:field, field)
{field, error.message, vars}
end
end
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Changes.Required do
def to_form_error(error) do
{error.field, "is required", error.vars}
end
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Query.NotFound do
def to_form_error(error) do
pkey = error.primary_key || %{}
Enum.map(pkey, fn {key, value} ->
{key, "could not be found", Keyword.put(error.vars, :value, value)}
end)
end
end
defimpl AshPhoenix.FormData.Error, for: Ash.Error.Query.Required do
def to_form_error(error) do
{error.field, "is required", error.vars}
end
end