defmodule Oban.Web.FormComponents do @moduledoc false use Oban.Web, :html attr :label, :string, required: true attr :name, :string, required: true attr :value, :any, default: nil attr :type, :string, default: "text" attr :colspan, :string, default: nil attr :placeholder, :string, default: nil attr :required, :boolean, default: false attr :disabled, :boolean, default: false attr :hint, :string, default: nil attr :rows, :integer, default: 2 def form_field(assigns) do ~H"""
<%= if @type == "textarea" do %> <% else %> <% end %>
""" end attr :label, :string, required: true attr :name, :string, required: true attr :value, :any, default: nil attr :options, :list, required: true attr :disabled, :boolean, default: false def select_field(assigns) do ~H"""
""" end attr :label, :string, required: true attr :name, :string, required: true attr :checked, :boolean, default: false attr :disabled, :boolean, default: false attr :hint, :string, default: nil attr :colspan, :string, default: nil def checkbox_field(assigns) do ~H"""
""" end # Form Parsing Helpers @doc """ Parses and trims a string, returning nil for empty values. """ def parse_string(nil), do: nil def parse_string(""), do: nil def parse_string(str), do: String.trim(str) @doc """ Parses a string to an integer, returning nil for empty or invalid values. """ def parse_int(nil), do: nil def parse_int(""), do: nil def parse_int(str) when is_binary(str) do case Integer.parse(str) do {num, ""} -> num _ -> nil end end @doc """ Parses a comma-separated string into a list of trimmed tags. Returns nil for empty input. """ def parse_tags(nil), do: nil def parse_tags(""), do: nil def parse_tags(str) when is_binary(str) do str |> String.split(",") |> Enum.map(&String.trim/1) |> Enum.reject(&(&1 == "")) |> case do [] -> nil tags -> tags end end @doc """ Parses a JSON string into a map, returning nil for empty or invalid values. """ def parse_json(nil), do: nil def parse_json(""), do: nil def parse_json(str) when is_binary(str) do case Oban.JSON.decode!(str) do map when is_map(map) -> map _ -> nil end rescue _ -> nil end @doc """ Builds queue options from a list of queue structs. """ def queue_options(queues) do queues |> Enum.map(fn %{name: name} -> {name, name} end) |> Enum.sort_by(&elem(&1, 0)) end end