defmodule Oban.Web.SidebarComponents do use Oban.Web, :html def sidebar(assigns) do ~H""" """ end attr :name, :string, required: true attr :headers, :list, required: true slot :inner_block def section(assigns) do ~H"""

{String.capitalize(@name)}

{header}
{render_slot(@inner_block)}
""" end attr :name, :string, required: true attr :values, :list, required: true attr :patch, :any, required: true attr :active, :boolean, default: false attr :exclusive, :boolean, default: false slot :statuses def filter_row(assigns) do class = cond do assigns.exclusive and assigns.active -> "rounded-md bg-white hover:bg-white dark:bg-gray-800 dark:hover:bg-gray-800" assigns.exclusive -> "rounded-md hover:bg-gray-100 dark:hover:bg-gray-800" assigns.active -> "border-violet-500 hover:border-violet-500 focus:border-violet-500" true -> "hover:border-violet-400 focus:border-violet-200" end assigns = assign(assigns, :class, class) ~H""" <.link class={["flex justify-between pr-2 py-2 my-0.5 border-l-4 border-transparent", @class]} id={"filter-#{@name}"} patch={@patch} replace={true} > {String.downcase(@name)}
{render_slot(@statuses)}
{integer_to_estimate(value)}
""" end defp toggle(prefix) do %JS{} |> JS.toggle(in: "fade-in-scale", out: "fade-out-scale", to: "##{prefix}-rows") |> JS.add_class("rotate-90", to: "##{prefix}-toggle svg:not(.rotate-90)") |> JS.remove_class("rotate-90", to: "##{prefix}-toggle svg.rotate-90") end end