Current section
Files
Jump to
Current section
Files
lib/ex_admin/sidebar.ex
Code.ensure_compiled(ExAdmin.Utils)
defmodule ExAdmin.Sidebar do
@moduledoc false
require Logger
require Ecto.Query
use Xain
def sidebars_visible?(_conn, %{sidebars: []}), do: false
def sidebars_visible?(conn, %{sidebars: sidebars}) do
Enum.reduce sidebars, false, fn({_, opts, _}, acc) ->
acc || visible?(conn, opts)
end
end
def sidebar_view(_conn, %{sidebars: []}, _), do: ""
def sidebar_view(conn, %{sidebars: sidebars}, resource) do
for sidebar <- sidebars do
_sidebar_view(conn, sidebar, resource)
end
end
defp _sidebar_view(conn, {name, opts, {mod, fun}}, resource) do
if visible? conn, opts do
ExAdmin.Theme.Helpers.theme_module(conn, Layout).sidebar_view(
conn, {name, opts, {mod, fun}}, resource)
else
""
end
end
def visible?(conn, opts) do
Phoenix.Controller.action_name(conn)
|> _visible?(Enum.into opts, %{})
end
def _visible?(action, %{only: only}) when is_atom(only) do
if action == only, do: true, else: false
end
def _visible?(action, %{only: only}) when is_list(only) do
if action in only, do: true, else: false
end
def _visible?(action, %{except: except}) when is_atom(except) do
if action == except, do: false, else: true
end
def _visible?(action, %{except: except}) when is_list(except) do
if action in except, do: false, else: true
end
def _visible?(_, _), do: true
def get_actions(item, opts) do
case opts[item] || [] do
atom when is_atom(atom) -> [atom]
other -> other
end
end
end