<.group_label item={hd(group)} group_labels={@group_labels} />
<%= for link <- group do %>
<.link
navigate={link.to}
class={
classes([
"block px-4 py-2 text-sm ",
"bg-gray-600 text-white hover:bg-gray-700": Map.get(link, :active),
"text-gray-700 hover:bg-gray-100 hover:text-gray-900": !Map.get(link, :active)
])
}
role="menuotem"
>
<%= link.text %>
<% end %>
<% end %>
<% 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