defmodule AshAdmin.Components.TopNav.Dropdown do @moduledoc false use Surface.LiveComponent alias Surface.Components.LiveRedirect prop(name, :string, required: true) prop(groups, :list, required: true) prop(group_labels, :keyword, required: false) prop(active, :boolean, required: true) prop(class, :css_class) data(open, :boolean, default: false) def render(assigns) do ~F"""
{#if @open} {/if}
""" end defp group_label(assigns) do assigns = Map.put(assigns, :label_text, group_label_text(assigns)) ~F""" {#if @label_text} {@label_text} {/if} """ 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