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