defmodule ClaperWeb.Component.Input do @moduledoc """ Input component for forms """ use ClaperWeb, :view_component use Gettext, backend: ClaperWeb.Gettext def text(assigns) do assigns = assigns |> assign_new(:required, fn -> false end) |> assign_new(:autofocus, fn -> false end) |> assign_new(:placeholder, fn -> false end) |> assign_new(:readonly, fn -> false end) |> assign_new(:label, fn %{required: false, name: name} -> ~s/#{name} #{gettext("(optional)")}/ %{name: name} -> name end) |> assign_new(:labelClass, fn -> "text-gray-700" end) |> assign_new(:fieldClass, fn -> "bg-white" end) |> assign_new(:value, fn -> input_value(assigns.form, assigns.key) end) |> assign_new(:minlength, fn -> nil end) |> assign_new(:maxlength, fn -> nil end) ~H"""
{label(@form, @key, @label, class: "block text-sm font-medium #{@labelClass}")}
{text_input(@form, @key, required: @required, readonly: @readonly, autofocus: @autofocus, placeholder: @placeholder, autocomplete: @key, value: @value, minlength: @minlength, maxlength: @maxlength, class: "#{@fieldClass} read-only:opacity-50 outline-hidden shadow-base focus:ring-primary-500 focus:border-primary-500 focus:ring-2 block w-full text-lg border-gray-300 rounded-md py-2 px-3" )}
<%= if Keyword.has_key?(@form.errors, @key) do %>

{error_tag(@form, @key)}

<% end %>
""" end def textarea(assigns) do assigns = assigns |> assign_new(:required, fn -> false end) |> assign_new(:autofocus, fn -> false end) |> assign_new(:placeholder, fn -> false end) |> assign_new(:readonly, fn -> false end) |> assign_new(:labelClass, fn -> "text-gray-700" end) |> assign_new(:fieldClass, fn -> "bg-white" end) |> assign_new(:value, fn -> input_value(assigns.form, assigns.key) end) ~H"""
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
{text_input(@form, @key, required: @required, readonly: @readonly, autofocus: @autofocus, placeholder: @placeholder, autocomplete: @key, value: @value, class: "#{@fieldClass} read-only:opacity-50 outline-hidden shadow-base focus:ring-primary-500 focus:border-primary-500 focus:ring-2 block w-full text-lg border-gray-300 rounded-md py-2 px-3" )}
<%= if Keyword.has_key?(@form.errors, @key) do %>

{error_tag(@form, @key)}

<% end %>
""" end def select(assigns) do assigns = assigns |> assign_new(:required, fn -> false end) |> assign_new(:autofocus, fn -> false end) |> assign_new(:placeholder, fn -> false end) |> assign_new(:labelClass, fn -> "text-gray-700" end) |> assign_new(:fieldClass, fn -> "bg-white" end) ~H"""
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
{select(@form, @key, @array, required: @required, autofocus: @autofocus, placeholder: @placeholder, autocomplete: @key, class: "#{@fieldClass} outline-hidden shadow-base focus:ring-primary-500 focus:border-primary-500 block w-full text-lg border-gray-300 rounded-md py-2 px-3" )}
<%= if Keyword.has_key?(@form.errors, @key) do %>

{error_tag(@form, @key)}

<% end %>
""" end attr :form, Phoenix.HTML.Form, required: true attr :key, :atom, required: true attr :label, :string, default: nil attr :labelClass, :string, default: nil def toggle(assigns) do ~H"""
{@label && PhoenixHTMLHelpers.Form.label(@form, @key, @label, class: ["block text-sm font-medium", @labelClass || "text-gray-700"] )} {PhoenixHTMLHelpers.Form.checkbox(@form, @key, class: "toggle")}
""" end def check(assigns) do assigns = assigns |> assign_new(:disabled, fn -> false end) |> assign_new(:shortcut, fn -> nil end) ~H""" """ end def check_button(assigns) do assigns = assigns |> assign_new(:disabled, fn -> false end) |> assign_new(:shortcut, fn -> nil end) |> assign_new(:checked, fn -> false end) ~H""" """ end def checked(is_checked, key, js \\ %JS{}) def checked(false, key, js) do js |> JS.push("checked", value: %{key: key, value: true}) end def checked(true, key, js) do js |> JS.remove_class("translate-x-6", to: "#check-#{key} > span" ) |> JS.add_class("translate-x-0", to: "#check-#{key} > span" ) |> JS.remove_class("opacity-0 ease-out duration-100", to: "#check-#{key} > span > span" ) |> JS.add_class("opacity-100 ease-in duration-200", to: "#check-#{key} > span > span" ) |> JS.remove_class("opacity-100 ease-in duration-200", to: "#check-#{key} > span > span:nth-child(2)" ) |> JS.add_class("opacity-0 ease-out duration-100", to: "#check-#{key} > span > span:nth-child(2)" ) |> JS.push("checked", value: %{key: key, value: false}) end def code(assigns) do assigns = assigns |> assign_new(:required, fn -> false end) |> assign_new(:autofocus, fn -> false end) |> assign_new(:placeholder, fn -> false end) |> assign_new(:readonly, fn -> false end) |> assign_new(:labelClass, fn -> "text-gray-700" end) |> assign_new(:fieldClass, fn -> "bg-white" end) ~H"""
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
code {text_input(@form, @key, required: @required, readonly: @readonly, placeholder: @placeholder, autofocus: @autofocus, autocomplete: @key, minlength: 5, maxlength: 10, class: "#{@fieldClass} read-only:opacity-50 outline-hidden shadow-base focus:ring-primary-500 focus:border-primary-500 block w-full text-lg border-gray-300 rounded-md py-2 pr-3 pl-9 uppercase" )}
<%= if Keyword.has_key?(@form.errors, @key) do %>

{error_tag(@form, @key)}

<% end %>
""" end def date(assigns) do assigns = assigns |> assign_new(:required, fn -> false end) |> assign_new(:autofocus, fn -> false end) |> assign_new(:placeholder, fn -> false end) |> assign_new(:readonly, fn -> false end) |> assign_new(:labelClass, fn -> "text-gray-700" end) |> assign_new(:fieldClass, fn -> "bg-white" end) ~H"""
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
{hidden_input(@form, @key)} {text_input(@form, :local_date, autofocus: @autofocus, placeholder: @placeholder, autocomplete: false, class: "#{@fieldClass} outline-hidden shadow-base focus:ring-primary-500 focus:border-primary-500 block w-full text-lg border-gray-300 rounded-md py-2 px-3 read-only:opacity-50" )}
<%= if Keyword.has_key?(@form.errors, @key) do %>

{error_tag(@form, @key)}

<% end %>
""" end def email(assigns) do assigns = assigns |> assign_new(:required, fn -> false end) |> assign_new(:autofocus, fn -> false end) |> assign_new(:readonly, fn -> false end) |> assign_new(:placeholder, fn -> false end) |> assign_new(:label, fn %{required: false, name: name} -> ~s/#{name} #{gettext("(optional)")}/ %{name: name} -> name end) |> assign_new(:labelClass, fn -> "text-gray-700" end) |> assign_new(:fieldClass, fn -> "bg-white" end) |> assign_new(:value, fn -> input_value(assigns.form, assigns.key) end) ~H"""
{label(@form, @key, @label, class: "block text-sm font-medium #{@labelClass}")}
{email_input(@form, @key, required: @required, autofocus: @autofocus, placeholder: @placeholder, readonly: @readonly, autocomplete: @key, value: @value, class: "#{@fieldClass} read-only:opacity-50 shadow-base block w-full text-lg focus:ring-primary-500 focus:ring-2 outline-hidden rounded-md py-2 px-3", "x-model": "input", "x-ref": "input" )}
<%= if Keyword.has_key?(@form.errors, @key) do %>

{error_tag(@form, @key)}

<% end %>
""" end def password(assigns) do assigns = assigns |> assign_new(:required, fn -> false end) |> assign_new(:autofocus, fn -> false end) |> assign_new(:placeholder, fn -> false end) |> assign_new(:labelClass, fn -> "text-gray-700" end) |> assign_new(:fieldClass, fn -> "bg-white" end) |> assign_new(:value, fn -> Map.get(assigns.form.data, assigns.key, "") end) ~H"""
{label(@form, @key, @name, class: "block text-sm font-medium #{@labelClass}")}
{password_input(@form, @key, required: @required, autofocus: @autofocus, placeholder: @placeholder, class: "#{@fieldClass} shadow-base block w-full text-lg focus:ring-primary-500 focus:ring-2 outline-hidden rounded-md py-2 px-3", "x-model": "input", "x-ref": "input" )}
<%= if Keyword.has_key?(@form.errors, @key) do %>

{error_tag(@form, @key)}

<% end %>
""" end end