style: consistent save buttons and active tab
This commit is contained in:
parent
82962a2f2a
commit
ba08434604
15 changed files with 486 additions and 438 deletions
|
|
@ -60,16 +60,6 @@ defmodule MvWeb.UserLive.Form do
|
|||
</.button>
|
||||
</:leading>
|
||||
{@page_title}
|
||||
<:actions>
|
||||
<.button
|
||||
form="user-form"
|
||||
phx-disable-with={gettext("Saving...")}
|
||||
variant="primary"
|
||||
type="submit"
|
||||
>
|
||||
{gettext("Save User")}
|
||||
</.button>
|
||||
</:actions>
|
||||
</.header>
|
||||
|
||||
<div
|
||||
|
|
@ -309,6 +299,20 @@ defmodule MvWeb.UserLive.Form do
|
|||
</div>
|
||||
<% end %>
|
||||
|
||||
<%!-- Buttons: below all form fields, above Danger zone --%>
|
||||
<div class="mt-6 flex items-center justify-end gap-4">
|
||||
<.button navigate={return_path(@return_to, @user)} variant="neutral" type="button">
|
||||
{gettext("Cancel")}
|
||||
</.button>
|
||||
<.button
|
||||
type="submit"
|
||||
phx-disable-with={gettext("Saving...")}
|
||||
variant="primary"
|
||||
>
|
||||
{gettext("Save user")}
|
||||
</.button>
|
||||
</div>
|
||||
|
||||
<%!-- Danger zone: canonical pattern (same as member form) --%>
|
||||
<%= if @user && can?(@current_user, :destroy, @user) && !SystemActor.system_user?(@user) do %>
|
||||
<section class="mt-8 mb-6" aria-labelledby="danger-zone-heading">
|
||||
|
|
@ -378,15 +382,6 @@ defmodule MvWeb.UserLive.Form do
|
|||
</div>
|
||||
</dialog>
|
||||
<% end %>
|
||||
|
||||
<div class="mt-4">
|
||||
<.button navigate={return_path(@return_to, @user)} variant="neutral">
|
||||
{gettext("Cancel")}
|
||||
</.button>
|
||||
<.button phx-disable-with={gettext("Saving...")} variant="primary">
|
||||
{gettext("Save User")}
|
||||
</.button>
|
||||
</div>
|
||||
</.form>
|
||||
</div>
|
||||
</Layouts.app>
|
||||
|
|
|
|||
|
|
@ -67,59 +67,61 @@ defmodule MvWeb.UserLive.Show do
|
|||
phx-hook="FocusRestore"
|
||||
phx-window-keydown={if @show_delete_modal, do: "window_keydown", else: nil}
|
||||
>
|
||||
<.list>
|
||||
<:item title={gettext("Email")}>{@user.email}</:item>
|
||||
<:item title={gettext("Role")}>{@user.role.name}</:item>
|
||||
<:item title={gettext("Password Authentication")}>
|
||||
{if MvWeb.Helpers.UserHelpers.has_password?(@user),
|
||||
do: gettext("Enabled"),
|
||||
else: gettext("Not enabled")}
|
||||
</:item>
|
||||
<:item title={gettext("OIDC")}>
|
||||
{if MvWeb.Helpers.UserHelpers.has_oidc?(@user),
|
||||
do: gettext("Linked"),
|
||||
else: gettext("Not linked")}
|
||||
</:item>
|
||||
<:item title={gettext("Linked Member")}>
|
||||
<%= if @user.member do %>
|
||||
<.link
|
||||
navigate={~p"/members/#{@user.member}"}
|
||||
class="text-blue-600 underline hover:text-blue-800"
|
||||
>
|
||||
<.icon name="hero-users" class="inline w-4 h-4 mr-1" />
|
||||
{MvWeb.Helpers.MemberHelpers.display_name(@user.member)}
|
||||
</.link>
|
||||
<% else %>
|
||||
<span class="italic text-base-content/70">{gettext("No member linked")}</span>
|
||||
<% end %>
|
||||
</:item>
|
||||
</.list>
|
||||
<div class="max-w-xl mt-6 space-y-6">
|
||||
<.list>
|
||||
<:item title={gettext("Email")}>{@user.email}</:item>
|
||||
<:item title={gettext("Role")}>{@user.role.name}</:item>
|
||||
<:item title={gettext("Password Authentication")}>
|
||||
{if MvWeb.Helpers.UserHelpers.has_password?(@user),
|
||||
do: gettext("Enabled"),
|
||||
else: gettext("Not enabled")}
|
||||
</:item>
|
||||
<:item title={gettext("OIDC")}>
|
||||
{if MvWeb.Helpers.UserHelpers.has_oidc?(@user),
|
||||
do: gettext("Linked"),
|
||||
else: gettext("Not linked")}
|
||||
</:item>
|
||||
<:item title={gettext("Linked Member")}>
|
||||
<%= if @user.member do %>
|
||||
<.link
|
||||
navigate={~p"/members/#{@user.member}"}
|
||||
class="text-blue-600 underline hover:text-blue-800"
|
||||
>
|
||||
<.icon name="hero-users" class="inline w-4 h-4 mr-1" />
|
||||
{MvWeb.Helpers.MemberHelpers.display_name(@user.member)}
|
||||
</.link>
|
||||
<% else %>
|
||||
<span class="italic text-base-content/70">{gettext("No member linked")}</span>
|
||||
<% end %>
|
||||
</:item>
|
||||
</.list>
|
||||
|
||||
<%!-- Danger zone: canonical pattern (same as member show) --%>
|
||||
<%= if can?(@current_user, :destroy, @user) and not Mv.Helpers.SystemActor.system_user?(@user) do %>
|
||||
<section class="mt-8 mb-6" aria-labelledby="danger-zone-heading">
|
||||
<h2 id="danger-zone-heading" class="text-lg font-semibold mb-3 text-error">
|
||||
{gettext("Danger zone")}
|
||||
</h2>
|
||||
<div class="border border-base-300 rounded-lg p-4 bg-base-100">
|
||||
<p class="text-base-content/70 mb-4">
|
||||
{gettext(
|
||||
"Deleting this user cannot be undone. The user account and any linked member association will be affected."
|
||||
)}
|
||||
</p>
|
||||
<.button
|
||||
id="delete-user-trigger"
|
||||
variant="danger"
|
||||
phx-click="open_delete_modal"
|
||||
data-testid="user-delete"
|
||||
aria-label={gettext("Delete user %{email}", email: @user.email)}
|
||||
>
|
||||
<.icon name="hero-trash" class="size-4" />
|
||||
{gettext("Delete user")}
|
||||
</.button>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
<%!-- Danger zone: canonical pattern (same as member show) --%>
|
||||
<%= if can?(@current_user, :destroy, @user) and not Mv.Helpers.SystemActor.system_user?(@user) do %>
|
||||
<section class="mt-8 mb-6" aria-labelledby="danger-zone-heading">
|
||||
<h2 id="danger-zone-heading" class="text-lg font-semibold mb-3 text-error">
|
||||
{gettext("Danger zone")}
|
||||
</h2>
|
||||
<div class="border border-base-300 rounded-lg p-4 bg-base-100">
|
||||
<p class="text-base-content/70 mb-4">
|
||||
{gettext(
|
||||
"Deleting this user cannot be undone. The user account and any linked member association will be affected."
|
||||
)}
|
||||
</p>
|
||||
<.button
|
||||
id="delete-user-trigger"
|
||||
variant="danger"
|
||||
phx-click="open_delete_modal"
|
||||
data-testid="user-delete"
|
||||
aria-label={gettext("Delete user %{email}", email: @user.email)}
|
||||
>
|
||||
<.icon name="hero-trash" class="size-4" />
|
||||
{gettext("Delete user")}
|
||||
</.button>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%!-- Delete User Confirmation Modal (WCAG: focus in modal, keyboard confirm/cancel) --%>
|
||||
<%= if assigns[:show_delete_modal] do %>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue