defmodule Observer.Web.Layouts do
@moduledoc """
This module provides layouts
## References:
* https://github.com/oban-bg/oban_web/blob/main/lib/oban/web/components/layouts.ex
"""
use Observer.Web, :html
alias Observer.Web.Components.Icons
@static_path Application.app_dir(:observer_web, ["priv", "static"])
@external_resource Path.join(@static_path, "app.css")
@external_resource Path.join(@static_path, "app.js")
@css @static_path
|> Path.join("app.css")
|> File.read!()
@js @static_path
|> Path.join("app.js")
|> File.read!()
def render("app.css"), do: @css
def render("app.js"), do: @js
embed_templates "layouts/*"
def logo(assigns) do
~H"""
Observer
WEB
"""
end
def nav(assigns) do
~H"""
"""
end
def footer(assigns) do
assigns =
assign(assigns,
oss_version: Application.spec(:observer_web, :vsn)
)
~H"""
"""
end
attr :name, :string
attr :version, :string
defp version(assigns) do
~H"""
{@name} {if @version, do: "v#{@version}", else: "–"}
"""
end
defp link_class(curr, page) do
base =
"flex items-center px-4 py-2.5 text-sm font-bold transition-all duration-200 text-gray-900 rounded-lg group"
if curr == page do
base <> " bg-gray-100"
else
base <> " hover:text-white hover:bg-indigo-500"
end
end
defp list_pages_by_params(%{"iframe" => "true"}), do: [:tracing, :applications, :metrics]
defp list_pages_by_params(_params), do: [:root, :tracing, :applications, :metrics]
end