defmodule ExshomeWeb.LayoutView do
use ExshomeWeb, :view
alias Phoenix.LiveView.Socket
# Phoenix LiveDashboard is available only in development by default,
# so we instruct Elixir to not warn if the dashboard route is missing.
@compile {:no_warn_undefined, {Routes, :live_dashboard_path, 2}}
def navigation_data(%Socket{view: view} = socket) do
if function_exported?(view, :app_module, 0) do
app_navigation(socket)
else
[]
end
end
defp app_navigation(%Socket{view: view} = socket) do
app_pages =
for page <- view.app_module().pages() do
%{
icon: page.icon(),
name: page.action(),
selected: view == page,
path: view.app_module().path(socket, page.action())
}
end
[
%{
icon: "🏠",
name: "home",
selected: false,
path: Routes.home_path(socket, :index)
}
| app_pages
]
end
end