This commit is contained in:
parent
ff625c91c5
commit
935ef52c10
4 changed files with 117 additions and 47 deletions
|
|
@ -692,10 +692,11 @@ defmodule MvWeb.CoreComponents do
|
||||||
"""
|
"""
|
||||||
attr :name, :string, required: true
|
attr :name, :string, required: true
|
||||||
attr :class, :string, default: "size-4"
|
attr :class, :string, default: "size-4"
|
||||||
|
attr :rest, :global, include: ~w[aria-hidden]
|
||||||
|
|
||||||
def icon(%{name: "hero-" <> _} = assigns) do
|
def icon(%{name: "hero-" <> _} = assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<span class={[@name, @class]} />
|
<span class={[@name, @class]} {@rest} />
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,13 +48,22 @@ defmodule MvWeb.Layouts do
|
||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<%= if @current_user do %>
|
<%= if @current_user do %>
|
||||||
<div id="app-layout" class="drawer lg:drawer-open" data-sidebar-expanded="true" phx-hook="SidebarState">
|
<div
|
||||||
|
id="app-layout"
|
||||||
|
class="drawer lg:drawer-open"
|
||||||
|
data-sidebar-expanded="true"
|
||||||
|
phx-hook="SidebarState"
|
||||||
|
>
|
||||||
<input id="mobile-drawer" type="checkbox" class="drawer-toggle" />
|
<input id="mobile-drawer" type="checkbox" class="drawer-toggle" />
|
||||||
|
|
||||||
<div class="drawer-content flex flex-col relative z-0">
|
<div class="drawer-content flex flex-col relative z-0">
|
||||||
<!-- Mobile Header (only visible on mobile) -->
|
<!-- Mobile Header (only visible on mobile) -->
|
||||||
<header class="lg:hidden sticky top-0 z-10 navbar bg-base-100 shadow-sm">
|
<header class="lg:hidden sticky top-0 z-10 navbar bg-base-100 shadow-sm">
|
||||||
<label for="mobile-drawer" class="btn btn-square btn-ghost" aria-label={gettext("Open navigation menu")}>
|
<label
|
||||||
|
for="mobile-drawer"
|
||||||
|
class="btn btn-square btn-ghost"
|
||||||
|
aria-label={gettext("Open navigation menu")}
|
||||||
|
>
|
||||||
<.icon name="hero-bars-3" class="size-6" aria-hidden="true" />
|
<.icon name="hero-bars-3" class="size-6" aria-hidden="true" />
|
||||||
</label>
|
</label>
|
||||||
<span class="font-bold">{@club_name}</span>
|
<span class="font-bold">{@club_name}</span>
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,17 @@ defmodule MvWeb.Layouts.Sidebar do
|
||||||
|
|
||||||
def sidebar(assigns) do
|
def sidebar(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<label for="mobile-drawer" aria-label={gettext("Close sidebar")} class="drawer-overlay lg:hidden focus:outline-none focus:ring-2 focus:ring-primary" tabindex="-1">
|
<label
|
||||||
|
for="mobile-drawer"
|
||||||
|
aria-label={gettext("Close sidebar")}
|
||||||
|
class="drawer-overlay lg:hidden focus:outline-none focus:ring-2 focus:ring-primary"
|
||||||
|
tabindex="-1"
|
||||||
|
>
|
||||||
</label>
|
</label>
|
||||||
<aside id="main-sidebar" class="sidebar" aria-label={gettext("Main navigation")}>
|
<aside id="main-sidebar" class="sidebar" aria-label={gettext("Main navigation")}>
|
||||||
<%= sidebar_header(assigns) %>
|
{sidebar_header(assigns)}
|
||||||
<%= if @current_user do %>
|
<%= if @current_user do %>
|
||||||
<%= sidebar_menu(assigns) %>
|
{sidebar_menu(assigns)}
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= if @current_user do %>
|
<%= if @current_user do %>
|
||||||
<.sidebar_footer current_user={@current_user} />
|
<.sidebar_footer current_user={@current_user} />
|
||||||
|
|
@ -77,7 +82,7 @@ defmodule MvWeb.Layouts.Sidebar do
|
||||||
label={gettext("Users")}
|
label={gettext("Users")}
|
||||||
/>
|
/>
|
||||||
<.menu_item
|
<.menu_item
|
||||||
href={~p"/custom_fields"}
|
href={~p"/custom_field_values"}
|
||||||
icon="hero-rectangle-group"
|
icon="hero-rectangle-group"
|
||||||
label={gettext("Custom Fields")}
|
label={gettext("Custom Fields")}
|
||||||
/>
|
/>
|
||||||
|
|
@ -129,7 +134,11 @@ defmodule MvWeb.Layouts.Sidebar do
|
||||||
<li role="none" class="menu-group">
|
<li role="none" class="menu-group">
|
||||||
<!-- Expanded Mode: Details/Summary -->
|
<!-- Expanded Mode: Details/Summary -->
|
||||||
<details class="expanded-menu-group">
|
<details class="expanded-menu-group">
|
||||||
<summary class="flex items-center gap-3 cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2" role="menuitem" aria-haspopup="true">
|
<summary
|
||||||
|
class="flex items-center gap-3 cursor-pointer focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2"
|
||||||
|
role="menuitem"
|
||||||
|
aria-haspopup="true"
|
||||||
|
>
|
||||||
<.icon name={@icon} class="size-5 shrink-0" aria-hidden="true" />
|
<.icon name={@icon} class="size-5 shrink-0" aria-hidden="true" />
|
||||||
<span class="menu-label">{@label}</span>
|
<span class="menu-label">{@label}</span>
|
||||||
</summary>
|
</summary>
|
||||||
|
|
@ -169,7 +178,11 @@ defmodule MvWeb.Layouts.Sidebar do
|
||||||
defp menu_subitem(assigns) do
|
defp menu_subitem(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<li role="none">
|
<li role="none">
|
||||||
<.link navigate={@href} role="menuitem" class="focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2">
|
<.link
|
||||||
|
navigate={@href}
|
||||||
|
role="menuitem"
|
||||||
|
class="focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2"
|
||||||
|
>
|
||||||
{@label}
|
{@label}
|
||||||
</.link>
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -208,7 +221,10 @@ defmodule MvWeb.Layouts.Sidebar do
|
||||||
|
|
||||||
defp theme_toggle(assigns) do
|
defp theme_toggle(assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<label class="flex items-center gap-2 cursor-pointer justify-center focus-within:outline-none focus-within:ring-2 focus-within:ring-primary focus-within:ring-offset-2" aria-label={gettext("Toggle dark mode")}>
|
<label
|
||||||
|
class="flex items-center gap-2 cursor-pointer justify-center focus-within:outline-none focus-within:ring-2 focus-within:ring-primary focus-within:ring-offset-2"
|
||||||
|
aria-label={gettext("Toggle dark mode")}
|
||||||
|
>
|
||||||
<.icon name="hero-sun" class="size-5" aria-hidden="true" />
|
<.icon name="hero-sun" class="size-5" aria-hidden="true" />
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
|
|
@ -227,19 +243,22 @@ defmodule MvWeb.Layouts.Sidebar do
|
||||||
# Defensive check: ensure current_user and email exist
|
# Defensive check: ensure current_user and email exist
|
||||||
# current_user might be a struct, so we need to handle both maps and structs
|
# current_user might be a struct, so we need to handle both maps and structs
|
||||||
# email might be an Ash.CiString, so we use to_string/1 (not String.to_string/1)
|
# email might be an Ash.CiString, so we use to_string/1 (not String.to_string/1)
|
||||||
email = case assigns.current_user do
|
email =
|
||||||
|
case assigns.current_user do
|
||||||
nil -> ""
|
nil -> ""
|
||||||
%{email: email_val} when not is_nil(email_val) -> to_string(email_val)
|
%{email: email_val} when not is_nil(email_val) -> to_string(email_val)
|
||||||
_ -> ""
|
_ -> ""
|
||||||
end
|
end
|
||||||
|
|
||||||
first_letter = if email != "" do
|
first_letter =
|
||||||
|
if email != "" do
|
||||||
String.first(email) |> String.upcase()
|
String.first(email) |> String.upcase()
|
||||||
else
|
else
|
||||||
"?"
|
"?"
|
||||||
end
|
end
|
||||||
|
|
||||||
user_id = case assigns.current_user do
|
user_id =
|
||||||
|
case assigns.current_user do
|
||||||
nil -> nil
|
nil -> nil
|
||||||
%{id: id_val} when not is_nil(id_val) -> id_val
|
%{id: id_val} when not is_nil(id_val) -> id_val
|
||||||
_ -> nil
|
_ -> nil
|
||||||
|
|
@ -276,7 +295,11 @@ defmodule MvWeb.Layouts.Sidebar do
|
||||||
>
|
>
|
||||||
<li role="none">
|
<li role="none">
|
||||||
<%= if @user_id do %>
|
<%= if @user_id do %>
|
||||||
<.link navigate={~p"/users/#{@user_id}"} role="menuitem" class="focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2">
|
<.link
|
||||||
|
navigate={~p"/users/#{@user_id}"}
|
||||||
|
role="menuitem"
|
||||||
|
class="focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2"
|
||||||
|
>
|
||||||
{gettext("Profile")}
|
{gettext("Profile")}
|
||||||
</.link>
|
</.link>
|
||||||
<% else %>
|
<% else %>
|
||||||
|
|
@ -284,7 +307,11 @@ defmodule MvWeb.Layouts.Sidebar do
|
||||||
<% end %>
|
<% end %>
|
||||||
</li>
|
</li>
|
||||||
<li role="none">
|
<li role="none">
|
||||||
<.link href={~p"/sign-out"} role="menuitem" class="focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2">
|
<.link
|
||||||
|
href={~p"/sign-out"}
|
||||||
|
role="menuitem"
|
||||||
|
class="focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2"
|
||||||
|
>
|
||||||
{gettext("Logout")}
|
{gettext("Logout")}
|
||||||
</.link>
|
</.link>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
||||||
|
|
@ -287,7 +287,7 @@ msgstr ""
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/components/layouts/navbar.ex
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Logout"
|
msgid "Logout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -304,6 +304,7 @@ msgid "Member"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/components/layouts/navbar.ex
|
#: lib/mv_web/components/layouts/navbar.ex
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#: lib/mv_web/live/contribution_type_live/index.ex
|
#: lib/mv_web/live/contribution_type_live/index.ex
|
||||||
#: lib/mv_web/live/member_live/index.ex
|
#: lib/mv_web/live/member_live/index.ex
|
||||||
#: lib/mv_web/live/member_live/index.html.heex
|
#: lib/mv_web/live/member_live/index.html.heex
|
||||||
|
|
@ -342,11 +343,6 @@ msgstr ""
|
||||||
msgid "Password Authentication"
|
msgid "Password Authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/components/layouts/navbar.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Profil"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lib/mv_web/live/custom_field_live/form_component.ex
|
#: lib/mv_web/live/custom_field_live/form_component.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Required"
|
msgid "Required"
|
||||||
|
|
@ -363,6 +359,7 @@ msgid "Select member"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/components/layouts/navbar.ex
|
#: lib/mv_web/components/layouts/navbar.ex
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#: lib/mv_web/live/global_settings_live.ex
|
#: lib/mv_web/live/global_settings_live.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
|
|
@ -530,11 +527,13 @@ msgid "Back to users list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/components/layouts/navbar.ex
|
#: lib/mv_web/components/layouts/navbar.ex
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Select language"
|
msgid "Select language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/components/layouts/navbar.ex
|
#: lib/mv_web/components/layouts/navbar.ex
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Toggle dark mode"
|
msgid "Toggle dark mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -546,6 +545,7 @@ msgid "Search..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/components/layouts/navbar.ex
|
#: lib/mv_web/components/layouts/navbar.ex
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Users"
|
msgid "Users"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -615,6 +615,7 @@ msgstr ""
|
||||||
msgid "Please select a custom field first"
|
msgid "Please select a custom field first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#: lib/mv_web/live/custom_field_live/index_component.ex
|
#: lib/mv_web/live/custom_field_live/index_component.ex
|
||||||
#: lib/mv_web/live/member_live/form.ex
|
#: lib/mv_web/live/member_live/form.ex
|
||||||
#: lib/mv_web/live/member_live/show.ex
|
#: lib/mv_web/live/member_live/show.ex
|
||||||
|
|
@ -908,6 +909,7 @@ msgstr ""
|
||||||
msgid "Contribution Start"
|
msgid "Contribution Start"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#: lib/mv_web/live/contribution_type_live/index.ex
|
#: lib/mv_web/live/contribution_type_live/index.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Contribution Types"
|
msgid "Contribution Types"
|
||||||
|
|
@ -924,6 +926,7 @@ msgid "Contribution types define different membership fee structures. Each type
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/components/layouts/navbar.ex
|
#: lib/mv_web/components/layouts/navbar.ex
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Contributions"
|
msgid "Contributions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
@ -1826,3 +1829,33 @@ msgstr ""
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Not set"
|
msgid "Not set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Close sidebar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Main navigation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/components/layouts.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Open navigation menu"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Profile"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Toggle sidebar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/components/layouts/sidebar.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "User menu"
|
||||||
|
msgstr ""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue