defmodule Pyraui.Components.Textarea do @moduledoc """ Textarea component with validation states. ## Examples <.textarea label="Message" field={@form[:message]} /> <.textarea label="Description" rows="5" maxlength="500" /> """ use Phoenix.Component attr :field, Phoenix.HTML.FormField, doc: "a form field struct retrieved from the form" attr :label, :string, default: nil attr :helper, :string, default: nil attr :error, :string, default: nil attr :placeholder, :string, default: nil attr :value, :string, default: nil attr :rows, :integer, default: 4 attr :disabled, :boolean, default: false attr :required, :boolean, default: false attr :class, :string, default: "" attr :rest, :global, include: ~w(name id maxlength minlength pattern readonly) def textarea(assigns) do field = Map.get(assigns, :field) has_field = not is_nil(field) assigns = assigns |> assign_new(:id, fn -> if has_field do field.id else "textarea-#{System.unique_integer([:positive])}" end end) |> assign_new(:name, fn -> if has_field do field.name else Map.get(assigns, :name) end end) |> assign_new(:value, fn -> if has_field do field.value else assigns.value || "" end end) |> assign_new(:error, fn -> if has_field do translate_error(field) else assigns.error end end) ~H"""
{@error}
<% end %> <%= if @helper && !@error do %>{@helper}
<% end %>