defmodule AshAdmin.Components.TopNav.Dropdown do @moduledoc false use Phoenix.LiveComponent import Tails attr :name, :string, required: true attr :groups, :list, required: true attr :group_labels, :any, required: false attr :active, :boolean, required: true attr :class, :string def render(assigns) do ~H"""
<%= if @open do %> <% end %>
""" end def mount(socket) do {:ok, socket |> assign(:open, false) |> assign_new(:class, fn -> "" end) |> assign_new(:group_labels, fn -> [] end)} end defp group_label(assigns) do assigns = Map.put(assigns, :label_text, group_label_text(assigns)) ~H""" <%= if @label_text do %> <%= @label_text %> <% end %> """ end # No labels specified for the whole dropdown defp group_label_text(assigns) when not is_map_key(assigns, :group_labels), do: nil defp group_label_text(%{group_labels: []}), do: nil # No label specified for this dropdown group defp group_label_text(%{item: item}) when not is_map_key(item, :group), do: nil # Maybe a label to display! defp group_label_text(assigns), do: Keyword.get(assigns.group_labels, assigns.item.group) def handle_event("close", _, socket) do {:noreply, assign(socket, :open, false)} end def handle_event("toggle", _, socket) do {:noreply, assign(socket, :open, !socket.assigns.open)} end defp single_active_group?([[%{active: true}]]), do: true defp single_active_group?(_), do: false end