about summary refs log tree commit diff
path: root/lib/rook_web/views/error_helpers.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rook_web/views/error_helpers.ex')
-rw-r--r--lib/rook_web/views/error_helpers.ex30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/rook_web/views/error_helpers.ex b/lib/rook_web/views/error_helpers.ex
new file mode 100644
index 0000000..a905b5e
--- /dev/null
+++ b/lib/rook_web/views/error_helpers.ex
@@ -0,0 +1,30 @@
+defmodule RookWeb.ErrorHelpers do
+  @moduledoc """
+  Conveniences for translating and building error messages.
+  """
+
+  use Phoenix.HTML
+
+  @doc """
+  Generates tag for inlined form input errors.
+  """
+  def error_tag(form, field) do
+    Enum.map(Keyword.get_values(form.errors, field), fn error ->
+      content_tag(:span, translate_error(error),
+        class: "invalid-feedback",
+        phx_feedback_for: input_name(form, field)
+      )
+    end)
+  end
+
+  @doc """
+  Translates an error message.
+  """
+  def translate_error({msg, opts}) do
+    # Because the error messages we show in our forms and APIs
+    # are defined inside Ecto, we need to translate them dynamically.
+    Enum.reduce(opts, msg, fn {key, value}, acc ->
+      String.replace(acc, "%{#{key}}", to_string(value))
+    end)
+  end
+end