defmodule LivebookWeb.FormHelpers do @moduledoc """ Conveniences for translating and building error messages. """ use Phoenix.Component import Phoenix.HTML.Form import LivebookWeb.LiveHelpers @doc """ A wrapper for inputs with conveniences. """ def input_wrapper(assigns) do assigns = assign_new(assigns, :class, fn -> [] end) ~H"""
<%= render_slot(@inner_block) %> <%= for error <- Keyword.get_values(@form.errors, @field) do %> <% end %>
""" end @doc """ Hex color input. """ def hex_color_input(assigns) do ~H"""
<%= text_input(@form, @field, class: "input", spellcheck: "false", maxlength: 7 ) %>
""" end @doc """ Emoji input. """ def emoji_input(assigns) do ~H"""
<%= input_value(@form, @field) %>
<%= hidden_input(@form, @field, class: "hidden emoji-picker-input", "data-emoji-input": true) %>
""" 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}}", fn _ -> to_string(value) end) end) end end