From 3966cd004bdf77cf28f304cb954779533229c882 Mon Sep 17 00:00:00 2001 From: T Floyd Wright Date: Fri, 26 Jan 2024 17:48:29 -0900 Subject: [PATCH] Add support for extra admin pages --- dev.exs | 15 +++++++++++++ lib/live_admin/components/nav.ex | 36 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) 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 %> + + <% end %>