fix: handle form errors correctly in membership fee settings

- Fix Protocol.UndefinedError when iterating over form errors
- Handle both tuple and list error formats
- Prevents crash when saving settings with validation errors
This commit is contained in:
Moritz 2025-12-16 12:19:57 +01:00
parent 8899e1986a
commit 29b39b2793
Signed by: moritz
GPG key ID: 1020A035E5DD0824

View file

@ -101,9 +101,12 @@ defmodule MvWeb.MembershipFeeSettingsLive do
)}) )})
</option> </option>
</select> </select>
<%= for {msg, _opts} <- @form.errors[:default_membership_fee_type_id] || [] do %> <%= if @form.errors[:default_membership_fee_type_id] do %>
<%= for error <- List.wrap(@form.errors[:default_membership_fee_type_id]) do %>
<% {msg, _opts} = if is_tuple(error), do: error, else: {error, []} %>
<p class="text-error text-sm mt-1">{msg}</p> <p class="text-error text-sm mt-1">{msg}</p>
<% end %> <% end %>
<% end %>
<p class="text-sm text-base-content/60 mt-2"> <p class="text-sm text-base-content/60 mt-2">
{gettext( {gettext(
"This membership fee type is automatically assigned to all new members. Can be changed individually per member." "This membership fee type is automatically assigned to all new members. Can be changed individually per member."
@ -125,9 +128,12 @@ defmodule MvWeb.MembershipFeeSettingsLive do
{gettext("Include joining cycle")} {gettext("Include joining cycle")}
</span> </span>
</label> </label>
<%= for {msg, _opts} <- @form.errors[:include_joining_cycle] || [] do %> <%= if @form.errors[:include_joining_cycle] do %>
<%= for error <- List.wrap(@form.errors[:include_joining_cycle]) do %>
<% {msg, _opts} = if is_tuple(error), do: error, else: {error, []} %>
<p class="text-error text-sm ml-9 mt-1">{msg}</p> <p class="text-error text-sm ml-9 mt-1">{msg}</p>
<% end %> <% end %>
<% end %>
<div class="ml-9 space-y-2"> <div class="ml-9 space-y-2">
<p class="text-sm text-base-content/60"> <p class="text-sm text-base-content/60">
{gettext("When active: Members pay from the cycle of their joining.")} {gettext("When active: Members pay from the cycle of their joining.")}