lib/petal_components/breadcrumbs.ex

defmodule PetalComponents.Breadcrumbs do
  use Phoenix.Component
  alias PetalComponents.Heroicons


  # Example:
  # <.breadcrumbs separator="chevron" links={[
  #   %{ label: "Link 1", to: "/" },
  #   %{ label: "Link 1", to: "/", link_type: "patch|a|redirect" }
  # ]}/>
  # prop links, :list
  # prop separator, :string, options: ["slash", "chevron"]
  def breadcrumbs(assigns) do
    assigns = assign_new(assigns, :separator, fn -> "slash" end)

    ~H"""
    <%= for {link, counter} <- Enum.with_index(@links) do %>
      <.breadcrumb {link} separator={if counter > 0, do: @separator} />
    <% end %>
    """
  end

  def breadcrumb(%{link_type: "live_patch"} = assigns) do
    ~H"""
    <%= case @separator do %>
      <% "slash" -> %>
        <div class="px-2 text-gray-500">/</div>
      <% "chevron" -> %>
        <div class="flex items-center px-2 text-gray-500">
          <Heroicons.Solid.chevron_right class="w-5 h-5" />
        </div>
      <% _ -> %>
    <% end %>
    <%= live_patch [
      to: @to,
      class: get_breadcrumb_classes()
    ] do %>
      <%= @label %>
    <% end %>
    """
  end

  def breadcrumb(%{link_type: "live_redirect"} = assigns) do
    ~H"""
    <%= case @separator do %>
      <% "slash" -> %>
        <div class="px-2 text-gray-500">/</div>
      <% "chevron" -> %>
        <div class="flex items-center px-2 text-gray-500">
          <Heroicons.Solid.chevron_right class="w-5 h-5" />
        </div>
      <% _ -> %>
    <% end %>
    <%= live_redirect [
      to: @to,
      class: get_breadcrumb_classes()
    ] do %>
      <%= @label %>
    <% end %>
    """
  end

  def breadcrumb(assigns) do
    ~H"""
    <%= case @separator do %>
      <% "slash" -> %>
        <div class="px-2 text-gray-500">/</div>
      <% "chevron" -> %>
        <div class="flex items-center px-2 text-gray-500">
          <Heroicons.Solid.chevron_right class="w-5 h-5" />
        </div>
      <% _ -> %>
    <% end %>
    <a href={@to} class={get_breadcrumb_classes()}>
      <%= @label %>
    </a>
    """
  end

  def get_breadcrumb_classes(), do: "hover:underline flex text-gray-500"
end