diff --git a/dev.exs b/dev.exs
index 1d656f1..d74beb4 100644
--- a/dev.exs
+++ b/dev.exs
@@ -480,6 +480,20 @@ defmodule DemoWeb.PostsAdmin.Home do
end
end
+defmodule DemoWeb.Extra do
+ use Phoenix.LiveView
+
+ @impl true
+ def render(assigns) do
+ ~H"""
+
+
+ This is an extra page
+
+
+ """
+ end
+end
defmodule DemoWeb.Router do
use Phoenix.Router
@@ -499,6 +513,7 @@ defmodule DemoWeb.Router do
live_admin "/admin", title: "DevAdmin" do
admin_resource "/users/profiles", Demo.Accounts.User.Profile
admin_resource "/users", DemoWeb.UserAdmin
+ live "/extra", DemoWeb.Extra, :index, as: :extra
end
live_admin "/posts-admin", components: [home: DemoWeb.PostsAdmin.Home] do
diff --git a/lib/live_admin/components/nav.ex b/lib/live_admin/components/nav.ex
index 915ea09..33460c5 100644
--- a/lib/live_admin/components/nav.ex
+++ b/lib/live_admin/components/nav.ex
@@ -5,6 +5,33 @@ defmodule LiveAdmin.Components.Nav do
import LiveAdmin,
only: [resource_title: 2, route_with_params: 2, trans: 1]
+ @impl true
+ def update(assigns, socket) do
+ base_path = assigns.base_path
+
+ extra_pages =
+ socket.router
+ |> Phoenix.Router.routes()
+ |> Enum.filter(fn r -> r.path == "/admin/extra" end)
+ |> Enum.filter(fn r ->
+ match?(
+ %{
+ metadata: %{
+ phoenix_live_view: {_, _, _, %{extra: %{session: {_, _, [^base_path, _]}}}}
+ }
+ },
+ r
+ )
+ end)
+
+ socket =
+ socket
+ |> assign(assigns)
+ |> assign(extra_pages: extra_pages)
+
+ {:ok, socket}
+ end
+
@impl true
def render(assigns) do
nested_resources =
@@ -39,6 +66,15 @@ defmodule LiveAdmin.Components.Nav do
config={@config}
/>
+ <%= if Enum.any?(@extra_pages) do %>
+
+ <%= for route <- @extra_pages do %>
+ <.link navigate={route.path}>
+ <%= humanize(route.helper) %>
+
+ <% end %>
+
+ <% end %>
<.link navigate={route_with_params(assigns, resource_path: "session")}>
<%= trans("Session") %>