lib/phoenix_webcomponent/appbar.ex

defmodule Phoenix.WebComponent.Appbar do
  @moduledoc """
  render appbar

  """
  use Phoenix.WebComponent, :component

  import Phoenix.WebComponent.Helpers.Link

  @doc """
  Generates a html customElement appbar.

  ## Attributes

  - `title` binary
  example: "App Title"
  - `menus` List
  example: [ %{ label: "Menu Name", to: Routes.index_path(@conn, :index) } ]

  ## Slots

  - `logo`
  - `user_profile`

  """
  def wc_appbar(assigns) do
    assigns =
      assigns
      |> assign_new(:id, fn -> false end)
      |> assign_new(:class, fn -> "" end)
      |> assign_new(:logo, fn -> [] end)
      |> assign_new(:title, fn -> "GSMLG Title" end)
      |> assign_new(:menus, fn -> [] end)
      |> assign_new(:user_profile, fn -> [] end)

    ~H"""
    <app-bar id={@id} class={@class} app-name={@title}>
        <nav slot="logo" class="flex justify-center">
        <%= render_slot(@logo) %>
        </nav>
        <%= for menu <- @menus do %>
        <%= wc_link menu.label, to: menu.to, slot: "nav" %>
        <% end %>
        <span slot="user">
        <%= render_slot(@user_profile) %>
        </span>
    </app-bar>
    """
  end
end