fix email settings: hidden attr for no-CSS, block-level card labels
All checks were successful
deploy / deploy (push) Successful in 1m29s
All checks were successful
deploy / deploy (push) Successful in 1m29s
Non-selected adapter configs now get HTML hidden attribute so only the active config shows without CSS. Provider card labels use div instead of span for natural block stacking in text-only rendering. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
e24f9aa4f3
commit
5dee2ae0be
@ -221,10 +221,11 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<%!-- Steps 2 & 3 for each adapter (CSS :has(:checked) shows the active one) --%>
|
||||
<%!-- Steps 2 & 3: config for each adapter (hidden keeps HTML correct without CSS) --%>
|
||||
<.adapter_config
|
||||
:for={adapter <- @all_adapters}
|
||||
adapter={adapter}
|
||||
selected={@adapter_key == adapter.key}
|
||||
values={@all_values[adapter.key] || %{}}
|
||||
field_errors={if(@adapter_key == adapter.key, do: @field_errors, else: %{})}
|
||||
env_locked={@env_locked}
|
||||
@ -346,13 +347,14 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
# ── Local components ──
|
||||
|
||||
attr :adapter, :map, required: true
|
||||
attr :selected, :boolean, default: false
|
||||
attr :values, :map, required: true
|
||||
attr :field_errors, :map, required: true
|
||||
attr :env_locked, :boolean, required: true
|
||||
|
||||
defp adapter_config(assigns) do
|
||||
~H"""
|
||||
<div class="admin-adapter-config" data-adapter={@adapter.key}>
|
||||
<div hidden={!@selected} class="admin-adapter-config" data-adapter={@adapter.key}>
|
||||
<%!-- Create an account (providers with sign-up URLs) --%>
|
||||
<div :if={@adapter.url} class="admin-setup-step">
|
||||
<div class="admin-setup-step-header">
|
||||
@ -433,14 +435,14 @@ defmodule BerrypodWeb.Admin.EmailSettings do
|
||||
disabled={@disabled}
|
||||
class="card-radio-input"
|
||||
/>
|
||||
<span class="card-radio-name">
|
||||
<div class="card-radio-name">
|
||||
{@adapter.name}
|
||||
<span :if={@adapter.recommended} class="card-radio-badge card-radio-recommended">
|
||||
Recommended
|
||||
</span>
|
||||
</span>
|
||||
<span :if={@adapter.free_tier} class="card-radio-description">{@adapter.free_tier}</span>
|
||||
<span :if={@adapter.setup_hint} class="card-radio-description">{@adapter.setup_hint}</span>
|
||||
</div>
|
||||
<div :if={@adapter.free_tier} class="card-radio-description">{@adapter.free_tier}</div>
|
||||
<div :if={@adapter.setup_hint} class="card-radio-description">{@adapter.setup_hint}</div>
|
||||
</label>
|
||||
"""
|
||||
end
|
||||
|
||||
@ -251,6 +251,22 @@ defmodule BerrypodWeb.Admin.EmailSettingsTest do
|
||||
assert html =~ "Email provider"
|
||||
assert html =~ "sr-only"
|
||||
end
|
||||
|
||||
test "only selected adapter config is visible (hidden attribute)", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, ~p"/admin/settings/email")
|
||||
|
||||
# Select SMTP
|
||||
view
|
||||
|> form("form[phx-change=\"form_change\"]", %{email: %{adapter: "smtp"}})
|
||||
|> render_change()
|
||||
|
||||
# SMTP should not be hidden
|
||||
refute has_element?(view, ~s([data-adapter="smtp"][hidden]))
|
||||
# Others should be hidden
|
||||
assert has_element?(view, ~s([data-adapter="brevo"][hidden]))
|
||||
assert has_element?(view, ~s([data-adapter="sendgrid"][hidden]))
|
||||
assert has_element?(view, ~s([data-adapter="postal"][hidden]))
|
||||
end
|
||||
end
|
||||
|
||||
describe "unauthenticated" do
|
||||
|
||||
Loading…
Reference in New Issue
Block a user